mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Improve JSON syntax highlighter (#5450)
This commit is contained in:
parent
de39745541
commit
ad1808cc72
|
@ -31,7 +31,7 @@ CLASS zcl_abapgit_syntax_factory IMPLEMENTATION.
|
|||
CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_css.
|
||||
ELSEIF iv_filename CP '*.js'.
|
||||
CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_js.
|
||||
ELSEIF iv_filename CP '*.json'.
|
||||
ELSEIF iv_filename CP '*.json' OR iv_filename CP '*.jsonc'.
|
||||
CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_json.
|
||||
ELSEIF iv_filename CP '*.txt' OR iv_filename CP '*.ini' OR iv_filename CP '*.text'.
|
||||
CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_txt.
|
||||
|
|
|
@ -7,17 +7,24 @@ CLASS zcl_abapgit_syntax_json DEFINITION
|
|||
|
||||
CONSTANTS:
|
||||
" JSON... This was easy :-)
|
||||
" JSONC... With comments
|
||||
BEGIN OF c_css,
|
||||
keyword TYPE string VALUE 'keyword', "#EC NOTEXT
|
||||
keyword TYPE string VALUE 'selectors', "#EC NOTEXT
|
||||
text TYPE string VALUE 'text', "#EC NOTEXT
|
||||
values TYPE string VALUE 'properties', "#EC NOTEXT
|
||||
comment TYPE string VALUE 'comment', "#EC NOTEXT
|
||||
END OF c_css.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_token,
|
||||
keyword TYPE c VALUE 'K', "#EC NOTEXT
|
||||
text TYPE c VALUE 'T', "#EC NOTEXT
|
||||
values TYPE c VALUE 'V', "#EC NOTEXT
|
||||
comment TYPE c VALUE 'C', "#EC NOTEXT
|
||||
END OF c_token.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_regex,
|
||||
" comments /* ... */ or //
|
||||
comment TYPE string VALUE '\/\*.*\*\/|\/\*|\*\/|\/\/', "#EC NOTEXT
|
||||
" not much here
|
||||
keyword TYPE string VALUE 'true|false|null', "#EC NOTEXT
|
||||
" double quoted strings
|
||||
|
@ -34,7 +41,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_SYNTAX_JSON IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_syntax_json IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
@ -47,10 +54,21 @@ CLASS ZCL_ABAPGIT_SYNTAX_JSON IMPLEMENTATION.
|
|||
iv_token = c_token-keyword
|
||||
iv_style = c_css-keyword ).
|
||||
|
||||
" Style for keys
|
||||
add_rule( iv_regex = c_regex-text
|
||||
iv_token = c_token-text
|
||||
iv_style = c_css-text ).
|
||||
|
||||
" Style for values
|
||||
add_rule( iv_regex = ''
|
||||
iv_token = c_token-values
|
||||
iv_style = c_css-values ).
|
||||
|
||||
" JSONC comments
|
||||
add_rule( iv_regex = c_regex-comment
|
||||
iv_token = c_token-comment
|
||||
iv_style = c_css-comment ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -58,6 +76,7 @@ CLASS ZCL_ABAPGIT_SYNTAX_JSON IMPLEMENTATION.
|
|||
|
||||
DATA:
|
||||
lv_match TYPE string,
|
||||
lv_count TYPE i,
|
||||
lv_line_len TYPE i,
|
||||
lv_prev_token TYPE c.
|
||||
|
||||
|
@ -99,5 +118,13 @@ CLASS ZCL_ABAPGIT_SYNTAX_JSON IMPLEMENTATION.
|
|||
|
||||
DELETE ct_matches WHERE token IS INITIAL.
|
||||
|
||||
" Switch style of second text match to values
|
||||
LOOP AT ct_matches ASSIGNING <ls_match> WHERE token = c_token-text.
|
||||
lv_count = lv_count + 1.
|
||||
IF lv_count >= 2.
|
||||
<ls_match>-token = c_token-values.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
45
src/syntax/zcl_abapgit_syntax_json.clas.testclasses.abap
Normal file
45
src/syntax/zcl_abapgit_syntax_json.clas.testclasses.abap
Normal file
|
@ -0,0 +1,45 @@
|
|||
CLASS ltcl_abapgit_syntax_json DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mo_cut TYPE REF TO zcl_abapgit_syntax_json.
|
||||
|
||||
METHODS:
|
||||
setup,
|
||||
key_value FOR TESTING RAISING cx_static_check,
|
||||
comment_1 FOR TESTING RAISING cx_static_check,
|
||||
comment_2 FOR TESTING RAISING cx_static_check.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltcl_abapgit_syntax_json IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
CREATE OBJECT mo_cut.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD key_value.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->process_line( |"key":"value"| )
|
||||
exp = |<span class="text">"key"</span>:<span class="properties">"value"</span>| ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD comment_1.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->process_line( |"key":"value" // comment| )
|
||||
exp = |<span class="text">"key"</span>:<span class="properties">"value"</span>|
|
||||
&& | <span class="comment">//</span> comment| ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD comment_2.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->process_line( |/* comment */| )
|
||||
exp = |<span class="comment">/* comment */</span>| ).
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
|
@ -10,6 +10,7 @@
|
|||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
|
|
Loading…
Reference in New Issue
Block a user