mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 13:03:01 +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.
|
CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_css.
|
||||||
ELSEIF iv_filename CP '*.js'.
|
ELSEIF iv_filename CP '*.js'.
|
||||||
CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_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.
|
CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_json.
|
||||||
ELSEIF iv_filename CP '*.txt' OR iv_filename CP '*.ini' OR iv_filename CP '*.text'.
|
ELSEIF iv_filename CP '*.txt' OR iv_filename CP '*.ini' OR iv_filename CP '*.text'.
|
||||||
CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_txt.
|
CREATE OBJECT ro_instance TYPE zcl_abapgit_syntax_txt.
|
||||||
|
|
|
@ -1,30 +1,37 @@
|
||||||
CLASS zcl_abapgit_syntax_json DEFINITION
|
CLASS zcl_abapgit_syntax_json DEFINITION
|
||||||
PUBLIC
|
PUBLIC
|
||||||
INHERITING FROM zcl_abapgit_syntax_highlighter
|
INHERITING FROM zcl_abapgit_syntax_highlighter
|
||||||
CREATE PUBLIC .
|
CREATE PUBLIC.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
CONSTANTS:
|
CONSTANTS:
|
||||||
" JSON... This was easy :-)
|
" JSON... This was easy :-)
|
||||||
|
" JSONC... With comments
|
||||||
BEGIN OF c_css,
|
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
|
text TYPE string VALUE 'text', "#EC NOTEXT
|
||||||
END OF c_css .
|
values TYPE string VALUE 'properties', "#EC NOTEXT
|
||||||
|
comment TYPE string VALUE 'comment', "#EC NOTEXT
|
||||||
|
END OF c_css.
|
||||||
CONSTANTS:
|
CONSTANTS:
|
||||||
BEGIN OF c_token,
|
BEGIN OF c_token,
|
||||||
keyword TYPE c VALUE 'K', "#EC NOTEXT
|
keyword TYPE c VALUE 'K', "#EC NOTEXT
|
||||||
text TYPE c VALUE 'T', "#EC NOTEXT
|
text TYPE c VALUE 'T', "#EC NOTEXT
|
||||||
END OF c_token .
|
values TYPE c VALUE 'V', "#EC NOTEXT
|
||||||
|
comment TYPE c VALUE 'C', "#EC NOTEXT
|
||||||
|
END OF c_token.
|
||||||
CONSTANTS:
|
CONSTANTS:
|
||||||
BEGIN OF c_regex,
|
BEGIN OF c_regex,
|
||||||
|
" comments /* ... */ or //
|
||||||
|
comment TYPE string VALUE '\/\*.*\*\/|\/\*|\*\/|\/\/', "#EC NOTEXT
|
||||||
" not much here
|
" not much here
|
||||||
keyword TYPE string VALUE 'true|false|null', "#EC NOTEXT
|
keyword TYPE string VALUE 'true|false|null', "#EC NOTEXT
|
||||||
" double quoted strings
|
" double quoted strings
|
||||||
text TYPE string VALUE '"', "#EC NOTEXT
|
text TYPE string VALUE '"', "#EC NOTEXT
|
||||||
END OF c_regex .
|
END OF c_regex.
|
||||||
|
|
||||||
METHODS constructor .
|
METHODS constructor.
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
METHODS order_matches REDEFINITION.
|
METHODS order_matches REDEFINITION.
|
||||||
|
@ -34,7 +41,7 @@ ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_SYNTAX_JSON IMPLEMENTATION.
|
CLASS zcl_abapgit_syntax_json IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD constructor.
|
METHOD constructor.
|
||||||
|
@ -47,10 +54,21 @@ CLASS ZCL_ABAPGIT_SYNTAX_JSON IMPLEMENTATION.
|
||||||
iv_token = c_token-keyword
|
iv_token = c_token-keyword
|
||||||
iv_style = c_css-keyword ).
|
iv_style = c_css-keyword ).
|
||||||
|
|
||||||
|
" Style for keys
|
||||||
add_rule( iv_regex = c_regex-text
|
add_rule( iv_regex = c_regex-text
|
||||||
iv_token = c_token-text
|
iv_token = c_token-text
|
||||||
iv_style = c_css-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.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,6 +76,7 @@ CLASS ZCL_ABAPGIT_SYNTAX_JSON IMPLEMENTATION.
|
||||||
|
|
||||||
DATA:
|
DATA:
|
||||||
lv_match TYPE string,
|
lv_match TYPE string,
|
||||||
|
lv_count TYPE i,
|
||||||
lv_line_len TYPE i,
|
lv_line_len TYPE i,
|
||||||
lv_prev_token TYPE c.
|
lv_prev_token TYPE c.
|
||||||
|
|
||||||
|
@ -99,5 +118,13 @@ CLASS ZCL_ABAPGIT_SYNTAX_JSON IMPLEMENTATION.
|
||||||
|
|
||||||
DELETE ct_matches WHERE token IS INITIAL.
|
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.
|
ENDMETHOD.
|
||||||
ENDCLASS.
|
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>
|
<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>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user