aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/luau
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/luau
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/luau')
-rw-r--r--runtime/queries/luau/folds.scm3
-rw-r--r--runtime/queries/luau/highlights.scm305
-rw-r--r--runtime/queries/luau/indents.scm3
-rw-r--r--runtime/queries/luau/injections.scm44
-rw-r--r--runtime/queries/luau/locals.scm54
5 files changed, 409 insertions, 0 deletions
diff --git a/runtime/queries/luau/folds.scm b/runtime/queries/luau/folds.scm
new file mode 100644
index 000000000..8ddaf9476
--- /dev/null
+++ b/runtime/queries/luau/folds.scm
@@ -0,0 +1,3 @@
+; inherits: lua
+
+(object_type) @fold
diff --git a/runtime/queries/luau/highlights.scm b/runtime/queries/luau/highlights.scm
new file mode 100644
index 000000000..f6f64b30c
--- /dev/null
+++ b/runtime/queries/luau/highlights.scm
@@ -0,0 +1,305 @@
+; Preproc
+(hash_bang_line) @keyword.directive
+
+; Keywords
+"return" @keyword.return
+
+"local" @keyword
+
+"type" @keyword.type
+
+"export" @keyword.import
+
+(do_statement
+ [
+ "do"
+ "end"
+ ] @keyword)
+
+(while_statement
+ [
+ "while"
+ "do"
+ "end"
+ ] @keyword.repeat)
+
+(repeat_statement
+ [
+ "repeat"
+ "until"
+ ] @keyword.repeat)
+
+[
+ (break_statement)
+ (continue_statement)
+] @keyword.repeat
+
+(if_statement
+ [
+ "if"
+ "elseif"
+ "else"
+ "then"
+ "end"
+ ] @keyword.conditional)
+
+(if_expression
+ [
+ "if"
+ "then"
+ ] @keyword.conditional)
+
+(elseif_statement
+ [
+ "elseif"
+ "then"
+ "end"
+ ] @keyword.conditional)
+
+(elseif_clause
+ [
+ "elseif"
+ "then"
+ ] @keyword.conditional)
+
+(else_statement
+ [
+ "else"
+ "end"
+ ] @keyword.conditional)
+
+(else_clause
+ "else" @keyword.conditional)
+
+(for_statement
+ [
+ "for"
+ "do"
+ "end"
+ ] @keyword.repeat)
+
+(function_declaration
+ [
+ "function"
+ "end"
+ ] @keyword.function)
+
+(function_definition
+ [
+ "function"
+ "end"
+ ] @keyword.function)
+
+; Operators
+[
+ "and"
+ "not"
+ "or"
+ "in"
+ "typeof"
+] @keyword.operator
+
+[
+ "+"
+ "-"
+ "*"
+ "/"
+ "%"
+ "^"
+ "#"
+ "=="
+ "~="
+ "<="
+ ">="
+ "<"
+ ">"
+ "="
+ "&"
+ "|"
+ "?"
+ "//"
+ ".."
+ "+="
+ "-="
+ "*="
+ "/="
+ "%="
+ "^="
+ "..="
+] @operator
+
+; Variables
+(identifier) @variable
+
+; Types
+(type/identifier) @type
+
+(generic_type
+ (identifier) @type)
+
+(builtin_type) @type.builtin
+
+((identifier) @type
+ (#lua-match? @type "^[A-Z]"))
+
+; Typedefs
+(type_definition
+ "type"
+ .
+ (type) @type.definition
+ "=")
+
+; Constants
+((identifier) @constant
+ (#lua-match? @constant "^[A-Z][A-Z_0-9]+$"))
+
+; Builtins
+((identifier) @constant.builtin
+ (#eq? @constant.builtin "_VERSION"))
+
+((identifier) @variable.builtin
+ (#eq? @variable.builtin "self"))
+
+"..." @variable.builtin
+
+((identifier) @module.builtin
+ (#any-of? @module.builtin "_G" "debug" "io" "jit" "math" "os" "package" "string" "table" "utf8"))
+
+((identifier) @keyword.coroutine
+ (#eq? @keyword.coroutine "coroutine"))
+
+; Tables
+(field
+ name: (identifier) @variable.member)
+
+(dot_index_expression
+ field: (identifier) @variable.member)
+
+(object_type
+ (identifier) @variable.member)
+
+(table_constructor
+ [
+ "{"
+ "}"
+ ] @constructor)
+
+; Functions
+(parameter
+ .
+ (identifier) @variable.parameter)
+
+(function_type
+ (identifier) @variable.parameter)
+
+(function_call
+ name: (identifier) @function.call)
+
+(function_declaration
+ name: (identifier) @function)
+
+(function_call
+ name: (dot_index_expression
+ field: (identifier) @function.call))
+
+(function_declaration
+ name: (dot_index_expression
+ field: (identifier) @function))
+
+(method_index_expression
+ method: (identifier) @function.method.call)
+
+(function_call
+ (identifier) @function.builtin
+ (#any-of? @function.builtin
+ ; built-in functions in Lua 5.1
+ "assert" "collectgarbage" "dofile" "error" "getfenv" "getmetatable" "ipairs" "load" "loadfile"
+ "loadstring" "module" "next" "pairs" "pcall" "print" "rawequal" "rawget" "rawlen" "rawset"
+ "require" "select" "setfenv" "setmetatable" "tonumber" "tostring" "type" "unpack" "xpcall"
+ "typeof" "__add" "__band" "__bnot" "__bor" "__bxor" "__call" "__concat" "__div" "__eq" "__gc"
+ "__idiv" "__index" "__le" "__len" "__lt" "__metatable" "__mod" "__mul" "__name" "__newindex"
+ "__pairs" "__pow" "__shl" "__shr" "__sub" "__tostring" "__unm"))
+
+; Literals
+(number) @number
+
+(string) @string
+
+(nil) @constant.builtin
+
+(vararg_expression) @variable.builtin
+
+[
+ (false)
+ (true)
+] @boolean
+
+; Punctuations
+[
+ ";"
+ ":"
+ "::"
+ ","
+ "."
+ "->"
+] @punctuation.delimiter
+
+[
+ "("
+ ")"
+ "["
+ "]"
+ "{"
+ "}"
+] @punctuation.bracket
+
+(variable_list
+ attribute: (attribute
+ ([
+ "<"
+ ">"
+ ] @punctuation.bracket
+ (identifier) @attribute)))
+
+(generic_type
+ [
+ "<"
+ ">"
+ ] @punctuation.bracket)
+
+(generic_type_list
+ [
+ "<"
+ ">"
+ ] @punctuation.bracket)
+
+; Comments
+(comment) @comment @spell
+
+((comment) @comment.documentation
+ (#lua-match? @comment.documentation "^[-][-][-]"))
+
+((comment) @comment.documentation
+ (#lua-match? @comment.documentation "^[-][-](%s?)@"))
+
+; string.match("123", "%d+")
+(function_call
+ (dot_index_expression
+ field: (identifier) @_method
+ (#any-of? @_method "find" "format" "match" "gmatch" "gsub"))
+ arguments: (arguments
+ .
+ (_)
+ .
+ (string
+ content: _ @string.regexp)))
+
+; ("123"):match("%d+")
+(function_call
+ (method_index_expression
+ method: (identifier) @_method
+ (#any-of? @_method "find" "format" "match" "gmatch" "gsub"))
+ arguments: (arguments
+ .
+ (string
+ content: _ @string.regexp)))
diff --git a/runtime/queries/luau/indents.scm b/runtime/queries/luau/indents.scm
new file mode 100644
index 000000000..f0af4dd33
--- /dev/null
+++ b/runtime/queries/luau/indents.scm
@@ -0,0 +1,3 @@
+; inherits: lua
+
+(object_type) @indent.begin
diff --git a/runtime/queries/luau/injections.scm b/runtime/queries/luau/injections.scm
new file mode 100644
index 000000000..558791520
--- /dev/null
+++ b/runtime/queries/luau/injections.scm
@@ -0,0 +1,44 @@
+((function_call
+ name: [
+ (identifier) @_cdef_identifier
+ (_
+ _
+ (identifier) @_cdef_identifier)
+ ]
+ arguments: (arguments
+ (string
+ content: _ @injection.content)))
+ (#eq? @_cdef_identifier "cdef")
+ (#set! injection.language "c"))
+
+((comment) @injection.content
+ (#lua-match? @injection.content "[-][-][-][%s]*@")
+ (#offset! @injection.content 0 3 0 0)
+ (#set! injection.language "luadoc"))
+
+; string.match("123", "%d+")
+(function_call
+ (dot_index_expression
+ field: (identifier) @_method
+ (#any-of? @_method "find" "format" "match" "gmatch" "gsub"))
+ arguments: (arguments
+ .
+ (_)
+ .
+ (string
+ content: _ @injection.content))
+ (#set! injection.language "luap"))
+
+; ("123"):match("%d+")
+(function_call
+ (method_index_expression
+ method: (identifier) @_method
+ (#any-of? @_method "find" "format" "match" "gmatch" "gsub"))
+ arguments: (arguments
+ .
+ (string
+ content: _ @injection.content))
+ (#set! injection.language "luap"))
+
+((comment) @injection.content
+ (#set! injection.language "comment"))
diff --git a/runtime/queries/luau/locals.scm b/runtime/queries/luau/locals.scm
new file mode 100644
index 000000000..d5420b4c8
--- /dev/null
+++ b/runtime/queries/luau/locals.scm
@@ -0,0 +1,54 @@
+; Scopes
+[
+ (chunk)
+ (do_statement)
+ (while_statement)
+ (repeat_statement)
+ (if_statement)
+ (for_statement)
+ (function_declaration)
+ (function_definition)
+] @local.scope
+
+; References
+(identifier) @local.reference
+
+; Definitions
+(assignment_statement
+ (variable_list
+ (identifier) @local.definition.var))
+
+(assignment_statement
+ (variable_list
+ (dot_index_expression
+ .
+ (_) @local.definition.associated
+ (identifier) @local.definition.var)))
+
+((function_declaration
+ name: (identifier) @local.definition.function)
+ (#set! definition.function.scope "parent"))
+
+((function_declaration
+ name: (dot_index_expression
+ .
+ (_) @local.definition.associated
+ (identifier) @local.definition.function))
+ (#set! definition.method.scope "parent"))
+
+((function_declaration
+ name: (method_index_expression
+ .
+ (_) @local.definition.associated
+ (identifier) @local.definition.method))
+ (#set! definition.method.scope "parent"))
+
+(for_generic_clause
+ (variable_list
+ (identifier) @local.definition.var))
+
+(for_numeric_clause
+ name: (identifier) @local.definition.var)
+
+(parameter
+ (identifier) @local.definition.parameter)