mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
Diff: Add options to ignore indent, comments, case (#5146)
* Diff: Add options to ignore indent, comments, case Continuing on #2804 Enjoy! * Skip new tests * Trigger actions * Trigger action * Trigger action Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
74cc4610c0
commit
095c35f49b
|
@ -45,14 +45,18 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
|
|||
METHODS zif_abapgit_gui_event_handler~on_event
|
||||
REDEFINITION.
|
||||
PROTECTED SECTION.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_actions,
|
||||
toggle_unified TYPE string VALUE 'toggle_unified',
|
||||
toggle_hidden_chars TYPE string VALUE 'toggle_hidden_chars',
|
||||
refresh_prefix TYPE string VALUE 'refresh',
|
||||
refresh_all TYPE string VALUE 'refresh_all',
|
||||
refresh_local TYPE string VALUE 'refresh_local',
|
||||
refresh_local_object TYPE string VALUE 'refresh_local_object',
|
||||
toggle_unified TYPE string VALUE 'toggle_unified',
|
||||
toggle_hidden_chars TYPE string VALUE 'toggle_hidden_chars',
|
||||
toggle_ignore_indent TYPE string VALUE 'toggle_ignore_indent',
|
||||
toggle_ignore_comments TYPE string VALUE 'toggle_ignore_comments',
|
||||
toggle_ignore_case TYPE string VALUE 'toggle_ignore_case',
|
||||
refresh_prefix TYPE string VALUE 'refresh',
|
||||
refresh_all TYPE string VALUE 'refresh_all',
|
||||
refresh_local TYPE string VALUE 'refresh_local',
|
||||
refresh_local_object TYPE string VALUE 'refresh_local_object',
|
||||
END OF c_actions ,
|
||||
BEGIN OF c_action_texts,
|
||||
refresh_all TYPE string VALUE `Refresh All`,
|
||||
|
@ -155,10 +159,17 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
|
|||
METHODS render_content
|
||||
REDEFINITION .
|
||||
PRIVATE SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_view,
|
||||
hidden_chars TYPE abap_bool,
|
||||
ignore_indent TYPE abap_bool,
|
||||
ignore_comments TYPE abap_bool,
|
||||
ignore_case TYPE abap_bool,
|
||||
END OF ty_view.
|
||||
DATA mt_delayed_lines TYPE zif_abapgit_definitions=>ty_diffs_tt .
|
||||
DATA mv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key .
|
||||
DATA mv_seed TYPE string . " Unique page id to bind JS sessionStorage
|
||||
DATA mv_hidden_chars TYPE abap_bool .
|
||||
DATA ms_view TYPE ty_view.
|
||||
|
||||
METHODS render_diff
|
||||
IMPORTING
|
||||
|
@ -221,6 +232,9 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
|
|||
METHODS add_filter_sub_menu
|
||||
IMPORTING
|
||||
!io_menu TYPE REF TO zcl_abapgit_html_toolbar .
|
||||
METHODS add_view_sub_menu
|
||||
IMPORTING
|
||||
!io_menu TYPE REF TO zcl_abapgit_html_toolbar .
|
||||
METHODS render_lines
|
||||
IMPORTING
|
||||
!is_diff TYPE ty_file_diff
|
||||
|
@ -372,9 +386,35 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
|
|||
io_menu->add( iv_txt = 'Split/Unified'
|
||||
iv_act = c_actions-toggle_unified ).
|
||||
|
||||
io_menu->add( iv_txt = '¶'
|
||||
iv_title = 'Toggle Hidden Characters'
|
||||
iv_act = c_actions-toggle_hidden_chars ).
|
||||
add_view_sub_menu( io_menu ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD add_view_sub_menu.
|
||||
|
||||
DATA lo_sub_view TYPE REF TO zcl_abapgit_html_toolbar.
|
||||
|
||||
CREATE OBJECT lo_sub_view EXPORTING iv_id = 'diff-view'.
|
||||
|
||||
lo_sub_view->add( iv_txt = 'Show Hidden Characters'
|
||||
iv_act = c_actions-toggle_hidden_chars
|
||||
iv_chk = ms_view-hidden_chars ).
|
||||
|
||||
lo_sub_view->add( iv_txt = 'Ignore Indentation'
|
||||
iv_act = c_actions-toggle_ignore_indent
|
||||
iv_chk = ms_view-ignore_indent ).
|
||||
|
||||
lo_sub_view->add( iv_txt = 'Ignore Comments'
|
||||
iv_act = c_actions-toggle_ignore_comments
|
||||
iv_chk = ms_view-ignore_comments ).
|
||||
|
||||
lo_sub_view->add( iv_txt = 'Ignore Pretty-Print Case'
|
||||
iv_act = c_actions-toggle_ignore_case
|
||||
iv_chk = ms_view-ignore_case ).
|
||||
|
||||
io_menu->add( iv_txt = 'View'
|
||||
io_sub = lo_sub_view ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -459,13 +499,19 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
|
|||
IF <ls_diff>-fstate = c_fstate-remote. " Remote file leading changes
|
||||
CREATE OBJECT <ls_diff>-o_diff
|
||||
EXPORTING
|
||||
iv_new = <ls_remote>-data
|
||||
iv_old = <ls_local>-file-data.
|
||||
iv_new = <ls_remote>-data
|
||||
iv_old = <ls_local>-file-data
|
||||
iv_ignore_indentation = ms_view-ignore_indent
|
||||
iv_ignore_comments = ms_view-ignore_comments
|
||||
iv_ignore_case = ms_view-ignore_case.
|
||||
ELSE. " Local leading changes or both were modified
|
||||
CREATE OBJECT <ls_diff>-o_diff
|
||||
EXPORTING
|
||||
iv_new = <ls_local>-file-data
|
||||
iv_old = <ls_remote>-data.
|
||||
iv_new = <ls_local>-file-data
|
||||
iv_old = <ls_remote>-data
|
||||
iv_ignore_indentation = ms_view-ignore_indent
|
||||
iv_ignore_comments = ms_view-ignore_comments
|
||||
iv_ignore_case = ms_view-ignore_case.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
|
@ -930,7 +976,7 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
|
|||
FIELD-SYMBOLS <ls_diff> LIKE LINE OF lt_diffs.
|
||||
|
||||
lo_highlighter = zcl_abapgit_syntax_factory=>create( iv_filename = is_diff-filename
|
||||
iv_hidden_chars = mv_hidden_chars ).
|
||||
iv_hidden_chars = ms_view-hidden_chars ).
|
||||
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
||||
|
||||
lt_diffs = is_diff-o_diff->get( ).
|
||||
|
@ -1193,6 +1239,10 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
|
|||
|
||||
METHOD zif_abapgit_gui_event_handler~on_event.
|
||||
|
||||
DATA ls_view LIKE ms_view.
|
||||
|
||||
ls_view = ms_view.
|
||||
|
||||
CASE ii_event->mv_action.
|
||||
WHEN c_actions-toggle_unified. " Toggle file diplay
|
||||
|
||||
|
@ -1202,8 +1252,19 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
|
|||
|
||||
WHEN c_actions-toggle_hidden_chars. " Toggle display of hidden characters
|
||||
|
||||
mv_hidden_chars = boolc( mv_hidden_chars = abap_false ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
ms_view-hidden_chars = boolc( ms_view-hidden_chars = abap_false ).
|
||||
|
||||
WHEN c_actions-toggle_ignore_indent. " Toggle ignore indentation
|
||||
|
||||
ms_view-ignore_indent = boolc( ms_view-ignore_indent = abap_false ).
|
||||
|
||||
WHEN c_actions-toggle_ignore_comments. " Toggle ignore comments
|
||||
|
||||
ms_view-ignore_comments = boolc( ms_view-ignore_comments = abap_false ).
|
||||
|
||||
WHEN c_actions-toggle_ignore_case. " Toggle case sensitivity
|
||||
|
||||
ms_view-ignore_case = boolc( ms_view-ignore_case = abap_false ).
|
||||
|
||||
WHEN OTHERS.
|
||||
|
||||
|
@ -1220,6 +1281,13 @@ CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
|
|||
|
||||
ENDCASE.
|
||||
|
||||
" If view has changed, refresh local files recalculating diff, and update menu
|
||||
IF ms_view <> ls_view.
|
||||
refresh( c_actions-refresh_local ).
|
||||
ms_control-page_menu = build_menu( ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_DIFF IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_diff IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD calculate_stats.
|
||||
|
@ -115,6 +115,7 @@ CLASS ZCL_ABAPGIT_DIFF IMPLEMENTATION.
|
|||
<ls_new> LIKE LINE OF it_new,
|
||||
<ls_delta> LIKE LINE OF lt_delta.
|
||||
|
||||
" Note: Ignore case is for keywords, variables, types etc, but not for literals
|
||||
CALL FUNCTION 'RS_CMP_COMPUTE_DELTA'
|
||||
EXPORTING
|
||||
compare_mode = mv_compare_mode
|
||||
|
|
|
@ -18,6 +18,7 @@ CLASS ltcl_diff DEFINITION FOR TESTING
|
|||
iv_old TYPE zif_abapgit_definitions=>ty_diff-old.
|
||||
|
||||
METHODS: setup.
|
||||
|
||||
METHODS: test
|
||||
IMPORTING
|
||||
!iv_ignore_indentation TYPE abap_bool DEFAULT abap_false
|
||||
|
@ -33,7 +34,9 @@ CLASS ltcl_diff DEFINITION FOR TESTING
|
|||
diff06 FOR TESTING,
|
||||
diff07 FOR TESTING,
|
||||
diff08 FOR TESTING,
|
||||
diff09 FOR TESTING.
|
||||
diff09 FOR TESTING,
|
||||
diff10 FOR TESTING,
|
||||
diff11 FOR TESTING.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -350,4 +353,45 @@ CLASS ltcl_diff IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD diff10.
|
||||
|
||||
" ignore case should NOT ignore changed literals
|
||||
add_new( iv_new = `WRITE 'TEST'` ).
|
||||
|
||||
add_old( iv_old = `WRITE 'test'` ).
|
||||
|
||||
add_expected( iv_new_num = ' 1'
|
||||
iv_new = `WRITE 'TEST'`
|
||||
iv_result = 'U'
|
||||
iv_old_num = ' 1'
|
||||
iv_old = `WRITE 'test'` ).
|
||||
|
||||
test( iv_ignore_case = abap_true ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD diff11.
|
||||
|
||||
" ignore case should ignore changed keywords, variables, types
|
||||
add_new( iv_new = `write 'test'` ).
|
||||
add_new( iv_new = `DATA FOO TYPE I.` ).
|
||||
|
||||
add_old( iv_old = `WRITE 'test'` ).
|
||||
add_old( iv_old = `DATA foo TYPE i.` ).
|
||||
|
||||
add_expected( iv_new_num = ' 1'
|
||||
iv_new = `write 'test'`
|
||||
iv_result = '' " no diff!
|
||||
iv_old_num = ' 1'
|
||||
iv_old = `WRITE 'test'` ).
|
||||
add_expected( iv_new_num = ' 2'
|
||||
iv_new = `DATA FOO TYPE I.`
|
||||
iv_result = '' " no diff!
|
||||
iv_old_num = ' 2'
|
||||
iv_old = `DATA foo TYPE i.` ).
|
||||
|
||||
test( iv_ignore_case = abap_true ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -180,6 +180,8 @@
|
|||
{"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "diff07", "note": "Void type: RSWSOURCET"},
|
||||
{"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "diff08", "note": "Void type: RSWSOURCET"},
|
||||
{"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "diff09", "note": "Void type: RSWSOURCET"},
|
||||
{"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "diff10", "note": "Void type: RSWSOURCET"},
|
||||
{"object": "ZCL_ABAPGIT_DIFF", "class": "ltcl_diff", "method": "diff11", "note": "Void type: RSWSOURCET"},
|
||||
|
||||
{"object": "ZCL_ABAPGIT_GUI_UTILS", "class": "ltcl_gui_utils", "method": "is_renderable", "note": "casting, https://github.com/abaplint/transpiler/issues/465"},
|
||||
{"object": "ZCL_ABAPGIT_GUI_UTILS", "class": "ltcl_gui_utils", "method": "is_event_handler", "note": "casting, https://github.com/abaplint/transpiler/issues/465"},
|
||||
|
|
Loading…
Reference in New Issue
Block a user