Skip to content
SAP ATC & Clean ABAP Suite

ATC Variant Builder

Configure custom SAP ATC check variants, tune rule parameters and download .chkv.json files for SAP GUI / abapGit.

108Total Rules
32Configurable Rules
46Automated QuickFixes
100%ABAP Cloud Ready
🎛️

Variant Configuration

Define your variant metadata and export to standard SAP ATC JSON format.

Target name for SAP transaction SCI / ATC check variant
Displayed in Eclipse ADT and SAP GUI variant lists
Showing 108 of 108 checks

Detect 7.40+ syntax incompatible with downport targets

cloud-readiness

Prefer REDUCE #( ) expression over simple aggregation LOOP

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Prefer table expression itab[ ... ] over READ TABLE

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Prefer COND #( ) expression over IF/ELSEIF/ELSE statement

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Prefer SWITCH #( ) expression over CASE statement

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Prefer lines( ) over DESCRIBE TABLE ... LINES

Clean ABAP & Modern Syntax⚡ QuickFix Ready
Avoid Obsolete CALL METHODZSKYLINT_NO_CALL_METHOD

Avoid static CALL METHOD statements

Anti-Patterns & Bad Practices⚡ QuickFix Ready
Avoid WITH DEFAULT KEYZSKYLINT_NO_DEFAULT_KEY

Avoid WITH DEFAULT KEY; prefer EMPTY KEY or explicit keys

Anti-Patterns & Bad Practices⚡ QuickFix Ready
Prefer IS NOT over NOT ... ISZSKYLINT_PREF_IS_NOT

Prefer IS NOT over NOT ... IS

Clean ABAP & Modern Syntax⚡ QuickFix Ready
Avoid Redundant ME-> Self ReferenceZSKYLINT_NO_ME_REFERENCE

Avoid self-reference ME->

Anti-Patterns & Bad Practices

Omit redundant EXPORTING and RECEIVING in method calls

Anti-Patterns & Bad Practices⚡ QuickFix Ready🔒 Local Only

Avoid chained declarations and chained assignments

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Prefer string templates over CONCATENATE

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Avoid comparing boolean method calls to boolean literals

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Prefer line_exists( ) over READ TABLE with NO FIELDS

Clean ABAP & Modern Syntax

Prefer RETURN over EXIT outside loop constructs

Clean ABAP & Modern Syntax⚡ QuickFix Ready
Avoid CHECK StatementsZSKYLINT_NO_CHECK_STMT

Avoid CHECK statements; prefer IF with RETURN or CONTINUE

Anti-Patterns & Bad Practices⚡ QuickFix Ready
Avoid Empty Control BlocksZSKYLINT_NO_EMPTY_BLOCK

Avoid empty control blocks (IF, CASE, LOOP, TRY, etc.)

Anti-Patterns & Bad Practices

Avoid duplicate branch conditions in IF and CASE

Anti-Patterns & Bad Practices
Merge Nested IF StatementsZSKYLINT_PREF_MERGE_IFS

Merge consecutive nested IF blocks using boolean AND

Clean ABAP & Modern Syntax
Avoid Dead / Unreachable CodeZSKYLINT_NO_UNREACHABLE

Detect unreachable code after jump or exit statements

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Avoid CASE statements with only one WHEN branch

Anti-Patterns & Bad Practices
Avoid Yoda ConditionsZSKYLINT_NO_YODA_COND

Avoid Yoda conditions in comparison expressions

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Prefer symbolic operators over textual EQ, NE, LT, GT

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Prefer NEW operator over CREATE OBJECT and RAISE EXCEPTION

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Prefer xsdbool( ) expression over manual IF-ELSE assignment

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Avoid calling static methods via instance arrow (->)

Anti-Patterns & Bad Practices⚡ QuickFix Ready🔒 Local Only
Avoid Public Attributes in ClassesZSKYLINT_NO_PUBLIC_ATTR

Avoid mutable public attributes in classes

Anti-Patterns & Bad Practices

Avoid obsolete statements (MOVE, REFRESH, FORM, etc.)

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Prohibit classic list processing statements

Anti-Patterns & Bad Practices
Limit Method Parameter CountZSKYLINT_MAX_PARAMS

Method signature cleanliness (excessive parameter count)

Metrics & Complexity Limits

Avoid database access inside loop iterations

Performance & Database

Unsecure FOR ALL ENTRIES (Missing empty itab check)

Performance & Database⚡ QuickFix Ready
Avoid SELECT * QueriesZSKYLINT_NO_SELECT_STAR

Select performance (Avoid SELECT * and SELECT ... ENDSELECT)

Performance & Database

Avoid variable usage outside its declaring control block

Anti-Patterns & Bad Practices
Avoid Redundant Self-AssignmentsZSKYLINT_NO_SELF_ASSIGN

Detect Identical Self Assignments

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Enforce fully typed constant declarations

Clean ABAP & Modern Syntax

Prefer CORRESPONDING Expression over MOVE-CORRESPONDING

Clean ABAP & Modern Syntax⚡ QuickFix Ready
Limit Method Length (Statements)ZSKYLINT_MAX_METHOD_LEN

Method Length Limit (excessive statement count)

Metrics & Complexity Limits

Nesting Depth Limit (excessive control block nesting)

Metrics & Complexity Limits

Avoid sy-* System Variable Modification

Security & Robustness

Prefer RETURNING over single EXPORTING

Clean ABAP & Modern Syntax

Prefer Class-Based Exceptions over Classic EXCEPTIONS

Clean ABAP & Modern Syntax

Dangerous Statements (abaplint dangerous_statement)

Security & Robustness

Call Transaction Authority Check

Security & Robustness⚡ QuickFix Ready

SELECT UP TO 1 ROWS requires ORDER BY

