aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua8
-rw-r--r--queries/luau/folds.scm5
-rw-r--r--queries/luau/highlights.scm252
-rw-r--r--queries/luau/indents.scm5
-rw-r--r--queries/luau/injections.scm39
-rw-r--r--queries/luau/locals.scm51
8 files changed, 364 insertions, 0 deletions
diff --git a/README.md b/README.md
index c14ebdb62..d633d57c9 100644
--- a/README.md
+++ b/README.md
@@ -266,6 +266,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [lua](https://github.com/MunifTanjim/tree-sitter-lua) (maintained by @muniftanjim)
- [x] [luadoc](https://github.com/amaanq/tree-sitter-luadoc) (maintained by @amaanq)
- [x] [lua patterns](https://github.com/amaanq/tree-sitter-luap) (maintained by @amaanq)
+- [x] [luau](https://github.com/amaanq/tree-sitter-luau) (maintained by @amaanq)
- [x] [m68k](https://github.com/grahambates/tree-sitter-m68k) (maintained by @grahambates)
- [x] [make](https://github.com/alemuller/tree-sitter-make) (maintained by @lewis6991)
- [x] [markdown (basic highlighting)](https://github.com/MDeiml/tree-sitter-markdown) (experimental, maintained by @MDeiml)
diff --git a/lockfile.json b/lockfile.json
index 14e94dee2..e18d3d340 100644
--- a/lockfile.json
+++ b/lockfile.json
@@ -278,6 +278,9 @@
"luap": {
"revision": "393915db4b16a792da9c60f52d11d93247d870b9"
},
+ "luau": {
+ "revision": "4f8fc207b3a25b07cba1d3b4066f2872dcfe201f"
+ },
"m68k": {
"revision": "d097b123f19c6eaba2bf181c05420d88b9fc489d"
},
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index 14c2b6999..e859f297d 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -851,6 +851,14 @@ list.luap = {
readme_name = "lua patterns",
}
+list.luau = {
+ install_info = {
+ url = "https://github.com/amaanq/tree-sitter-luau",
+ files = { "src/parser.c", "src/scanner.c" },
+ },
+ maintainers = { "@amaanq" },
+}
+
list.m68k = {
install_info = {
url = "https://github.com/grahambates/tree-sitter-m68k",
diff --git a/queries/luau/folds.scm b/queries/luau/folds.scm
new file mode 100644
index 000000000..11b644ef6
--- /dev/null
+++ b/queries/luau/folds.scm
@@ -0,0 +1,5 @@
+; inherits: lua
+
+[
+ (object_type)
+] @fold
diff --git a/queries/luau/highlights.scm b/queries/luau/highlights.scm
new file mode 100644
index 000000000..5f7d7da90
--- /dev/null
+++ b/queries/luau/highlights.scm
@@ -0,0 +1,252 @@
+; Preproc
+
+(hash_bang_line) @preproc
+
+;; Keywords
+
+"return" @keyword.return
+
+[
+ "local"
+ "type"
+ "export"
+] @keyword
+
+(do_statement
+[
+ "do"
+ "end"
+] @keyword)
+
+(while_statement
+[
+ "while"
+ "do"
+ "end"
+] @repeat)
+
+(repeat_statement
+[
+ "repeat"
+ "until"
+] @repeat)
+
+[
+ (break_statement)
+ (continue_statement)
+] @repeat
+
+(if_statement
+[
+ "if"
+ "elseif"
+ "else"
+ "then"
+ "end"
+] @conditional)
+
+(elseif_statement
+[
+ "elseif"
+ "then"
+ "end"
+] @conditional)
+
+(else_statement
+[
+ "else"
+ "end"
+] @conditional)
+
+(for_statement
+[
+ "for"
+ "do"
+ "end"
+] @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)
+
+(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"))
+
+((identifier) @namespace.builtin
+ (#any-of? @namespace.builtin "_G" "debug" "io" "jit" "math" "os" "package" "string" "table" "utf8"))
+
+((identifier) @keyword.coroutine
+ (#eq? @keyword.coroutine "coroutine"))
+
+;; Tables
+
+(field name: (identifier) @field)
+
+(dot_index_expression field: (identifier) @field)
+
+(object_type (identifier) @field)
+
+(table_constructor
+[
+ "{"
+ "}"
+] @constructor)
+
+; Functions
+
+(parameter . (identifier) @parameter)
+(function_type (identifier) @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) @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 @spell
+
+(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?)@"))
+
+; Errors
+
+(ERROR) @error
diff --git a/queries/luau/indents.scm b/queries/luau/indents.scm
new file mode 100644
index 000000000..e03d0ff48
--- /dev/null
+++ b/queries/luau/indents.scm
@@ -0,0 +1,5 @@
+; inherits: lua
+
+[
+ (object_type)
+] @indent.begin
diff --git a/queries/luau/injections.scm b/queries/luau/injections.scm
new file mode 100644
index 000000000..b24330f31
--- /dev/null
+++ b/queries/luau/injections.scm
@@ -0,0 +1,39 @@
+((function_call
+ name: [
+ (identifier) @_cdef_identifier
+ (_ _ (identifier) @_cdef_identifier)
+ ]
+ arguments: (arguments (string content: _ @c)))
+ (#eq? @_cdef_identifier "cdef"))
+
+((comment) @luadoc
+ (#lua-match? @luadoc "[-][-][-][%s]*@")
+ (#offset! @luadoc 0 3 0 0))
+
+; string.match("123", "%d+")
+(function_call
+ (dot_index_expression
+ field: (identifier) @_method
+ (#any-of? @_method "find" "format" "match"))
+ arguments: (arguments (_) . (string content: _ @luap)))
+
+(function_call
+ (dot_index_expression
+ field: (identifier) @_method
+ (#any-of? @_method "gmatch" "gsub"))
+ arguments: (arguments (_) (string content: _ @luap)))
+
+; ("123"):match("%d+")
+(function_call
+ (method_index_expression
+ method: (identifier) @_method
+ (#any-of? @_method "find" "format" "match"))
+ arguments: (arguments . (string content: _ @luap)))
+
+(function_call
+ (method_index_expression
+ method: (identifier) @_method
+ (#any-of? @_method "gmatch" "gsub"))
+ arguments: (arguments (string content: _ @luap)))
+
+(comment) @comment
diff --git a/queries/luau/locals.scm b/queries/luau/locals.scm
new file mode 100644
index 000000000..b57ef5802
--- /dev/null
+++ b/queries/luau/locals.scm
@@ -0,0 +1,51 @@
+; Scopes
+
+[
+ (chunk)
+ (do_statement)
+ (while_statement)
+ (repeat_statement)
+ (if_statement)
+ (for_statement)
+ (function_declaration)
+ (function_definition)
+] @scope
+
+; References
+
+[
+ (identifier)
+] @reference
+
+; Definitions
+
+(assignment_statement
+ (variable_list
+ (identifier) @definition.var))
+
+(assignment_statement
+ (variable_list
+ (dot_index_expression . (_) @definition.associated (identifier) @definition.var)))
+
+((function_declaration
+ name: (identifier) @definition.function)
+ (#set! definition.function.scope "parent"))
+
+((function_declaration
+ name: (dot_index_expression
+ . (_) @definition.associated (identifier) @definition.function))
+ (#set! definition.method.scope "parent"))
+
+((function_declaration
+ name: (method_index_expression
+ . (_) @definition.associated (identifier) @definition.method))
+ (#set! definition.method.scope "parent"))
+
+(for_generic_clause
+ (variable_list
+ (identifier) @definition.var))
+
+(for_numeric_clause
+ name: (identifier) @definition.var)
+
+(parameter (identifier) @definition.parameter)