From a8f41bbb12e7f096b8bcaecb0983e4a7c67c3f68 Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Mon, 5 Apr 2021 20:35:04 +0200 Subject: [PATCH 1/3] solves #338 --- src/checks/y_check_prefer_is_not.clas.abap | 16 ++++++- ..._check_prefer_is_not.clas.testclasses.abap | 42 ++++++++++++++++++- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/checks/y_check_prefer_is_not.clas.abap b/src/checks/y_check_prefer_is_not.clas.abap index ea4b6bf9..163a8fa8 100644 --- a/src/checks/y_check_prefer_is_not.clas.abap +++ b/src/checks/y_check_prefer_is_not.clas.abap @@ -5,6 +5,9 @@ CLASS y_check_prefer_is_not DEFINITION PUBLIC INHERITING FROM y_check_base CREAT PROTECTED SECTION. METHODS inspect_tokens REDEFINITION. + METHODS is_standard_function IMPORTING token TYPE stokesx + RETURNING VALUE(result) TYPE abap_bool. + ENDCLASS. @@ -33,7 +36,8 @@ CLASS y_check_prefer_is_not IMPLEMENTATION. WHERE str = 'IF' OR str = 'ELSEIF' OR str = 'AND' - OR str = 'OR'. + OR str = 'OR' + OR str = 'ASSERT'. DATA(position) = sy-tabix. @@ -46,7 +50,7 @@ CLASS y_check_prefer_is_not IMPLEMENTATION. ENDTRY. TRY. - IF ref_scan_manager->tokens[ position + 2 ]-str = 'LINE_EXISTS('. + IF is_standard_function( ref_scan_manager->tokens[ position + 2 ] ) = abap_true. CONTINUE. ENDIF. CATCH cx_sy_itab_line_not_found. @@ -67,4 +71,12 @@ CLASS y_check_prefer_is_not IMPLEMENTATION. ENDLOOP. ENDMETHOD. + + METHOD is_standard_function. + result = xsdbool( token-str CP 'CONTAINS*' + OR token-str CP 'LINE_EXISTS*' + OR token-str CP 'MATCHES*' ). + ENDMETHOD. + + ENDCLASS. diff --git a/src/checks/y_check_prefer_is_not.clas.testclasses.abap b/src/checks/y_check_prefer_is_not.clas.testclasses.abap index f9bdb0aa..c7f247ba 100644 --- a/src/checks/y_check_prefer_is_not.clas.testclasses.abap +++ b/src/checks/y_check_prefer_is_not.clas.testclasses.abap @@ -342,8 +342,46 @@ CLASS ltc_line_exists IMPLEMENTATION. ( ' START-OF-SELECTION. ' ) ( ' DATA itab TYPE TABLE OF tadir. ' ) - ( ' IF NOT line_exists( itab[ 0 ] ). ' ) - ( ' ENDIF. ' ) + ( ' ASSERT NOT line_exists( itab[ 0 ] ). ' ) + ). + ENDMETHOD. + +ENDCLASS. + + + +CLASS ltc_contains DEFINITION INHERITING FROM ltc_not_value FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. + PROTECTED SECTION. + METHODS get_code_without_issue REDEFINITION. +ENDCLASS. + +CLASS ltc_contains IMPLEMENTATION. + + METHOD get_code_without_issue. + result = VALUE #( + ( 'REPORT y_example. ' ) + + ( ' START-OF-SELECTION. ' ) + ( | ASSERT NOT contains( val = 'code pal for ABAP' sub = 'ABAP' ). | ) + ). + ENDMETHOD. + +ENDCLASS. + + +CLASS ltc_matches DEFINITION INHERITING FROM ltc_not_value FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. + PROTECTED SECTION. + METHODS get_code_without_issue REDEFINITION. +ENDCLASS. + +CLASS ltc_matches IMPLEMENTATION. + + METHOD get_code_without_issue. + result = VALUE #( + ( ' REPORT y_example. ' ) + + ( ' START-OF-SELECTION. ' ) + ( | ASSERT NOT matches( val = 'a123e' regex = '[[:alpha:]]*' ). | ) ). ENDMETHOD. From 47b0367d33228977e5c572a30e1b2d65848968b5 Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Mon, 5 Apr 2021 15:38:09 -0300 Subject: [PATCH 2/3] Update changelog.txt --- changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.txt b/changelog.txt index 0b020966..f73d2e36 100644 --- a/changelog.txt +++ b/changelog.txt @@ -14,6 +14,7 @@ Whenever you upgrade code pal for ABAP, it is highly recommended to execute the 2021-04-** v.1.14.0 ------------------ +* Standard functions in Prefer IS NOT to NOT IS (#338) * In the profile feature, you can add all the missing checks (#346) 2021-04-05 v.1.13.1 From f0f1212d0574eb60a7d321227e484d98cfe775d6 Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Tue, 6 Apr 2021 13:27:58 +0200 Subject: [PATCH 3/3] contains_any_not_of and contains_any_of --- ..._check_prefer_is_not.clas.testclasses.abap | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/checks/y_check_prefer_is_not.clas.testclasses.abap b/src/checks/y_check_prefer_is_not.clas.testclasses.abap index c7f247ba..4b1e42eb 100644 --- a/src/checks/y_check_prefer_is_not.clas.testclasses.abap +++ b/src/checks/y_check_prefer_is_not.clas.testclasses.abap @@ -386,3 +386,41 @@ CLASS ltc_matches IMPLEMENTATION. ENDMETHOD. ENDCLASS. + + +CLASS ltc_contains_any_not_of DEFINITION INHERITING FROM ltc_not_value FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. + PROTECTED SECTION. + METHODS get_code_without_issue REDEFINITION. +ENDCLASS. + +CLASS ltc_contains_any_not_of IMPLEMENTATION. + + METHOD get_code_without_issue. + result = VALUE #( + ( ' REPORT y_example. ' ) + + ( ' START-OF-SELECTION. ' ) + ( | ASSERT NOT contains_any_not_of( val = 'a123e' sub = '123' ). | ) + ). + ENDMETHOD. + +ENDCLASS. + + +CLASS ltc_contains_any_of DEFINITION INHERITING FROM ltc_not_value FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. + PROTECTED SECTION. + METHODS get_code_without_issue REDEFINITION. +ENDCLASS. + +CLASS ltc_contains_any_of IMPLEMENTATION. + + METHOD get_code_without_issue. + result = VALUE #( + ( ' REPORT y_example. ' ) + + ( ' START-OF-SELECTION. ' ) + ( | ASSERT NOT contains_any_of( val = 'a123e' sub = '123' ). | ) + ). + ENDMETHOD. + +ENDCLASS.