diff options
| -rw-r--r-- | README.md | 1 | ||||
| -rw-r--r-- | lockfile.json | 3 | ||||
| -rw-r--r-- | lua/nvim-treesitter/parsers.lua | 8 | ||||
| -rw-r--r-- | queries/luau/folds.scm | 5 | ||||
| -rw-r--r-- | queries/luau/highlights.scm | 252 | ||||
| -rw-r--r-- | queries/luau/indents.scm | 5 | ||||
| -rw-r--r-- | queries/luau/injections.scm | 39 | ||||
| -rw-r--r-- | queries/luau/locals.scm | 51 |
8 files changed, 364 insertions, 0 deletions
@@ -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) |
