{"id":"eb851f6d-7eea-4477-97ca-af0f87c4bc3e","shortId":"sFp54x","kind":"skill","title":"abap","tagline":"Check and improve ABAP code quality using abaplint and Clean ABAP principles. Use this skill when users ask to check, lint, validate, review, or analyze ABAP code for syntax errors, clean code compliance, code quality, best practices, or adherence to Clean ABAP guidelines. Also u","description":"# ABAP\n\nCheck and improve ABAP code quality using two complementary approaches:\n\n- **abaplint**: Automated static analysis via CLI, checking syntax, types, and configurable rules\n- **Clean ABAP**: Manual review against Clean ABAP style guide principles\n\n## Workflow\n\n1. **Determine check type** based on user request:\n   - If the user asks to lint, run abaplint, or check syntax: use **abaplint**\n   - If the user asks for clean code review, best practices, or code quality: use **Clean ABAP review**\n   - If unclear or the user asks for a full check: use **both**\n\n2. **For abaplint checks**:\n   - Verify `abaplint` is installed (`npx @abaplint/cli --version` or `abaplint --version`)\n   - If not installed, install with: `npm install @abaplint/cli -g`\n   - Check if `abaplint.json` exists in the project root\n   - If no config exists, help the user create one (see starter configs in `references/abaplint.md`)\n   - Run `abaplint` in the project root directory\n   - Parse and present findings to the user\n\n3. **For Clean ABAP reviews**:\n   - Read the ABAP code provided by the user\n   - Check against Clean ABAP categories: Names, Language, Constants, Variables, Tables, Strings, Booleans, Conditions, Ifs, Classes, Methods, Error Handling, Comments, Formatting, Testing\n   - Identify violations with specific line references\n   - Provide actionable recommendations with code examples\n   - Prioritize issues by impact (critical, major, minor)\n\n## abaplint Quick Start\n\nRun in project root:\n\n```bash\nabaplint\n```\n\nGenerate default config (all rules):\n\n```bash\nabaplint -d > abaplint.json\n```\n\nFor detailed abaplint configuration including starter configs for On-Premise, Steampunk/BTP, and HANA compatibility, read `references/abaplint.md`.\n\n## Clean ABAP Check Categories\n\n### Names\n\n- Use descriptive names, snake*case, no Hungarian notation (iv*, lv*, lt*)\n- Nouns for classes, verbs for methods, no noise words\n\n### Language\n\n- Prefer OO over procedural, functional over imperative\n- Use modern syntax: NEW, inline declarations, table expressions\n\n### Constants\n\n- No magic numbers, use ENUM or grouped constants\n\n### Variables\n\n- Prefer inline declarations, no chained DATA\n\n### Tables\n\n- No DEFAULT KEY, use INSERT INTO TABLE, LINE_EXISTS, WHERE clauses\n\n### Strings\n\n- Backticks for literals, pipes for string templates\n\n### Booleans\n\n- Use ABAP_BOOL, ABAP_TRUE/ABAP_FALSE, XSDBOOL\n\n### Conditions\n\n- Positive conditions, IS NOT over NOT IS, predicative method calls\n\n### Ifs\n\n- No empty IF branches, CASE over ELSE IF, nesting depth <= 3\n\n### Methods\n\n- Instance over static, RETURNING over EXPORTING, <= 3 parameters, <= 20 lines\n\n### Error Handling\n\n- Exceptions over return codes, class-based exceptions, no catching CX_ROOT\n\n### Comments\n\n- Explain why not what, \" over \\*, no commented-out code\n\n### Formatting\n\n- One statement per line, <= 120 chars, consistent indentation\n\n### Testing\n\n- Given-when-then structure, focused assertions, dependency injection\n\n## Output Format\n\nStructure analysis results as:\n\n```\n# ABAP Check Results\n\n## abaplint Findings\n[abaplint output, grouped by severity]\n\n## Clean ABAP Review\n\n### Summary\n- Total Issues: [count]\n- Critical: [count] | Major: [count] | Minor: [count]\n\n### Critical Issues\n#### [Category] - [Issue Title]\n**Location:** Line [X] / Method [name]\n**Problem:** [description]\n**Recommendation:** [how to fix]\n\n### Major Issues\n[Same format]\n\n### Minor Issues\n[Same format]\n\n### Positive Observations\n- [Things done well]\n```\n\n## References\n\n- **abaplint config & setup**: Read `references/abaplint.md` for installation, configuration options, and starter configs\n- **Complete Clean ABAP guide**: Read `references/CleanABAP.md` for full style guide with rationale and examples\n- **Quick patterns**: Read `references/quick-reference.md` for condensed good/bad code examples\n- **Review checklist**: Read `references/checklist.md` for systematic review checklist","tags":["abap","skills","likweitan","agent-skills","sap"],"capabilities":["skill","source-likweitan","skill-abap","topic-abap","topic-agent-skills","topic-sap"],"categories":["abap-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/likweitan/abap-skills/abap","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add likweitan/abap-skills","source_repo":"https://github.com/likweitan/abap-skills","install_from":"skills.sh"}},"qualityScore":"0.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 12 github stars · SKILL.md body (3,923 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T01:03:16.042Z","embedding":null,"createdAt":"2026-04-23T13:03:44.557Z","updatedAt":"2026-04-24T01:03:16.042Z","lastSeenAt":"2026-04-24T01:03:16.042Z","tsv":"'1':81 '120':426 '2':131 '20':394 '3':190,384,392 'abap':1,5,12,27,43,47,51,71,76,117,193,197,206,279,357,359,446,457,513 'abaplint':9,58,96,101,133,136,143,177,243,251,258,263,449,451,499 'abaplint.json':156,260 'abaplint/cli':140,152 'action':231 'adher':40 'also':45 'analysi':61,443 'analyz':26 'approach':57 'ask':19,92,105,124 'assert':437 'autom':59 'backtick':348 'base':85,404 'bash':250,257 'best':37,110 'bool':358 'boolean':214,355 'branch':377 'call':372 'case':287,378 'catch':407 'categori':207,281,471 'chain':333 'char':427 'check':2,21,48,64,83,98,128,134,154,203,280,447 'checklist':535,541 'class':217,296,403 'class-bas':402 'claus':346 'clean':11,32,42,70,75,107,116,192,205,278,456,512 'cli':63 'code':6,28,33,35,52,108,113,198,234,401,420,532 'comment':221,410,418 'commented-out':417 'compat':275 'complementari':56 'complet':511 'complianc':34 'condens':530 'condit':215,362,364 'config':164,173,254,267,500,510 'configur':68,264,506 'consist':428 'constant':210,319,327 'count':462,464,466,468 'creat':169 'critic':240,463,469 'cx':408 'd':259 'data':334 'declar':316,331 'default':253,337 'depend':438 'depth':383 'descript':284,480 'detail':262 'determin':82 'directori':182 'done':496 'els':380 'empti':375 'enum':324 'error':31,219,396 'exampl':235,524,533 'except':398,405 'exist':157,165,344 'explain':411 'export':391 'express':318 'find':186,450 'fix':484 'focus':436 'format':222,421,441,488,492 'full':127,518 'function':308 'g':153 'generat':252 'given':432 'given-when-then':431 'good/bad':531 'group':326,453 'guid':78,514,520 'guidelin':44 'hana':274 'handl':220,397 'help':166 'hungarian':289 'identifi':224 'if':216,373 'impact':239 'imper':310 'improv':4,50 'includ':265 'indent':429 'inject':439 'inlin':315,330 'insert':340 'instal':138,147,148,151,505 'instanc':386 'issu':237,461,470,472,486,490 'iv':291 'key':338 'languag':209,303 'line':228,343,395,425,475 'lint':22,94 'liter':350 'locat':474 'lt':293 'lv':292 'magic':321 'major':241,465,485 'manual':72 'method':218,299,371,385,477 'minor':242,467,489 'modern':312 'name':208,282,285,478 'nest':382 'new':314 'nois':301 'notat':290 'noun':294 'npm':150 'npx':139 'number':322 'observ':494 'on-premis':269 'one':170,422 'oo':305 'option':507 'output':440,452 'paramet':393 'pars':183 'pattern':526 'per':424 'pipe':351 'posit':363,493 'practic':38,111 'predic':370 'prefer':304,329 'premis':271 'present':185 'principl':13,79 'priorit':236 'problem':479 'procedur':307 'project':160,180,248 'provid':199,230 'qualiti':7,36,53,114 'quick':244,525 'rational':522 'read':195,276,502,515,527,536 'recommend':232,481 'refer':229,498 'references/abaplint.md':175,277,503 'references/checklist.md':537 'references/cleanabap.md':516 'references/quick-reference.md':528 'request':88 'result':444,448 'return':389,400 'review':24,73,109,118,194,458,534,540 'root':161,181,249,409 'rule':69,256 'run':95,176,246 'see':171 'setup':501 'sever':455 'skill':16 'skill-abap' 'snake':286 'source-likweitan' 'specif':227 'start':245 'starter':172,266,509 'statement':423 'static':60,388 'steampunk/btp':272 'string':213,347,353 'structur':435,442 'style':77,519 'summari':459 'syntax':30,65,99,313 'systemat':539 'tabl':212,317,335,342 'templat':354 'test':223,430 'thing':495 'titl':473 'topic-abap' 'topic-agent-skills' 'topic-sap' 'total':460 'true/abap_false':360 'two':55 'type':66,84 'u':46 'unclear':120 'use':8,14,54,100,115,129,283,311,323,339,356 'user':18,87,91,104,123,168,189,202 'valid':23 'variabl':211,328 'verb':297 'verifi':135 'version':141,144 'via':62 'violat':225 'well':497 'word':302 'workflow':80 'x':476 'xsdbool':361","prices":[{"id":"6ba3798b-f3be-4948-8c6f-4301c4661ba1","listingId":"eb851f6d-7eea-4477-97ca-af0f87c4bc3e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"likweitan","category":"abap-skills","install_from":"skills.sh"},"createdAt":"2026-04-23T13:03:44.557Z"}],"sources":[{"listingId":"eb851f6d-7eea-4477-97ca-af0f87c4bc3e","source":"github","sourceId":"likweitan/abap-skills/abap","sourceUrl":"https://github.com/likweitan/abap-skills/tree/main/skills/abap","isPrimary":false,"firstSeenAt":"2026-04-23T13:03:44.557Z","lastSeenAt":"2026-04-24T01:03:16.042Z"}],"details":{"listingId":"eb851f6d-7eea-4477-97ca-af0f87c4bc3e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"likweitan","slug":"abap","github":{"repo":"likweitan/abap-skills","stars":12,"topics":["abap","agent-skills","sap"],"license":"mit","html_url":"https://github.com/likweitan/abap-skills","pushed_at":"2026-04-17T13:44:41Z","description":"Advance Agent Skills for ABAP Developers","skill_md_sha":"a02fbf661e80e285778f179a40479c706afb8d12","skill_md_path":"skills/abap/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/likweitan/abap-skills/tree/main/skills/abap"},"layout":"multi","source":"github","category":"abap-skills","frontmatter":{"name":"abap","description":"Check and improve ABAP code quality using abaplint and Clean ABAP principles. Use this skill when users ask to check, lint, validate, review, or analyze ABAP code for syntax errors, clean code compliance, code quality, best practices, or adherence to Clean ABAP guidelines. Also use when users ask to set up abaplint, configure abaplint.json, or run abaplint on their ABAP project. Triggers include requests like \"check this ABAP code\", \"lint my ABAP\", \"run abaplint\", \"configure abaplint\", \"is this clean ABAP\", \"review my ABAP\", or \"analyze ABAP code quality\"."},"skills_sh_url":"https://skills.sh/likweitan/abap-skills/abap"},"updatedAt":"2026-04-24T01:03:16.042Z"}}