abap
npx machina-cli add skill likweitan/abap-skills/abap --openclawABAP
Check and improve ABAP code quality using two complementary approaches:
- abaplint: Automated static analysis via CLI, checking syntax, types, and configurable rules
- Clean ABAP: Manual review against Clean ABAP style guide principles
Workflow
-
Determine check type based on user request:
- If the user asks to lint, run abaplint, or check syntax: use abaplint
- If the user asks for clean code review, best practices, or code quality: use Clean ABAP review
- If unclear or the user asks for a full check: use both
-
For abaplint checks:
- Verify
abaplintis installed (npx @abaplint/cli --versionorabaplint --version) - If not installed, install with:
npm install @abaplint/cli -g - Check if
abaplint.jsonexists in the project root - If no config exists, help the user create one (see starter configs in
references/abaplint.md) - Run
abaplintin the project root directory - Parse and present findings to the user
- Verify
-
For Clean ABAP reviews:
- Read the ABAP code provided by the user
- Check against Clean ABAP categories: Names, Language, Constants, Variables, Tables, Strings, Booleans, Conditions, Ifs, Classes, Methods, Error Handling, Comments, Formatting, Testing
- Identify violations with specific line references
- Provide actionable recommendations with code examples
- Prioritize issues by impact (critical, major, minor)
abaplint Quick Start
Run in project root:
abaplint
Generate default config (all rules):
abaplint -d > abaplint.json
For detailed abaplint configuration including starter configs for On-Premise, Steampunk/BTP, and HANA compatibility, read references/abaplint.md.
Clean ABAP Check Categories
Names
- Use descriptive names, snakecase, no Hungarian notation (iv, lv*, lt*)
- Nouns for classes, verbs for methods, no noise words
Language
- Prefer OO over procedural, functional over imperative
- Use modern syntax: NEW, inline declarations, table expressions
Constants
- No magic numbers, use ENUM or grouped constants
Variables
- Prefer inline declarations, no chained DATA
Tables
- No DEFAULT KEY, use INSERT INTO TABLE, LINE_EXISTS, WHERE clauses
Strings
- Backticks for literals, pipes for string templates
Booleans
- Use ABAP_BOOL, ABAP_TRUE/ABAP_FALSE, XSDBOOL
Conditions
- Positive conditions, IS NOT over NOT IS, predicative method calls
Ifs
- No empty IF branches, CASE over ELSE IF, nesting depth <= 3
Methods
- Instance over static, RETURNING over EXPORTING, <= 3 parameters, <= 20 lines
Error Handling
- Exceptions over return codes, class-based exceptions, no catching CX_ROOT
Comments
- Explain why not what, " over *, no commented-out code
Formatting
- One statement per line, <= 120 chars, consistent indentation
Testing
- Given-when-then structure, focused assertions, dependency injection
Output Format
Structure analysis results as:
# ABAP Check Results
## abaplint Findings
[abaplint output, grouped by severity]
## Clean ABAP Review
### Summary
- Total Issues: [count]
- Critical: [count] | Major: [count] | Minor: [count]
### Critical Issues
#### [Category] - [Issue Title]
**Location:** Line [X] / Method [name]
**Problem:** [description]
**Recommendation:** [how to fix]
### Major Issues
[Same format]
### Minor Issues
[Same format]
### Positive Observations
- [Things done well]
References
- abaplint config & setup: Read
references/abaplint.mdfor installation, configuration options, and starter configs - Complete Clean ABAP guide: Read
references/CleanABAP.mdfor full style guide with rationale and examples - Quick patterns: Read
references/quick-reference.mdfor condensed good/bad code examples - Review checklist: Read
references/checklist.mdfor systematic review checklist
Source
git clone https://github.com/likweitan/abap-skills/blob/main/skills/abap/SKILL.mdView on GitHub Overview
This skill checks ABAP code quality using two complementary approaches: automated static analysis with abaplint and manual Clean ABAP reviews. It supports linting, validating, reviewing, and analyzing ABAP code, and guides setting up abaplint and configuring abaplint.json.
How This Skill Works
First determine whether to use abaplint, Clean ABAP, or both based on the user request. For abaplint, verify installation, ensure abaplint.json exists, and run abaplint to collect findings. For Clean ABAP, read the code, evaluate against Clean ABAP categories (Names, Language, Constants, Variables, Tables, Strings, Booleans, Conditions, Ifs, Classes, Methods, Error Handling, Comments, Formatting, Testing), and provide actionable recommendations with line references.
When to Use It
- The user asks to lint, check syntax, or validate ABAP code (e.g., 'check this ABAP code', 'lint my ABAP').
- The user asks to set up abaplint or configure abaplint.json (e.g., 'configure abaplint').
- The user requests a Clean ABAP style review, code quality assessment, or best-practices check.
- You need to run or propose a full check using both abaplint and Clean ABAP.
- You are preparing to explain or document ABAP code quality workflow to a team.
Quick Start
- Step 1: Determine check type (lint, Clean ABAP review, or both).
- Step 2: Ensure abaplint is installed and create abaplint.json if needed (abaplint.json default config can be generated with abaplint -d).
- Step 3: Run analysis (abaplint) and/or perform a Clean ABAP review, then present findings with actionable recommendations.
Best Practices
- Clarify the check type (lint vs Clean ABAP review) before running any analysis.
- Run abaplint first for syntax, types, and rule-based issues; follow with a Clean ABAP review for deeper quality.
- Use starter configs and ensure abaplint.json exists in the project root; update as needed.
- Provide actionable recommendations with precise line references and, where possible, code examples.
- Prioritize issues by impact (critical, major, minor) and address highest-risk findings first.
Example Use Cases
- Lint a new ABAP class and fix syntax and rule violations reported by abaplint.
- Review a legacy ABAP report against Clean ABAP guidelines to improve readability and maintainability.
- Configure abaplint.json for an On-Premise SAP system and run abaplint in the project root.
- Analyze ABAP code for naming, language usage, and formatting violations as per Clean ABAP categories.
- Combine abaplint findings with a Clean ABAP repair plan to deliver a compliant codebase.