Performance & Database
Limit Cyclomatic ComplexityZSKYLINT_MAX_CYCLO_COMP

Cyclomatic Complexity Threshold

Metrics & Complexity Limits

Prefer FINAL classes and methods by default

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Avoid magic numbers in code; use named constants

Anti-Patterns & Bad Practices

Prefer INSERT ... INTO TABLE over APPEND for table safety

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Avoid LIKE referencing data objects; use explicit TYPE

Anti-Patterns & Bad Practices

Keep constructors clean; avoid heavy logic and DB

Metrics & Complexity Limits

Avoid static-only classes; use instantiable classes

Anti-Patterns & Bad Practices

Enforce predicate naming (IS_, HAS_) on boolean methods

Clean ABAP & Modern Syntax
Limit Inheritance DepthZSKYLINT_MAX_INHERIT

Avoid deep class inheritance hierarchies

Metrics & Complexity Limits🔒 Local Only
Limit Member Attributes per ClassZSKYLINT_MAX_ATTRIBUTES

Limit class member attributes to prevent God Classes

Metrics & Complexity Limits

Avoid mutable DATA in interfaces; allow only CONSTANTS

Anti-Patterns & Bad Practices
Avoid Catching Generic CX_ROOTZSKYLINT_NO_CATCH_ROOT

Catch specific exceptions instead of generic cx_root

Security & Robustness

Avoid MESSAGE ... RAISING; use class-based exceptions

Anti-Patterns & Bad Practices

Avoid nested TRY blocks; extract to helper methods

Anti-Patterns & Bad Practices

Avoid raising SAP internal system exceptions (cx_sy_*)

Security & Robustness

Check sy-subrc after DB, table and string operations

Security & Robustness

Avoid USING CLIENT or CLIENT SPECIFIED in ABAP SQL

Security & Robustness⚡ QuickFix Ready

Avoid COMMIT and ROLLBACK in application logic

Security & Robustness🔒 Local Only

Avoid MODIFY itab in LOOP without TRANSPORTING clause

Performance & Database

Detect obsolete string statements; prefer built-in functions

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Prefer calculation assignment operators (+=, -=, *=, /=)

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Prefer early return or continue over nested IF blocks

Clean ABAP & Modern Syntax

Detect unused local variables and field symbols

Anti-Patterns & Bad Practices

Enforce declaration order (TYPES, CONSTANTS, DATA, FS)

Clean ABAP & Modern Syntax

Avoid unnecessary parameter escape (!param)

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Use CASE instead of IF when checking multiple values

Clean ABAP & Modern Syntax

Avoid inline length specification in declarations

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Max One Statement Per Line

Clean ABAP & Modern Syntax

No Dashes in Variable and Form Names

Anti-Patterns & Bad Practices

Prefer Inline Declarations

Clean ABAP & Modern Syntax

Declare inline variables as FINAL when never written again

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Avoid FRIENDS in class definitions

Anti-Patterns & Bad Practices

Use a message class instead of inline message text

Clean ABAP & Modern Syntax🔒 Local Only

Inline a CAST helper that is only read once

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Classic EXCEPTIONS must not overlap

Anti-Patterns & Bad Practices

RFC calls must handle system failures

Security & Robustness
Remove redundant parenthesesZSKYLINT_NO_MANY_PARENS

Remove redundant parentheses

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Slow Parameter Passing

Performance & Database

Modify Only Own Database Tables

Security & Robustness

No Dynamic Constructs (CALL, ASSIGN, CREATE, etc.)

Security & Robustness

Declare Constructor in PUBLIC SECTION

Clean ABAP & Modern Syntax

Place definitions at beginning of routine

Clean ABAP & Modern Syntax
Omit Unnecessary RETURN StatementZSKYLINT_NO_UNNEC_RETURN

Omit unnecessary RETURN at end of routine

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Do not mix RETURNING with EXPORTING or CHANGING

Anti-Patterns & Bad Practices

Method name overwrites built-in SAP function

Anti-Patterns & Bad Practices

Max one method parameter definition per line

Clean ABAP & Modern Syntax

Prefer IS [NOT] INITIAL over lines( ) or empty literals

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Disallow ignoring the return value of functional methods

Anti-Patterns & Bad Practices🔒 Local Only
Prefer CAST #( ) over ?=ZSKYLINT_PREF_CAST

Prefer modern CAST #( ) expression over ?=

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Do not CLEAR or FREE variables redundantly

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Avoid mutating or sorting tables inside loops

Performance & Database

Avoid reading environment system fields (sy-sysid, etc.)

Security & Robustness
Limit Line LengthZSKYLINT_MAX_LINE_LEN

Maximum Line Length

Metrics & Complexity Limits
Enforce Naming ConventionsZSKYLINT_PREF_NAMING

Standard Naming Conventions

Clean ABAP & Modern Syntax

Expand Macro Calls

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Bad Statement Indentation

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Detect Dead Code with Constant Condition

Anti-Patterns & Bad Practices⚡ QuickFix Ready

Avoid Using ABAP Keywords as Identifier Names

Anti-Patterns & Bad Practices
Prefer an Explicit JOIN TypeZSKYLINT_PREF_JOIN_TYPE

Prefer an explicit JOIN type such as INNER JOIN

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Prefer explicit TYPE STANDARD TABLE OF over TYPE TABLE OF

Clean ABAP & Modern Syntax⚡ QuickFix Ready
Prefer IS SUPPLIED over IS REQUESTEDZSKYLINT_PREF_IS_SUPPLIED

Prefer IS SUPPLIED over the obsolete IS REQUESTED

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Prefer the short system field alias SY over SYST

Clean ABAP & Modern Syntax⚡ QuickFix Ready

Released under the MIT License.