aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/teal
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2023-06-12 09:54:30 -0600
committerChristian Clason <c.clason@uni-graz.at>2025-05-12 18:43:40 +0200
commit692b051b09935653befdb8f7ba8afdb640adf17b (patch)
tree167162b6b129ae04f68c5735078521a72917c742 /runtime/queries/teal
parentfeat(c-family): inherit injections (diff)
downloadnvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.gz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.bz2
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.lz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.xz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.zst
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.zip
feat!: drop modules, general refactor and cleanup
Diffstat (limited to 'runtime/queries/teal')
-rw-r--r--runtime/queries/teal/folds.scm13
-rw-r--r--runtime/queries/teal/highlights.scm237
-rw-r--r--runtime/queries/teal/indents.scm18
-rw-r--r--runtime/queries/teal/injections.scm43
-rw-r--r--runtime/queries/teal/locals.scm36
5 files changed, 347 insertions, 0 deletions
diff --git a/runtime/queries/teal/folds.scm b/runtime/queries/teal/folds.scm
new file mode 100644
index 000000000..27755de20
--- /dev/null
+++ b/runtime/queries/teal/folds.scm
@@ -0,0 +1,13 @@
+[
+ (do_statement)
+ (numeric_for_statement)
+ (generic_for_statement)
+ (while_statement)
+ (repeat_statement)
+ (if_statement)
+ (function_statement)
+ (record_declaration)
+ (enum_declaration)
+ (anon_function)
+ (table_constructor)
+] @fold
diff --git a/runtime/queries/teal/highlights.scm b/runtime/queries/teal/highlights.scm
new file mode 100644
index 000000000..e58d588bb
--- /dev/null
+++ b/runtime/queries/teal/highlights.scm
@@ -0,0 +1,237 @@
+; Primitives
+(boolean) @boolean
+
+(comment) @comment @spell
+
+((comment) @comment.documentation
+ (#lua-match? @comment.documentation "^[-][-][-]"))
+
+((comment) @comment.documentation
+ (#lua-match? @comment.documentation "^[-][-](%s?)@"))
+
+(shebang_comment) @keyword.directive
+
+(identifier) @variable
+
+((identifier) @variable.builtin
+ (#eq? @variable.builtin "self"))
+
+(nil) @constant.builtin
+
+(number) @number
+
+(string) @string
+
+(table_constructor
+ [
+ "{"
+ "}"
+ ] @constructor)
+
+(varargs
+ "..." @constant.builtin)
+
+[
+ ","
+ "."
+ ":"
+ ";"
+] @punctuation.delimiter
+
+(escape_sequence) @string.escape
+
+(format_specifier) @string.escape
+
+; Basic statements/Keywords
+[
+ "if"
+ "then"
+ "elseif"
+ "else"
+] @keyword.conditional
+
+[
+ "for"
+ "while"
+ "repeat"
+ "until"
+] @keyword.repeat
+
+"return" @keyword.return
+
+[
+ "in"
+ "local"
+ (break)
+ (goto)
+ "do"
+ "end"
+] @keyword
+
+(label) @label
+
+; Global isn't a real keyword, but it gets special treatment in these places
+(var_declaration
+ "global" @keyword)
+
+(type_declaration
+ "global" @keyword)
+
+(function_statement
+ "global" @keyword)
+
+(record_declaration
+ "global" @keyword)
+
+(enum_declaration
+ "global" @keyword)
+
+; Ops
+(bin_op
+ (op) @operator)
+
+(unary_op
+ (op) @operator)
+
+[
+ "="
+ "as"
+] @operator
+
+; Functions
+(function_statement
+ "function" @keyword.function
+ .
+ name: (_) @function)
+
+(anon_function
+ "function" @keyword.function)
+
+(function_body
+ "end" @keyword.function)
+
+(arg
+ name: (identifier) @variable.parameter)
+
+(function_signature
+ (arguments
+ .
+ (arg
+ name: (identifier) @variable.builtin))
+ (#eq? @variable.builtin "self"))
+
+(typeargs
+ "<" @punctuation.bracket
+ .
+ (_) @variable.parameter
+ .
+ (","
+ .
+ (_) @variable.parameter)*
+ .
+ ">" @punctuation.bracket)
+
+(function_call
+ (identifier) @function
+ .
+ (arguments))
+
+(function_call
+ (index
+ (_)
+ key: (identifier) @function)
+ .
+ (arguments))
+
+(function_call
+ (method_index
+ (_)
+ key: (identifier) @function)
+ .
+ (arguments))
+
+; Types
+(record_declaration
+ .
+ "record" @keyword.type
+ name: (identifier) @type)
+
+(anon_record
+ .
+ "record" @keyword.type)
+
+(record_body
+ (record_declaration
+ .
+ "record" @keyword.type
+ .
+ name: (identifier) @type))
+
+(record_body
+ (enum_declaration
+ .
+ "enum" @keyword.type
+ .
+ name: (identifier) @type))
+
+(record_body
+ (typedef
+ .
+ "type" @keyword
+ .
+ name: (identifier) @type
+ .
+ "="))
+
+(record_body
+ (metamethod
+ "metamethod" @keyword))
+
+(record_body
+ (userdata) @keyword)
+
+(enum_declaration
+ "enum" @keyword.type
+ name: (identifier) @type)
+
+(type_declaration
+ "type" @keyword)
+
+(type_declaration
+ (identifier) @type)
+
+(simple_type
+ name: (identifier) @type)
+
+(type_index
+ (identifier) @type)
+
+(type_union
+ "|" @operator)
+
+(function_type
+ "function" @type)
+
+; The rest of it
+(var_declaration
+ declarators: (var_declarators
+ (var
+ name: (identifier) @variable)))
+
+(var_declaration
+ declarators: (var_declarators
+ (var
+ "<" @punctuation.bracket
+ .
+ attribute: (attribute) @attribute
+ .
+ ">" @punctuation.bracket)))
+
+[
+ "("
+ ")"
+ "["
+ "]"
+ "{"
+ "}"
+] @punctuation.bracket
diff --git a/runtime/queries/teal/indents.scm b/runtime/queries/teal/indents.scm
new file mode 100644
index 000000000..77b269cd9
--- /dev/null
+++ b/runtime/queries/teal/indents.scm
@@ -0,0 +1,18 @@
+[
+ (record_declaration)
+ (anon_function)
+ (function_body)
+ (table_constructor)
+ (if_statement)
+ (return_statement)
+ (while_statement)
+] @indent.begin
+
+[
+ "{"
+ "}"
+ "("
+ ")"
+ "end"
+ "then"
+] @indent.branch
diff --git a/runtime/queries/teal/injections.scm b/runtime/queries/teal/injections.scm
new file mode 100644
index 000000000..decb4831c
--- /dev/null
+++ b/runtime/queries/teal/injections.scm
@@ -0,0 +1,43 @@
+((function_call
+ (index
+ (identifier) @_cdef_identifier)
+ (arguments
+ (string) @injection.content))
+ (#eq? @_cdef_identifier "cdef")
+ (#lua-match? @injection.content "^[\"']")
+ (#offset! @injection.content 0 1 0 -1)
+ (#set! injection.language "c"))
+
+((function_call
+ (index
+ (identifier) @_cdef_identifier)
+ (arguments
+ (string) @injection.content))
+ (#eq? @_cdef_identifier "cdef")
+ (#lua-match? @injection.content "^%[%[")
+ (#offset! @injection.content 0 2 0 -2)
+ (#set! injection.language "c"))
+
+; string.format('...')
+((function_call
+ (index
+ (identifier) @_base
+ key: (identifier) @_entry)
+ (arguments
+ .
+ (string) @injection.content))
+ (#eq? @_base "string")
+ (#eq? @_entry "format")
+ (#set! injection.language "printf"))
+
+; ('...'):format()
+((function_call
+ (method_index
+ (parenthesized_expression
+ (string) @injection.content)
+ key: (identifier) @_func))
+ (#eq? @_func "format")
+ (#set! injection.language "printf"))
+
+((comment) @injection.content
+ (#set! injection.language "comment"))
diff --git a/runtime/queries/teal/locals.scm b/runtime/queries/teal/locals.scm
new file mode 100644
index 000000000..c2386c632
--- /dev/null
+++ b/runtime/queries/teal/locals.scm
@@ -0,0 +1,36 @@
+(var_declaration
+ declarators: (var_declarators
+ (var
+ (identifier)) @local.definition.var))
+
+(var_assignment
+ variables: (assignment_variables
+ (var
+ (identifier) @local.definition.var) @local.definition.associated))
+
+(arg
+ name: (identifier) @local.definition.parameter)
+
+(anon_function) @local.scope
+
+(function_statement
+ (function_name) @local.definition.function) @local.scope
+
+(program) @local.scope
+
+(if_statement) @local.scope
+
+(generic_for_statement
+ (for_body) @local.scope)
+
+(numeric_for_statement
+ (for_body) @local.scope)
+
+(repeat_statement) @local.scope
+
+(while_statement
+ (while_body) @local.scope)
+
+(do_statement) @local.scope
+
+(identifier) @local.reference