@abaplint/core 2.119.42 → 2.119.44

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 (332) hide show
  1. package/build/abaplint.d.ts +152 -8
  2. package/build/src/abap/2_statements/combi.js +100 -39
  3. package/build/src/abap/2_statements/expand_macros.js +6 -4
  4. package/build/src/abap/2_statements/expressions/_dynamic_access.js +2 -2
  5. package/build/src/abap/2_statements/expressions/_select_core.js +5 -5
  6. package/build/src/abap/2_statements/expressions/assign_source.js +1 -1
  7. package/build/src/abap/2_statements/expressions/cast.js +1 -1
  8. package/build/src/abap/2_statements/expressions/compare.js +2 -2
  9. package/build/src/abap/2_statements/expressions/component_compare.js +1 -1
  10. package/build/src/abap/2_statements/expressions/component_compare_simple.js +1 -1
  11. package/build/src/abap/2_statements/expressions/cond.js +1 -1
  12. package/build/src/abap/2_statements/expressions/corresponding_body.js +1 -1
  13. package/build/src/abap/2_statements/expressions/data_definition.js +1 -1
  14. package/build/src/abap/2_statements/expressions/find_type.js +1 -1
  15. package/build/src/abap/2_statements/expressions/for.js +2 -2
  16. package/build/src/abap/2_statements/expressions/function_exporting_parameter.js +1 -1
  17. package/build/src/abap/2_statements/expressions/index.js +9 -0
  18. package/build/src/abap/2_statements/expressions/inlinedata.js +1 -1
  19. package/build/src/abap/2_statements/expressions/inlinefs.js +1 -1
  20. package/build/src/abap/2_statements/expressions/loop_source.js +1 -1
  21. package/build/src/abap/2_statements/expressions/message_source_source.js +1 -1
  22. package/build/src/abap/2_statements/expressions/new_object.js +1 -1
  23. package/build/src/abap/2_statements/expressions/reduce_next.js +1 -1
  24. package/build/src/abap/2_statements/expressions/select.js +1 -1
  25. package/build/src/abap/2_statements/expressions/select_cte.js +5 -5
  26. package/build/src/abap/2_statements/expressions/source.js +11 -11
  27. package/build/src/abap/2_statements/expressions/sql_aggregation.js +9 -9
  28. package/build/src/abap/2_statements/expressions/sql_association_entry.js +1 -1
  29. package/build/src/abap/2_statements/expressions/sql_associations_list.js +1 -1
  30. package/build/src/abap/2_statements/expressions/sql_case.js +1 -1
  31. package/build/src/abap/2_statements/expressions/sql_client.js +2 -2
  32. package/build/src/abap/2_statements/expressions/sql_compare.js +7 -6
  33. package/build/src/abap/2_statements/expressions/sql_cte_associations.js +1 -1
  34. package/build/src/abap/2_statements/expressions/sql_cte_hierarchy.js +1 -1
  35. package/build/src/abap/2_statements/expressions/sql_field.js +4 -4
  36. package/build/src/abap/2_statements/expressions/sql_field_list.js +1 -1
  37. package/build/src/abap/2_statements/expressions/sql_field_list_loop.js +2 -2
  38. package/build/src/abap/2_statements/expressions/sql_field_list_loop_greedy.js +2 -2
  39. package/build/src/abap/2_statements/expressions/sql_from_source.js +2 -2
  40. package/build/src/abap/2_statements/expressions/sql_function.js +363 -31
  41. package/build/src/abap/2_statements/expressions/sql_function_input.js +1 -1
  42. package/build/src/abap/2_statements/expressions/sql_group_by.js +2 -2
  43. package/build/src/abap/2_statements/expressions/sql_hierarchy_accessor.js +1 -1
  44. package/build/src/abap/2_statements/expressions/sql_hierarchy_aggregate.js +1 -1
  45. package/build/src/abap/2_statements/expressions/sql_hierarchy_source.js +1 -1
  46. package/build/src/abap/2_statements/expressions/sql_in.js +2 -2
  47. package/build/src/abap/2_statements/expressions/sql_into_list.js +1 -1
  48. package/build/src/abap/2_statements/expressions/sql_join.js +1 -1
  49. package/build/src/abap/2_statements/expressions/sql_like_regexpr.js +19 -0
  50. package/build/src/abap/2_statements/expressions/sql_locate_regexpr.js +18 -0
  51. package/build/src/abap/2_statements/expressions/sql_occurrences_regexpr.js +15 -0
  52. package/build/src/abap/2_statements/expressions/sql_options.js +2 -2
  53. package/build/src/abap/2_statements/expressions/sql_over.js +2 -2
  54. package/build/src/abap/2_statements/expressions/sql_path_for_column.js +1 -1
  55. package/build/src/abap/2_statements/expressions/sql_path_for_entity.js +1 -1
  56. package/build/src/abap/2_statements/expressions/sql_path_segment.js +3 -3
  57. package/build/src/abap/2_statements/expressions/sql_privileged_access.js +1 -1
  58. package/build/src/abap/2_statements/expressions/sql_regexpr_from.js +17 -0
  59. package/build/src/abap/2_statements/expressions/sql_regexpr_group.js +17 -0
  60. package/build/src/abap/2_statements/expressions/sql_regexpr_occurrence.js +17 -0
  61. package/build/src/abap/2_statements/expressions/sql_regexpr_pattern.js +18 -0
  62. package/build/src/abap/2_statements/expressions/sql_replace_regexpr.js +22 -0
  63. package/build/src/abap/2_statements/expressions/sql_set_op.js +1 -1
  64. package/build/src/abap/2_statements/expressions/sql_set_op_group.js +2 -2
  65. package/build/src/abap/2_statements/expressions/sql_source.js +1 -1
  66. package/build/src/abap/2_statements/expressions/sql_source_no_space.js +1 -1
  67. package/build/src/abap/2_statements/expressions/sql_source_simple.js +1 -1
  68. package/build/src/abap/2_statements/expressions/sql_substring_regexpr.js +18 -0
  69. package/build/src/abap/2_statements/expressions/sql_target.js +2 -2
  70. package/build/src/abap/2_statements/expressions/string_template.js +1 -1
  71. package/build/src/abap/2_statements/expressions/string_template_formatting.js +2 -2
  72. package/build/src/abap/2_statements/expressions/table_expression.js +1 -1
  73. package/build/src/abap/2_statements/expressions/type.js +1 -1
  74. package/build/src/abap/2_statements/expressions/type_table.js +1 -1
  75. package/build/src/abap/2_statements/expressions/type_table_key.js +1 -1
  76. package/build/src/abap/2_statements/expressions/value_body.js +1 -1
  77. package/build/src/abap/2_statements/result.js +6 -0
  78. package/build/src/abap/2_statements/statement_parser.js +8 -5
  79. package/build/src/abap/2_statements/statements/add_corresponding.js +1 -1
  80. package/build/src/abap/2_statements/statements/append.js +1 -1
  81. package/build/src/abap/2_statements/statements/assign.js +1 -1
  82. package/build/src/abap/2_statements/statements/assign_local_copy.js +1 -1
  83. package/build/src/abap/2_statements/statements/at_line_selection.js +1 -1
  84. package/build/src/abap/2_statements/statements/at_pf.js +1 -1
  85. package/build/src/abap/2_statements/statements/at_selection_screen.js +1 -1
  86. package/build/src/abap/2_statements/statements/at_user_command.js +1 -1
  87. package/build/src/abap/2_statements/statements/back.js +1 -1
  88. package/build/src/abap/2_statements/statements/break.js +1 -1
  89. package/build/src/abap/2_statements/statements/break_id.js +1 -1
  90. package/build/src/abap/2_statements/statements/call_badi.js +1 -1
  91. package/build/src/abap/2_statements/statements/call_database.js +1 -1
  92. package/build/src/abap/2_statements/statements/call_dialog.js +1 -1
  93. package/build/src/abap/2_statements/statements/call_function.js +4 -4
  94. package/build/src/abap/2_statements/statements/call_kernel.js +1 -1
  95. package/build/src/abap/2_statements/statements/call_ole.js +1 -1
  96. package/build/src/abap/2_statements/statements/call_screen.js +1 -1
  97. package/build/src/abap/2_statements/statements/call_selection_screen.js +1 -1
  98. package/build/src/abap/2_statements/statements/call_subscreen.js +1 -1
  99. package/build/src/abap/2_statements/statements/call_transaction.js +1 -1
  100. package/build/src/abap/2_statements/statements/case_type.js +1 -1
  101. package/build/src/abap/2_statements/statements/catch_system_exceptions.js +1 -1
  102. package/build/src/abap/2_statements/statements/chain.js +1 -1
  103. package/build/src/abap/2_statements/statements/check_select_options.js +1 -1
  104. package/build/src/abap/2_statements/statements/class_definition.js +1 -1
  105. package/build/src/abap/2_statements/statements/close_cursor.js +1 -1
  106. package/build/src/abap/2_statements/statements/close_dataset.js +1 -1
  107. package/build/src/abap/2_statements/statements/commit_entities.js +1 -1
  108. package/build/src/abap/2_statements/statements/communication.js +1 -1
  109. package/build/src/abap/2_statements/statements/compute.js +1 -1
  110. package/build/src/abap/2_statements/statements/contexts.js +1 -1
  111. package/build/src/abap/2_statements/statements/controls.js +1 -1
  112. package/build/src/abap/2_statements/statements/convert.js +2 -2
  113. package/build/src/abap/2_statements/statements/create_data.js +1 -1
  114. package/build/src/abap/2_statements/statements/create_object.js +1 -1
  115. package/build/src/abap/2_statements/statements/create_ole.js +1 -1
  116. package/build/src/abap/2_statements/statements/define.js +1 -1
  117. package/build/src/abap/2_statements/statements/delete_cluster.js +1 -1
  118. package/build/src/abap/2_statements/statements/delete_dataset.js +1 -1
  119. package/build/src/abap/2_statements/statements/delete_dynpro.js +1 -1
  120. package/build/src/abap/2_statements/statements/delete_memory.js +1 -1
  121. package/build/src/abap/2_statements/statements/delete_report.js +1 -1
  122. package/build/src/abap/2_statements/statements/delete_textpool.js +1 -1
  123. package/build/src/abap/2_statements/statements/demand.js +1 -1
  124. package/build/src/abap/2_statements/statements/describe.js +1 -1
  125. package/build/src/abap/2_statements/statements/detail.js +1 -1
  126. package/build/src/abap/2_statements/statements/editor_call.js +1 -1
  127. package/build/src/abap/2_statements/statements/end_chain.js +1 -1
  128. package/build/src/abap/2_statements/statements/end_enhancement.js +1 -1
  129. package/build/src/abap/2_statements/statements/end_enhancement_section.js +1 -1
  130. package/build/src/abap/2_statements/statements/end_of_page.js +1 -1
  131. package/build/src/abap/2_statements/statements/end_of_selection.js +1 -1
  132. package/build/src/abap/2_statements/statements/end_test_seam.js +1 -1
  133. package/build/src/abap/2_statements/statements/endcatch.js +1 -1
  134. package/build/src/abap/2_statements/statements/enddefine.js +1 -1
  135. package/build/src/abap/2_statements/statements/endexec.js +1 -1
  136. package/build/src/abap/2_statements/statements/endmodule.js +1 -1
  137. package/build/src/abap/2_statements/statements/endon.js +1 -1
  138. package/build/src/abap/2_statements/statements/endprovide.js +1 -1
  139. package/build/src/abap/2_statements/statements/endwith.js +1 -1
  140. package/build/src/abap/2_statements/statements/enhancement.js +1 -1
  141. package/build/src/abap/2_statements/statements/enhancement_point.js +1 -1
  142. package/build/src/abap/2_statements/statements/enhancement_section.js +1 -1
  143. package/build/src/abap/2_statements/statements/exec_sql.js +1 -1
  144. package/build/src/abap/2_statements/statements/export_dynpro.js +1 -1
  145. package/build/src/abap/2_statements/statements/extract.js +1 -1
  146. package/build/src/abap/2_statements/statements/fetch_next_cursor.js +1 -1
  147. package/build/src/abap/2_statements/statements/field.js +1 -1
  148. package/build/src/abap/2_statements/statements/field_group.js +1 -1
  149. package/build/src/abap/2_statements/statements/fields.js +1 -1
  150. package/build/src/abap/2_statements/statements/format.js +1 -1
  151. package/build/src/abap/2_statements/statements/free_memory.js +1 -1
  152. package/build/src/abap/2_statements/statements/free_object.js +1 -1
  153. package/build/src/abap/2_statements/statements/generate_dynpro.js +1 -1
  154. package/build/src/abap/2_statements/statements/generate_report.js +1 -1
  155. package/build/src/abap/2_statements/statements/generate_subroutine.js +1 -1
  156. package/build/src/abap/2_statements/statements/get.js +1 -1
  157. package/build/src/abap/2_statements/statements/get_badi.js +1 -1
  158. package/build/src/abap/2_statements/statements/get_cursor.js +1 -1
  159. package/build/src/abap/2_statements/statements/get_dataset.js +1 -1
  160. package/build/src/abap/2_statements/statements/get_locale.js +1 -1
  161. package/build/src/abap/2_statements/statements/get_parameter.js +1 -1
  162. package/build/src/abap/2_statements/statements/get_permissions.js +1 -1
  163. package/build/src/abap/2_statements/statements/get_pf_status.js +1 -1
  164. package/build/src/abap/2_statements/statements/get_property.js +1 -1
  165. package/build/src/abap/2_statements/statements/get_run_time.js +1 -1
  166. package/build/src/abap/2_statements/statements/hide.js +1 -1
  167. package/build/src/abap/2_statements/statements/import_dynpro.js +1 -1
  168. package/build/src/abap/2_statements/statements/import_nametab.js +1 -1
  169. package/build/src/abap/2_statements/statements/infotypes.js +1 -1
  170. package/build/src/abap/2_statements/statements/initialization.js +1 -1
  171. package/build/src/abap/2_statements/statements/input.js +1 -1
  172. package/build/src/abap/2_statements/statements/insert_field_group.js +1 -1
  173. package/build/src/abap/2_statements/statements/insert_internal.js +1 -1
  174. package/build/src/abap/2_statements/statements/insert_report.js +2 -2
  175. package/build/src/abap/2_statements/statements/insert_textpool.js +1 -1
  176. package/build/src/abap/2_statements/statements/interface_def.js +1 -1
  177. package/build/src/abap/2_statements/statements/leave.js +1 -1
  178. package/build/src/abap/2_statements/statements/load_of_program.js +1 -1
  179. package/build/src/abap/2_statements/statements/load_report.js +1 -1
  180. package/build/src/abap/2_statements/statements/local.js +1 -1
  181. package/build/src/abap/2_statements/statements/log_point.js +1 -1
  182. package/build/src/abap/2_statements/statements/loop.js +3 -3
  183. package/build/src/abap/2_statements/statements/loop_at_screen.js +1 -1
  184. package/build/src/abap/2_statements/statements/message.js +1 -1
  185. package/build/src/abap/2_statements/statements/method_def.js +1 -1
  186. package/build/src/abap/2_statements/statements/modify_entities.js +1 -1
  187. package/build/src/abap/2_statements/statements/modify_line.js +1 -1
  188. package/build/src/abap/2_statements/statements/modify_screen.js +1 -1
  189. package/build/src/abap/2_statements/statements/module.js +1 -1
  190. package/build/src/abap/2_statements/statements/move.js +2 -2
  191. package/build/src/abap/2_statements/statements/move_corresponding.js +2 -2
  192. package/build/src/abap/2_statements/statements/new_line.js +1 -1
  193. package/build/src/abap/2_statements/statements/new_page.js +1 -1
  194. package/build/src/abap/2_statements/statements/nodes.js +1 -1
  195. package/build/src/abap/2_statements/statements/on_change.js +1 -1
  196. package/build/src/abap/2_statements/statements/open_cursor.js +2 -2
  197. package/build/src/abap/2_statements/statements/open_dataset.js +1 -1
  198. package/build/src/abap/2_statements/statements/pack.js +1 -1
  199. package/build/src/abap/2_statements/statements/parameter.js +1 -1
  200. package/build/src/abap/2_statements/statements/perform.js +2 -2
  201. package/build/src/abap/2_statements/statements/position.js +1 -1
  202. package/build/src/abap/2_statements/statements/print_control.js +1 -1
  203. package/build/src/abap/2_statements/statements/process_after_input.js +1 -1
  204. package/build/src/abap/2_statements/statements/process_before_output.js +1 -1
  205. package/build/src/abap/2_statements/statements/process_on_help_request.js +1 -1
  206. package/build/src/abap/2_statements/statements/process_on_value_request.js +1 -1
  207. package/build/src/abap/2_statements/statements/program.js +1 -1
  208. package/build/src/abap/2_statements/statements/provide.js +1 -1
  209. package/build/src/abap/2_statements/statements/put.js +1 -1
  210. package/build/src/abap/2_statements/statements/raise.js +2 -2
  211. package/build/src/abap/2_statements/statements/ranges.js +1 -1
  212. package/build/src/abap/2_statements/statements/read_dataset.js +1 -1
  213. package/build/src/abap/2_statements/statements/read_entities.js +1 -1
  214. package/build/src/abap/2_statements/statements/read_line.js +1 -1
  215. package/build/src/abap/2_statements/statements/read_report.js +1 -1
  216. package/build/src/abap/2_statements/statements/read_table.js +1 -1
  217. package/build/src/abap/2_statements/statements/read_textpool.js +1 -1
  218. package/build/src/abap/2_statements/statements/receive.js +1 -1
  219. package/build/src/abap/2_statements/statements/refresh.js +1 -1
  220. package/build/src/abap/2_statements/statements/refresh_control.js +1 -1
  221. package/build/src/abap/2_statements/statements/reject.js +1 -1
  222. package/build/src/abap/2_statements/statements/report.js +1 -1
  223. package/build/src/abap/2_statements/statements/reserve.js +1 -1
  224. package/build/src/abap/2_statements/statements/retry.js +1 -1
  225. package/build/src/abap/2_statements/statements/return.js +1 -1
  226. package/build/src/abap/2_statements/statements/rollback_entities.js +1 -1
  227. package/build/src/abap/2_statements/statements/scan.js +1 -1
  228. package/build/src/abap/2_statements/statements/scroll_list.js +1 -1
  229. package/build/src/abap/2_statements/statements/search.js +1 -1
  230. package/build/src/abap/2_statements/statements/selectionscreen.js +1 -1
  231. package/build/src/abap/2_statements/statements/selectoption.js +1 -1
  232. package/build/src/abap/2_statements/statements/set_blank.js +1 -1
  233. package/build/src/abap/2_statements/statements/set_country.js +1 -1
  234. package/build/src/abap/2_statements/statements/set_cursor.js +1 -1
  235. package/build/src/abap/2_statements/statements/set_dataset.js +1 -1
  236. package/build/src/abap/2_statements/statements/set_extended_check.js +1 -1
  237. package/build/src/abap/2_statements/statements/set_language.js +1 -1
  238. package/build/src/abap/2_statements/statements/set_left.js +1 -1
  239. package/build/src/abap/2_statements/statements/set_locale.js +1 -1
  240. package/build/src/abap/2_statements/statements/set_locks.js +1 -1
  241. package/build/src/abap/2_statements/statements/set_margin.js +1 -1
  242. package/build/src/abap/2_statements/statements/set_parameter.js +1 -1
  243. package/build/src/abap/2_statements/statements/set_pf_status.js +1 -1
  244. package/build/src/abap/2_statements/statements/set_property.js +1 -1
  245. package/build/src/abap/2_statements/statements/set_run_time.js +1 -1
  246. package/build/src/abap/2_statements/statements/set_screen.js +1 -1
  247. package/build/src/abap/2_statements/statements/set_titlebar.js +1 -1
  248. package/build/src/abap/2_statements/statements/set_update_task.js +1 -1
  249. package/build/src/abap/2_statements/statements/set_user_command.js +1 -1
  250. package/build/src/abap/2_statements/statements/skip.js +1 -1
  251. package/build/src/abap/2_statements/statements/sort_dataset.js +1 -1
  252. package/build/src/abap/2_statements/statements/start_of_selection.js +1 -1
  253. package/build/src/abap/2_statements/statements/stop.js +1 -1
  254. package/build/src/abap/2_statements/statements/submit.js +1 -1
  255. package/build/src/abap/2_statements/statements/subtract_corresponding.js +1 -1
  256. package/build/src/abap/2_statements/statements/sum.js +1 -1
  257. package/build/src/abap/2_statements/statements/summary.js +1 -1
  258. package/build/src/abap/2_statements/statements/supply.js +1 -1
  259. package/build/src/abap/2_statements/statements/suppress_dialog.js +1 -1
  260. package/build/src/abap/2_statements/statements/syntax_check.js +1 -1
  261. package/build/src/abap/2_statements/statements/system_call.js +1 -1
  262. package/build/src/abap/2_statements/statements/tables.js +1 -1
  263. package/build/src/abap/2_statements/statements/test_seam.js +1 -1
  264. package/build/src/abap/2_statements/statements/top_of_page.js +1 -1
  265. package/build/src/abap/2_statements/statements/transfer.js +1 -1
  266. package/build/src/abap/2_statements/statements/truncate_dataset.js +1 -1
  267. package/build/src/abap/2_statements/statements/type.js +1 -1
  268. package/build/src/abap/2_statements/statements/type_begin.js +1 -1
  269. package/build/src/abap/2_statements/statements/type_enum.js +1 -1
  270. package/build/src/abap/2_statements/statements/type_enum_begin.js +1 -1
  271. package/build/src/abap/2_statements/statements/type_enum_end.js +1 -1
  272. package/build/src/abap/2_statements/statements/type_mesh.js +1 -1
  273. package/build/src/abap/2_statements/statements/type_mesh_begin.js +1 -1
  274. package/build/src/abap/2_statements/statements/type_mesh_end.js +1 -1
  275. package/build/src/abap/2_statements/statements/type_pool.js +1 -1
  276. package/build/src/abap/2_statements/statements/type_pools.js +1 -1
  277. package/build/src/abap/2_statements/statements/uline.js +1 -1
  278. package/build/src/abap/2_statements/statements/unpack.js +1 -1
  279. package/build/src/abap/2_statements/statements/update_database.js +1 -1
  280. package/build/src/abap/2_statements/statements/verification_message.js +1 -1
  281. package/build/src/abap/2_statements/statements/wait.js +1 -1
  282. package/build/src/abap/2_statements/statements/when_type.js +1 -1
  283. package/build/src/abap/2_statements/statements/window.js +1 -1
  284. package/build/src/abap/2_statements/statements/with.js +1 -1
  285. package/build/src/abap/2_statements/statements/write.js +1 -1
  286. package/build/src/abap/5_syntax/_builtin.js +50 -50
  287. package/build/src/abap/5_syntax/_current_scope.js +10 -0
  288. package/build/src/abap/5_syntax/expressions/field_chain.js +3 -2
  289. package/build/src/abap/5_syntax/expressions/method_source.js +1 -1
  290. package/build/src/abap/5_syntax/expressions/select.js +17 -3
  291. package/build/src/abap/5_syntax/statements/call_function.js +1 -1
  292. package/build/src/abap/5_syntax/statements/loop.js +1 -1
  293. package/build/src/abap/5_syntax/statements/move_corresponding.js +3 -3
  294. package/build/src/abap/abap_parser.js +21 -5
  295. package/build/src/abap/nodes/expression_node.js +3 -0
  296. package/build/src/cds/expressions/cds_define_projection.js +1 -1
  297. package/build/src/cds/expressions/cds_define_view.js +1 -1
  298. package/build/src/config.js +22 -1
  299. package/build/src/index.js +6 -2
  300. package/build/src/objects/_abap_object.js +3 -2
  301. package/build/src/objects/_abstract_object.js +1 -1
  302. package/build/src/objects/proxy_object.js +1 -1
  303. package/build/src/objects/table.js +1 -1
  304. package/build/src/registry.js +3 -3
  305. package/build/src/rules/ambiguous_statement.js +1 -1
  306. package/build/src/rules/avoid_use.js +2 -2
  307. package/build/src/rules/call_transaction_authority_check.js +3 -3
  308. package/build/src/rules/cds_legacy_view.js +2 -2
  309. package/build/src/rules/cloud_types.js +1 -1
  310. package/build/src/rules/downport.js +11 -11
  311. package/build/src/rules/function_module_recommendations.js +23 -2
  312. package/build/src/rules/inline_data_old_versions.js +3 -3
  313. package/build/src/rules/local_testclass_consistency.js +1 -1
  314. package/build/src/rules/main_file_contents.js +1 -1
  315. package/build/src/rules/no_inline_in_optional_branches.js +4 -4
  316. package/build/src/rules/obsolete_statement.js +6 -6
  317. package/build/src/rules/parser_702_chaining.js +2 -2
  318. package/build/src/rules/parser_error.js +2 -2
  319. package/build/src/rules/prefer_corresponding.js +1 -1
  320. package/build/src/rules/prefer_inline.js +2 -1
  321. package/build/src/rules/prefer_raise_exception_new.js +1 -1
  322. package/build/src/rules/prefer_xsdbool.js +2 -1
  323. package/build/src/rules/sql_escape_host_variables.js +3 -3
  324. package/build/src/rules/strict_sql.js +2 -2
  325. package/build/src/rules/superfluous_value.js +2 -2
  326. package/build/src/rules/use_bool_expression.js +6 -5
  327. package/build/src/rules/use_line_exists.js +4 -3
  328. package/build/src/rules/use_new.js +2 -1
  329. package/build/src/version.js +210 -2
  330. package/package.json +1 -1
  331. package/build/src/abap/2_statements/expressions/association_name.js +0 -11
  332. package/build/src/abap/2_statements/expressions/sql_path.js +0 -17
