ABAP Syntax Highligher: Re-Add New Keywords (#4047)

* add minimal unit test

* readd new keywords to abap syntax highlighter


- removed duplicates from keywords
- removed deprecated pseudo comment
- explicitly remove duplicates from keywords to avoid needless dumps

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
g-back 2020-10-19 15:20:17 +02:00 committed by GitHub
parent 7ffb4ff91d
commit 42f52990e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 59 additions and 26 deletions

View File

@ -4,21 +4,20 @@ CLASS zcl_abapgit_syntax_abap DEFINITION
CREATE PUBLIC . CREATE PUBLIC .
PUBLIC SECTION. PUBLIC SECTION.
CLASS-METHODS class_constructor. CLASS-METHODS class_constructor.
METHODS constructor. METHODS constructor.
CONSTANTS: CONSTANTS:
BEGIN OF c_css, BEGIN OF c_css,
keyword TYPE string VALUE 'keyword', "#EC NOTEXT keyword TYPE string VALUE 'keyword',
text TYPE string VALUE 'text', "#EC NOTEXT text TYPE string VALUE 'text',
comment TYPE string VALUE 'comment', "#EC NOTEXT comment TYPE string VALUE 'comment',
END OF c_css, END OF c_css,
BEGIN OF c_token, BEGIN OF c_token,
keyword TYPE c VALUE 'K', "#EC NOTEXT keyword TYPE c VALUE 'K',
text TYPE c VALUE 'T', "#EC NOTEXT text TYPE c VALUE 'T',
comment TYPE c VALUE 'C', "#EC NOTEXT comment TYPE c VALUE 'C',
END OF c_token, END OF c_token,
BEGIN OF c_regex, BEGIN OF c_regex,
@ -44,7 +43,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_SYNTAX_ABAP IMPLEMENTATION. CLASS zcl_abapgit_syntax_abap IMPLEMENTATION.
METHOD class_constructor. METHOD class_constructor.
@ -59,7 +58,6 @@ CLASS ZCL_ABAPGIT_SYNTAX_ABAP IMPLEMENTATION.
super->constructor( ). super->constructor( ).
" Initialize instances of regular expression " Initialize instances of regular expression
add_rule( iv_regex = c_regex-keyword add_rule( iv_regex = c_regex-keyword
iv_token = c_token-keyword iv_token = c_token-keyword
iv_style = c_css-keyword ). iv_style = c_css-keyword ).
@ -176,26 +174,27 @@ CLASS ZCL_ABAPGIT_SYNTAX_ABAP IMPLEMENTATION.
'|UNWIND|UP|UPDATE|UPPER|USER|USER-COMMAND|USING|UTF-8|VALID|VALUE|VALUE-REQUEST|VALUES' && '|UNWIND|UP|UPDATE|UPPER|USER|USER-COMMAND|USING|UTF-8|VALID|VALUE|VALUE-REQUEST|VALUES' &&
'|VARY|VARYING|VERIFICATION-MESSAGE|VERSION|VIA|VIEW|VISIBLE|WAIT|WARNING|WHEN|WHENEVER' && '|VARY|VARYING|VERIFICATION-MESSAGE|VERSION|VIA|VIEW|VISIBLE|WAIT|WARNING|WHEN|WHENEVER' &&
'|WHERE|WHILE|WIDTH|WINDOW|WINDOWS|WITH|WITH-HEADING|WITHOUT|WITH-TITLE|WORD|WORK' && '|WHERE|WHILE|WIDTH|WINDOW|WINDOWS|WITH|WITH-HEADING|WITHOUT|WITH-TITLE|WORD|WORK' &&
'|WRITE|WRITER|X|XML|XSD|XSTRLEN|YELLOW|YES|YYMMDD|Z|ZERO|ZONE'. '|WRITE|WRITER|X|XML|XSD|XSTRLEN|YELLOW|YES|YYMMDD|Z|ZERO|ZONE' &&
'|BINTOHEX|CHAR|CLNT|CONCAT_WITH_SPACE|CURR|DATS|DATS_ADD_DAYS|DATS_ADD_MONTHS' &&
'|DATS_DAYS_BETWEEN|DATS_IS_VALID|DEC|END-OF-EDITING|END-TEST-INJECTION|END-TEST-SEAM' &&
'|ENDWITH|ENUM|HEXTOBIN|INSTANCE|INSTR|LANG|LTRIM|NUMC|PUSH' &&
'|QUAN|RETURNS|RPAD|RTRIM|SSTRING|START-OF-EDITING|TEST-INJECTION|TEST-SEAM|TIMS' &&
'|TIMS_IS_VALID|TSTMP_ADD_SECONDS|TSTMP_CURRENT_UTCTIMESTAMP|TSTMP_IS_VALID' &&
'|TSTMP_SECONDS_BETWEEN|B|D|DECFLOAT16|DECFLOAT34|F|INT8|N|P|S|STRING|T|UTCLONG|XSTRING' &&
'|ABAP_BOOL|ACCP|CUKY|DF16_DEC|DF16_RAW|DF34_DEC|DF34_RAW|FLTP' &&
'|INT1|INT2|INT4|LCHR|LRAW|RAWSTRING|DF16_SCL|DF34_SCL' &&
'|PREC|VARC|CLIKE|CSEQUENCE|DECFLOAT|NUMERIC|XSEQUENCE|ME|SYST|SY' &&
'|BIT-SET|BOOLC|BOOLX|CHAR_OFF|CMAX|CMIN|CONCAT_LINES_OF|CONTAINS|CONTAINS_ANY_NOT_OF' &&
'|CONTAINS_ANY_OF|COUNT_ANY_NOT_OF|COUNT_ANY_OF|FIND_ANY_NOT_OF|FIND_ANY_OF|FIND_END' &&
'|FROM_MIXED|IPOW|LINE_EXISTS|LINE_INDEX|MATCHES|NMAX|NMIN|REPEAT|RESCALE|REVERSE' &&
'|SEGMENT|SHIFT_LEFT|SHIFT_RIGHT|SUBSTRING_AFTER|SUBSTRING_BEFORE|SUBSTRING_FROM|SUBSTRING_TO' &&
'|TO_LOWER|TO_MIXED|TO_UPPER|UTCLONG_ADD|UTCLONG_CURRENT|UTCLONG_DIFF|XSDBOOL'.
* &&
* '|BINTOHEX|CHAR|CLNT|CONCAT_WITH_SPACE|CUKY|CURR|DATS|DATS_ADD_DAYS|DATS_ADD_MONTHS' &&
* '|DATS_DAYS_BETWEEN|DATS_IS_VALID|DEC|END-OF-EDITING|END-TEST-INJECTION|END-TEST-SEAM' &&
* '|ENDWITH|ENUM|FLTP|HEXTOBIN|INSTANCE|INSTR|INT1|INT2|INT4|INT8|LANG|LTRIM|NUMC|PUSH' &&
* '|QUAN|RETURNS|RPAD|RTRIM|SSTRING|START-OF-EDITING|TEST-INJECTION|TEST-SEAM|TIMS' &&
* '|TIMS_IS_VALID|TSTMP_ADD_SECONDS|TSTMP_CURRENT_UTCTIMESTAMP|TSTMP_IS_VALID' &&
* '|TSTMP_SECONDS_BETWEEN|B|D|DECFLOAT16|DECFLOAT34|F|INT8|N|P|S|STRING|T|UTCLONG|XSTRING' &&
* '|ABAP_BOOL|ACCP|CHAR|CLNT|CUKY|CURR|DATS|DEC|DF16_DEC|DF16_RAW|DF34_DEC|DF34_RAW|FLTP' &&
* '|INT1|INT2|INT4|INT8|LANG|LCHR|LRAW|NUMC|QUAN|RAWSTRING|SSTRING|TIMS|DF16_SCL|DF34_SCL' &&
* '|PREC|VARC|CLIKE|CSEQUENCE|DECFLOAT|NUMERIC|XSEQUENCE|ME|SYST|SY' &&
* '|BIT-SET|BOOLC|BOOLX|CHAR_OFF|CMAX|CMIN|CONCAT_LINES_OF|CONTAINS|CONTAINS_ANY_NOT_OF' &&
* '|CONTAINS_ANY_OF|COUNT_ANY_NOT_OF|COUNT_ANY_OF|FIND_ANY_NOT_OF|FIND_ANY_OF|FIND_END' &&
* '|FROM_MIXED|IPOW|LINE_EXISTS|LINE_INDEX|MATCHES|NMAX|NMIN|REPEAT|RESCALE|REVERSE' &&
* '|SEGMENT|SHIFT_LEFT|SHIFT_RIGHT|SUBSTRING_AFTER|SUBSTRING_BEFORE|SUBSTRING_FROM' &&
* '|SUBSTRING_TO|TO_LOWER|TO_MIXED|TO_UPPER|UTCLONG_ADD|UTCLONG_CURRENT|UTCLONG_DIFF' &&
* '|XSDBOOL'.
SPLIT lv_keywords AT '|' INTO TABLE lt_keywords. SPLIT lv_keywords AT '|' INTO TABLE lt_keywords.
" remove duplicates to avoid dumps when converting to a hash table
SORT lt_keywords BY table_line ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_keywords.
gt_keywords = lt_keywords. " Hash table gt_keywords = lt_keywords. " Hash table
ENDMETHOD. ENDMETHOD.

View File

@ -0,0 +1,33 @@
CLASS ltcl_abapgit_syntax_abap DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA:
mo_cut TYPE REF TO zcl_abapgit_syntax_abap.
METHODS:
setup,
report_header FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_abapgit_syntax_abap IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_cut.
ENDMETHOD.
METHOD report_header.
cl_abap_unit_assert=>assert_equals(
exp = |<span class="keyword">REPORT</span> zfoo.|
act = mo_cut->process_line( |REPORT zfoo.| ) ).
ENDMETHOD.
ENDCLASS.

View File

@ -10,6 +10,7 @@
<CLSCCINCL>X</CLSCCINCL> <CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT> <FIXPT>X</FIXPT>
<UNICODE>X</UNICODE> <UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS> </VSEOCLASS>
</asx:values> </asx:values>
</asx:abap> </asx:abap>