code pal for ABAP
ATC and Code Inspector checks for the parts of Clean ABAPClean ABAPSAP's open, versioned style guide for ABAP: the answer to how a piece of ABAP should be written, an agreement a team adopts rather than anything to install.sap official, abap a static analyser can actually check, installed into a system with [abapGitabapGitmaintains 1 entrycommunity org](artifact:abapgit-abapgit) rather than delivered with it.
The styleguide is a document and the built-in ATC checks cover some of it. This is the open-source check set that covers more, and its configurability is the point: a threshold, a severity, whether a check applies to productive or test code, whether it applies only to objects created after a date, and a validity period. Teams adopting Clean ABAPClean ABAPSAP's open, versioned style guide for ABAP: the answer to how a piece of ABAP should be written, an agreement a team adopts rather than anything to install.sap official, abap on an existing system need all of that, because switching every check on at once against a decade of code is not an adoption plan.
Facts
Where it sits
Who is behind it
In the atlas: maintains 137, wrote 14@SAPmaintainerAlexandreHTContributes to this
In the atlas: contributes to 6@AlexandreHTBjörn JüligerContributes to this
In the atlas: contributes to 5@bjoern-jueliger-sapConjuringCoffeeContributes to this
In the atlas: contributes to 7@ConjuringCoffeeJosh ElliottContributes to this
In the atlas: contributes to 9@jelliottpJaime Rodriguez CapoteContributes to this
In the atlas: maintains 1, contributes to 9@jrodriguez-rcLars HvamContributes to this
In the atlas: maintains 13, contributes to 92, wrote 1@larshpLucas BorinContributes to this
In the atlas: contributes to 4@lucasborinMaxim EngelContributes to this
In the atlas: contributes to 2@maxim-engel-sap8 contributors
Before choosing this
Conditions
PracticalFunctional boundary
This is the legacy edition, for on-premise systems from SAP_BASIS 7.40. On ABAP Cloud, the Cloud Editioncode pal for ABAP — Cloud EditionThe same Clean ABAP check set for ABAP Cloud, where the legacy edition cannot run.sap official, abap is the one that runs.
What it declares
Every artifact
- Type
- Package
- Origin
- By SAP
As a package
- Where it runs
- Inside its host
- Distributed through
- abapGit
Connections
Naming, structure and language-subset conventions for readable code
Catching problems in code before execution
Git client written in ABAP that runs inside the system
Download
README
quoted from SAP/code-pal-for-abap under Apache-2.0, readcode pal for ABAP
This tool provides a set of checks to help adhering to the Clean ABAP style guide. While not all recommendations from the guide can be checked by static code analysis and in certain situations strict adherence to the guide might not be recommended, this provides robust automated support at least for a subset of recommendations.
It's free and open-source.
This is the legacy version supporting local checks on check systems starting with SAP_BASIS release 7.40. For the remote-enabled version for ABAP Cloud, see the Cloud Edition.
Features
- Supported by Code Inspector (
SCI/SCII) and ABAP Test Cockpit (ATC) (SE80/ Eclipse); - Ignores automatically generated code;
- Supports exemptions;
- Provides a new user-friendly way to create variants (Profile Management);
- Allows configuration based on:
- Threshold;
- Severity / Priority;
- Validity for productive code, test code, or both;
- Validity for objects created since a specific date;
- Validity period;
- Allow / Deny exemption.
Severities set to Notification / Priority 3 by default (#368).
Set of Checks
Dependencies
- Since Version 1.00 - SAP NetWeaver 7.40 SP8 or higher
- abapGit
How-to Guides
Further Documentation
Recommended Readings
Recommended Courses
History
Fixes 2
Notes
- Object Creation Date from TRDIR table
- Reversal Thresholds Validation
Removed 2, Features 1, Fixes 2
Notes
- Performance Improvements (#318)
- Shared Memory (#319)
- Performance Issues (#317)
- Profile Tool - UX Refinement (#313)
- RFC Disabled (#305)
Features 1, Changed 3, Fixes 3
Notes
- CHECK position after comments (#301)
- Modify an Internal Table is no DB Access (#300)
- Enhancing coverage to run for multiple objects (#294) ! Disabling profiles when the API executes the regression (#293)
- DELETE from internal table gives a "Database access" prio 1 error (#290) ! The pseudo comment position of the Form Routine Check was moved from the 'ENDFORM' to 'FORM' statement ! The pseudo comment position of the Number of Public Attributes was moved from the 'CLASS DEFINITION.' to 'PUBLIC SECTION' statement
Features 5, Changed 3, Fixes 5
Notes
- New Check: Scope of the Variable (#276)
- Comment position when code has pseudo comments (#282)
- Y_CHECK_STATEMENT_POSITION: before DATA declarations (#272)
- 'was' and 'were' as a method which returns boolean (#275) ! DB Access in UT has distinct behavior depending on test risk level (#267) ! Prefer Case to ElseIf is now reporting single conditions only (#262) ! Chain Declaration check is now warning by default (#266)
- abapLint app integration in GitHub (#264)
- API regression reports 'maintain attributes..." message (#259)
- API improvements (#259)
- Missing space between string or character literal and parentheses (#253)
- Broken UTs (#251)
- Constants in Interface (#244)
Features 3, Changed 2, Fixes 1
Notes
- deprecated classes/interfaces check ! coverage checks threshold ! 'check statement position' won't validate check in loop anymore
- new check: 'check in loop'
- object creation date for classes
- service to execute regression test
Changed 2, Fixes 3
Notes
! deprecated classes/interfaces (aunit)
- short dump in unit test fixed ! unit test using buffer with shared memory
- prefer is not exempts line_exists( )
- check order in sci
Features 1, Changed 2, Fixes 6
Notes
- comment type exempt generated include
- comment position for empty catches ! self reference check validates instance method only
- buffer deadlock ! Y_CHECK_RETURNING_NAME is warning by default
- minor clean code refactoring
- automatic exemption for function modules with prefix TABLEFRAME* and TABLEPROC*
- sort dump in the comment position check
- omit optional exporting with exceptions
Changed 1, Fixes 4
Notes
- subsequent memory assignment check
- 7.40 compatibility issue ! abapLint support
- performance
- 'object creation date' in the include level
Removed 1, Features 2, Changed 2, Fixes 1
Notes
- profile message check runs only once ! check messages
- db access in ut when OSQL/CDS framework is being used ! category description
- report to activate or deactivate the SCI entries
- add/remove all check in profiles
Features 1, Fixes 2
Notes
- magic number to support numeric strings (#142)
- enabling table log for exemptions
- prefer case to else if (#156)
Features 1, Changed 2
Notes
- API to read version ! minor clean code refactoring ! minor documentation fixes
Features 4
Notes
- statement coverage check
- branch coverage check
- procedure coverage check
- API to import profile
Changed 1, Fixes 1
Notes
- unit test of external call in ut ! description of the profile management tool
Features 3, Changed 3
Notes
- new check y_check_external_call_in_ut
- new check y_check_statement_coverage
- threshold support to 'less equal' and 'greater than' ! folder logic to prefix logic ! name to code pal for ABAP ! project documentation
Others providing
- FORMfactorFORMfactorA report that generates local classes with static methods from an old FORM-based ABAP program, as code to paste in by hand, without support for 740 constructs, TABLES parameters or INCLUDEs.independent, abapGenerates local classes from FORM-based ABAP programs
- code pal for ABAP — Cloud Editioncode pal for ABAP — Cloud EditionThe same Clean ABAP check set for ABAP Cloud, where the legacy edition cannot run.sap official, abapClean ABAP check set for ABAP Cloud
- Clean ABAPClean ABAPSAP's open, versioned style guide for ABAP: the answer to how a piece of ABAP should be written, an agreement a team adopts rather than anything to install.sap official, abapOpen, versioned style guide for ABAP
- @abap2ui5/linter@abap2ui5/linterA command line that checks an abap2UI5 app class together with the UI5 view its builder chain produces, with no SAP system and no UI5 project.community org, abapCommand-line checker for abap2UI5 app classes and their views
- abap2UI5 Playgroundabap2UI5 PlaygroundABAP in the editor on the left and the abap2UI5 app it builds on the right, both inside one browser tab: the framework is transpiled to JavaScript at build time and the class in the editor is compiled when Run is pressed.community org, abapIn-browser ABAP editor beside the abap2UI5 app it builds
- abapcdsgrammarabapcdsgrammarAn ANTLR4 grammar for ABAP CDS, with the lexer and parser generated from it, so CDS source can be read as a parse tree outside a system.independent, abapANTLR4 grammar, lexer and parser for ABAP CDS
- @abapify/acds@abapify/acdsA parser for ABAP CDS DDL source — tokenizer, parser and a typed AST covering tables, structures, simple types, service definitions and metadata extensions.independent, abapParser for ABAP CDS DDL source with a typed AST
- abaplint-sci-clientabaplint-sci-clientThe ABAP-side client that hands objects to the abaplint Server, so the checks of abaplint surface inside SAP Code Inspector, ABAP Test Cockpit and abapGit.community org, abapABAP client surfacing abaplint checks in Code Inspector and ATC
- abaplintabaplintStatic analysis for ABAP that runs outside a system on serialised source in a repository, so ABAP checks run in a pull request and in CI before the code ever reaches a system.community org, abapStatic analysis for ABAP source outside a system
- BellaBellaAn Eclipse plugin that puts Claude into ABAP Development Tools: explain, generate, rework and implement from the editor's context menu, completion as ghost text, and a chat whose tools reach the system through the developer's existing ADT logon.independent, abapEclipse plugin bringing Claude into ABAP Development Tools
- abapOpenChecksabapOpenChecksAn open-source rule pack for SAP Code Inspector and ABAP Test Cockpit, installed via abapGit and activated as a check variant.independent, abapOpen-source rule pack for SAP Code Inspector and ATC
- upDOWNciupDOWNciA tool that uploads and downloads SAP Code Inspector check variants as XML files, one variant at a time or several in one ZIP file, installed through abapGit.independent, abapUploads and downloads Code Inspector check variants as XML
- abaplint-Ext-for-abapGitabaplint-Ext-for-abapGitSurfaces abaplint results inside abapGit itself, at the point where a developer is already looking.independent, abapShows abaplint results inside abapGit
- ABAP remote filesystemABAP remote filesystemA Visual Studio Code extension that opens an ABAP system over ADT as an editable filesystem and exposes system tools to GitHub Copilot and external MCP clients.independent, abapVS Code extension editing ABAP systems over ADT as a filesystem
- Clean-Core.ioClean-Core.ioA free hosted workspace that reads one piece of custom ABAP, redraws its business process as BPMN with a line anchor on every element, grades the SAP objects it uses Level A–D and ends in a keep, rebuild, move-to-standard or retire decision.independent, abapHosted workspace redrawing custom ABAP as BPMN and grading it
- ACEACEA SAP GUI tool that parses ABAP source statically to show call flow, data dependencies, control structure and code metrics such as McCabe complexity, without running the code.independent, abapSAP GUI tool for static analysis of ABAP call flow and code metrics
Details
Sources
Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.
Compatibility and provenance
abaplint
Flavors
“- Since Version 1.00 - SAP NetWeaver **7.40 SP8** or higher” — SAP/code-pal-for-abap — README
Contributors
History in the atlas
- First seen.
For your agent
- Ref
artifact:sap-code-pal-for-abap- JSON
- /artifacts/sap-code-pal-for-abap.json
- MCP
- Connecting an agent