aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua13
-rw-r--r--queries/t32/folds.scm1
-rw-r--r--queries/t32/highlights.scm141
-rw-r--r--queries/t32/injections.scm1
-rw-r--r--queries/t32/locals.scm35
-rw-r--r--tests/query/highlights/t32/comments.cmm10
-rw-r--r--tests/query/highlights/t32/keywords.cmm103
-rw-r--r--tests/query/highlights/t32/literals.cmm37
-rw-r--r--tests/query/highlights/t32/var.cmm27
10 files changed, 371 insertions, 0 deletions
diff --git a/lockfile.json b/lockfile.json
index 5320ab7ff..18f9e4b57 100644
--- a/lockfile.json
+++ b/lockfile.json
@@ -365,6 +365,9 @@
"sxhkdrc": {
"revision": "440d5f913d9465c9c776a1bd92334d32febcf065"
},
+ "t32": {
+ "revision": "20fe21a5a4eb79e1788f6424dcc6a1f2bd023ffa"
+ },
"teal": {
"revision": "1ae8c68e90523b26b93af56feb7868fe4214e2b2"
},
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index 0246cde81..d0ef4a97a 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -1206,6 +1206,19 @@ list.tiger = {
maintainers = { "@ambroisie" },
}
+list.t32 = {
+ install_info = {
+ url = "https://codeberg.org/xasc/tree-sitter-t32",
+ files = { "src/parser.c", "src/scanner.c" },
+ branch = "main",
+ revision = "675cd7de4eb80f2faa1e6d3bc9ee195fa9ef9790",
+ generate_requires_npm = false,
+ requires_generate_from_grammar = false,
+ },
+ filetype = "t32",
+ maintainers = { "@xasc" },
+}
+
list.sxhkdrc = {
install_info = {
url = "https://github.com/RaafatTurki/tree-sitter-sxhkdrc",
diff --git a/queries/t32/folds.scm b/queries/t32/folds.scm
new file mode 100644
index 000000000..fd7d23999
--- /dev/null
+++ b/queries/t32/folds.scm
@@ -0,0 +1 @@
+(block) @fold
diff --git a/queries/t32/highlights.scm b/queries/t32/highlights.scm
new file mode 100644
index 000000000..9fd1816ba
--- /dev/null
+++ b/queries/t32/highlights.scm
@@ -0,0 +1,141 @@
+[
+ "="
+ "^^"
+ "||"
+ "&&"
+ "+"
+ "-"
+ "*"
+ "/"
+ "%"
+ "|"
+ "^"
+ "=="
+ "!="
+ ">"
+ ">="
+ "<="
+ "<"
+ "<<"
+ ">>"
+ ".."
+ "--"
+ "++"
+ "+"
+ "-"
+ "~"
+ "!"
+ "&"
+ "->"
+ "*"
+] @operator
+
+[
+ "("
+ ")"
+ "{"
+ "}"
+ "["
+ "]"
+] @punctuation.bracket
+
+[
+ ","
+ "."
+ ";"
+] @punctuation.delimiter
+
+[
+ (access_class)
+ (address)
+ (bitmask)
+ (file_handle)
+ (frequency)
+ (integer)
+ (percentage)
+ (time)
+] @number
+
+(float) @float
+
+(string) @string
+
+(path) @string.special
+
+(symbol) @symbol
+
+(character) @character
+
+; Commands
+(command_expression
+ command: (identifier) @keyword)
+(macro_definition
+ command: (identifier) @keyword)
+
+; Returns
+(
+ (command_expression
+ command: (identifier) @keyword.return)
+ (#match? @keyword.return "^[eE][nN][dD]([dD][oO])?$")
+)
+(
+ (command_expression
+ command: (identifier) @keyword.return)
+ (#match? @keyword.return "^[rR][eE][tT][uU][rR][nN]$")
+)
+
+; Subroutine calls
+(subroutine_call_expression
+ command: (identifier) @keyword
+ subroutine: (identifier) @function.call)
+
+; Variables, constants and labels
+(macro) @variable.builtin
+(internal_c_variable) @variable.builtin
+
+(argument_list
+ (identifier) @constant)
+(
+ (argument_list (identifier) @constant.builtin)
+ (#match? @constant.builtin "^[%/][a-zA-Z][a-zA-Z0-9.]*$")
+)
+
+(
+ (command_expression
+ command: (identifier) @keyword
+ arguments: (argument_list . (identifier) @label))
+ (#match? @keyword "^[gG][oO][tT][oO]$")
+)
+(labeled_expression
+ label: (identifier) @label)
+
+; Subroutine blocks
+(subroutine_block
+ command: (identifier) @keyword
+ subroutine: (identifier) @function)
+
+(labeled_expression
+ label: (identifier) @function
+ (block))
+
+; Parameter declarations
+(parameter_declaration
+ command: (identifier) @keyword
+ macro: (macro) @parameter)
+
+; Control flow
+(if_block
+ command: (identifier) @conditional)
+(else_block
+ command: (identifier) @conditional)
+
+(while_block
+ command: (identifier) @repeat)
+(repeat_block
+ command: (identifier) @repeat)
+
+(call_expression
+ function: (identifier) @function.builtin)
+
+(type_identifier) @type
+(comment) @comment @spell
diff --git a/queries/t32/injections.scm b/queries/t32/injections.scm
new file mode 100644
index 000000000..4bb7d675d
--- /dev/null
+++ b/queries/t32/injections.scm
@@ -0,0 +1 @@
+(comment) @comment
diff --git a/queries/t32/locals.scm b/queries/t32/locals.scm
new file mode 100644
index 000000000..dd03b4246
--- /dev/null
+++ b/queries/t32/locals.scm
@@ -0,0 +1,35 @@
+(block) @scope
+
+; Parameter definitions
+(parameter_declaration
+ command: (identifier)
+ macro: (macro) @definition.parameter)
+
+; Variable definitions
+(macro_definition
+ command: (identifier)
+ macro: (macro) @definition.var)
+
+(command_expression
+ command: (identifier)
+ arguments: (argument_list
+ variable: (identifier) @definition.var))
+
+; Function definitions
+(subroutine_block
+ command: (identifier)
+ subroutine: (identifier) @definition.function)
+
+(labeled_expression
+ label: (identifier) @definition.function
+ (block))
+
+; References
+(
+ (subroutine_call_expression
+ command: (identifier)
+ subroutine: (identifier) @reference)
+ (set! reference.kind "function")
+)
+
+(macro) @reference
diff --git a/tests/query/highlights/t32/comments.cmm b/tests/query/highlights/t32/comments.cmm
new file mode 100644
index 000000000..0bab130f6
--- /dev/null
+++ b/tests/query/highlights/t32/comments.cmm
@@ -0,0 +1,10 @@
+// This is a comment
+; <- comment
+
+; Another comment
+; <- comment
+
+ECHO &a // This is a trailing comment
+; ^ comment
+
+// vim: set ft=t32:
diff --git a/tests/query/highlights/t32/keywords.cmm b/tests/query/highlights/t32/keywords.cmm
new file mode 100644
index 000000000..e9eb0e37f
--- /dev/null
+++ b/tests/query/highlights/t32/keywords.cmm
@@ -0,0 +1,103 @@
+PRIVATE &password
+; <- keyword
+; ^ variable.builtin
+ENTRY &password
+; <- keyword
+; ^ parameter
+
+IF "&password"==""
+; <- conditional
+; ^ string
+; ^ variable.builtin
+; ^ operator
+(
+ ECHO "Failed to provide password."
+ ENDDO
+; ^ keyword.return
+)
+ELSE
+; <- conditional
+(
+ PRIVATE &pass
+
+ &pass=FALSE()
+; ^ function.builtin
+ WHILE !&pass
+; ^ operator
+ (
+ GOSUB verify_password "&password"
+; ^ function.call
+ RETURNVALUES &pass
+; ^ parameter
+ WAIT 10.ms
+; ^ number
+ )
+
+ IF !&pass
+ GOTO fail
+; ^ label
+ ELSE
+ (
+ GOSUB start_debug
+; ^ function.call
+ )
+)
+
+LOCAL &num
+; ^ variable.builtin
+
+&num = 2.
+; ^ number
+
+RePeaT &num PRINT "Password: &password"
+; ^ variable.builtin
+; ^ variable.builtin
+
+WinCLEAR
+FramePOS ,,,,Maximized
+; ^ punctuation.delimiter
+; ^ constant
+WinPOS 0% 50% 100% 35%
+; ^ number
+COVerage.ListFunc
+
+ENDDO
+
+
+fail:
+; <- label
+ PRINT %ERROR "Password verification failed."
+ END
+; ^ keyword.return
+
+
+verify_password:
+; <- function
+(
+ PARAMETERS &password
+; ^ parameter
+
+ SYStem.Option.KEYCODE "&password"
+ SYStem.JtagClock 1kHz
+; ^ number
+ SYStem.Mode.Attach
+
+ Data.Set EAXI:0x34000000 %Long 0x34000100 0x34000021 /verify
+; ^ number
+; ^ constant.builtin
+; ^ constant
+
+ RETURN TRUE()
+; ^ keyword.return
+)
+
+
+SUBROUTINE start_debug
+; ^ function
+(
+ Go main
+ RETURN
+; ^ keyword.return
+)
+
+// vim: set ft=t32:
diff --git a/tests/query/highlights/t32/literals.cmm b/tests/query/highlights/t32/literals.cmm
new file mode 100644
index 000000000..f63348490
--- /dev/null
+++ b/tests/query/highlights/t32/literals.cmm
@@ -0,0 +1,37 @@
+WinPOS ,,1000.,,,,myWatchWindow
+; ^ number
+
+PRinTer.OPEN "~~~/varwatch.txt" ASCIIE
+; ^ string
+
+sYmbol.NEW _InitialSP 0x34000100
+; ^ number
+
+DO ~~~~/test.cmm
+; ^ string.special
+
+WAIT 1.ns
+; ^ number
+
+SYStem.JtagClock 100.GHZ
+; ^ number
+
+DATA.SET P:&HEAD+0x4 %LONG DATA.LONG(EA:&HEAD+0x4)&0xFFFFFF
+; ^ number
+
+List `main`
+; ^ symbol
+
+&range = 'a'--'z'||'0'--'9'
+; ^ character
+; ^ operator
+; ^ character
+
+Data.Set 0xffff800000 0y0011xx01xx&&a
+; ^ number
+; ^ operator
+
+WinPOS 0% 85% 100% 15%
+; ^ number
+
+// vim: set ft=t32:
diff --git a/tests/query/highlights/t32/var.cmm b/tests/query/highlights/t32/var.cmm
new file mode 100644
index 000000000..a2d6f9b2a
--- /dev/null
+++ b/tests/query/highlights/t32/var.cmm
@@ -0,0 +1,27 @@
+Var.NEWGLOBAL char[4][32] \myarr
+; <- keyword
+; ^ type
+; ^ variable.builtin
+LOCAL &i &data
+
+&data="zero|one|two|three"
+
+&i=0.
+WHILE &i<4
+(
+ PRIVATE &val
+ &val=STRing.SPLIT("&data","|",&i)
+ Var.Assign \myarr[&i]="&val"
+; ^ variable.builtin
+ &i=&i+1.
+)
+
+Var.NEWLOCAL \x
+; <- keyword
+; ^ variable.builtin
+Var.set \x=func3(5,3)
+; ^ variable.builtin
+PRINT Var.VALUE(\x)
+; ^ variable.builtin
+
+// vim: set ft=t32: