Skip to content

Commit adc8e32

Browse files
committed
Add CCL extension for Zed
1 parent ad51305 commit adc8e32

10 files changed

Lines changed: 339 additions & 0 deletions

File tree

‎editors/zed/.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/grammars/

‎editors/zed/LICENSE‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 Thomas Jones
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

‎editors/zed/extension.toml‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
id = "ccl"
2+
name = "CCL"
3+
version = "0.2.0"
4+
schema_version = 1
5+
authors = ["Thomas Jones"]
6+
description = "Modern Cerner Command Language support for Zed"
7+
repository = "https://github.com/CodeDraig/zed-ccl"
8+
languages = ["languages/ccl"]
9+
10+
[grammars.ccl]
11+
repository = "https://github.com/CodeDraig/zed-ccl"
12+
rev = "ad5130578c840a42fc21932e0af707d55475e6d3"
13+
path = "tree-sitter-ccl"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
("(" @open ")" @close)
2+
("[" @open "]" @close)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name = "CCL"
2+
grammar = "ccl"
3+
path_suffixes = ["ccl", "prg"]
4+
line_comments = ["; "]
5+
block_comment = ["/*", "*/"]
6+
tab_size = 2
7+
hard_tabs = false
8+
word_characters = ["$"]
9+
10+
brackets = [
11+
{ start = "(", end = ")", close = true, newline = false },
12+
{ start = "[", end = "]", close = true, newline = false },
13+
{ start = "\"", end = "\"", close = true, newline = false, not_in = ["string", "comment"] },
14+
{ start = "'", end = "'", close = true, newline = false, not_in = ["string", "comment"] },
15+
{ start = "^", end = "^", close = true, newline = false, not_in = ["string", "comment"] },
16+
{ start = "~", end = "~", close = true, newline = false, not_in = ["string", "comment"] },
17+
{ start = "|", end = "|", close = true, newline = false, not_in = ["string", "comment"] },
18+
]
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
; Lexical forms
2+
[
3+
(semicolon_comment)
4+
(bang_comment)
5+
(block_comment)
6+
] @comment
7+
8+
(directive
9+
marker: (directive_marker) @punctuation.special
10+
name: (directive_name) @preproc
11+
arguments: (directive_arguments)? @string.special)
12+
(label_directive name: (identifier) @label)
13+
(line_continuation) @punctuation.special
14+
15+
(string_literal) @string
16+
[
17+
(integer_literal)
18+
(wide_integer_literal)
19+
(real_literal)
20+
] @number
21+
(boolean_literal) @boolean
22+
(null_literal) @constant.builtin
23+
(pseudo_column) @constant.builtin
24+
(prompt_parameter) @variable.special
25+
(data_type) @type.builtin
26+
27+
; Identifiers default to variables. More specific patterns below override this.
28+
(identifier) @variable
29+
30+
; Complete modern Discern Explorer reserved-variable index. The documentation
31+
; repeats CURNETDOMAIN where its description names CURNETDOMAINID; both names
32+
; are intentionally recognized. Function and table captures below take final
33+
; precedence when a documented name is valid in more than one context.
34+
((identifier) @variable.special
35+
(#match? @variable.special "(?i)^(COL|CURACCEPT|CURBATCH|CURBEDROCK|CURCCLREV|CURCCLVER|CURCLIENTID|CURCLK|CURDATE|CURDOMAIN|CURECHO|CURENDREPORT|CURENV|CURGROUP|CURHELP|CURIMAGE|CURLOCALE|CURLOGDOMAIN|CURLOGDOMAINID|CURMAXVARLEN|CURMEM|CURNETDOMAIN|CURNETDOMAINID|CURNODE|CURPAGE|CURPRCNAME|CURPROG|CURQUAL|CURRDB|CURRDBACCESS|CURRDBHANDLE|CURRDBLINK|CURRDBNAME|CURRDBOPT|CURRDBSYS|CURRDBUSER|CURRDBVER|CURREF|CURRETURN|CURREV|CURREVHNAM|CURREVMINOR|CURREVMINOR2|CURSCROLL|CURSERVER|CURSOURCE|CURSUB|CURSYS|CURSYS2|CURSYSBIT|CURTIME|CURTIME2|CURTIME3|CURTIMEZONE|CURTIMEZONEAPP|CURTIMEZONEDEF|CURTIMEZONESYS|CURUSER|CURUTC|CURUTCDIFF|CURWORK|FALSE|MAXCOL|MAXROW|ROW|SYSDATE|SYSTIMESTAMP|TRUE)$"))
36+
((boolean_literal) @variable.special
37+
(#match? @variable.special "(?i)^(FALSE|TRUE)$"))
38+
39+
(program_definition name: (qualified_identifier) @title)
40+
(drop_program_statement name: (qualified_identifier) @title)
41+
42+
(subroutine_definition name: (qualified_identifier) @function)
43+
(subroutine_declaration name: (qualified_identifier) @function)
44+
45+
(call_expression function: (identifier) @function)
46+
(call_expression
47+
function: (namespace_expression
48+
name: (identifier) @function))
49+
(call_expression
50+
function: (member_expression
51+
member: (identifier) @function))
52+
53+
; The function-name allowlist is sourced from Oracle's Functions Reference.
54+
; Calls remain syntactically unrestricted; these predicates only add color.
55+
(call_expression
56+
function: (identifier) @function.builtin
57+
(#match? @function.builtin "(?i)^(ABS|AESDECRYPT|AESDECRYPTFILE|AESENCRYPT|AESENCRYPTFILE|ALTER|ALTER2|ALTER3|ALTERLIST|ARRAYJOIN|ARRAYSPLIT|ASIS|ASSIGN|ASSIGN2|ASSIGN3|AVG|BAND|BLOBGET|BLOBGETLEN|BNOT|BOR|BSHIFT|BTEST|BUILD|BUILD2|BUILD2CHK|BUILD3|BXOR|CALCPOS|CALLPRG|CALLR|CCLIO|CCLFMT|CCLREGEXP|CCLTIMER|CEIL|CHAR|CHECK|CHECKDIC|CHECKFUN|CHECKPRG|CHECKQUEUE|CLASS|CLASSREF|CNVTACC|CNVTAGE|CNVTAGE2|CNVTAGEDATETIME|CNVTALIAS|CNVTALPHANUM|CNVTBOOL|CNVTB10B16|CNVTB10B36|CNVTB16B10|CNVTB36B10|CNVTCAP|CNVTDATE|CNVTDATE2|CNVTDATETIME|CNVTDATETIME2|CNVTDATETIMERDB|CNVTDATETIMEUTC|CNVTDATETIMEUTC2|CNVTDATETIMEUTC3|CNVTHEXRAW|CNVTINT|CNVTJSONTOREC|CNVTLOOKAHEAD|CNVTLOOKBEHIND|CNVTLONG|CNVTLOWER|CNVTMIN|CNVTMIN2|CNVTNLS|CNVTNLSSORT|CNVTPHONE|CNVTRAWHEX|CNVTREAL|CNVTRECTOJSON|CNVTRECTOXML|CNVTSTRING|CNVTSTRINGCHK|CNVTTIME|CNVTTIME2|CNVTTIME3|CNVTTIMESTAMP|CNVTUPPER|CNVTXMLTOREC|CONCAT|COPYREC|COST|COUNT|CUBE|CUME_DIST|CURCODECOVER|CURFILE|CURLOB|CURLOCALE|CURMEM|CURPROG|CURSUB|DATEBIRTHFORMAT|DATEDECEASEDFORMAT|DATETIMEADD|DATETIMECMP|DATETIMECMPUTC|DATETIMEDIFF|DATETIMEFIND|DATETIMEPART|DATETIMETRUNC|DATETIMEZONE|DATETIMEZONEBYINDEX|DATETIMEZONEBYNAME|DATETIMEZONEFORMAT|DATETIMEZONEUTC|DAY|DECODE|DENSE_RANK|ERROR|EVALUATE|EVALUATE2|EVEN|EXP|EXPAND|FILLSTRING|FINDFILE|FINDSTRING|FLOOR|FORMAT|GREATEST|HOUR|ICHAR|INITARRAY|INITREC|ISNUMERIC|JULIAN|LEAST|LIST|LISTAGG|LOCATEVAL|LOCATEVALSORT|LOG|LOG10|LOGICAL|MAP|MAX|MAXREC|MAXVAL|MEDIAN|MEMALLOC|MEMFREE|MEMREALLOC|MIN|MINUTE|MINVAL|MOD|MODIFY|MODCHECK|MONTH|MOVEREC|MOVERECLIST|MOVESTRING|NEGATE|NOPATSTRING|NORDBBIND|NOTRIM|NTILE|NULL|NULLCHECK|NULLFMT|NULLIND|NULLTERM|NULLVAL|OPERATOR|ORDERDIR|OUTERJOIN|PARAMETER|PARAMETER2|PARSER|PATSTRING|PERCENT|PERCENT_RANK|PERCENTILE|PERCENTILE_CONT|PERCENTILE_DISC|PIECE|PROXYUSER|RAND|RANK|RDBBIND|RECTRAVERSE|REFLECT|REMOVE|RENAMEREC|REPLACE|REPORTINFO|REPORTROW|ROLLUP|ROUND|ROW_NUMBER|SELECTIVITY|SEQ|SIZE|SORT|SORTSEARCH|SOUND|SOUNDEX|SQLPASSTHRU|STDDEV|SUBSTRING|SUM|TABLEREF|TDBEXECUTE|TEXT|TEXTLEN|TIMESTAMPDIFF|TRACE|TRIM|TRIMBIND|TYPE|VALIDATE|VALUE|VARIANCE|WEEKDAY|WTMODCHECK|YEAR|UAR_GET_CODE_BY|UAR_GET_CODE_DESCRIPTION|UAR_GET_CODE_DISPLAY|UAR_GET_CODE_MEANING|UAR_GET_DEFINITION|UAR_GET_DISPLAYKEY|UAR_GET_MEANING_BY_CODESET)$"))
58+
(call_expression
59+
function: (namespace_expression
60+
name: (identifier) @function.builtin)
61+
(#match? @function.builtin "(?i)^(ABS|AESDECRYPT|AESDECRYPTFILE|AESENCRYPT|AESENCRYPTFILE|ALTER|ALTER2|ALTER3|ALTERLIST|ARRAYJOIN|ARRAYSPLIT|ASIS|ASSIGN|ASSIGN2|ASSIGN3|AVG|BAND|BLOBGET|BLOBGETLEN|BNOT|BOR|BSHIFT|BTEST|BUILD|BUILD2|BUILD2CHK|BUILD3|BXOR|CALCPOS|CALLPRG|CALLR|CCLIO|CCLFMT|CCLREGEXP|CCLTIMER|CEIL|CHAR|CHECK|CHECKDIC|CHECKFUN|CHECKPRG|CHECKQUEUE|CLASS|CLASSREF|CNVTACC|CNVTAGE|CNVTAGE2|CNVTAGEDATETIME|CNVTALIAS|CNVTALPHANUM|CNVTBOOL|CNVTB10B16|CNVTB10B36|CNVTB16B10|CNVTB36B10|CNVTCAP|CNVTDATE|CNVTDATE2|CNVTDATETIME|CNVTDATETIME2|CNVTDATETIMERDB|CNVTDATETIMEUTC|CNVTDATETIMEUTC2|CNVTDATETIMEUTC3|CNVTHEXRAW|CNVTINT|CNVTJSONTOREC|CNVTLOOKAHEAD|CNVTLOOKBEHIND|CNVTLONG|CNVTLOWER|CNVTMIN|CNVTMIN2|CNVTNLS|CNVTNLSSORT|CNVTPHONE|CNVTRAWHEX|CNVTREAL|CNVTRECTOJSON|CNVTRECTOXML|CNVTSTRING|CNVTSTRINGCHK|CNVTTIME|CNVTTIME2|CNVTTIME3|CNVTTIMESTAMP|CNVTUPPER|CNVTXMLTOREC|CONCAT|COPYREC|COST|COUNT|CUBE|CUME_DIST|CURCODECOVER|CURFILE|CURLOB|CURLOCALE|CURMEM|CURPROG|CURSUB|DATEBIRTHFORMAT|DATEDECEASEDFORMAT|DATETIMEADD|DATETIMECMP|DATETIMECMPUTC|DATETIMEDIFF|DATETIMEFIND|DATETIMEPART|DATETIMETRUNC|DATETIMEZONE|DATETIMEZONEBYINDEX|DATETIMEZONEBYNAME|DATETIMEZONEFORMAT|DATETIMEZONEUTC|DAY|DECODE|DENSE_RANK|ERROR|EVALUATE|EVALUATE2|EVEN|EXP|EXPAND|FILLSTRING|FINDFILE|FINDSTRING|FLOOR|FORMAT|GREATEST|HOUR|ICHAR|INITARRAY|INITREC|ISNUMERIC|JULIAN|LEAST|LIST|LISTAGG|LOCATEVAL|LOCATEVALSORT|LOG|LOG10|LOGICAL|MAP|MAX|MAXREC|MAXVAL|MEDIAN|MEMALLOC|MEMFREE|MEMREALLOC|MIN|MINUTE|MINVAL|MOD|MODIFY|MODCHECK|MONTH|MOVEREC|MOVERECLIST|MOVESTRING|NEGATE|NOPATSTRING|NORDBBIND|NOTRIM|NTILE|NULL|NULLCHECK|NULLFMT|NULLIND|NULLTERM|NULLVAL|OPERATOR|ORDERDIR|OUTERJOIN|PARAMETER|PARAMETER2|PARSER|PATSTRING|PERCENT|PERCENT_RANK|PERCENTILE|PERCENTILE_CONT|PERCENTILE_DISC|PIECE|PROXYUSER|RAND|RANK|RDBBIND|RECTRAVERSE|REFLECT|REMOVE|RENAMEREC|REPLACE|REPORTINFO|REPORTROW|ROLLUP|ROUND|ROW_NUMBER|SELECTIVITY|SEQ|SIZE|SORT|SORTSEARCH|SOUND|SOUNDEX|SQLPASSTHRU|STDDEV|SUBSTRING|SUM|TABLEREF|TDBEXECUTE|TEXT|TEXTLEN|TIMESTAMPDIFF|TRACE|TRIM|TRIMBIND|TYPE|VALIDATE|VALUE|VARIANCE|WEEKDAY|WTMODCHECK|YEAR|UAR_GET_CODE_BY|UAR_GET_CODE_DESCRIPTION|UAR_GET_CODE_DISPLAY|UAR_GET_CODE_MEANING|UAR_GET_DEFINITION|UAR_GET_DISPLAYKEY|UAR_GET_MEANING_BY_CODESET)$"))
62+
(call_expression
63+
function: (member_expression
64+
member: (identifier) @function.builtin)
65+
(#match? @function.builtin "(?i)^(ABS|AESDECRYPT|AESDECRYPTFILE|AESENCRYPT|AESENCRYPTFILE|ALTER|ALTER2|ALTER3|ALTERLIST|ARRAYJOIN|ARRAYSPLIT|ASIS|ASSIGN|ASSIGN2|ASSIGN3|AVG|BAND|BLOBGET|BLOBGETLEN|BNOT|BOR|BSHIFT|BTEST|BUILD|BUILD2|BUILD2CHK|BUILD3|BXOR|CALCPOS|CALLPRG|CALLR|CCLIO|CCLFMT|CCLREGEXP|CCLTIMER|CEIL|CHAR|CHECK|CHECKDIC|CHECKFUN|CHECKPRG|CHECKQUEUE|CLASS|CLASSREF|CNVTACC|CNVTAGE|CNVTAGE2|CNVTAGEDATETIME|CNVTALIAS|CNVTALPHANUM|CNVTBOOL|CNVTB10B16|CNVTB10B36|CNVTB16B10|CNVTB36B10|CNVTCAP|CNVTDATE|CNVTDATE2|CNVTDATETIME|CNVTDATETIME2|CNVTDATETIMERDB|CNVTDATETIMEUTC|CNVTDATETIMEUTC2|CNVTDATETIMEUTC3|CNVTHEXRAW|CNVTINT|CNVTJSONTOREC|CNVTLOOKAHEAD|CNVTLOOKBEHIND|CNVTLONG|CNVTLOWER|CNVTMIN|CNVTMIN2|CNVTNLS|CNVTNLSSORT|CNVTPHONE|CNVTRAWHEX|CNVTREAL|CNVTRECTOJSON|CNVTRECTOXML|CNVTSTRING|CNVTSTRINGCHK|CNVTTIME|CNVTTIME2|CNVTTIME3|CNVTTIMESTAMP|CNVTUPPER|CNVTXMLTOREC|CONCAT|COPYREC|COST|COUNT|CUBE|CUME_DIST|CURCODECOVER|CURFILE|CURLOB|CURLOCALE|CURMEM|CURPROG|CURSUB|DATEBIRTHFORMAT|DATEDECEASEDFORMAT|DATETIMEADD|DATETIMECMP|DATETIMECMPUTC|DATETIMEDIFF|DATETIMEFIND|DATETIMEPART|DATETIMETRUNC|DATETIMEZONE|DATETIMEZONEBYINDEX|DATETIMEZONEBYNAME|DATETIMEZONEFORMAT|DATETIMEZONEUTC|DAY|DECODE|DENSE_RANK|ERROR|EVALUATE|EVALUATE2|EVEN|EXP|EXPAND|FILLSTRING|FINDFILE|FINDSTRING|FLOOR|FORMAT|GREATEST|HOUR|ICHAR|INITARRAY|INITREC|ISNUMERIC|JULIAN|LEAST|LIST|LISTAGG|LOCATEVAL|LOCATEVALSORT|LOG|LOG10|LOGICAL|MAP|MAX|MAXREC|MAXVAL|MEDIAN|MEMALLOC|MEMFREE|MEMREALLOC|MIN|MINUTE|MINVAL|MOD|MODIFY|MODCHECK|MONTH|MOVEREC|MOVERECLIST|MOVESTRING|NEGATE|NOPATSTRING|NORDBBIND|NOTRIM|NTILE|NULL|NULLCHECK|NULLFMT|NULLIND|NULLTERM|NULLVAL|OPERATOR|ORDERDIR|OUTERJOIN|PARAMETER|PARAMETER2|PARSER|PATSTRING|PERCENT|PERCENT_RANK|PERCENTILE|PERCENTILE_CONT|PERCENTILE_DISC|PIECE|PROXYUSER|RAND|RANK|RDBBIND|RECTRAVERSE|REFLECT|REMOVE|RENAMEREC|REPLACE|REPORTINFO|REPORTROW|ROLLUP|ROUND|ROW_NUMBER|SELECTIVITY|SEQ|SIZE|SORT|SORTSEARCH|SOUND|SOUNDEX|SQLPASSTHRU|STDDEV|SUBSTRING|SUM|TABLEREF|TDBEXECUTE|TEXT|TEXTLEN|TIMESTAMPDIFF|TRACE|TRIM|TRIMBIND|TYPE|VALIDATE|VALUE|VARIANCE|WEEKDAY|WTMODCHECK|YEAR|UAR_GET_CODE_BY|UAR_GET_CODE_DESCRIPTION|UAR_GET_CODE_DISPLAY|UAR_GET_CODE_MEANING|UAR_GET_DEFINITION|UAR_GET_DISPLAYKEY|UAR_GET_MEANING_BY_CODESET)$"))
66+
67+
(record_definition name: (qualified_identifier) @type)
68+
(record_field name: (identifier) @property)
69+
70+
(variable_declaration name: (qualified_identifier) @variable)
71+
(array_declaration name: (qualified_identifier) @variable)
72+
73+
(parameter name: (identifier) @variable.parameter)
74+
(selection_alias alias: (identifier) @variable)
75+
(table_reference table: (qualified_identifier) @type)
76+
(table_reference alias: (identifier) @variable)
77+
(table_control_reference table: (qualified_identifier) @type)
78+
(table_control_reference alias: (identifier) @variable)
79+
(dml_table_reference table: (qualified_identifier) @type)
80+
(dml_table_reference alias: (identifier) @variable)
81+
(derived_table alias: (identifier) @variable)
82+
(merge_source alias: (identifier) @variable)
83+
(namespace_expression namespace: (identifier) @type)
84+
(member_expression member: (identifier) @property)
85+
(control_option name: (identifier) @attribute)
86+
87+
; DUMMYT is special only when it occupies a table-name field.
88+
(table_reference
89+
table: (qualified_identifier) @type.builtin
90+
(#match? @type.builtin "(?i)^DUMMYT$"))
91+
(table_control_reference
92+
table: (qualified_identifier) @type.builtin
93+
(#match? @type.builtin "(?i)^DUMMYT$"))
94+
(dml_table_reference
95+
table: (qualified_identifier) @type.builtin
96+
(#match? @type.builtin "(?i)^DUMMYT$"))
97+
98+
; Case-insensitive keyword tokens are aliased to these canonical names by the
99+
; grammar, so one query covers every source spelling.
100+
[
101+
"and"
102+
"all"
103+
"asc"
104+
"between"
105+
"break"
106+
"by"
107+
"call"
108+
"case"
109+
"col"
110+
"constant"
111+
"commit"
112+
"copy"
113+
"create"
114+
"declare"
115+
"delete"
116+
"desc"
117+
"detail"
118+
"distinct"
119+
"drop"
120+
"else"
121+
"elseif"
122+
"end"
123+
"endcase"
124+
"endfor"
125+
"endif"
126+
"endwhile"
127+
"execute"
128+
"exists"
129+
"foot"
130+
"for"
131+
"free"
132+
"from"
133+
"full"
134+
"go"
135+
"group"
136+
"having"
137+
"head"
138+
"if"
139+
"in"
140+
"inner"
141+
"insert"
142+
"intersect"
143+
"into"
144+
"is"
145+
"join"
146+
"left"
147+
"like"
148+
"matched"
149+
"merge"
150+
"minus"
151+
"noconstant"
152+
"nopersist"
153+
"not"
154+
"of"
155+
"on"
156+
"or"
157+
"order"
158+
"orjoin"
159+
"page"
160+
"persist"
161+
"persistscript"
162+
"plan"
163+
"private"
164+
"privateprotect"
165+
"program"
166+
"prompt"
167+
"protect"
168+
"public"
169+
"record"
170+
"ref"
171+
"report"
172+
"return"
173+
"right"
174+
"rollback"
175+
"row"
176+
"select"
177+
"set"
178+
"subroutine"
179+
"then"
180+
"to"
181+
"update"
182+
"union"
183+
"using"
184+
"value"
185+
"values"
186+
"when"
187+
"where"
188+
"while"
189+
"with"
190+
] @keyword
191+
192+
[
193+
"="
194+
"+="
195+
"-="
196+
"*="
197+
"/="
198+
"+"
199+
"-"
200+
"*"
201+
"/"
202+
"**"
203+
"||"
204+
"!="
205+
"<>"
206+
"<"
207+
"<="
208+
">"
209+
">="
210+
"->"
211+
"::"
212+
] @operator
213+
214+
[
215+
"("
216+
")"
217+
"["
218+
"]"
219+
] @punctuation.bracket
220+
221+
[
222+
","
223+
":"
224+
"."
225+
] @punctuation.delimiter
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
(program_definition) @indent
2+
(program_definition "end" @outdent)
3+
4+
(subroutine_definition) @indent
5+
(subroutine_definition "end" @outdent)
6+
7+
(record_definition ")" @end) @indent
8+
9+
(if_statement) @indent
10+
(if_statement "endif" @outdent)
11+
12+
(case_statement) @indent
13+
(case_statement "endcase" @outdent)
14+
15+
(for_statement) @indent
16+
(for_statement "endfor" @outdent)
17+
18+
(while_statement) @indent
19+
(while_statement "endwhile" @outdent)
20+
21+
[
22+
(head_report_section)
23+
(head_page_section)
24+
(head_group_section)
25+
(detail_section)
26+
(foot_group_section)
27+
(foot_page_section)
28+
(foot_report_section)
29+
] @indent
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
(program_definition
2+
name: (qualified_identifier) @name) @item
3+
4+
(subroutine_definition
5+
name: (qualified_identifier) @name) @item
6+
7+
(record_definition
8+
name: (qualified_identifier) @name) @item
9+
10+
(variable_declaration
11+
name: (qualified_identifier) @name) @item
12+
13+
(array_declaration
14+
name: (qualified_identifier) @name) @item
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
(string_literal) @string.inclusive
2+
3+
[
4+
(semicolon_comment)
5+
(bang_comment)
6+
(block_comment)
7+
] @comment.inclusive
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
(program_definition) @class.around
2+
(record_definition) @class.around
3+
(subroutine_definition) @function.around
4+
5+
[
6+
(semicolon_comment)
7+
(bang_comment)
8+
(block_comment)
9+
]+ @comment.around

0 commit comments

Comments
 (0)