Skip to content

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 NameNative ATC ClassSuppression TagAutomated QuickFix
Avoid Obsolete CALL METHODZCL_SKYLINT_NO_CALL_METHOD#EC NO_CALL_METHOD⚡ Ready
Avoid WITH DEFAULT KEYZCL_SKYLINT_NO_DEFAULT_KEY#EC NO_DEFAULT_KEY⚡ Ready
Avoid Redundant ME-> Self ReferenceZCL_SKYLINT_NO_ME_REFERENCE#EC NO_ME_REFERENCE-
Omit RECEIVING in Method InvocationsZCL_SKYLINT_NO_CALL_RECEIVING#EC NO_CALL_RECEIVING⚡ Ready
Omit Redundant EXPORTING in Method CallsZCL_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_falseZCL_SKYLINT_NO_BOOL_COMPARE#EC NO_BOOL_COMPARE⚡ Ready
Avoid CHECK StatementsZCL_SKYLINT_NO_CHECK_STMT#EC NO_CHECK_IN_LOOP⚡ Ready
Avoid Empty Control BlocksZCL_SKYLINT_NO_EMPTY_BLOCK#EC NO_EMPTY_BLOCK-
Avoid Identical Statements in IF BranchesZCL_SKYLINT_NO_IDENT_CONT#EC NO_IDENT_CONT-
Avoid Duplicate Branch ConditionsZCL_SKYLINT_NO_DUP_COND#EC NO_DUP_COND-
Avoid Dead / Unreachable CodeZCL_SKYLINT_NO_UNREACHABLE#EC NO_UNREACHABLE⚡ Ready
Avoid CASE with a Single WHEN BranchZCL_SKYLINT_NO_SINGLE_WHEN#EC NO_SINGLE_WHEN-
Avoid Yoda ConditionsZCL_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 InterfacesZCL_SKYLINT_NO_EXPOSED_DATA#EC PUBLIC_ATTR-
Avoid Obsolete Arithmetic and Assignment StatementsZCL_SKYLINT_NO_OBS_ARITH#EC NO_OBS_ARITH⚡ Ready
Avoid Obsolete Declarations and Table HeadersZCL_SKYLINT_NO_OBS_DECL#EC NO_OBS_DECL⚡ Ready
Avoid Obsolete Control Flow and Procedural FormsZCL_SKYLINT_NO_OBS_CONTROL#EC NO_OBS_CONTROL-
Avoid Obsolete ABAP Memory and Context StatementsZCL_SKYLINT_NO_OBS_MEMORY#EC NO_OBS_MEMORY-
Avoid Obsolete String and POSIX Regex StatementsZCL_SKYLINT_NO_OBS_STRINGS#EC NO_OBS_STRINGS-
Avoid Classic List Processing StatementsZCL_SKYLINT_NO_LIST_PROC#EC NO_LIST_PROC-
Avoid Variable Scope Leaking from Inner BlocksZCL_SKYLINT_NO_SCOPE_LEAK#EC NO_SCOPE_LEAK-
Remove Redundant Self-Assignments and CLEAR StatementsZCL_SKYLINT_NO_REDUN_ASSIGN#EC SELF_ASSIGN⚡ Ready
Avoid Local Variables Shadowing Class AttributesZCL_SKYLINT_NO_SHADOW#EC NO_SHADOW-
Avoid Concatenating Adjacent String LiteralsZCL_SKYLINT_NO_USELESS_CONCAT#EC NO_USELESS_CONCAT⚡ Ready
Avoid Magic Numbers; Use Named ConstantsZCL_SKYLINT_NO_MAGIC_NUMBERS#EC NO_MAGIC_NUMBERS-
Avoid LIKE Typing on Global Dictionary ObjectsZCL_SKYLINT_NO_LIKE_OBJECTS#EC NO_LIKE_OBJECTS-
Avoid Purely Static Utility ClassesZCL_SKYLINT_NO_STATIC_CLS#EC NO_STATIC_CLS-
Avoid Obsolete MESSAGE ... RAISING in MethodsZCL_SKYLINT_NO_MSG_RAISING#EC NO_MSG_RAISING-
Avoid Deeply Nested TRY ... CATCH BlocksZCL_SKYLINT_NO_NESTED_TRY#EC NO_NESTED_TRY-
Eliminate Unused Local Variables and SymbolsZCL_SKYLINT_NO_UNUSED_VARS#EC NO_UNUSED_VARS-
Avoid Obsolete ! Escape Prefix in Parameter NamesZCL_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 NamesZCL_SKYLINT_NO_DASH_IN_FORM#EC NO_DASH_IN_FORM-
Avoid FRIENDS in class definitionsZCL_SKYLINT_NO_FRIENDS#EC NO_FRIENDS-
Classic EXCEPTIONS must not map two errors to the same numberZCL_SKYLINT_NO_EXC_OVERLAP#EC NO_EXC_OVERLAP-
Remove redundant parenthesesZCL_SKYLINT_NO_MANY_PARENS#EC NO_MANY_PARENS⚡ Ready
Omit Unnecessary RETURN StatementZCL_SKYLINT_NO_UNNEC_RETURN#EC NO_UNNEC_RETURN⚡ Ready
Do Not Mix RETURNING with EXPORTING or CHANGINGZCL_SKYLINT_NO_MIX_RETURNING#EC NO_MIX_RETURNING-
Avoid Method Names That Overwrite Built-in FunctionsZCL_SKYLINT_NO_OVERW_BUILTIN#EC NO_OVERW_BUILTIN-
Do Not Ignore Return Value of Functional MethodsZCL_SKYLINT_NO_IGNORED_RETURN#EC NO_IGNORED_RETURN-
Expand Macro Calls into Explicit StatementsZCL_SKYLINT_PREF_EXPAND_MACRO#EC PREF_EXPAND_MACRO⚡ Ready
Avoid Dead Code with Constant ConditionsZCL_SKYLINT_NO_DEAD_CODE#EC NO_DEAD_CODE⚡ Ready
Avoid Using ABAP Keywords as Identifier NamesZCL_SKYLINT_NO_KEYWORD_NAME#EC NO_KEYWORD_NAME-
Avoid Repeating the Same String LiteralZCL_SKYLINT_NO_DUP_LITERALS#EC NO_DUP_LITERALS-
Avoid Late Access to sy-tabix or sy-index Outside LoopsZCL_SKYLINT_NO_LATE_SYS_IDX#EC NO_LATE_SYS_IDX-
Avoid Method Override That Only Delegates to SuperZCL_SKYLINT_NO_EMPTY_OVERRIDE#EC NO_EMPTY_OVERRIDE-

← Back to All Rules Catalog

Released under the MIT License.