@abaplint/core 2.119.43 → 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.
- package/build/abaplint.d.ts +152 -8
- package/build/src/abap/2_statements/combi.js +100 -39
- package/build/src/abap/2_statements/expand_macros.js +6 -4
- package/build/src/abap/2_statements/expressions/_dynamic_access.js +2 -2
- package/build/src/abap/2_statements/expressions/_select_core.js +5 -5
- package/build/src/abap/2_statements/expressions/assign_source.js +1 -1
- package/build/src/abap/2_statements/expressions/cast.js +1 -1
- package/build/src/abap/2_statements/expressions/compare.js +2 -2
- package/build/src/abap/2_statements/expressions/component_compare.js +1 -1
- package/build/src/abap/2_statements/expressions/component_compare_simple.js +1 -1
- package/build/src/abap/2_statements/expressions/cond.js +1 -1
- package/build/src/abap/2_statements/expressions/corresponding_body.js +1 -1
- package/build/src/abap/2_statements/expressions/data_definition.js +1 -1
- package/build/src/abap/2_statements/expressions/find_type.js +1 -1
- package/build/src/abap/2_statements/expressions/for.js +2 -2
- package/build/src/abap/2_statements/expressions/function_exporting_parameter.js +1 -1
- package/build/src/abap/2_statements/expressions/index.js +9 -0
- package/build/src/abap/2_statements/expressions/inlinedata.js +1 -1
- package/build/src/abap/2_statements/expressions/inlinefs.js +1 -1
- package/build/src/abap/2_statements/expressions/loop_source.js +1 -1
- package/build/src/abap/2_statements/expressions/message_source_source.js +1 -1
- package/build/src/abap/2_statements/expressions/new_object.js +1 -1
- package/build/src/abap/2_statements/expressions/reduce_next.js +1 -1
- package/build/src/abap/2_statements/expressions/select.js +1 -1
- package/build/src/abap/2_statements/expressions/select_cte.js +5 -5
- package/build/src/abap/2_statements/expressions/source.js +11 -11
- package/build/src/abap/2_statements/expressions/sql_aggregation.js +9 -9
- package/build/src/abap/2_statements/expressions/sql_association_entry.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_associations_list.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_case.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_client.js +2 -2
- package/build/src/abap/2_statements/expressions/sql_compare.js +7 -6
- package/build/src/abap/2_statements/expressions/sql_cte_associations.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_cte_hierarchy.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_field.js +4 -4
- package/build/src/abap/2_statements/expressions/sql_field_list.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_field_list_loop.js +2 -2
- package/build/src/abap/2_statements/expressions/sql_field_list_loop_greedy.js +2 -2
- package/build/src/abap/2_statements/expressions/sql_from_source.js +2 -2
- package/build/src/abap/2_statements/expressions/sql_function.js +363 -31
- package/build/src/abap/2_statements/expressions/sql_function_input.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_group_by.js +2 -2
- package/build/src/abap/2_statements/expressions/sql_hierarchy_accessor.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_hierarchy_aggregate.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_hierarchy_source.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_in.js +2 -2
- package/build/src/abap/2_statements/expressions/sql_into_list.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_join.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_like_regexpr.js +19 -0
- package/build/src/abap/2_statements/expressions/sql_locate_regexpr.js +18 -0
- package/build/src/abap/2_statements/expressions/sql_occurrences_regexpr.js +15 -0
- package/build/src/abap/2_statements/expressions/sql_options.js +2 -2
- package/build/src/abap/2_statements/expressions/sql_over.js +2 -2
- package/build/src/abap/2_statements/expressions/sql_path_for_column.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_path_for_entity.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_path_segment.js +3 -3
- package/build/src/abap/2_statements/expressions/sql_privileged_access.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_regexpr_from.js +17 -0
- package/build/src/abap/2_statements/expressions/sql_regexpr_group.js +17 -0
- package/build/src/abap/2_statements/expressions/sql_regexpr_occurrence.js +17 -0
- package/build/src/abap/2_statements/expressions/sql_regexpr_pattern.js +18 -0
- package/build/src/abap/2_statements/expressions/sql_replace_regexpr.js +22 -0
- package/build/src/abap/2_statements/expressions/sql_set_op.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_set_op_group.js +2 -2
- package/build/src/abap/2_statements/expressions/sql_source.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_source_no_space.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_source_simple.js +1 -1
- package/build/src/abap/2_statements/expressions/sql_substring_regexpr.js +18 -0
- package/build/src/abap/2_statements/expressions/sql_target.js +2 -2
- package/build/src/abap/2_statements/expressions/string_template.js +1 -1
- package/build/src/abap/2_statements/expressions/string_template_formatting.js +2 -2
- package/build/src/abap/2_statements/expressions/table_expression.js +1 -1
- package/build/src/abap/2_statements/expressions/type.js +1 -1
- package/build/src/abap/2_statements/expressions/type_table.js +1 -1
- package/build/src/abap/2_statements/expressions/type_table_key.js +1 -1
- package/build/src/abap/2_statements/expressions/value_body.js +1 -1
- package/build/src/abap/2_statements/result.js +6 -0
- package/build/src/abap/2_statements/statement_parser.js +8 -5
- package/build/src/abap/2_statements/statements/add_corresponding.js +1 -1
- package/build/src/abap/2_statements/statements/append.js +1 -1
- package/build/src/abap/2_statements/statements/assign.js +1 -1
- package/build/src/abap/2_statements/statements/assign_local_copy.js +1 -1
- package/build/src/abap/2_statements/statements/at_line_selection.js +1 -1
- package/build/src/abap/2_statements/statements/at_pf.js +1 -1
- package/build/src/abap/2_statements/statements/at_selection_screen.js +1 -1
- package/build/src/abap/2_statements/statements/at_user_command.js +1 -1
- package/build/src/abap/2_statements/statements/back.js +1 -1
- package/build/src/abap/2_statements/statements/break.js +1 -1
- package/build/src/abap/2_statements/statements/break_id.js +1 -1
- package/build/src/abap/2_statements/statements/call_badi.js +1 -1
- package/build/src/abap/2_statements/statements/call_database.js +1 -1
- package/build/src/abap/2_statements/statements/call_dialog.js +1 -1
- package/build/src/abap/2_statements/statements/call_function.js +4 -4
- package/build/src/abap/2_statements/statements/call_kernel.js +1 -1
- package/build/src/abap/2_statements/statements/call_ole.js +1 -1
- package/build/src/abap/2_statements/statements/call_screen.js +1 -1
- package/build/src/abap/2_statements/statements/call_selection_screen.js +1 -1
- package/build/src/abap/2_statements/statements/call_subscreen.js +1 -1
- package/build/src/abap/2_statements/statements/call_transaction.js +1 -1
- package/build/src/abap/2_statements/statements/case_type.js +1 -1
- package/build/src/abap/2_statements/statements/catch_system_exceptions.js +1 -1
- package/build/src/abap/2_statements/statements/chain.js +1 -1
- package/build/src/abap/2_statements/statements/check_select_options.js +1 -1
- package/build/src/abap/2_statements/statements/class_definition.js +1 -1
- package/build/src/abap/2_statements/statements/close_cursor.js +1 -1
- package/build/src/abap/2_statements/statements/close_dataset.js +1 -1
- package/build/src/abap/2_statements/statements/commit_entities.js +1 -1
- package/build/src/abap/2_statements/statements/communication.js +1 -1
- package/build/src/abap/2_statements/statements/compute.js +1 -1
- package/build/src/abap/2_statements/statements/contexts.js +1 -1
- package/build/src/abap/2_statements/statements/controls.js +1 -1
- package/build/src/abap/2_statements/statements/convert.js +2 -2
- package/build/src/abap/2_statements/statements/create_data.js +1 -1
- package/build/src/abap/2_statements/statements/create_object.js +1 -1
- package/build/src/abap/2_statements/statements/create_ole.js +1 -1
- package/build/src/abap/2_statements/statements/define.js +1 -1
- package/build/src/abap/2_statements/statements/delete_cluster.js +1 -1
- package/build/src/abap/2_statements/statements/delete_dataset.js +1 -1
- package/build/src/abap/2_statements/statements/delete_dynpro.js +1 -1
- package/build/src/abap/2_statements/statements/delete_memory.js +1 -1
- package/build/src/abap/2_statements/statements/delete_report.js +1 -1
- package/build/src/abap/2_statements/statements/delete_textpool.js +1 -1
- package/build/src/abap/2_statements/statements/demand.js +1 -1
- package/build/src/abap/2_statements/statements/describe.js +1 -1
- package/build/src/abap/2_statements/statements/detail.js +1 -1
- package/build/src/abap/2_statements/statements/editor_call.js +1 -1
- package/build/src/abap/2_statements/statements/end_chain.js +1 -1
- package/build/src/abap/2_statements/statements/end_enhancement.js +1 -1
- package/build/src/abap/2_statements/statements/end_enhancement_section.js +1 -1
- package/build/src/abap/2_statements/statements/end_of_page.js +1 -1
- package/build/src/abap/2_statements/statements/end_of_selection.js +1 -1
- package/build/src/abap/2_statements/statements/end_test_seam.js +1 -1
- package/build/src/abap/2_statements/statements/endcatch.js +1 -1
- package/build/src/abap/2_statements/statements/enddefine.js +1 -1
- package/build/src/abap/2_statements/statements/endexec.js +1 -1
- package/build/src/abap/2_statements/statements/endmodule.js +1 -1
- package/build/src/abap/2_statements/statements/endon.js +1 -1
- package/build/src/abap/2_statements/statements/endprovide.js +1 -1
- package/build/src/abap/2_statements/statements/endwith.js +1 -1
- package/build/src/abap/2_statements/statements/enhancement.js +1 -1
- package/build/src/abap/2_statements/statements/enhancement_point.js +1 -1
- package/build/src/abap/2_statements/statements/enhancement_section.js +1 -1
- package/build/src/abap/2_statements/statements/exec_sql.js +1 -1
- package/build/src/abap/2_statements/statements/export_dynpro.js +1 -1
- package/build/src/abap/2_statements/statements/extract.js +1 -1
- package/build/src/abap/2_statements/statements/fetch_next_cursor.js +1 -1
- package/build/src/abap/2_statements/statements/field.js +1 -1
- package/build/src/abap/2_statements/statements/field_group.js +1 -1
- package/build/src/abap/2_statements/statements/fields.js +1 -1
- package/build/src/abap/2_statements/statements/format.js +1 -1
- package/build/src/abap/2_statements/statements/free_memory.js +1 -1
- package/build/src/abap/2_statements/statements/free_object.js +1 -1
- package/build/src/abap/2_statements/statements/generate_dynpro.js +1 -1
- package/build/src/abap/2_statements/statements/generate_report.js +1 -1
- package/build/src/abap/2_statements/statements/generate_subroutine.js +1 -1
- package/build/src/abap/2_statements/statements/get.js +1 -1
- package/build/src/abap/2_statements/statements/get_badi.js +1 -1
- package/build/src/abap/2_statements/statements/get_cursor.js +1 -1
- package/build/src/abap/2_statements/statements/get_dataset.js +1 -1
- package/build/src/abap/2_statements/statements/get_locale.js +1 -1
- package/build/src/abap/2_statements/statements/get_parameter.js +1 -1
- package/build/src/abap/2_statements/statements/get_permissions.js +1 -1
- package/build/src/abap/2_statements/statements/get_pf_status.js +1 -1
- package/build/src/abap/2_statements/statements/get_property.js +1 -1
- package/build/src/abap/2_statements/statements/get_run_time.js +1 -1
- package/build/src/abap/2_statements/statements/hide.js +1 -1
- package/build/src/abap/2_statements/statements/import_dynpro.js +1 -1
- package/build/src/abap/2_statements/statements/import_nametab.js +1 -1
- package/build/src/abap/2_statements/statements/infotypes.js +1 -1
- package/build/src/abap/2_statements/statements/initialization.js +1 -1
- package/build/src/abap/2_statements/statements/input.js +1 -1
- package/build/src/abap/2_statements/statements/insert_field_group.js +1 -1
- package/build/src/abap/2_statements/statements/insert_internal.js +1 -1
- package/build/src/abap/2_statements/statements/insert_report.js +2 -2
- package/build/src/abap/2_statements/statements/insert_textpool.js +1 -1
- package/build/src/abap/2_statements/statements/interface_def.js +1 -1
- package/build/src/abap/2_statements/statements/leave.js +1 -1
- package/build/src/abap/2_statements/statements/load_of_program.js +1 -1
- package/build/src/abap/2_statements/statements/load_report.js +1 -1
- package/build/src/abap/2_statements/statements/local.js +1 -1
- package/build/src/abap/2_statements/statements/log_point.js +1 -1
- package/build/src/abap/2_statements/statements/loop.js +3 -3
- package/build/src/abap/2_statements/statements/loop_at_screen.js +1 -1
- package/build/src/abap/2_statements/statements/message.js +1 -1
- package/build/src/abap/2_statements/statements/method_def.js +1 -1
- package/build/src/abap/2_statements/statements/modify_entities.js +1 -1
- package/build/src/abap/2_statements/statements/modify_line.js +1 -1
- package/build/src/abap/2_statements/statements/modify_screen.js +1 -1
- package/build/src/abap/2_statements/statements/module.js +1 -1
- package/build/src/abap/2_statements/statements/move.js +2 -2
- package/build/src/abap/2_statements/statements/move_corresponding.js +2 -2
- package/build/src/abap/2_statements/statements/new_line.js +1 -1
- package/build/src/abap/2_statements/statements/new_page.js +1 -1
- package/build/src/abap/2_statements/statements/nodes.js +1 -1
- package/build/src/abap/2_statements/statements/on_change.js +1 -1
- package/build/src/abap/2_statements/statements/open_cursor.js +2 -2
- package/build/src/abap/2_statements/statements/open_dataset.js +1 -1
- package/build/src/abap/2_statements/statements/pack.js +1 -1
- package/build/src/abap/2_statements/statements/parameter.js +1 -1
- package/build/src/abap/2_statements/statements/perform.js +2 -2
- package/build/src/abap/2_statements/statements/position.js +1 -1
- package/build/src/abap/2_statements/statements/print_control.js +1 -1
- package/build/src/abap/2_statements/statements/process_after_input.js +1 -1
- package/build/src/abap/2_statements/statements/process_before_output.js +1 -1
- package/build/src/abap/2_statements/statements/process_on_help_request.js +1 -1
- package/build/src/abap/2_statements/statements/process_on_value_request.js +1 -1
- package/build/src/abap/2_statements/statements/program.js +1 -1
- package/build/src/abap/2_statements/statements/provide.js +1 -1
- package/build/src/abap/2_statements/statements/put.js +1 -1
- package/build/src/abap/2_statements/statements/raise.js +2 -2
- package/build/src/abap/2_statements/statements/ranges.js +1 -1
- package/build/src/abap/2_statements/statements/read_dataset.js +1 -1
- package/build/src/abap/2_statements/statements/read_entities.js +1 -1
- package/build/src/abap/2_statements/statements/read_line.js +1 -1
- package/build/src/abap/2_statements/statements/read_report.js +1 -1
- package/build/src/abap/2_statements/statements/read_table.js +1 -1
- package/build/src/abap/2_statements/statements/read_textpool.js +1 -1
- package/build/src/abap/2_statements/statements/receive.js +1 -1
- package/build/src/abap/2_statements/statements/refresh.js +1 -1
- package/build/src/abap/2_statements/statements/refresh_control.js +1 -1
- package/build/src/abap/2_statements/statements/reject.js +1 -1
- package/build/src/abap/2_statements/statements/report.js +1 -1
- package/build/src/abap/2_statements/statements/reserve.js +1 -1
- package/build/src/abap/2_statements/statements/retry.js +1 -1
- package/build/src/abap/2_statements/statements/return.js +1 -1
- package/build/src/abap/2_statements/statements/rollback_entities.js +1 -1
- package/build/src/abap/2_statements/statements/scan.js +1 -1
- package/build/src/abap/2_statements/statements/scroll_list.js +1 -1
- package/build/src/abap/2_statements/statements/search.js +1 -1
- package/build/src/abap/2_statements/statements/selectionscreen.js +1 -1
- package/build/src/abap/2_statements/statements/selectoption.js +1 -1
- package/build/src/abap/2_statements/statements/set_blank.js +1 -1
- package/build/src/abap/2_statements/statements/set_country.js +1 -1
- package/build/src/abap/2_statements/statements/set_cursor.js +1 -1
- package/build/src/abap/2_statements/statements/set_dataset.js +1 -1
- package/build/src/abap/2_statements/statements/set_extended_check.js +1 -1
- package/build/src/abap/2_statements/statements/set_language.js +1 -1
- package/build/src/abap/2_statements/statements/set_left.js +1 -1
- package/build/src/abap/2_statements/statements/set_locale.js +1 -1
- package/build/src/abap/2_statements/statements/set_locks.js +1 -1
- package/build/src/abap/2_statements/statements/set_margin.js +1 -1
- package/build/src/abap/2_statements/statements/set_parameter.js +1 -1
- package/build/src/abap/2_statements/statements/set_pf_status.js +1 -1
- package/build/src/abap/2_statements/statements/set_property.js +1 -1
- package/build/src/abap/2_statements/statements/set_run_time.js +1 -1
- package/build/src/abap/2_statements/statements/set_screen.js +1 -1
- package/build/src/abap/2_statements/statements/set_titlebar.js +1 -1
- package/build/src/abap/2_statements/statements/set_update_task.js +1 -1
- package/build/src/abap/2_statements/statements/set_user_command.js +1 -1
- package/build/src/abap/2_statements/statements/skip.js +1 -1
- package/build/src/abap/2_statements/statements/sort_dataset.js +1 -1
- package/build/src/abap/2_statements/statements/start_of_selection.js +1 -1
- package/build/src/abap/2_statements/statements/stop.js +1 -1
- package/build/src/abap/2_statements/statements/submit.js +1 -1
- package/build/src/abap/2_statements/statements/subtract_corresponding.js +1 -1
- package/build/src/abap/2_statements/statements/sum.js +1 -1
- package/build/src/abap/2_statements/statements/summary.js +1 -1
- package/build/src/abap/2_statements/statements/supply.js +1 -1
- package/build/src/abap/2_statements/statements/suppress_dialog.js +1 -1
- package/build/src/abap/2_statements/statements/syntax_check.js +1 -1
- package/build/src/abap/2_statements/statements/system_call.js +1 -1
- package/build/src/abap/2_statements/statements/tables.js +1 -1
- package/build/src/abap/2_statements/statements/test_seam.js +1 -1
- package/build/src/abap/2_statements/statements/top_of_page.js +1 -1
- package/build/src/abap/2_statements/statements/transfer.js +1 -1
- package/build/src/abap/2_statements/statements/truncate_dataset.js +1 -1
- package/build/src/abap/2_statements/statements/type.js +1 -1
- package/build/src/abap/2_statements/statements/type_begin.js +1 -1
- package/build/src/abap/2_statements/statements/type_enum.js +1 -1
- package/build/src/abap/2_statements/statements/type_enum_begin.js +1 -1
- package/build/src/abap/2_statements/statements/type_enum_end.js +1 -1
- package/build/src/abap/2_statements/statements/type_mesh.js +1 -1
- package/build/src/abap/2_statements/statements/type_mesh_begin.js +1 -1
- package/build/src/abap/2_statements/statements/type_mesh_end.js +1 -1
- package/build/src/abap/2_statements/statements/type_pool.js +1 -1
- package/build/src/abap/2_statements/statements/type_pools.js +1 -1
- package/build/src/abap/2_statements/statements/uline.js +1 -1
- package/build/src/abap/2_statements/statements/unpack.js +1 -1
- package/build/src/abap/2_statements/statements/update_database.js +1 -1
- package/build/src/abap/2_statements/statements/verification_message.js +1 -1
- package/build/src/abap/2_statements/statements/wait.js +1 -1
- package/build/src/abap/2_statements/statements/when_type.js +1 -1
- package/build/src/abap/2_statements/statements/window.js +1 -1
- package/build/src/abap/2_statements/statements/with.js +1 -1
- package/build/src/abap/2_statements/statements/write.js +1 -1
- package/build/src/abap/5_syntax/_builtin.js +50 -50
- package/build/src/abap/5_syntax/_current_scope.js +10 -0
- package/build/src/abap/5_syntax/expressions/field_chain.js +3 -3
- package/build/src/abap/5_syntax/expressions/method_source.js +1 -1
- package/build/src/abap/5_syntax/expressions/select.js +13 -3
- package/build/src/abap/5_syntax/statements/call_function.js +1 -1
- package/build/src/abap/5_syntax/statements/loop.js +1 -1
- package/build/src/abap/5_syntax/statements/move_corresponding.js +3 -3
- package/build/src/abap/abap_parser.js +21 -5
- package/build/src/abap/nodes/expression_node.js +3 -0
- package/build/src/cds/expressions/cds_define_projection.js +1 -1
- package/build/src/cds/expressions/cds_define_view.js +1 -1
- package/build/src/config.js +22 -1
- package/build/src/index.js +6 -2
- package/build/src/objects/_abap_object.js +3 -2
- package/build/src/objects/_abstract_object.js +1 -1
- package/build/src/objects/proxy_object.js +1 -1
- package/build/src/objects/table.js +1 -1
- package/build/src/registry.js +3 -3
- package/build/src/rules/ambiguous_statement.js +1 -1
- package/build/src/rules/avoid_use.js +2 -2
- package/build/src/rules/call_transaction_authority_check.js +3 -3
- package/build/src/rules/cds_legacy_view.js +2 -2
- package/build/src/rules/cloud_types.js +1 -1
- package/build/src/rules/downport.js +11 -11
- package/build/src/rules/function_module_recommendations.js +23 -2
- package/build/src/rules/inline_data_old_versions.js +3 -3
- package/build/src/rules/local_testclass_consistency.js +1 -1
- package/build/src/rules/main_file_contents.js +1 -1
- package/build/src/rules/no_inline_in_optional_branches.js +4 -4
- package/build/src/rules/obsolete_statement.js +6 -6
- package/build/src/rules/parser_702_chaining.js +2 -2
- package/build/src/rules/parser_error.js +2 -2
- package/build/src/rules/prefer_corresponding.js +1 -1
- package/build/src/rules/prefer_inline.js +2 -1
- package/build/src/rules/prefer_raise_exception_new.js +1 -1
- package/build/src/rules/prefer_xsdbool.js +2 -1
- package/build/src/rules/sql_escape_host_variables.js +3 -3
- package/build/src/rules/strict_sql.js +2 -2
- package/build/src/rules/superfluous_value.js +2 -2
- package/build/src/rules/use_bool_expression.js +6 -5
- package/build/src/rules/use_line_exists.js +4 -3
- package/build/src/rules/use_new.js +2 -1
- package/build/src/version.js +210 -2
- package/package.json +1 -1
- package/build/src/abap/2_statements/expressions/association_name.js +0 -11
- package/build/src/abap/2_statements/expressions/sql_path.js +0 -17
|
@@ -278,9 +278,9 @@ class Select {
|
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
280
|
static countResultType(scope) {
|
|
281
|
-
if (scope.
|
|
282
|
-
|| scope.
|
|
283
|
-
|| scope.
|
|
281
|
+
if ((0, version_1.releaseAtLeast)(scope.getRelease(), version_1.Release.v750)
|
|
282
|
+
|| scope.getOpenABAP()
|
|
283
|
+
|| scope.getLanguageVersion() === version_1.LanguageVersion.Cloud) {
|
|
284
284
|
return new basic_1.Integer8Type();
|
|
285
285
|
}
|
|
286
286
|
else {
|
|
@@ -313,6 +313,16 @@ class Select {
|
|
|
313
313
|
if (field) {
|
|
314
314
|
return field;
|
|
315
315
|
}
|
|
316
|
+
else if (fields[0].code === "COUNT(*)") {
|
|
317
|
+
if ((0, version_1.releaseAtLeast)(scope.getRelease(), version_1.Release.v750)
|
|
318
|
+
|| scope.getOpenABAP()
|
|
319
|
+
|| scope.getLanguageVersion() === version_1.LanguageVersion.Cloud) {
|
|
320
|
+
return new basic_1.Integer8Type();
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
return basic_1.IntegerType.get();
|
|
324
|
+
}
|
|
325
|
+
}
|
|
316
326
|
else {
|
|
317
327
|
// todo: aggregated/calculated values
|
|
318
328
|
return basic_1.VoidType.get("SELECT_todo11");
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
55
|
-
&& input.scope.
|
|
56
|
-
&& input.scope.
|
|
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(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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;
|
package/build/src/config.js
CHANGED
|
@@ -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
|
}
|
package/build/src/index.js
CHANGED
|
@@ -33,14 +33,18 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
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(
|
|
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(
|
|
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;
|
|
@@ -25,7 +25,7 @@ class ProxyObject extends _abstract_object_1.AbstractObject {
|
|
|
25
25
|
this.parsedXML = undefined;
|
|
26
26
|
super.setDirty();
|
|
27
27
|
}
|
|
28
|
-
parse(
|
|
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().
|
|
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
|
}
|
package/build/src/registry.js
CHANGED
|
@@ -74,7 +74,7 @@ class Registry {
|
|
|
74
74
|
}
|
|
75
75
|
static abaplintVersion() {
|
|
76
76
|
// magic, see build script "version.js"
|
|
77
|
-
return "2.119.
|
|
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.
|
|
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.
|
|
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().
|
|
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().
|
|
155
|
-
|| this.reg.getConfig().
|
|
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.
|
|
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 (
|
|
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().
|
|
43
|
-
&& this.reg.getConfig().
|
|
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().
|
|
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
|
|
207
|
-
if (
|
|
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
|
|
240
|
-
if (
|
|
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().
|
|
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().
|
|
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().
|
|
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().
|
|
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().
|
|
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().
|
|
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().
|
|
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
|
|
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 =>
|
|
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().
|
|
35
|
-
|| this.reg.getConfig().
|
|
36
|
-
|| this.reg.getConfig().
|
|
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().
|
|
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().
|
|
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
|
|
81
|
-
if (
|
|
82
|
-
||
|
|
83
|
-
||
|
|
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
|
|
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 &&
|
|
203
|
-
|| (sta instanceof Statements.InterfaceLoad && this.conf.load &&
|
|
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 &&
|
|
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 (
|
|
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 (
|
|
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().
|
|
71
|
-
&& this.reg.getConfig().
|
|
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();
|
|
@@ -51,12 +51,12 @@ See recognized syntax at https://syntax.abaplint.org`,
|
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
53
|
const tok = statement.getFirstToken();
|
|
54
|
-
const message = "Statement does not exist in ABAP" + this.reg.getConfig().
|
|
54
|
+
const message = "Statement does not exist in ABAP" + this.reg.getConfig().getRelease().name + "(or a parser error), \"" + tok.getStr() + "\"";
|
|
55
55
|
const issue = issue_1.Issue.atStatement(file, statement, message, this.getMetadata().key, this.conf.severity);
|
|
56
56
|
issues.push(issue);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
if (this.reg.getConfig().
|
|
59
|
+
if (this.reg.getConfig().getRelease() === version_1.Release.v700) {
|
|
60
60
|
for (const statement of file.getStatements()) {
|
|
61
61
|
if (statement.getPragmas().length > 0) {
|
|
62
62
|
const message = "Pragmas not allowed in v700";
|