@@ -277,9 +277,23 @@ class Select {
277
277
  }
278
278
  }
279
279
  }
280
+ static countResultType(scope) {
281
+ if ((0, version_1.releaseAtLeast)(scope.getRelease(), version_1.Release.v750)
282
+ || scope.getOpenABAP()
283
+ || scope.getLanguageVersion() === version_1.LanguageVersion.Cloud) {
284
+ return new basic_1.Integer8Type();
285
+ }
286
+ else {
287
+ return basic_1.IntegerType.get();
288
+ }
289
+ }
280
290
  static buildStructureType(fields, dbSources, scope) {
281
291
  var _a, _b, _c, _d, _e, _f;
282
292
  if (fields.length === 1 && dbSources.length === 1) {
293
+ // COUNT( * ) yields an integer regardless of the (possibly dynamic) table
294
+ if (/^count\(\s*\*\s*\)$/i.test(fields[0].code)) {
295
+ return this.countResultType(scope);
296
+ }
283
297
  const dbType = (_a = dbSources[0]) === null || _a === void 0 ? void 0 : _a.parseType(scope.getRegistry());
284
298
  if (dbType === undefined) {
285
299
  const name = ((_b = dbSources[0]) === null || _b === void 0 ? void 0 : _b.getName()) || "buildStructureTypeError";
@@ -300,9 +314,9 @@ class Select {
300
314
  return field;
301
315
  }
302
316
  else if (fields[0].code === "COUNT(*)") {
303
- if (scope.getVersion() >= version_1.Version.v750
304
- || scope.getVersion() === version_1.Version.OpenABAP
305
- || scope.getVersion() === version_1.Version.Cloud) {
317
+ if ((0, version_1.releaseAtLeast)(scope.getRelease(), version_1.Release.v750)
318
+ || scope.getOpenABAP()
319
+ || scope.getLanguageVersion() === version_1.LanguageVersion.Cloud) {
306
320
  return new basic_1.Integer8Type();
307
321
  }
308
322
  else {
@@ -49,7 +49,7 @@ class CallFunction {
49
49
  if (chain) {
50
50
  field_chain_1.FieldChain.runSyntax(chain, input, _reference_1.ReferenceType.DataReadReference);
51
51
  }
52
- else if (input.scope.getVersion() === version_1.Version.Cloud
52
+ else if (input.scope.getLanguageVersion() === version_1.LanguageVersion.Cloud
53
53
  && node.findDirectExpression(Expressions.Destination) === undefined) {
54
54
  const functionName = name === null || name === void 0 ? void 0 : name.concatTokens().replace(/'/g, "");
55
55
  if (input.scope.findFunctionModule(functionName) === undefined) {
@@ -131,7 +131,7 @@ class Loop {
131
131
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
132
132
  return;
133
133
  }
134
- if (input.scope.getRegistry().getConfig().getVersion() <= version_1.Version.v740sp02) {
134
+ if (!(0, version_1.releaseAtLeast)(input.scope.getRelease(), version_1.Release.v740sp02)) {
135
135
  const compares = cond.findAllExpressionsRecursive(Expressions.ComponentCompare).map(c => c.concatTokens().toUpperCase());
136
136
  for (const keyField of key.keyFields) {
137
137
  if (compares.find(c => c === keyField.toUpperCase() + " IS INITIAL") !== undefined) {
@@ -51,9 +51,9 @@ class MoveCorresponding {
51
51
  }
52
52
  const sourceType = source_1.Source.runSyntax(s, input);
53
53
  const targetType = target_1.Target.runSyntax(t, input);
54
- if (input.scope.getVersion() < version_1.Version.v740sp05
55
- && input.scope.getVersion() !== version_1.Version.Cloud
56
- && input.scope.getVersion() !== version_1.Version.OpenABAP) {
54
+ if (!(0, version_1.releaseAtLeast)(input.scope.getRelease(), version_1.Release.v740sp05)
55
+ && input.scope.getLanguageVersion() !== version_1.LanguageVersion.Cloud
56
+ && !input.scope.getOpenABAP()) {
57
57
  if (sourceType instanceof basic_1.TableType && sourceType.isWithHeader() === false) {
58
58
  const message = "MOVE-CORRESPONDING with tables possible from v740sp05";
59
59
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
@@ -9,10 +9,25 @@ const statement_parser_1 = require("./2_statements/statement_parser");
9
9
  const structure_parser_1 = require("./3_structures/structure_parser");
10
10
  const version_1 = require("../version");
11
11
  class ABAPParser {
12
- constructor(version, globalMacros, reg) {
13
- this.version = version ? version : version_1.defaultVersion;
14
- this.globalMacros = globalMacros ? globalMacros : [];
15
- this.reg = reg;
12
+ constructor(optionsOrRelease, globalMacros, reg) {
13
+ var _a, _b, _c, _d;
14
+ if (optionsOrRelease === undefined || ABAPParser.isRelease(optionsOrRelease)) {
15
+ this.release = optionsOrRelease !== null && optionsOrRelease !== void 0 ? optionsOrRelease : version_1.defaultRelease;
16
+ this.languageVersion = version_1.LanguageVersion.Normal;
17
+ this.openABAP = false;
18
+ this.globalMacros = globalMacros !== null && globalMacros !== void 0 ? globalMacros : [];
19
+ this.reg = reg;
20
+ }
21
+ else {
22
+ this.release = (_a = optionsOrRelease.release) !== null && _a !== void 0 ? _a : version_1.defaultRelease;
23
+ this.languageVersion = (_b = optionsOrRelease.languageVersion) !== null && _b !== void 0 ? _b : version_1.LanguageVersion.Normal;
24
+ this.openABAP = (_c = optionsOrRelease.openABAP) !== null && _c !== void 0 ? _c : false;
25
+ this.globalMacros = (_d = optionsOrRelease.globalMacros) !== null && _d !== void 0 ? _d : [];
26
+ this.reg = optionsOrRelease.reg;
27
+ }
28
+ }
29
+ static isRelease(o) {
30
+ return typeof o.ordinal === "number";
16
31
  }
17
32
  // files is input for a single object
18
33
  parse(files) {
@@ -25,7 +40,8 @@ class ABAPParser {
25
40
  const lexingRuntime = Date.now() - b1;
26
41
  // 2: statements
27
42
  const b2 = Date.now();
28
- const statementResult = new statement_parser_1.StatementParser(this.version, this.reg).run(lexerResult, this.globalMacros);
43
+ const statementResult = new statement_parser_1.StatementParser(this.release, this.reg, this.languageVersion, this.openABAP)
44
+ .run(lexerResult, this.globalMacros);
29
45
  const statementsRuntime = Date.now() - b2;
30
46
  // 3: structures
31
47
  const b3 = Date.now();
@@ -9,6 +9,9 @@ class ExpressionNode extends _abstract_node_1.AbstractNode {
9
9
  super();
10
10
  this.expression = expression;
11
11
  }
12
+ addChild(_n) {
13
+ throw new Error("ExpressionNode: addChild() must not be called, nodes are immutable after setChildren()");
14
+ }
12
15
  get() {
13
16
  return this.expression;
14
17
  }
@@ -6,7 +6,7 @@ const __1 = require("../..");
6
6
  const combi_1 = require("../../abap/2_statements/combi");
7
7
  class CDSDefineProjection extends combi_1.Expression {
8
8
  getRunnable() {
9
- return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), "DEFINE", (0, combi_1.opt)("ROOT"), (0, combi_1.opt)("TRANSIENT"), "VIEW", (0, combi_1.ver)(__1.Version.v755, (0, combi_1.opt)("ENTITY")), _1.CDSName, (0, combi_1.opt)(_1.CDSProviderContract), (0, combi_1.opt)(_1.CDSWithParameters), "AS PROJECTION ON", _1.CDSName, (0, combi_1.opt)(_1.CDSParametersSelect), (0, combi_1.opt)(_1.CDSAs), (0, combi_1.star)(_1.CDSAssociation), (0, combi_1.str)("{"), (0, combi_1.seq)(_1.CDSElement, (0, combi_1.star)((0, combi_1.seq)(",", _1.CDSElement)), (0, combi_1.opt)(",")), (0, combi_1.str)("}"), (0, combi_1.opt)(_1.CDSWhere), (0, combi_1.opt)(";"));
9
+ return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), "DEFINE", (0, combi_1.opt)("ROOT"), (0, combi_1.opt)("TRANSIENT"), "VIEW", (0, combi_1.ver)(__1.Release.v755, (0, combi_1.opt)("ENTITY")), _1.CDSName, (0, combi_1.opt)(_1.CDSProviderContract), (0, combi_1.opt)(_1.CDSWithParameters), "AS PROJECTION ON", _1.CDSName, (0, combi_1.opt)(_1.CDSParametersSelect), (0, combi_1.opt)(_1.CDSAs), (0, combi_1.star)(_1.CDSAssociation), (0, combi_1.str)("{"), (0, combi_1.seq)(_1.CDSElement, (0, combi_1.star)((0, combi_1.seq)(",", _1.CDSElement)), (0, combi_1.opt)(",")), (0, combi_1.str)("}"), (0, combi_1.opt)(_1.CDSWhere), (0, combi_1.opt)(";"));
10
10
  }
11
11
  }
12
12
  exports.CDSDefineProjection = CDSDefineProjection;
@@ -10,7 +10,7 @@ const cds_with_parameters_1 = require("./cds_with_parameters");
10
10
  class CDSDefineView extends combi_1.Expression {
11
11
  getRunnable() {
12
12
  const columnAlias = (0, combi_1.seq)("(", cds_name_1.CDSName, (0, combi_1.star)((0, combi_1.seq)(",", cds_name_1.CDSName)), ")");
13
- return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.opt)("DEFINE"), (0, combi_1.opt)("ROOT"), "VIEW", (0, combi_1.ver)(__1.Version.v755, (0, combi_1.opt)("ENTITY")), cds_name_1.CDSName, (0, combi_1.opt)(columnAlias), (0, combi_1.opt)(cds_with_parameters_1.CDSWithParameters), "AS", cds_select_1.CDSSelect, (0, combi_1.opt)(";"));
13
+ return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.opt)("DEFINE"), (0, combi_1.opt)("ROOT"), "VIEW", (0, combi_1.ver)(__1.Release.v755, (0, combi_1.opt)("ENTITY")), cds_name_1.CDSName, (0, combi_1.opt)(columnAlias), (0, combi_1.opt)(cds_with_parameters_1.CDSWithParameters), "AS", cds_select_1.CDSSelect, (0, combi_1.opt)(";"));
14
14
  }
15
15
  }
16
16
  exports.CDSDefineView = CDSDefineView;
@@ -39,7 +39,7 @@ const artifacts_rules_1 = require("./artifacts_rules");
39
39
  const JSON5 = __importStar(require("json5"));
40
40
  // assumption: this class is immutable
41
41
  class Config {
42
- static getDefault(ver) {
42
+ static getDefault(ver, langVer, openABAP) {
43
43
  const rules = {};
44
44
  const sorted = artifacts_rules_1.ArtifactsRules.getRules().sort((a, b) => {
45
45
  return a.getMetadata().key.localeCompare(b.getMetadata().key);
@@ -75,6 +75,8 @@ class Config {
75
75
  }],
76
76
  syntax: {
77
77
  version,
78
+ languageVersion: langVer,
79
+ openABAP,
78
80
  errorNamespace: "^(Z|Y|LCL\_|TY\_|LIF\_)",
79
81
  globalConstants: [],
80
82
  globalMacros: [],
@@ -155,12 +157,22 @@ class Config {
155
157
  getSyntaxSetttings() {
156
158
  return this.config.syntax;
157
159
  }
160
+ getRelease() {
161
+ return (0, version_1.versionToABAPRelease)(this.getVersion());
162
+ }
163
+ getOpenABAP() {
164
+ return this.config.syntax.openABAP === true;
165
+ }
158
166
  getVersion() {
159
167
  if (this.config.global === undefined || this.config.syntax.version === undefined) {
160
168
  return version_1.defaultVersion;
161
169
  }
162
170
  return this.config.syntax.version;
163
171
  }
172
+ getLanguageVersion() {
173
+ var _a;
174
+ return (_a = this.config.syntax.languageVersion) !== null && _a !== void 0 ? _a : version_1.LanguageVersion.Normal;
175
+ }
164
176
  checkVersion() {
165
177
  if (this.config.syntax.version === undefined) {
166
178
  return; // handled in getVersion
@@ -175,6 +187,15 @@ class Config {
175
187
  }
176
188
  if (match === false) {
177
189
  this.config.syntax.version = version_1.defaultVersion;
190
+ return;
191
+ }
192
+ if (this.config.syntax.version === version_1.Version.Cloud) {
193
+ this.config.syntax.version = version_1.Version.Newest;
194
+ this.config.syntax.languageVersion = version_1.LanguageVersion.Cloud;
195
+ }
196
+ else if (this.config.syntax.version === version_1.Version.OpenABAP) {
197
+ this.config.syntax.version = version_1.Version.v702;
198
+ this.config.syntax.openABAP = true;
178
199
  }
179
200
  }
180
201
  }
@@ -33,14 +33,18 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.Position = exports.CurrentScope = exports.RulesRunner = exports.SpaghettiScope = exports.SyntaxLogic = exports.ABAPObject = exports.Tokens = exports.ExpressionsCDS = exports.CDSParser = exports.LanguageServerTypes = exports.DDLParser = exports.AbstractFile = exports.ABAPFile = exports.MemoryFile = exports.Edits = exports.ReferenceType = exports.NativeSQL = exports.MacroContent = exports.MacroCall = exports.SpaghettiScopeNode = exports.Token = exports.ScopeType = exports.BasicTypes = exports.TypedIdentifier = exports.AbstractType = exports.VirtualPosition = exports.Comment = exports.Unknown = exports.Empty = exports.Identifier = exports.Nodes = exports.Types = exports.Expressions = exports.Statements = exports.Structures = exports.SkipLogic = exports.Objects = exports.ArtifactsRules = exports.ArtifactsObjects = exports.ArtifactsABAP = exports.BuiltIn = exports.FormLengthStats = exports.FunctionLengthStats = exports.MethodLengthStats = exports.LanguageServer = exports.Registry = exports.CyclomaticComplexityStats = exports.Version = exports.Config = exports.Issue = void 0;
37
- exports.LSPEdit = exports.RuleTag = exports.Severity = exports.Visibility = exports.Info = exports.Diagnostics = exports.Rename = exports.PrettyPrinter = void 0;
36
+ exports.SyntaxLogic = exports.ABAPObject = exports.Tokens = exports.ExpressionsCDS = exports.CDSParser = exports.LanguageServerTypes = exports.DDLParser = exports.AbstractFile = exports.ABAPFile = exports.MemoryFile = exports.Edits = exports.ReferenceType = exports.NativeSQL = exports.MacroContent = exports.MacroCall = exports.SpaghettiScopeNode = exports.Token = exports.ScopeType = exports.BasicTypes = exports.TypedIdentifier = exports.AbstractType = exports.VirtualPosition = exports.Comment = exports.Unknown = exports.Empty = exports.Identifier = exports.Nodes = exports.Types = exports.Expressions = exports.Statements = exports.Structures = exports.SkipLogic = exports.Objects = exports.ArtifactsRules = exports.ArtifactsObjects = exports.ArtifactsABAP = exports.BuiltIn = exports.FormLengthStats = exports.FunctionLengthStats = exports.MethodLengthStats = exports.LanguageServer = exports.Registry = exports.CyclomaticComplexityStats = exports.versionToABAPRelease = exports.releaseAtLeast = exports.Release = exports.LanguageVersion = exports.Version = exports.Config = exports.Issue = void 0;
37
+ exports.LSPEdit = exports.RuleTag = exports.Severity = exports.Visibility = exports.Info = exports.Diagnostics = exports.Rename = exports.PrettyPrinter = exports.Position = exports.CurrentScope = exports.RulesRunner = exports.SpaghettiScope = void 0;
38
38
  const issue_1 = require("./issue");
39
39
  Object.defineProperty(exports, "Issue", { enumerable: true, get: function () { return issue_1.Issue; } });
40
40
  const config_1 = require("./config");
41
41
  Object.defineProperty(exports, "Config", { enumerable: true, get: function () { return config_1.Config; } });
42
42
  const version_1 = require("./version");
43
43
  Object.defineProperty(exports, "Version", { enumerable: true, get: function () { return version_1.Version; } });
44
+ Object.defineProperty(exports, "LanguageVersion", { enumerable: true, get: function () { return version_1.LanguageVersion; } });
45
+ Object.defineProperty(exports, "Release", { enumerable: true, get: function () { return version_1.Release; } });
46
+ Object.defineProperty(exports, "releaseAtLeast", { enumerable: true, get: function () { return version_1.releaseAtLeast; } });
47
+ Object.defineProperty(exports, "versionToABAPRelease", { enumerable: true, get: function () { return version_1.versionToABAPRelease; } });
44
48
  const registry_1 = require("./registry");
45
49
  Object.defineProperty(exports, "Registry", { enumerable: true, get: function () { return registry_1.Registry; } });
46
50
  const method_length_stats_1 = require("./utils/method_length_stats");
@@ -4,6 +4,7 @@ exports.ABAPObject = void 0;
4
4
  const _abstract_object_1 = require("./_abstract_object");
5
5
  const xml_utils_1 = require("../xml_utils");
6
6
  const abap_parser_1 = require("../abap/abap_parser");
7
+ const version_1 = require("../version");
7
8
  class ABAPObject extends _abstract_object_1.AbstractObject {
8
9
  [Symbol.for("debug.description")]() {
9
10
  return `${this.constructor.name} ${this.getName()}`;
@@ -17,12 +18,12 @@ class ABAPObject extends _abstract_object_1.AbstractObject {
17
18
  static is(x) {
18
19
  return !!x && x instanceof ABAPObject;
19
20
  }
20
- parse(version, globalMacros, reg) {
21
+ parse(release, globalMacros, reg, languageVersion = version_1.LanguageVersion.Normal, openABAP = false) {
21
22
  if (this.isDirty() === false) {
22
23
  return { updated: false, runtime: 0 };
23
24
  }
24
25
  const abapFiles = this.getFiles().filter(f => f.getFilename().endsWith(".abap"));
25
- const result = new abap_parser_1.ABAPParser(version, globalMacros, reg).parse(abapFiles);
26
+ const result = new abap_parser_1.ABAPParser({ release, globalMacros, reg, languageVersion, openABAP }).parse(abapFiles);
26
27
  this.parsed = result.output;
27
28
  this.old = result.issues;
28
29
  this.dirty = false;
@@ -15,7 +15,7 @@ class AbstractObject {
15
15
  getParsingIssues() {
16
16
  return this.old;
17
17
  }
18
- parse(_version, _globalMacros, _reg) {
18
+ parse(_release, _globalMacros, _reg, _languageVersion, _openABAP) {
19
19
  return { updated: false, runtime: 0 };
20
20
  }
21
21
  getName() {
@@ -25,7 +25,7 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
25
25
  this.parsedXML = undefined;
26
26
  super.setDirty();
27
27
  }
28
- parse(_version, _globalMacros, reg) {
28
+ parse(_release, _globalMacros, reg) {
29
29
  if (this.parsedXML) {
30
30
  return { updated: false, runtime: 0 };
31
31
  }
@@ -128,7 +128,7 @@ class Table extends _abstract_object_1.AbstractObject {
128
128
  return new Types.UnknownType("Table, parser error");
129
129
  }
130
130
  }
131
- if (reg.getConfig().getVersion() === version_1.Version.Cloud
131
+ if (reg.getConfig().getLanguageVersion() === version_1.LanguageVersion.Cloud
132
132
  && this.parsedData.dataClass === "USER3") {
133
133
  return new Types.UnknownType("Data class = USER3 not allowed in cloud");
134
134
  }
@@ -74,7 +74,7 @@ class Registry {
74
74
  }
75
75
  static abaplintVersion() {
76
76
  // magic, see build script "version.js"
77
- return "2.119.42";
77
+ return "2.119.44";
78
78
  }
79
79
  getDDICReferences() {
80
80
  return this.ddicReferences;
@@ -309,7 +309,7 @@ class Registry {
309
309
  ParsingPerformance.clear();
310
310
  (_a = input === null || input === void 0 ? void 0 : input.progress) === null || _a === void 0 ? void 0 : _a.set(this.getObjectCount().total, "Lexing and parsing");
311
311
  for (const o of this.getObjects()) {
312
- await ((_b = input === null || input === void 0 ? void 0 : input.progress) === null || _b === void 0 ? void 0 : _b.tick("Lexing and parsing(" + this.conf.getVersion() + ") - " + o.getType() + " " + o.getName()));
312
+ await ((_b = input === null || input === void 0 ? void 0 : input.progress) === null || _b === void 0 ? void 0 : _b.tick("Lexing and parsing(" + this.conf.getRelease().name + ") - " + o.getType() + " " + o.getName()));
313
313
  this.parsePrivate(o);
314
314
  }
315
315
  if ((input === null || input === void 0 ? void 0 : input.outputPerformance) === true) {
@@ -322,7 +322,7 @@ class Registry {
322
322
  // todo, refactor, this is a mess, see where-used, a lot of the code should be in this method instead
323
323
  parsePrivate(input) {
324
324
  const config = this.getConfig();
325
- const result = input.parse(config.getVersion(), config.getSyntaxSetttings().globalMacros, this);
325
+ const result = input.parse(config.getRelease(), config.getSyntaxSetttings().globalMacros, this, config.getLanguageVersion(), config.getOpenABAP());
326
326
  ParsingPerformance.push(input, result);
327
327
  }
328
328
  isDirty() {
@@ -77,7 +77,7 @@ MODIFY TABLE foo FROM bar.`,
77
77
  }
78
78
  runParsed(file) {
79
79
  const issues = [];
80
- if (this.reg.getConfig().getVersion() < version_1.Version.v740sp05) {
80
+ if (!(0, version_1.releaseAtLeast)(this.reg.getConfig().getRelease(), version_1.Release.v740sp05)) {
81
81
  return [];
82
82
  }
83
83
  for (const statement of file.getStatements()) {
@@ -151,8 +151,8 @@ BREAK points`,
151
151
  issues.push(issue_1.Issue.atStatement(file, statementNode, this.getDescription(message), this.getMetadata().key, this.conf.severity, fix));
152
152
  }
153
153
  if (this.conf.defaultKey
154
- && (this.reg.getConfig().getVersion() >= version_1.Version.v740sp02
155
- || this.reg.getConfig().getVersion() === version_1.Version.Cloud)
154
+ && ((0, version_1.releaseAtLeast)(this.reg.getConfig().getRelease(), version_1.Release.v740sp02)
155
+ || this.reg.getConfig().getLanguageVersion() === version_1.LanguageVersion.Cloud)
156
156
  && (statement instanceof Statements.Data || statement instanceof Statements.Type)) {
157
157
  const tt = (_a = statementNode.findFirstExpression(expressions_1.TypeTable)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(expressions_1.TypeTableKey);
158
158
  const token = tt === null || tt === void 0 ? void 0 : tt.findDirectTokenByText("DEFAULT");
@@ -47,7 +47,7 @@ class CallTransactionAuthorityCheck extends _abap_rule_1.ABAPRule {
47
47
  constructor() {
48
48
  super(...arguments);
49
49
  this.conf = new CallTransactionAuthorityCheckConf();
50
- this.MINIMUM_VERSION = version_1.Version.v740sp02;
50
+ this.MINIMUM_VERSION = version_1.Release.v740sp02;
51
51
  }
52
52
  getMetadata() {
53
53
  return {
@@ -73,9 +73,9 @@ ENDTRY.`,
73
73
  this.conf = conf;
74
74
  }
75
75
  runParsed(file, obj) {
76
- const currentVersion = this.reg.getConfig().getVersion();
77
76
  // Cloud version does not support CALL TRANSACTION
78
- if (currentVersion < this.MINIMUM_VERSION || currentVersion === version_1.Version.Cloud) {
77
+ if (!(0, version_1.releaseAtLeast)(this.reg.getConfig().getRelease(), this.MINIMUM_VERSION)
78
+ || this.reg.getConfig().getLanguageVersion() === version_1.LanguageVersion.Cloud) {
79
79
  return [];
80
80
  }
81
81
  const issues = [];
@@ -39,8 +39,8 @@ v755 and up`,
39
39
  }
40
40
  run(o) {
41
41
  const issues = [];
42
- if (this.reg.getConfig().getVersion() < version_1.Version.v755
43
- && this.reg.getConfig().getVersion() !== version_1.Version.Cloud) {
42
+ if (!(0, version_1.releaseAtLeast)(this.reg.getConfig().getRelease(), version_1.Release.v755)
43
+ && this.reg.getConfig().getLanguageVersion() !== version_1.LanguageVersion.Cloud) {
44
44
  return [];
45
45
  }
46
46
  if (o.getType() !== "DDLS" || !(o instanceof objects_1.DataDefinition)) {
@@ -117,7 +117,7 @@ class CloudTypes {
117
117
  || obj instanceof Objects.Transformation;
118
118
  }
119
119
  run(obj) {
120
- if (this.reg.getConfig().getVersion() !== version_1.Version.Cloud || CloudTypes.isCloud(obj)) {
120
+ if (this.reg.getConfig().getLanguageVersion() !== version_1.LanguageVersion.Cloud || CloudTypes.isCloud(obj)) {
121
121
  return [];
122
122
  }
123
123
  const position = new position_1.Position(1, 1);
@@ -203,8 +203,8 @@ Make sure to test the downported code, it might not always be completely correct
203
203
  }
204
204
  initialize(reg) {
205
205
  this.lowReg = reg;
206
- const version = this.lowReg.getConfig().getVersion();
207
- if (version === version_1.Version.v702 || version === version_1.Version.OpenABAP) {
206
+ const config = this.lowReg.getConfig();
207
+ if (config.getRelease() === version_1.Release.v702 || config.getOpenABAP()) {
208
208
  this.initHighReg();
209
209
  }
210
210
  return this;
@@ -236,8 +236,8 @@ Make sure to test the downported code, it might not always be completely correct
236
236
  var _a;
237
237
  const ret = [];
238
238
  this.counter = 1;
239
- const version = this.lowReg.getConfig().getVersion();
240
- if (version !== version_1.Version.v702 && version !== version_1.Version.OpenABAP) {
239
+ const config = this.lowReg.getConfig();
240
+ if (config.getRelease() !== version_1.Release.v702 && !config.getOpenABAP()) {
241
241
  return ret;
242
242
  }
243
243
  else if (!(lowObj instanceof _abap_object_1.ABAPObject)) {
@@ -1091,7 +1091,7 @@ ${indentation}`);
1091
1091
  outlineCatchSimple(node, lowFile) {
1092
1092
  // outlines "CATCH cx_bcs INTO DATA(lx_bcs_excep).", note that this does not need to look at types
1093
1093
  var _a, _b;
1094
- if (this.lowReg.getConfig().getVersion() === version_1.Version.OpenABAP) {
1094
+ if (this.lowReg.getConfig().getOpenABAP()) {
1095
1095
  return undefined;
1096
1096
  }
1097
1097
  if (!(node.get() instanceof Statements.Catch)) {
@@ -1140,7 +1140,7 @@ ${indentation}CATCH ${className} INTO ${targetName}.`;
1140
1140
  if (!(node.get() instanceof Statements.Move)) {
1141
1141
  return undefined;
1142
1142
  }
1143
- if (this.lowReg.getConfig().getVersion() === version_1.Version.OpenABAP) {
1143
+ if (this.lowReg.getConfig().getOpenABAP()) {
1144
1144
  return undefined;
1145
1145
  }
1146
1146
  const target = node.findFirstExpression(Expressions.Target);
@@ -1196,7 +1196,7 @@ ${indentation}CATCH ${className} INTO ${targetName}.`;
1196
1196
  return issue_1.Issue.atToken(lowFile, node.getFirstToken(), "Outline DATA", this.getMetadata().key, this.conf.severity, fix);
1197
1197
  }
1198
1198
  partiallyImplemented(node, lowFile) {
1199
- if (this.lowReg.getConfig().getVersion() === version_1.Version.OpenABAP) {
1199
+ if (this.lowReg.getConfig().getOpenABAP()) {
1200
1200
  return undefined;
1201
1201
  }
1202
1202
  if (node.get() instanceof Statements.InterfaceDef) {
@@ -1872,7 +1872,7 @@ ${indentation} output = ${uniqueName}.\n`;
1872
1872
  if (!(node.get() instanceof Statements.Loop)) {
1873
1873
  return undefined;
1874
1874
  }
1875
- if (this.lowReg.getConfig().getVersion() === version_1.Version.OpenABAP) {
1875
+ if (this.lowReg.getConfig().getOpenABAP()) {
1876
1876
  return undefined;
1877
1877
  }
1878
1878
  const source = (_a = node.findDirectExpression(Expressions.LoopSource)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(Expressions.SimpleSource2);
@@ -2548,7 +2548,7 @@ ${indentation} output = ${uniqueName}.\n`;
2548
2548
  outlineData(node, lowFile, highSyntax) {
2549
2549
  // hmm, no guard here, as DATA(SDF) is valid in 702
2550
2550
  var _a, _b;
2551
- if (this.lowReg.getConfig().getVersion() === version_1.Version.OpenABAP) {
2551
+ if (this.lowReg.getConfig().getOpenABAP()) {
2552
2552
  return undefined;
2553
2553
  }
2554
2554
  for (const i of node.findAllExpressionsRecursive(Expressions.InlineData)) {
@@ -2767,7 +2767,7 @@ ${indentation} output = ${uniqueName}.\n`;
2767
2767
  return false;
2768
2768
  }
2769
2769
  replaceXsdBool(node, lowFile, highSyntax) {
2770
- if (this.lowReg.getConfig().getVersion() === version_1.Version.OpenABAP) {
2770
+ if (this.lowReg.getConfig().getOpenABAP()) {
2771
2771
  return undefined;
2772
2772
  }
2773
2773
  const spag = highSyntax.spaghetti.lookupPosition(node.getFirstToken().getStart(), lowFile.getFilename());
@@ -2896,7 +2896,7 @@ ${indentation} output = ${uniqueName}.\n`;
2896
2896
  }
2897
2897
  replaceLineFunctions(node, lowFile, highSyntax, highFile) {
2898
2898
  var _a, _b;
2899
- if (this.lowReg.getConfig().getVersion() === version_1.Version.OpenABAP) {
2899
+ if (this.lowReg.getConfig().getOpenABAP()) {
2900
2900
  return undefined;
2901
2901
  }
2902
2902
  const spag = highSyntax.spaghetti.lookupPosition(node.getFirstToken().getStart(), lowFile.getFilename());
@@ -3,9 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FunctionModuleRecommendations = exports.FunctionModuleRecommendationsConf = void 0;
4
4
  const expressions_1 = require("../abap/2_statements/expressions");
5
5
  const issue_1 = require("../issue");
6
+ const version_1 = require("../version");
6
7
  const _abap_rule_1 = require("./_abap_rule");
7
8
  const _basic_rule_config_1 = require("./_basic_rule_config");
8
9
  const _irule_1 = require("./_irule");
10
+ function resolveRelease(from) {
11
+ if (version_1.Release[from] !== undefined) {
12
+ return version_1.Release[from];
13
+ }
14
+ try {
15
+ return (0, version_1.versionToABAPRelease)(from);
16
+ }
17
+ catch (_a) {
18
+ return undefined;
19
+ }
20
+ }
9
21
  class FunctionModuleRecommendationsConf extends _basic_rule_config_1.BasicRuleConfig {
10
22
  constructor() {
11
23
  super(...arguments);
@@ -112,7 +124,7 @@ class FunctionModuleRecommendations extends _abap_rule_1.ABAPRule {
112
124
  if (!this.conf.recommendations) {
113
125
  return issues;
114
126
  }
115
- const configVersion = this.reg.getConfig().getVersion();
127
+ const configRelease = this.reg.getConfig().getRelease();
116
128
  for (const exNode of ((_a = file.getStructure()) === null || _a === void 0 ? void 0 : _a.findAllExpressions(expressions_1.FunctionName)) || []) {
117
129
  const token = exNode.getFirstToken();
118
130
  let funcName = token.getStr().toUpperCase();
@@ -122,7 +134,16 @@ class FunctionModuleRecommendations extends _abap_rule_1.ABAPRule {
122
134
  }
123
135
  // remove leading and trailing single quote
124
136
  funcName = funcName.slice(1, funcName.length - 1);
125
- const index = this.conf.recommendations.findIndex(i => i.name.toUpperCase() === funcName && (i.from === undefined || configVersion >= i.from));
137
+ const index = this.conf.recommendations.findIndex(i => {
138
+ if (i.name.toUpperCase() !== funcName) {
139
+ return false;
140
+ }
141
+ if (i.from === undefined) {
142
+ return true;
143
+ }
144
+ const rel = resolveRelease(i.from);
145
+ return rel !== undefined && (0, version_1.releaseAtLeast)(configRelease, rel);
146
+ });
126
147
  if (index >= 0) {
127
148
  issues.push(issue_1.Issue.atToken(file, token, this.getMessage(index), this.getMetadata().key, this.conf.severity));
128
149
  }
@@ -31,9 +31,9 @@ class InlineDataOldVersions extends _abap_rule_1.ABAPRule {
31
31
  }
32
32
  runParsed(file) {
33
33
  const issues = [];
34
- if (this.reg.getConfig().getVersion() >= version_1.Version.v740sp02
35
- || this.reg.getConfig().getVersion() === version_1.Version.OpenABAP
36
- || this.reg.getConfig().getVersion() === version_1.Version.Cloud) {
34
+ if ((0, version_1.releaseAtLeast)(this.reg.getConfig().getRelease(), version_1.Release.v740sp02)
35
+ || this.reg.getConfig().getOpenABAP()
36
+ || this.reg.getConfig().getLanguageVersion() === version_1.LanguageVersion.Cloud) {
37
37
  return [];
38
38
  }
39
39
  for (const statement of file.getStatements()) {
@@ -32,7 +32,7 @@ class LocalTestclassConsistency extends _abap_rule_1.ABAPRule {
32
32
  runParsed(file, obj) {
33
33
  var _a, _b, _c;
34
34
  const issues = [];
35
- if (this.reg.getConfig().getVersion() === version_1.Version.v700) {
35
+ if (this.reg.getConfig().getRelease() === version_1.Release.v700) {
36
36
  // 700 does not have testclass includes
37
37
  return [];
38
38
  }
@@ -79,7 +79,7 @@ class MainFileContents {
79
79
  }
80
80
  run(obj) {
81
81
  if (!(obj instanceof _abap_object_1.ABAPObject)
82
- || this.reg.getConfig().getVersion() === version_1.Version.Cloud) {
82
+ || this.reg.getConfig().getLanguageVersion() === version_1.LanguageVersion.Cloud) {
83
83
  return [];
84
84
  }
85
85
  const main = obj.getMainABAPFile();
@@ -77,10 +77,10 @@ Not considered optional branches:
77
77
  }
78
78
  runParsed(file) {
79
79
  const output = [];
80
- const version = this.reg.getConfig().getVersion();
81
- if (version === version_1.Version.v700
82
- || version === version_1.Version.v702
83
- || version === version_1.Version.OpenABAP) {
80
+ const release = this.reg.getConfig().getRelease();
81
+ if (release === version_1.Release.v700
82
+ || release === version_1.Release.v702
83
+ || this.reg.getConfig().getOpenABAP()) {
84
84
  return [];
85
85
  }
86
86
  const struc = file.getStructure();
@@ -192,15 +192,15 @@ ENDIF.`,
192
192
  const issues = [];
193
193
  const statements = file.getStatements();
194
194
  let prev = undefined;
195
- const configVersion = this.reg.getConfig().getVersion();
195
+ const configRelease = this.reg.getConfig().getRelease();
196
196
  for (const staNode of statements) {
197
197
  const sta = staNode.get();
198
198
  if ((sta instanceof Statements.Refresh && this.conf.refresh)
199
199
  || (sta instanceof Statements.Compute && this.conf.compute)
200
200
  || (sta instanceof Statements.Add && this.conf.add)
201
201
  || (sta instanceof Statements.Subtract && this.conf.subtract)
202
- || (sta instanceof Statements.ClassDefinitionLoad && this.conf.load && configVersion >= version_1.Version.v702)
203
- || (sta instanceof Statements.InterfaceLoad && this.conf.load && configVersion >= version_1.Version.v702)
202
+ || (sta instanceof Statements.ClassDefinitionLoad && this.conf.load && (0, version_1.releaseAtLeast)(configRelease, version_1.Release.v702))
203
+ || (sta instanceof Statements.InterfaceLoad && this.conf.load && (0, version_1.releaseAtLeast)(configRelease, version_1.Release.v702))
204
204
  || (sta instanceof Statements.Multiply && this.conf.multiply)
205
205
  || (sta instanceof Statements.Divide && this.conf.divide)
206
206
  || (sta instanceof Statements.Move && this.conf.move
@@ -315,7 +315,7 @@ ENDIF.`,
315
315
  issues.push(issue);
316
316
  }
317
317
  }
318
- if (this.conf.typePools && sta instanceof Statements.TypePools && configVersion >= version_1.Version.v702) {
318
+ if (this.conf.typePools && sta instanceof Statements.TypePools && (0, version_1.releaseAtLeast)(configRelease, version_1.Release.v702)) {
319
319
  const fix = edit_helper_1.EditHelper.deleteStatement(file, staNode);
320
320
  const issue = issue_1.Issue.atStatement(file, staNode, "Statement \"TYPE-POOLS\" is obsolete", this.getMetadata().key, this.conf.severity, fix);
321
321
  issues.push(issue);
@@ -373,7 +373,7 @@ ENDIF.`,
373
373
  const issue = issue_1.Issue.atStatement(file, staNode, "SORT extract", this.getMetadata().key, this.conf.severity);
374
374
  issues.push(issue);
375
375
  }
376
- if (configVersion >= version_1.Version.v754 && this.conf.clientSpecified
376
+ if ((0, version_1.releaseAtLeast)(configRelease, version_1.Release.v754) && this.conf.clientSpecified
377
377
  && (sta instanceof Statements.Select
378
378
  || sta instanceof Statements.SelectLoop
379
379
  || sta instanceof Statements.DeleteDatabase
@@ -386,7 +386,7 @@ ENDIF.`,
386
386
  issues.push(issue);
387
387
  }
388
388
  }
389
- if (configVersion >= version_1.Version.v756 && this.conf.regex) {
389
+ if ((0, version_1.releaseAtLeast)(configRelease, version_1.Release.v756) && this.conf.regex) {
390
390
  if (sta instanceof Statements.Find || sta instanceof Statements.Replace) {
391
391
  if ((_c = staNode.findFirstExpression(Expressions.FindType)) === null || _c === void 0 ? void 0 : _c.concatTokens().includes("REGEX")) {
392
392
  const issue = issue_1.Issue.atStatement(file, staNode, "REGEX obsolete, use PCRE", this.getMetadata().key, this.conf.severity);
@@ -67,8 +67,8 @@ Only active on target version 702 and below.`,
67
67
  }
68
68
  runParsed(file) {
69
69
  const issues = [];
70
- if (this.reg.getConfig().getVersion() !== version_1.Version.v702
71
- && this.reg.getConfig().getVersion() !== version_1.Version.v700) {
70
+ if (this.reg.getConfig().getRelease() !== version_1.Release.v702
71
+ && this.reg.getConfig().getRelease() !== version_1.Release.v700) {
72
72
  return [];
73
73
  }
74
74
  const stru = file.getStructure();