@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.
Files changed (127) hide show
  1. package/README.md +6 -6
  2. package/build/abaplint.d.ts +5 -0
  3. package/build/src/abap/2_statements/expressions/index.js +2 -0
  4. package/build/src/abap/2_statements/expressions/sql_aggregation.js +23 -11
  5. package/build/src/abap/2_statements/expressions/sql_compare.js +1 -1
  6. package/build/src/abap/2_statements/expressions/sql_field.js +10 -3
  7. package/build/src/abap/2_statements/expressions/sql_function.js +2 -1
  8. package/build/src/abap/2_statements/expressions/sql_function_input.js +5 -3
  9. package/build/src/abap/2_statements/expressions/sql_over.js +25 -0
  10. package/build/src/abap/5_syntax/expressions/source.js +1 -1
  11. package/build/src/abap/5_syntax/statements/data.js +5 -2
  12. package/build/src/lsp/help.js +10 -10
  13. package/build/src/objects/_abap_object.js +5 -3
  14. package/build/src/registry.js +1 -1
  15. package/build/src/rules/7bit_ascii.js +4 -4
  16. package/build/src/rules/abapdoc.js +4 -4
  17. package/build/src/rules/add_test_attributes.js +20 -20
  18. package/build/src/rules/align_parameters.js +40 -40
  19. package/build/src/rules/align_type_expressions.js +28 -28
  20. package/build/src/rules/ambiguous_statement.js +7 -7
  21. package/build/src/rules/avoid_use.js +10 -10
  22. package/build/src/rules/begin_end_names.js +4 -4
  23. package/build/src/rules/begin_single_include.js +13 -13
  24. package/build/src/rules/call_transaction_authority_check.js +3 -3
  25. package/build/src/rules/cds_association_name.js +6 -6
  26. package/build/src/rules/cds_comment_style.js +4 -4
  27. package/build/src/rules/cds_field_order.js +12 -12
  28. package/build/src/rules/cds_legacy_view.js +4 -4
  29. package/build/src/rules/cds_naming.js +7 -7
  30. package/build/src/rules/chain_mainly_declarations.js +4 -4
  31. package/build/src/rules/change_if_to_case.js +8 -8
  32. package/build/src/rules/check_abstract.js +2 -2
  33. package/build/src/rules/check_comments.js +4 -4
  34. package/build/src/rules/check_include.js +4 -4
  35. package/build/src/rules/check_subrc.js +8 -8
  36. package/build/src/rules/classic_exceptions_overlap.js +10 -10
  37. package/build/src/rules/commented_code.js +1 -1
  38. package/build/src/rules/constructor_visibility_public.js +4 -4
  39. package/build/src/rules/contains_tab.js +2 -2
  40. package/build/src/rules/cyclic_oo.js +4 -4
  41. package/build/src/rules/dangerous_statement.js +1 -1
  42. package/build/src/rules/definitions_top.js +6 -6
  43. package/build/src/rules/downport.js +83 -83
  44. package/build/src/rules/easy_to_find_messages.js +6 -6
  45. package/build/src/rules/empty_event.js +6 -6
  46. package/build/src/rules/empty_line_in_statement.js +2 -2
  47. package/build/src/rules/empty_structure.js +6 -6
  48. package/build/src/rules/exit_or_check.js +3 -3
  49. package/build/src/rules/expand_macros.js +5 -5
  50. package/build/src/rules/exporting.js +1 -1
  51. package/build/src/rules/forbidden_identifier.js +1 -1
  52. package/build/src/rules/forbidden_void_type.js +2 -2
  53. package/build/src/rules/fully_type_itabs.js +2 -2
  54. package/build/src/rules/function_module_recommendations.js +39 -0
  55. package/build/src/rules/functional_writing.js +17 -17
  56. package/build/src/rules/global_class.js +10 -10
  57. package/build/src/rules/identical_conditions.js +12 -12
  58. package/build/src/rules/identical_contents.js +14 -14
  59. package/build/src/rules/identical_descriptions.js +6 -6
  60. package/build/src/rules/identical_move.js +2 -2
  61. package/build/src/rules/if_in_if.js +35 -35
  62. package/build/src/rules/implement_methods.js +3 -3
  63. package/build/src/rules/implicit_start_of_selection.js +4 -4
  64. package/build/src/rules/in_statement_indentation.js +11 -11
  65. package/build/src/rules/indentation.js +16 -16
  66. package/build/src/rules/intf_referencing_clas.js +3 -3
  67. package/build/src/rules/invalid_table_index.js +2 -2
  68. package/build/src/rules/line_break_style.js +2 -2
  69. package/build/src/rules/line_length.js +1 -1
  70. package/build/src/rules/line_only_punc.js +1 -1
  71. package/build/src/rules/local_variable_names.js +6 -6
  72. package/build/src/rules/macro_naming.js +2 -2
  73. package/build/src/rules/main_file_contents.js +4 -4
  74. package/build/src/rules/many_parentheses.js +10 -10
  75. package/build/src/rules/max_one_method_parameter_per_line.js +7 -7
  76. package/build/src/rules/max_one_statement.js +5 -5
  77. package/build/src/rules/method_length.js +2 -2
  78. package/build/src/rules/method_overwrites_builtin.js +12 -12
  79. package/build/src/rules/mix_returning.js +8 -8
  80. package/build/src/rules/nesting.js +1 -1
  81. package/build/src/rules/no_chained_assignment.js +1 -1
  82. package/build/src/rules/no_external_form_calls.js +2 -2
  83. package/build/src/rules/no_inline_in_optional_branches.js +11 -11
  84. package/build/src/rules/no_prefixes.js +6 -6
  85. package/build/src/rules/no_public_attributes.js +1 -1
  86. package/build/src/rules/no_yoda_conditions.js +4 -4
  87. package/build/src/rules/nrob_consistency.js +2 -2
  88. package/build/src/rules/obsolete_statement.js +51 -51
  89. package/build/src/rules/omit_parameter_name.js +3 -3
  90. package/build/src/rules/omit_receiving.js +13 -13
  91. package/build/src/rules/parser_702_chaining.js +2 -2
  92. package/build/src/rules/parser_error.js +2 -2
  93. package/build/src/rules/parser_missing_space.js +1 -1
  94. package/build/src/rules/prefer_inline.js +16 -16
  95. package/build/src/rules/prefer_is_not.js +9 -9
  96. package/build/src/rules/prefer_raise_exception_new.js +5 -5
  97. package/build/src/rules/prefer_returning_to_exporting.js +4 -4
  98. package/build/src/rules/prefer_xsdbool.js +2 -2
  99. package/build/src/rules/preferred_compare_operator.js +2 -2
  100. package/build/src/rules/reduce_procedural_code.js +17 -17
  101. package/build/src/rules/remove_descriptions.js +4 -4
  102. package/build/src/rules/rfc_error_handling.js +7 -7
  103. package/build/src/rules/select_add_order_by.js +5 -5
  104. package/build/src/rules/select_performance.js +5 -5
  105. package/build/src/rules/select_single_full_key.js +2 -2
  106. package/build/src/rules/sicf_consistency.js +2 -2
  107. package/build/src/rules/slow_parameter_passing.js +16 -16
  108. package/build/src/rules/space_before_dot.js +2 -2
  109. package/build/src/rules/sql_value_conversion.js +6 -6
  110. package/build/src/rules/start_at_tab.js +1 -1
  111. package/build/src/rules/strict_sql.js +6 -6
  112. package/build/src/rules/sy_modification.js +6 -6
  113. package/build/src/rules/tabl_enhancement_category.js +2 -2
  114. package/build/src/rules/tables_declared_locally.js +2 -2
  115. package/build/src/rules/type_form_parameters.js +2 -2
  116. package/build/src/rules/unnecessary_pragma.js +29 -29
  117. package/build/src/rules/unnecessary_return.js +11 -11
  118. package/build/src/rules/unused_macros.js +6 -6
  119. package/build/src/rules/unused_methods.js +12 -12
  120. package/build/src/rules/unused_variables.js +12 -12
  121. package/build/src/rules/use_bool_expression.js +8 -8
  122. package/build/src/rules/use_class_based_exceptions.js +8 -8
  123. package/build/src/rules/use_line_exists.js +6 -6
  124. package/build/src/rules/use_new.js +4 -4
  125. package/build/src/rules/when_others_last.js +6 -6
  126. package/build/src/rules/xml_consistency.js +3 -3
  127. 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
  };