Anti-Patterns & Bad Practices (49 Rules)
Discouraged language constructs, legacy statements, and redundant syntax.
Category Overview
This category enforces 49 native ATC rules adhering to SAP Clean ABAP and ABAP Cloud standards. Each check executes natively inside Eclipse ADT and SAP GUI.
Rules in this Category
| Rule Name | Native ATC Class | Suppression Tag | Automated QuickFix |
|---|---|---|---|
| Avoid Obsolete CALL METHOD | ZCL_SKYLINT_NO_CALL_METHOD | #EC NO_CALL_METHOD | ⚡ Ready |
| Avoid WITH DEFAULT KEY | ZCL_SKYLINT_NO_DEFAULT_KEY | #EC NO_DEFAULT_KEY | ⚡ Ready |
| Avoid Redundant ME-> Self Reference | ZCL_SKYLINT_NO_ME_REFERENCE | #EC NO_ME_REFERENCE | - |
| Omit RECEIVING in Method Invocations | ZCL_SKYLINT_NO_CALL_RECEIVING | #EC NO_CALL_RECEIVING | ⚡ Ready |
| Omit Redundant EXPORTING in Method Calls | ZCL_SKYLINT_NO_CALL_EXPORTING | #EC NO_CALL_EXPORTING | ⚡ Ready |
| Avoid Chained Declarations (DATA:, CONSTANTS:, TYPES:) | ZCL_SKYLINT_NO_CHAINED_DECL | #EC NO_CHAINED_DECL | ⚡ Ready |
| Avoid Chained Assignments (a = b = c = 1) | ZCL_SKYLINT_NO_CHAINED_ASSIGN | #EC NO_CHAINED_ASSIGN | ⚡ Ready |
| Avoid Comparing to abap_true / abap_false | ZCL_SKYLINT_NO_BOOL_COMPARE | #EC NO_BOOL_COMPARE | ⚡ Ready |
| Avoid CHECK Statements | ZCL_SKYLINT_NO_CHECK_STMT | #EC NO_CHECK_IN_LOOP | ⚡ Ready |
| Avoid Empty Control Blocks | ZCL_SKYLINT_NO_EMPTY_BLOCK | #EC NO_EMPTY_BLOCK | - |
| Avoid Identical Statements in IF Branches | ZCL_SKYLINT_NO_IDENT_CONT | #EC NO_IDENT_CONT | - |
| Avoid Duplicate Branch Conditions | ZCL_SKYLINT_NO_DUP_COND | #EC NO_DUP_COND | - |
| Avoid Dead / Unreachable Code | ZCL_SKYLINT_NO_UNREACHABLE | #EC NO_UNREACHABLE | ⚡ Ready |
| Avoid CASE with a Single WHEN Branch | ZCL_SKYLINT_NO_SINGLE_WHEN | #EC NO_SINGLE_WHEN | - |
| Avoid Yoda Conditions | ZCL_SKYLINT_NO_YODA_COND | #EC NO_YODA_COND | ⚡ Ready |
| Avoid Calling Static Methods via Instance References (->) | ZCL_SKYLINT_NO_STATIC_ARROW | #EC NO_STATIC_ARROW | ⚡ Ready |
| Avoid Exposed Mutable Data in Classes and Interfaces | ZCL_SKYLINT_NO_EXPOSED_DATA | #EC PUBLIC_ATTR | - |
| Avoid Obsolete Arithmetic and Assignment Statements | ZCL_SKYLINT_NO_OBS_ARITH | #EC NO_OBS_ARITH | ⚡ Ready |
| Avoid Obsolete Declarations and Table Headers | ZCL_SKYLINT_NO_OBS_DECL | #EC NO_OBS_DECL | ⚡ Ready |
| Avoid Obsolete Control Flow and Procedural Forms | ZCL_SKYLINT_NO_OBS_CONTROL | #EC NO_OBS_CONTROL | - |
| Avoid Obsolete ABAP Memory and Context Statements | ZCL_SKYLINT_NO_OBS_MEMORY | #EC NO_OBS_MEMORY | - |
| Avoid Obsolete String and POSIX Regex Statements | ZCL_SKYLINT_NO_OBS_STRINGS | #EC NO_OBS_STRINGS | - |
| Avoid Classic List Processing Statements | ZCL_SKYLINT_NO_LIST_PROC | #EC NO_LIST_PROC | - |
| Avoid Variable Scope Leaking from Inner Blocks | ZCL_SKYLINT_NO_SCOPE_LEAK | #EC NO_SCOPE_LEAK | - |
| Remove Redundant Self-Assignments and CLEAR Statements | ZCL_SKYLINT_NO_REDUN_ASSIGN | #EC SELF_ASSIGN | ⚡ Ready |
| Avoid Local Variables Shadowing Class Attributes | ZCL_SKYLINT_NO_SHADOW | #EC NO_SHADOW | - |
| Avoid Concatenating Adjacent String Literals | ZCL_SKYLINT_NO_USELESS_CONCAT | #EC NO_USELESS_CONCAT | ⚡ Ready |
| Avoid Magic Numbers; Use Named Constants | ZCL_SKYLINT_NO_MAGIC_NUMBERS | #EC NO_MAGIC_NUMBERS | - |
| Avoid LIKE Typing on Global Dictionary Objects | ZCL_SKYLINT_NO_LIKE_OBJECTS | #EC NO_LIKE_OBJECTS | - |
| Avoid Purely Static Utility Classes | ZCL_SKYLINT_NO_STATIC_CLS | #EC NO_STATIC_CLS | - |
| Avoid Obsolete MESSAGE ... RAISING in Methods | ZCL_SKYLINT_NO_MSG_RAISING | #EC NO_MSG_RAISING | - |
| Avoid Deeply Nested TRY ... CATCH Blocks | ZCL_SKYLINT_NO_NESTED_TRY | #EC NO_NESTED_TRY | - |
| Eliminate Unused Local Variables and Symbols | ZCL_SKYLINT_NO_UNUSED_VARS | #EC NO_UNUSED_VARS | - |
| Avoid Obsolete ! Escape Prefix in Parameter Names | ZCL_SKYLINT_NO_PARAM_ESCAPE | #EC NO_PARAM_ESCAPE | ⚡ Ready |
| Avoid Obsolete Inline Length Specifications (var(len)) | ZCL_SKYLINT_NO_INLINE_LEN | #EC NO_INLINE_LEN | ⚡ Ready |
| Avoid Obsolete Dash (-) in Form Names | ZCL_SKYLINT_NO_DASH_IN_FORM | #EC NO_DASH_IN_FORM | - |
| Avoid FRIENDS in class definitions | ZCL_SKYLINT_NO_FRIENDS | #EC NO_FRIENDS | - |
| Classic EXCEPTIONS must not map two errors to the same number | ZCL_SKYLINT_NO_EXC_OVERLAP | #EC NO_EXC_OVERLAP | - |
| Remove redundant parentheses | ZCL_SKYLINT_NO_MANY_PARENS | #EC NO_MANY_PARENS | ⚡ Ready |
| Omit Unnecessary RETURN Statement | ZCL_SKYLINT_NO_UNNEC_RETURN | #EC NO_UNNEC_RETURN | ⚡ Ready |
| Do Not Mix RETURNING with EXPORTING or CHANGING | ZCL_SKYLINT_NO_MIX_RETURNING | #EC NO_MIX_RETURNING | - |
| Avoid Method Names That Overwrite Built-in Functions | ZCL_SKYLINT_NO_OVERW_BUILTIN | #EC NO_OVERW_BUILTIN | - |
| Do Not Ignore Return Value of Functional Methods | ZCL_SKYLINT_NO_IGNORED_RETURN | #EC NO_IGNORED_RETURN | - |
| Expand Macro Calls into Explicit Statements | ZCL_SKYLINT_PREF_EXPAND_MACRO | #EC PREF_EXPAND_MACRO | ⚡ Ready |
| Avoid Dead Code with Constant Conditions | ZCL_SKYLINT_NO_DEAD_CODE | #EC NO_DEAD_CODE | ⚡ Ready |
| Avoid Using ABAP Keywords as Identifier Names | ZCL_SKYLINT_NO_KEYWORD_NAME | #EC NO_KEYWORD_NAME | - |
| Avoid Repeating the Same String Literal | ZCL_SKYLINT_NO_DUP_LITERALS | #EC NO_DUP_LITERALS | - |
| Avoid Late Access to sy-tabix or sy-index Outside Loops | ZCL_SKYLINT_NO_LATE_SYS_IDX | #EC NO_LATE_SYS_IDX | - |
| Avoid Method Override That Only Delegates to Super | ZCL_SKYLINT_NO_EMPTY_OVERRIDE | #EC NO_EMPTY_OVERRIDE | - |