ABAP Shittier
A Claude Code skill that does the opposite of the ABAP Pretty Printer. You give it clean ABAP, it gives you back the ugliest version it can manage. The only rule is that the result still compiles and behaves exactly the same.
It's the ABAP take on Shittier, the joke anti-Prettier.
What it actually does
The Pretty Printer indents your code, fixes keyword casing, and aligns your declarations. This undoes all of that. Casing goes random, indentation ignores scope, alignment gets torn apart, lines break in stupid places, and the mandatory spaces get padded out to look worse.
What it does not do is change behavior. If you run the tokens through it ignoring whitespace and casing, you get the exact input back.
Some reasons you might want this:
- Showing a junior why the formatting standards are there
- A cursed commit for April 1st or a conference talk
- Throwing garbage at a linter or review process to see what it catches
It is not for obfuscation or hiding code. It's a joke.
What it won't break
ABAP parses on tokens, so a few things have to stay intact or the code stops activating. Shittier leaves these alone:
*line comments stay in column 1- required spaces around operators and parentheses get padded, never deleted
(
lv_x = 1becomeslv_x = 1, which still compiles) - string templates and literals are untouched
- statements, their closing periods, and
:,chains stay as they are - keywords and identifiers keep their actual letters, only the casing moves
Install
# all projects
unzip abap-shittier.zip -d ~/.claude/skills/
# just this repo
unzip abap-shittier.zip -d .claude/skills/
The file has to land at ~/.claude/skills/abap-shittier/SKILL.md, not one folder
deeper. Start a new Claude Code session and it picks it up.
Using it
Ask for it in plain language:
shittier this class un-format this method make this report unreadable
Example
Before:
METHOD get_customer_balance.
DATA: lv_total TYPE bapidoccur,
lt_items TYPE STANDARD TABLE OF ty_item.
SELECT * FROM ztable
INTO TABLE @lt_items
WHERE kunnr = @iv_kunnr.
LOOP AT lt_items INTO DATA(ls_item).
lv_total = lv_total + ls_item-amount.
ENDLOOP.
rv_balance = lv_total.
ENDMETHOD.
After:
meThOd get_customer_balance.
DATA: lv_total TYPE bapidoccur,
lt_items TYPE STANDARD TABLE oF ty_item.
SeLeCt * fROm ztable InTo TaBLe @lt_items wHeRe kunnr = @iv_kunnr.
LooP aT lt_items inTo DATA(ls_item). lv_total = lv_total + ls_item-amount. ENDloop.
rv_BALANCE
=
lv_total.
ENDmeThod.
Same tokens, same result, unreadable.
Layout
abap-shittier/
SKILL.md the skill itself
README.md this file
License
MIT.