@abaplint/core 2.119.23 → 2.119.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/build/abaplint.d.ts +5 -0
- package/build/src/abap/2_statements/expressions/index.js +2 -0
- package/build/src/abap/2_statements/expressions/sql_aggregation.js +23 -11
- package/build/src/abap/2_statements/expressions/sql_compare.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_field.js +10 -3
- package/build/src/abap/2_statements/expressions/sql_function.js +2 -1
- package/build/src/abap/2_statements/expressions/sql_function_input.js +5 -3
- package/build/src/abap/2_statements/expressions/sql_over.js +25 -0
- package/build/src/abap/5_syntax/expressions/source.js +1 -1
- package/build/src/abap/5_syntax/statements/data.js +5 -2
- package/build/src/lsp/help.js +10 -10
- package/build/src/objects/_abap_object.js +5 -3
- package/build/src/registry.js +1 -1
- package/build/src/rules/7bit_ascii.js +4 -4
- package/build/src/rules/abapdoc.js +4 -4
- package/build/src/rules/add_test_attributes.js +20 -20
- package/build/src/rules/align_parameters.js +40 -40
- package/build/src/rules/align_type_expressions.js +28 -28
- package/build/src/rules/ambiguous_statement.js +7 -7
- package/build/src/rules/avoid_use.js +10 -10
- package/build/src/rules/begin_end_names.js +4 -4
- package/build/src/rules/begin_single_include.js +13 -13
- package/build/src/rules/call_transaction_authority_check.js +3 -3
- package/build/src/rules/cds_association_name.js +6 -6
- package/build/src/rules/cds_comment_style.js +4 -4
- package/build/src/rules/cds_field_order.js +12 -12
- package/build/src/rules/cds_legacy_view.js +4 -4
- package/build/src/rules/cds_naming.js +7 -7
- package/build/src/rules/chain_mainly_declarations.js +4 -4
- package/build/src/rules/change_if_to_case.js +8 -8
- package/build/src/rules/check_abstract.js +2 -2
- package/build/src/rules/check_comments.js +4 -4
- package/build/src/rules/check_include.js +4 -4
- package/build/src/rules/check_subrc.js +8 -8
- package/build/src/rules/classic_exceptions_overlap.js +10 -10
- package/build/src/rules/commented_code.js +1 -1
- package/build/src/rules/constructor_visibility_public.js +4 -4
- package/build/src/rules/contains_tab.js +2 -2
- package/build/src/rules/cyclic_oo.js +4 -4
- package/build/src/rules/dangerous_statement.js +1 -1
- package/build/src/rules/definitions_top.js +6 -6
- package/build/src/rules/downport.js +83 -83
- package/build/src/rules/easy_to_find_messages.js +6 -6
- package/build/src/rules/empty_event.js +6 -6
- package/build/src/rules/empty_line_in_statement.js +2 -2
- package/build/src/rules/empty_structure.js +6 -6
- package/build/src/rules/exit_or_check.js +3 -3
- package/build/src/rules/expand_macros.js +5 -5
- package/build/src/rules/exporting.js +1 -1
- package/build/src/rules/forbidden_identifier.js +1 -1
- package/build/src/rules/forbidden_void_type.js +2 -2
- package/build/src/rules/fully_type_itabs.js +2 -2
- package/build/src/rules/function_module_recommendations.js +39 -0
- package/build/src/rules/functional_writing.js +17 -17
- package/build/src/rules/global_class.js +10 -10
- package/build/src/rules/identical_conditions.js +12 -12
- package/build/src/rules/identical_contents.js +14 -14
- package/build/src/rules/identical_descriptions.js +6 -6
- package/build/src/rules/identical_move.js +2 -2
- package/build/src/rules/if_in_if.js +35 -35
- package/build/src/rules/implement_methods.js +3 -3
- package/build/src/rules/implicit_start_of_selection.js +4 -4
- package/build/src/rules/in_statement_indentation.js +11 -11
- package/build/src/rules/indentation.js +16 -16
- package/build/src/rules/intf_referencing_clas.js +3 -3
- package/build/src/rules/invalid_table_index.js +2 -2
- package/build/src/rules/line_break_style.js +2 -2
- package/build/src/rules/line_length.js +1 -1
- package/build/src/rules/line_only_punc.js +1 -1
- package/build/src/rules/local_variable_names.js +6 -6
- package/build/src/rules/macro_naming.js +2 -2
- package/build/src/rules/main_file_contents.js +4 -4
- package/build/src/rules/many_parentheses.js +10 -10
- package/build/src/rules/max_one_method_parameter_per_line.js +7 -7
- package/build/src/rules/max_one_statement.js +5 -5
- package/build/src/rules/method_length.js +2 -2
- package/build/src/rules/method_overwrites_builtin.js +12 -12
- package/build/src/rules/mix_returning.js +8 -8
- package/build/src/rules/nesting.js +1 -1
- package/build/src/rules/no_chained_assignment.js +1 -1
- package/build/src/rules/no_external_form_calls.js +2 -2
- package/build/src/rules/no_inline_in_optional_branches.js +11 -11
- package/build/src/rules/no_prefixes.js +6 -6
- package/build/src/rules/no_public_attributes.js +1 -1
- package/build/src/rules/no_yoda_conditions.js +4 -4
- package/build/src/rules/nrob_consistency.js +2 -2
- package/build/src/rules/obsolete_statement.js +51 -51
- package/build/src/rules/omit_parameter_name.js +3 -3
- package/build/src/rules/omit_receiving.js +13 -13
- package/build/src/rules/parser_702_chaining.js +2 -2
- package/build/src/rules/parser_error.js +2 -2
- package/build/src/rules/parser_missing_space.js +1 -1
- package/build/src/rules/prefer_inline.js +16 -16
- package/build/src/rules/prefer_is_not.js +9 -9
- package/build/src/rules/prefer_raise_exception_new.js +5 -5
- package/build/src/rules/prefer_returning_to_exporting.js +4 -4
- package/build/src/rules/prefer_xsdbool.js +2 -2
- package/build/src/rules/preferred_compare_operator.js +2 -2
- package/build/src/rules/reduce_procedural_code.js +17 -17
- package/build/src/rules/remove_descriptions.js +4 -4
- package/build/src/rules/rfc_error_handling.js +7 -7
- package/build/src/rules/select_add_order_by.js +5 -5
- package/build/src/rules/select_performance.js +5 -5
- package/build/src/rules/select_single_full_key.js +2 -2
- package/build/src/rules/sicf_consistency.js +2 -2
- package/build/src/rules/slow_parameter_passing.js +16 -16
- package/build/src/rules/space_before_dot.js +2 -2
- package/build/src/rules/sql_value_conversion.js +6 -6
- package/build/src/rules/start_at_tab.js +1 -1
- package/build/src/rules/strict_sql.js +6 -6
- package/build/src/rules/sy_modification.js +6 -6
- package/build/src/rules/tabl_enhancement_category.js +2 -2
- package/build/src/rules/tables_declared_locally.js +2 -2
- package/build/src/rules/type_form_parameters.js +2 -2
- package/build/src/rules/unnecessary_pragma.js +29 -29
- package/build/src/rules/unnecessary_return.js +11 -11
- package/build/src/rules/unused_macros.js +6 -6
- package/build/src/rules/unused_methods.js +12 -12
- package/build/src/rules/unused_variables.js +12 -12
- package/build/src/rules/use_bool_expression.js +8 -8
- package/build/src/rules/use_class_based_exceptions.js +8 -8
- package/build/src/rules/use_line_exists.js +6 -6
- package/build/src/rules/use_new.js +4 -4
- package/build/src/rules/when_others_last.js +6 -6
- package/build/src/rules/xml_consistency.js +3 -3
- package/package.json +70 -70
|
@@ -19,12 +19,12 @@ class EasyToFindMessages {
|
|
|
19
19
|
key: "easy_to_find_messages",
|
|
20
20
|
title: "Easy to find messages",
|
|
21
21
|
shortDescription: `Make messages easy to find`,
|
|
22
|
-
extendedInformation: `All messages must be statically referenced exactly once
|
|
23
|
-
|
|
24
|
-
Only MESSAGE and RAISE statments are counted as static references
|
|
25
|
-
|
|
26
|
-
Also see rule "message_exists"
|
|
27
|
-
|
|
22
|
+
extendedInformation: `All messages must be statically referenced exactly once
|
|
23
|
+
|
|
24
|
+
Only MESSAGE and RAISE statments are counted as static references
|
|
25
|
+
|
|
26
|
+
Also see rule "message_exists"
|
|
27
|
+
|
|
28
28
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#make-messages-easy-to-find`,
|
|
29
29
|
tags: [_irule_1.RuleTag.Styleguide],
|
|
30
30
|
};
|
|
@@ -23,13 +23,13 @@ class EmptyEvent extends _abap_rule_1.ABAPRule {
|
|
|
23
23
|
shortDescription: `Empty selection screen or list processing event block`,
|
|
24
24
|
extendedInformation: ``,
|
|
25
25
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
26
|
-
badExample: `
|
|
27
|
-
INITIALIZATION.
|
|
28
|
-
WRITE 'hello'.
|
|
26
|
+
badExample: `
|
|
27
|
+
INITIALIZATION.
|
|
28
|
+
WRITE 'hello'.
|
|
29
29
|
END-OF-SELECTION.`,
|
|
30
|
-
goodExample: `
|
|
31
|
-
START-OF-SELECTION.
|
|
32
|
-
PERFORM sdf.
|
|
30
|
+
goodExample: `
|
|
31
|
+
START-OF-SELECTION.
|
|
32
|
+
PERFORM sdf.
|
|
33
33
|
COMMIT WORK.`,
|
|
34
34
|
};
|
|
35
35
|
}
|
|
@@ -27,8 +27,8 @@ class EmptyLineinStatement extends _abap_rule_1.ABAPRule {
|
|
|
27
27
|
key: "empty_line_in_statement",
|
|
28
28
|
title: "Find empty lines in statements",
|
|
29
29
|
shortDescription: `Checks that statements do not contain empty lines.`,
|
|
30
|
-
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#dont-obsess-with-separating-blank-lines
|
|
31
|
-
|
|
30
|
+
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#dont-obsess-with-separating-blank-lines
|
|
31
|
+
|
|
32
32
|
https://docs.abapopenchecks.org/checks/41/`,
|
|
33
33
|
tags: [_irule_1.RuleTag.Quickfix, _irule_1.RuleTag.Whitespace, _irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Styleguide],
|
|
34
34
|
badExample: `WRITE\n\nhello.`,
|
|
@@ -46,13 +46,13 @@ class EmptyStructure extends _abap_rule_1.ABAPRule {
|
|
|
46
46
|
shortDescription: `Checks that the code does not contain empty blocks.`,
|
|
47
47
|
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#no-empty-if-branches`,
|
|
48
48
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],
|
|
49
|
-
badExample: `IF foo = bar.
|
|
50
|
-
ENDIF.
|
|
51
|
-
|
|
52
|
-
DO 2 TIMES.
|
|
49
|
+
badExample: `IF foo = bar.
|
|
50
|
+
ENDIF.
|
|
51
|
+
|
|
52
|
+
DO 2 TIMES.
|
|
53
53
|
ENDDO.`,
|
|
54
|
-
goodExample: `LOOP AT itab WHERE qty = 0 OR date > sy-datum.
|
|
55
|
-
ENDLOOP.
|
|
54
|
+
goodExample: `LOOP AT itab WHERE qty = 0 OR date > sy-datum.
|
|
55
|
+
ENDLOOP.
|
|
56
56
|
result = xsdbool( sy-subrc = 0 ).`,
|
|
57
57
|
};
|
|
58
58
|
}
|
|
@@ -24,10 +24,10 @@ class ExitOrCheck extends _abap_rule_1.ABAPRule {
|
|
|
24
24
|
return {
|
|
25
25
|
key: "exit_or_check",
|
|
26
26
|
title: "Find EXIT or CHECK outside loops",
|
|
27
|
-
shortDescription: `Detects usages of EXIT or CHECK statements outside of loops.
|
|
27
|
+
shortDescription: `Detects usages of EXIT or CHECK statements outside of loops.
|
|
28
28
|
Use RETURN to leave procesing blocks instead.`,
|
|
29
|
-
extendedInformation: `https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abenleave_processing_blocks.htm
|
|
30
|
-
https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abapcheck_processing_blocks.htm
|
|
29
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abenleave_processing_blocks.htm
|
|
30
|
+
https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abapcheck_processing_blocks.htm
|
|
31
31
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#check-vs-return`,
|
|
32
32
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Quickfix],
|
|
33
33
|
};
|
|
@@ -21,12 +21,12 @@ class ExpandMacros extends _abap_rule_1.ABAPRule {
|
|
|
21
21
|
key: "expand_macros",
|
|
22
22
|
title: "Expand Macros",
|
|
23
23
|
shortDescription: `Allows expanding macro calls with quick fixes`,
|
|
24
|
-
extendedInformation: `Macros: https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenmacros_guidl.htm
|
|
25
|
-
|
|
24
|
+
extendedInformation: `Macros: https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenmacros_guidl.htm
|
|
25
|
+
|
|
26
26
|
Note that macros/DEFINE cannot be used in the ABAP Cloud programming model`,
|
|
27
|
-
badExample: `DEFINE _hello.
|
|
28
|
-
WRITE 'hello'.
|
|
29
|
-
END-OF-DEFINITION.
|
|
27
|
+
badExample: `DEFINE _hello.
|
|
28
|
+
WRITE 'hello'.
|
|
29
|
+
END-OF-DEFINITION.
|
|
30
30
|
_hello.`,
|
|
31
31
|
goodExample: `WRITE 'hello'.`,
|
|
32
32
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.Quickfix, _irule_1.RuleTag.Upport],
|
|
@@ -22,7 +22,7 @@ class Exporting extends _abap_rule_1.ABAPRule {
|
|
|
22
22
|
shortDescription: `Detects EXPORTING statements which can be omitted.`,
|
|
23
23
|
badExample: `call_method( EXPORTING foo = bar ).`,
|
|
24
24
|
goodExample: `call_method( foo = bar ).`,
|
|
25
|
-
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#omit-the-optional-keyword-exporting
|
|
25
|
+
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#omit-the-optional-keyword-exporting
|
|
26
26
|
https://docs.abapopenchecks.org/checks/30/`,
|
|
27
27
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.Quickfix, _irule_1.RuleTag.SingleFile],
|
|
28
28
|
};
|
|
@@ -26,7 +26,7 @@ class ForbiddenIdentifier extends _abap_rule_1.ABAPRule {
|
|
|
26
26
|
key: "forbidden_identifier",
|
|
27
27
|
title: "Forbidden Identifier",
|
|
28
28
|
shortDescription: `Forbid use of specified identifiers, list of regex.`,
|
|
29
|
-
extendedInformation: `Used in the transpiler to find javascript keywords in ABAP identifiers,
|
|
29
|
+
extendedInformation: `Used in the transpiler to find javascript keywords in ABAP identifiers,
|
|
30
30
|
https://github.com/abaplint/transpiler/blob/bda94b8b56e2b7f2f87be2168f12361aa530220e/packages/transpiler/src/validation.ts#L44`,
|
|
31
31
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
32
32
|
};
|
|
@@ -28,8 +28,8 @@ class ForbiddenVoidType {
|
|
|
28
28
|
key: "forbidden_void_type",
|
|
29
29
|
title: "Forbidden Void Types",
|
|
30
30
|
shortDescription: `Avoid usage of specified void types.`,
|
|
31
|
-
extendedInformation: `Inspiration:
|
|
32
|
-
BOOLEAN, BOOLE_D, CHAR01, CHAR1, CHAR10, CHAR12, CHAR128, CHAR2, CHAR20, CHAR4, CHAR70,
|
|
31
|
+
extendedInformation: `Inspiration:
|
|
32
|
+
BOOLEAN, BOOLE_D, CHAR01, CHAR1, CHAR10, CHAR12, CHAR128, CHAR2, CHAR20, CHAR4, CHAR70,
|
|
33
33
|
DATS, TIMS, DATUM, FLAG, INT4, NUMC3, NUMC4, SAP_BOOL, TEXT25, TEXT80, X255, XFELD`,
|
|
34
34
|
};
|
|
35
35
|
}
|
|
@@ -20,9 +20,9 @@ class FullyTypeITabs extends _abap_rule_1.ABAPRule {
|
|
|
20
20
|
key: "fully_type_itabs",
|
|
21
21
|
title: "Fully type internal tables",
|
|
22
22
|
shortDescription: `No implict table types or table keys`,
|
|
23
|
-
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#use-the-right-table-type
|
|
23
|
+
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#use-the-right-table-type
|
|
24
24
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#avoid-default-key`,
|
|
25
|
-
badExample: `DATA lt_foo TYPE TABLE OF ty.
|
|
25
|
+
badExample: `DATA lt_foo TYPE TABLE OF ty.
|
|
26
26
|
DATA lt_bar TYPE STANDARD TABLE OF ty.`,
|
|
27
27
|
goodExample: `DATA lt_foo TYPE STANDARD TABLE OF ty WITH EMPTY KEY.`,
|
|
28
28
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
@@ -14,25 +14,54 @@ class FunctionModuleRecommendationsConf extends _basic_rule_config_1.BasicRuleCo
|
|
|
14
14
|
* @uniqueItems true
|
|
15
15
|
*/
|
|
16
16
|
this.recommendations = [
|
|
17
|
+
{ name: "CALCULATE_HASH_FOR_CHAR", replace: "use CL_ABAP_MESSAGE_DIGEST" },
|
|
17
18
|
{ name: "CALCULATE_HASH_FOR_RAW", replace: "use CL_ABAP_HMAC or CL_ABAP_MESSAGE_DIGEST" },
|
|
18
19
|
{ name: "CCU_TIMESTAMP_DIFFERENCE", replace: "use CL_ABAP_TSTMP" },
|
|
20
|
+
{ name: "CLPB_EXPORT", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
21
|
+
{ name: "CLPB_IMPORT", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
19
22
|
{ name: "CONVERT_DATE_TO_EXTERNAL", replace: "use CL_ABAP_DATFM" },
|
|
20
23
|
{ name: "CONVERT_TIME_INPUT", replace: "use CL_ABAP_TIMEFM" },
|
|
24
|
+
{ name: "DOWNLOAD", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
21
25
|
{ name: "ECATT_CONV_XSTRING_TO_STRING", replace: "use CL_BINARY_CONVERT" },
|
|
22
26
|
{ name: "F4_FILENAME", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
23
27
|
{ name: "FUNCTION_EXISTS", replace: "surround with try-catch CX_SY_DYN_CALL_ILLEGAL_METHOD instead" },
|
|
28
|
+
{ name: "GUI_CREATE_DIRECTORY", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
29
|
+
{ name: "GUI_DELETE_FILE", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
24
30
|
{ name: "GUI_DOWNLOAD", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
31
|
+
{ name: "GUI_EXEC", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
32
|
+
{ name: "GUI_FB_USAGE", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
33
|
+
{ name: "GUI_FILE_LOAD_DIALOG", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
34
|
+
{ name: "GUI_FILE_SAVE_DIALOG", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
35
|
+
{ name: "GUI_GET_DESKTOP_INFO", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
36
|
+
{ name: "GUI_GET_FILE_INFO", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
37
|
+
{ name: "GUI_GET_REGVALUE", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
38
|
+
{ name: "GUI_MULTIPLE_FILE_LOAD_DIALOG", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
39
|
+
{ name: "GUI_REMOVE_DIRECTORY", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
40
|
+
{ name: "GUI_RUN", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
41
|
+
{ name: "GUI_SET_REGVALUE", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
25
42
|
{ name: "GUI_UPLOAD", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
43
|
+
{ name: "GUI_VSS_DOWNLOAD", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
44
|
+
{ name: "GUI_VSS_UPLOAD", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
26
45
|
{ name: "GUID_CREATE", replace: "use CL_SYSTEM_UUID" },
|
|
27
46
|
{ name: "IGN_TIMESTAMP_DIFFERENCE", replace: "use CL_ABAP_TSTMP" },
|
|
28
47
|
{ name: "IGN_TIMESTAMP_PLUSMINUS", replace: "use CL_ABAP_TSTMP" },
|
|
29
48
|
{ name: "ISM_SD_GET_PRICING_CONDITIONS", replace: "use CL_PRC_RESULT_FACTORY as per note 2220005" },
|
|
30
49
|
{ name: "JOB_CREATE", replace: "use CL_BP_ABAP_JOB" },
|
|
31
50
|
{ name: "JOB_SUBMIT", replace: "use CL_BP_ABAP_JOB" },
|
|
51
|
+
{ name: "MD5_CALCULATE_HASH_FOR_CHAR", replace: "use CL_ABAP_MESSAGE_DIGEST" },
|
|
52
|
+
{ name: "MD5_CALCULATE_HASH_FOR_RAW", replace: "use CL_ABAP_MESSAGE_DIGEST" },
|
|
53
|
+
{ name: "POPUP_TO_CONFIRM_LOSS_OF_DATA", replace: "use POPUP_TO_CONFIRM" },
|
|
32
54
|
{ name: "POPUP_TO_CONFIRM_STEP", replace: "use POPUP_TO_CONFIRM" },
|
|
55
|
+
{ name: "POPUP_TO_CONFIRM_WITH_MESSAGE", replace: "use POPUP_TO_CONFIRM" },
|
|
56
|
+
{ name: "POPUP_TO_CONFIRM_WITH_VALUE", replace: "use POPUP_TO_CONFIRM" },
|
|
57
|
+
{ name: "POPUP_TO_CONFIRM_WITH_VALUE_2", replace: "use POPUP_TO_CONFIRM" },
|
|
33
58
|
{ name: "POPUP_TO_DECIDE", replace: "use POPUP_TO_CONFIRM" },
|
|
59
|
+
{ name: "POPUP_TO_DECIDE_INFO", replace: "use POPUP_TO_CONFIRM" },
|
|
60
|
+
{ name: "POPUP_TO_DECIDE_WITH_MESSAGE", replace: "use POPUP_TO_CONFIRM" },
|
|
34
61
|
{ name: "POPUP_TO_GET_VALUE", replace: "use POPUP_GET_VALUES" },
|
|
35
62
|
{ name: "QF05_RANDOM_INTEGER", replace: "use CL_ABAP_RANDOM_INT" },
|
|
63
|
+
{ name: "REGISTRY_GET", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
64
|
+
{ name: "REGISTRY_SET", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
36
65
|
{ name: "REUSE_ALV_GRID_DISPLAY", replace: "use CL_SALV_TABLE=>FACTORY or CL_GUI_ALV_GRID" },
|
|
37
66
|
{ name: "ROUND", replace: "use built in function: round()" },
|
|
38
67
|
{ name: "SAPGUI_PROGRESS_INDICATOR", replace: "use CL_PROGRESS_INDICATOR" },
|
|
@@ -42,7 +71,17 @@ class FunctionModuleRecommendationsConf extends _basic_rule_config_1.BasicRuleCo
|
|
|
42
71
|
{ name: "SSFC_BASE64_DECODE", replace: "use class CL_HTTP_UTILITY methods" },
|
|
43
72
|
{ name: "SSFC_BASE64_ENCODE", replace: "use class CL_HTTP_UTILITY methods" },
|
|
44
73
|
{ name: "SUBST_GET_FILE_LIST", replace: "see note 1686357" },
|
|
74
|
+
{ name: "SYSTEM_GET_UNIQUE_ID", replace: "use CL_SYSTEM_UUID" },
|
|
75
|
+
{ name: "SYSTEM_UUID_C_CREATE", replace: "use CL_SYSTEM_UUID" },
|
|
76
|
+
{ name: "UPLOAD", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
77
|
+
{ name: "WS_DOWNLOAD", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
78
|
+
{ name: "WS_EXECUTE", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
45
79
|
{ name: "WS_FILENAME_GET", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
80
|
+
{ name: "WS_FILE_ATTRIB", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
81
|
+
{ name: "WS_FILE_COPY", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
82
|
+
{ name: "WS_FILE_DELETE", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
83
|
+
{ name: "WS_QUERY", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
84
|
+
{ name: "WS_UPLOAD", replace: "use CL_GUI_FRONTEND_SERVICES" },
|
|
46
85
|
];
|
|
47
86
|
}
|
|
48
87
|
}
|
|
@@ -28,26 +28,26 @@ class FunctionalWriting extends _abap_rule_1.ABAPRule {
|
|
|
28
28
|
key: "functional_writing",
|
|
29
29
|
title: "Use functional writing",
|
|
30
30
|
shortDescription: `Detects usage of call method when functional style calls can be used.`,
|
|
31
|
-
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#prefer-functional-to-procedural-calls
|
|
31
|
+
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#prefer-functional-to-procedural-calls
|
|
32
32
|
https://docs.abapopenchecks.org/checks/07/`,
|
|
33
33
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.Quickfix, _irule_1.RuleTag.SingleFile],
|
|
34
|
-
badExample: `CALL METHOD zcl_class=>method( ).
|
|
35
|
-
CALL METHOD cl_abap_typedescr=>describe_by_name
|
|
36
|
-
EXPORTING
|
|
37
|
-
p_name = 'NAME'
|
|
38
|
-
RECEIVING
|
|
39
|
-
p_descr_ref = lr_typedescr
|
|
40
|
-
EXCEPTIONS
|
|
41
|
-
type_not_found = 1
|
|
34
|
+
badExample: `CALL METHOD zcl_class=>method( ).
|
|
35
|
+
CALL METHOD cl_abap_typedescr=>describe_by_name
|
|
36
|
+
EXPORTING
|
|
37
|
+
p_name = 'NAME'
|
|
38
|
+
RECEIVING
|
|
39
|
+
p_descr_ref = lr_typedescr
|
|
40
|
+
EXCEPTIONS
|
|
41
|
+
type_not_found = 1
|
|
42
42
|
OTHERS = 2.`,
|
|
43
|
-
goodExample: `zcl_class=>method( ).
|
|
44
|
-
cl_abap_typedescr=>describe_by_name(
|
|
45
|
-
EXPORTING
|
|
46
|
-
p_name = 'NAME'
|
|
47
|
-
RECEIVING
|
|
48
|
-
p_descr_ref = lr_typedescr
|
|
49
|
-
EXCEPTIONS
|
|
50
|
-
type_not_found = 1
|
|
43
|
+
goodExample: `zcl_class=>method( ).
|
|
44
|
+
cl_abap_typedescr=>describe_by_name(
|
|
45
|
+
EXPORTING
|
|
46
|
+
p_name = 'NAME'
|
|
47
|
+
RECEIVING
|
|
48
|
+
p_descr_ref = lr_typedescr
|
|
49
|
+
EXCEPTIONS
|
|
50
|
+
type_not_found = 1
|
|
51
51
|
OTHERS = 2 ).`,
|
|
52
52
|
};
|
|
53
53
|
}
|
|
@@ -20,16 +20,16 @@ class GlobalClass extends _abap_rule_1.ABAPRule {
|
|
|
20
20
|
key: "global_class",
|
|
21
21
|
title: "Global class checks",
|
|
22
22
|
shortDescription: `Checks related to global classes`,
|
|
23
|
-
extendedInformation: `* global classes must be in own files
|
|
24
|
-
|
|
25
|
-
* file names must match class name
|
|
26
|
-
|
|
27
|
-
* file names must match interface name
|
|
28
|
-
|
|
29
|
-
* global classes must be global definitions
|
|
30
|
-
|
|
31
|
-
* global interfaces must be global definitions
|
|
32
|
-
|
|
23
|
+
extendedInformation: `* global classes must be in own files
|
|
24
|
+
|
|
25
|
+
* file names must match class name
|
|
26
|
+
|
|
27
|
+
* file names must match interface name
|
|
28
|
+
|
|
29
|
+
* global classes must be global definitions
|
|
30
|
+
|
|
31
|
+
* global interfaces must be global definitions
|
|
32
|
+
|
|
33
33
|
* global FOR TESTING, must have CATEGORY = 05 in the XML`,
|
|
34
34
|
tags: [_irule_1.RuleTag.Syntax],
|
|
35
35
|
};
|
|
@@ -33,21 +33,21 @@ class IdenticalConditions extends _abap_rule_1.ABAPRule {
|
|
|
33
33
|
return {
|
|
34
34
|
key: "identical_conditions",
|
|
35
35
|
title: "Identical conditions",
|
|
36
|
-
shortDescription: `Find identical conditions in IF + CASE + WHILE etc
|
|
37
|
-
|
|
36
|
+
shortDescription: `Find identical conditions in IF + CASE + WHILE etc
|
|
37
|
+
|
|
38
38
|
Prerequsites: code is pretty printed with identical cAsE`,
|
|
39
39
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
40
|
-
badExample: `IF foo = bar OR 1 = a OR foo = bar.
|
|
41
|
-
ENDIF.
|
|
42
|
-
CASE bar.
|
|
43
|
-
WHEN '1'.
|
|
44
|
-
WHEN 'A' OR '1'.
|
|
40
|
+
badExample: `IF foo = bar OR 1 = a OR foo = bar.
|
|
41
|
+
ENDIF.
|
|
42
|
+
CASE bar.
|
|
43
|
+
WHEN '1'.
|
|
44
|
+
WHEN 'A' OR '1'.
|
|
45
45
|
ENDCASE.`,
|
|
46
|
-
goodExample: `IF foo = bar OR 1 = a.
|
|
47
|
-
ENDIF.
|
|
48
|
-
CASE bar.
|
|
49
|
-
WHEN '1'.
|
|
50
|
-
WHEN 'A'.
|
|
46
|
+
goodExample: `IF foo = bar OR 1 = a.
|
|
47
|
+
ENDIF.
|
|
48
|
+
CASE bar.
|
|
49
|
+
WHEN '1'.
|
|
50
|
+
WHEN 'A'.
|
|
51
51
|
ENDCASE.`,
|
|
52
52
|
};
|
|
53
53
|
}
|
|
@@ -21,23 +21,23 @@ class IdenticalContents extends _abap_rule_1.ABAPRule {
|
|
|
21
21
|
key: "identical_contents",
|
|
22
22
|
title: "Identical contents",
|
|
23
23
|
shortDescription: `Find identical contents in blocks inside IFs, both in the beginning and in the end.`,
|
|
24
|
-
extendedInformation: `
|
|
25
|
-
Prerequsites: code is pretty printed with identical cAsE
|
|
26
|
-
|
|
24
|
+
extendedInformation: `
|
|
25
|
+
Prerequsites: code is pretty printed with identical cAsE
|
|
26
|
+
|
|
27
27
|
Chained statments are ignored`,
|
|
28
28
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
29
|
-
badExample: `IF foo = bar.
|
|
30
|
-
WRITE 'bar'.
|
|
31
|
-
WRITE 'world'.
|
|
32
|
-
ELSE.
|
|
33
|
-
WRITE 'foo'.
|
|
34
|
-
WRITE 'world'.
|
|
29
|
+
badExample: `IF foo = bar.
|
|
30
|
+
WRITE 'bar'.
|
|
31
|
+
WRITE 'world'.
|
|
32
|
+
ELSE.
|
|
33
|
+
WRITE 'foo'.
|
|
34
|
+
WRITE 'world'.
|
|
35
35
|
ENDIF.`,
|
|
36
|
-
goodExample: `IF foo = bar.
|
|
37
|
-
WRITE 'bar'.
|
|
38
|
-
ELSE.
|
|
39
|
-
WRITE 'foo'.
|
|
40
|
-
ENDIF.
|
|
36
|
+
goodExample: `IF foo = bar.
|
|
37
|
+
WRITE 'bar'.
|
|
38
|
+
ELSE.
|
|
39
|
+
WRITE 'foo'.
|
|
40
|
+
ENDIF.
|
|
41
41
|
WRITE 'world'.`,
|
|
42
42
|
};
|
|
43
43
|
}
|
|
@@ -16,12 +16,12 @@ class IdenticalDescriptions {
|
|
|
16
16
|
key: "identical_descriptions",
|
|
17
17
|
title: "Identical descriptions",
|
|
18
18
|
shortDescription: `Searches for objects with the same type and same description`,
|
|
19
|
-
extendedInformation: `Case insensitive
|
|
20
|
-
|
|
21
|
-
Only checks the master language descriptions
|
|
22
|
-
|
|
23
|
-
Dependencies are skipped
|
|
24
|
-
|
|
19
|
+
extendedInformation: `Case insensitive
|
|
20
|
+
|
|
21
|
+
Only checks the master language descriptions
|
|
22
|
+
|
|
23
|
+
Dependencies are skipped
|
|
24
|
+
|
|
25
25
|
Works for: INTF, CLAS, DOMA, DTEL, FUNC in same FUGR`,
|
|
26
26
|
tags: [],
|
|
27
27
|
};
|
|
@@ -21,9 +21,9 @@ class IdenticalMove extends _abap_rule_1.ABAPRule {
|
|
|
21
21
|
title: "Identical move",
|
|
22
22
|
shortDescription: `Moving the same value from left to right or right to left is redundant.`,
|
|
23
23
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
24
|
-
badExample: `DATA lv_value TYPE i.
|
|
24
|
+
badExample: `DATA lv_value TYPE i.
|
|
25
25
|
lv_value = lv_value.`,
|
|
26
|
-
goodExample: `DATA lv_value TYPE i.
|
|
26
|
+
goodExample: `DATA lv_value TYPE i.
|
|
27
27
|
lv_value = 5.`,
|
|
28
28
|
};
|
|
29
29
|
}
|
|
@@ -21,43 +21,43 @@ class IfInIf extends _abap_rule_1.ABAPRule {
|
|
|
21
21
|
key: "if_in_if",
|
|
22
22
|
title: "IF in IF",
|
|
23
23
|
shortDescription: `Detects nested ifs which can be refactored.`,
|
|
24
|
-
extendedInformation: `
|
|
25
|
-
Directly nested IFs without ELSE can be refactored to a single condition using AND.
|
|
26
|
-
|
|
27
|
-
ELSE condtions with directly nested IF refactored to ELSEIF, quickfixes are suggested for this case.
|
|
28
|
-
|
|
29
|
-
https://docs.abapopenchecks.org/checks/01/
|
|
24
|
+
extendedInformation: `
|
|
25
|
+
Directly nested IFs without ELSE can be refactored to a single condition using AND.
|
|
26
|
+
|
|
27
|
+
ELSE condtions with directly nested IF refactored to ELSEIF, quickfixes are suggested for this case.
|
|
28
|
+
|
|
29
|
+
https://docs.abapopenchecks.org/checks/01/
|
|
30
30
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#keep-the-nesting-depth-low`,
|
|
31
|
-
badExample: `IF condition1.
|
|
32
|
-
IF condition2.
|
|
33
|
-
...
|
|
34
|
-
ENDIF.
|
|
35
|
-
ENDIF.
|
|
36
|
-
|
|
37
|
-
IF condition1.
|
|
38
|
-
...
|
|
39
|
-
ELSE.
|
|
40
|
-
IF condition2.
|
|
41
|
-
...
|
|
42
|
-
ENDIF.
|
|
31
|
+
badExample: `IF condition1.
|
|
32
|
+
IF condition2.
|
|
33
|
+
...
|
|
34
|
+
ENDIF.
|
|
35
|
+
ENDIF.
|
|
36
|
+
|
|
37
|
+
IF condition1.
|
|
38
|
+
...
|
|
39
|
+
ELSE.
|
|
40
|
+
IF condition2.
|
|
41
|
+
...
|
|
42
|
+
ENDIF.
|
|
43
43
|
ENDIF.`,
|
|
44
|
-
goodExample: `IF ( condition1 ) AND ( condition2 ).
|
|
45
|
-
...
|
|
46
|
-
ENDIF.
|
|
47
|
-
|
|
48
|
-
IF condition1.
|
|
49
|
-
...
|
|
50
|
-
ELSEIF condition2.
|
|
51
|
-
...
|
|
52
|
-
ENDIF.
|
|
53
|
-
|
|
54
|
-
CASE variable.
|
|
55
|
-
WHEN value1.
|
|
56
|
-
...
|
|
57
|
-
WHEN value2.
|
|
58
|
-
IF condition2.
|
|
59
|
-
...
|
|
60
|
-
ENDIF.
|
|
44
|
+
goodExample: `IF ( condition1 ) AND ( condition2 ).
|
|
45
|
+
...
|
|
46
|
+
ENDIF.
|
|
47
|
+
|
|
48
|
+
IF condition1.
|
|
49
|
+
...
|
|
50
|
+
ELSEIF condition2.
|
|
51
|
+
...
|
|
52
|
+
ENDIF.
|
|
53
|
+
|
|
54
|
+
CASE variable.
|
|
55
|
+
WHEN value1.
|
|
56
|
+
...
|
|
57
|
+
WHEN value2.
|
|
58
|
+
IF condition2.
|
|
59
|
+
...
|
|
60
|
+
ENDIF.
|
|
61
61
|
ENDCASE.`,
|
|
62
62
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Quickfix],
|
|
63
63
|
};
|
|
@@ -110,9 +110,9 @@ class ImplementMethods extends _abap_rule_1.ABAPRule {
|
|
|
110
110
|
for (const i of ((_a = file.getStructure()) === null || _a === void 0 ? void 0 : _a.findAllStatements(Statements.ClassImplementation)) || []) {
|
|
111
111
|
const name = (_b = i.findFirstExpression(Expressions.ClassName)) === null || _b === void 0 ? void 0 : _b.getFirstToken().getStr().toUpperCase();
|
|
112
112
|
if (name === impl.identifier.getName().toUpperCase()) {
|
|
113
|
-
return edit_helper_1.EditHelper.insertAt(file, i.getLastToken().getEnd(), `
|
|
114
|
-
METHOD ${methodName.toLowerCase()}.
|
|
115
|
-
RETURN. " todo, implement method
|
|
113
|
+
return edit_helper_1.EditHelper.insertAt(file, i.getLastToken().getEnd(), `
|
|
114
|
+
METHOD ${methodName.toLowerCase()}.
|
|
115
|
+
RETURN. " todo, implement method
|
|
116
116
|
ENDMETHOD.`);
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -22,13 +22,13 @@ class ImplicitStartOfSelection extends _abap_rule_1.ABAPRule {
|
|
|
22
22
|
key: "implicit_start_of_selection",
|
|
23
23
|
title: "Implicit START-OF-SELECTION",
|
|
24
24
|
shortDescription: `Add explicit selection screen event handling`,
|
|
25
|
-
extendedInformation: `Only runs for executable programs
|
|
26
|
-
|
|
25
|
+
extendedInformation: `Only runs for executable programs
|
|
26
|
+
|
|
27
27
|
https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-us/abapstart-of-selection.htm`,
|
|
28
28
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
29
|
-
badExample: `REPORT zfoo.
|
|
29
|
+
badExample: `REPORT zfoo.
|
|
30
30
|
WRITE 'hello'.`,
|
|
31
|
-
goodExample: `START-OF-SELECTION.
|
|
31
|
+
goodExample: `START-OF-SELECTION.
|
|
32
32
|
WRITE 'hello'.`,
|
|
33
33
|
};
|
|
34
34
|
}
|
|
@@ -31,19 +31,19 @@ class InStatementIndentation extends _abap_rule_1.ABAPRule {
|
|
|
31
31
|
key: "in_statement_indentation",
|
|
32
32
|
title: "In-statement indentation",
|
|
33
33
|
shortDescription: "Checks alignment within statements which span multiple lines.",
|
|
34
|
-
extendedInformation: `Lines following the first line should be indented once (2 spaces).
|
|
35
|
-
|
|
36
|
-
For block declaration statements, lines after the first should be indented an additional time (default: +2 spaces)
|
|
34
|
+
extendedInformation: `Lines following the first line should be indented once (2 spaces).
|
|
35
|
+
|
|
36
|
+
For block declaration statements, lines after the first should be indented an additional time (default: +2 spaces)
|
|
37
37
|
to distinguish them better from code within the block.`,
|
|
38
|
-
badExample: `IF 1 = 1
|
|
39
|
-
AND 2 = 2.
|
|
40
|
-
WRITE 'hello' &&
|
|
41
|
-
'world'.
|
|
38
|
+
badExample: `IF 1 = 1
|
|
39
|
+
AND 2 = 2.
|
|
40
|
+
WRITE 'hello' &&
|
|
41
|
+
'world'.
|
|
42
42
|
ENDIF.`,
|
|
43
|
-
goodExample: `IF 1 = 1
|
|
44
|
-
AND 2 = 2.
|
|
45
|
-
WRITE 'hello' &&
|
|
46
|
-
'world'.
|
|
43
|
+
goodExample: `IF 1 = 1
|
|
44
|
+
AND 2 = 2.
|
|
45
|
+
WRITE 'hello' &&
|
|
46
|
+
'world'.
|
|
47
47
|
ENDIF.`,
|
|
48
48
|
tags: [_irule_1.RuleTag.Whitespace, _irule_1.RuleTag.Quickfix, _irule_1.RuleTag.SingleFile],
|
|
49
49
|
};
|
|
@@ -41,23 +41,23 @@ class Indentation extends _abap_rule_1.ABAPRule {
|
|
|
41
41
|
title: "Indentation",
|
|
42
42
|
shortDescription: `Checks indentation`,
|
|
43
43
|
tags: [_irule_1.RuleTag.Whitespace, _irule_1.RuleTag.Quickfix, _irule_1.RuleTag.SingleFile],
|
|
44
|
-
badExample: `CLASS lcl DEFINITION.
|
|
45
|
-
PRIVATE SECTION.
|
|
46
|
-
METHODS constructor.
|
|
47
|
-
ENDCLASS.
|
|
48
|
-
|
|
49
|
-
CLASS lcl IMPLEMENTATION.
|
|
50
|
-
METHOD constructor.
|
|
51
|
-
ENDMETHOD.
|
|
44
|
+
badExample: `CLASS lcl DEFINITION.
|
|
45
|
+
PRIVATE SECTION.
|
|
46
|
+
METHODS constructor.
|
|
47
|
+
ENDCLASS.
|
|
48
|
+
|
|
49
|
+
CLASS lcl IMPLEMENTATION.
|
|
50
|
+
METHOD constructor.
|
|
51
|
+
ENDMETHOD.
|
|
52
52
|
ENDCLASS.`,
|
|
53
|
-
goodExample: `CLASS lcl DEFINITION.
|
|
54
|
-
PRIVATE SECTION.
|
|
55
|
-
METHODS constructor.
|
|
56
|
-
ENDCLASS.
|
|
57
|
-
|
|
58
|
-
CLASS lcl IMPLEMENTATION.
|
|
59
|
-
METHOD constructor.
|
|
60
|
-
ENDMETHOD.
|
|
53
|
+
goodExample: `CLASS lcl DEFINITION.
|
|
54
|
+
PRIVATE SECTION.
|
|
55
|
+
METHODS constructor.
|
|
56
|
+
ENDCLASS.
|
|
57
|
+
|
|
58
|
+
CLASS lcl IMPLEMENTATION.
|
|
59
|
+
METHOD constructor.
|
|
60
|
+
ENDMETHOD.
|
|
61
61
|
ENDCLASS.`,
|
|
62
62
|
};
|
|
63
63
|
}
|
|
@@ -26,9 +26,9 @@ class IntfReferencingClas {
|
|
|
26
26
|
key: "intf_referencing_clas",
|
|
27
27
|
title: "INTF referencing CLAS",
|
|
28
28
|
shortDescription: `Interface contains references to class`,
|
|
29
|
-
extendedInformation: `Only global interfaces are checked.
|
|
30
|
-
Only first level references are checked.
|
|
31
|
-
Exception class references are ignored.
|
|
29
|
+
extendedInformation: `Only global interfaces are checked.
|
|
30
|
+
Only first level references are checked.
|
|
31
|
+
Exception class references are ignored.
|
|
32
32
|
Void references are ignored.`,
|
|
33
33
|
};
|
|
34
34
|
}
|
|
@@ -22,9 +22,9 @@ class InvalidTableIndex extends _abap_rule_1.ABAPRule {
|
|
|
22
22
|
title: "Invalid Table Index",
|
|
23
23
|
shortDescription: `Issues error for constant table index zero, as ABAP starts from 1`,
|
|
24
24
|
tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Quickfix],
|
|
25
|
-
badExample: `DATA(first) = table[ 0 ].
|
|
25
|
+
badExample: `DATA(first) = table[ 0 ].
|
|
26
26
|
READ TABLE gt_stack ASSIGNING <ls_stack> INDEX 0.`,
|
|
27
|
-
goodExample: `DATA(first) = table[ 1 ].
|
|
27
|
+
goodExample: `DATA(first) = table[ 1 ].
|
|
28
28
|
READ TABLE gt_stack ASSIGNING <ls_stack> INDEX 1.`,
|
|
29
29
|
};
|
|
30
30
|
}
|
|
@@ -15,8 +15,8 @@ class LineBreakStyle {
|
|
|
15
15
|
return {
|
|
16
16
|
key: "line_break_style",
|
|
17
17
|
title: "Makes sure line breaks are consistent in the ABAP code",
|
|
18
|
-
shortDescription: `Enforces LF as newlines in ABAP files
|
|
19
|
-
|
|
18
|
+
shortDescription: `Enforces LF as newlines in ABAP files
|
|
19
|
+
|
|
20
20
|
abapGit does not work with CRLF`,
|
|
21
21
|
tags: [_irule_1.RuleTag.Whitespace, _irule_1.RuleTag.SingleFile],
|
|
22
22
|
};
|
|
@@ -24,7 +24,7 @@ class LineLength extends _abap_rule_1.ABAPRule {
|
|
|
24
24
|
key: "line_length",
|
|
25
25
|
title: "Line length",
|
|
26
26
|
shortDescription: `Detects lines exceeding the provided maximum length.`,
|
|
27
|
-
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#stick-to-a-reasonable-line-length
|
|
27
|
+
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#stick-to-a-reasonable-line-length
|
|
28
28
|
https://docs.abapopenchecks.org/checks/04/`,
|
|
29
29
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],
|
|
30
30
|
};
|