From 995e77e94914a9c1cf52f9e36b03cece9ce08d7e Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Fri, 25 Mar 2022 06:58:33 +0100 Subject: [PATCH] Visualize difference for EOF (#5404) --- .../zcl_abapgit_syntax_highlighter.clas.abap | 2 ++ src/utils/zcl_abapgit_diff.clas.abap | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap b/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap index 2b9564f30..6361a83b0 100644 --- a/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap +++ b/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap @@ -285,6 +285,8 @@ CLASS zcl_abapgit_syntax_highlighter IMPLEMENTATION. REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN rv_line WITH ' → '. REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf(1) IN rv_line WITH '¶'. REPLACE ALL OCCURRENCES OF ` ` IN rv_line WITH '·'. + REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>form_feed IN rv_line + WITH ''. IF strlen( rv_line ) BETWEEN 1 AND 2. lv_bom = zcl_abapgit_convert=>string_to_xstring( rv_line ). diff --git a/src/utils/zcl_abapgit_diff.clas.abap b/src/utils/zcl_abapgit_diff.clas.abap index 5f3dade04..ad35b90ce 100644 --- a/src/utils/zcl_abapgit_diff.clas.abap +++ b/src/utils/zcl_abapgit_diff.clas.abap @@ -485,13 +485,35 @@ CLASS zcl_abapgit_diff IMPLEMENTATION. METHOD unpack. - DATA: lv_new TYPE string, - lv_old TYPE string. - + DATA: lv_new TYPE string, + lv_old TYPE string, + lv_new_last TYPE c LENGTH 1, + lv_old_last TYPE c LENGTH 1. lv_new = zcl_abapgit_convert=>xstring_to_string_utf8( iv_new ). lv_old = zcl_abapgit_convert=>xstring_to_string_utf8( iv_old ). + " Check if one value contains a final newline but the other not + " If yes, add a special characters that's visible in diff render + IF lv_new IS NOT INITIAL. + lv_new_last = substring( + val = lv_new + off = strlen( lv_new ) - 1 ). + ENDIF. + IF lv_old IS NOT INITIAL. + lv_old_last = substring( + val = lv_old + off = strlen( lv_old ) - 1 ). + ENDIF. + + IF lv_new_last = zif_abapgit_definitions=>c_newline AND lv_old_last <> zif_abapgit_definitions=>c_newline + AND lv_old IS NOT INITIAL. + lv_old = lv_old && cl_abap_char_utilities=>form_feed. + ELSEIF lv_new_last <> zif_abapgit_definitions=>c_newline AND lv_old_last = zif_abapgit_definitions=>c_newline + AND lv_new IS NOT INITIAL. + lv_new = lv_new && cl_abap_char_utilities=>form_feed. + ENDIF. + SPLIT lv_new AT zif_abapgit_definitions=>c_newline INTO TABLE et_new. SPLIT lv_old AT zif_abapgit_definitions=>c_newline INTO TABLE et_old.