feat: add luau

This commit is contained in:
Amaan Qureshi 2023-04-27 04:25:19 -04:00
parent 2ce3c9080c
commit cde306813d
8 changed files with 364 additions and 0 deletions

View file

@ -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)

View file

@ -278,6 +278,9 @@
"luap": {
"revision": "393915db4b16a792da9c60f52d11d93247d870b9"
},
"luau": {
"revision": "4f8fc207b3a25b07cba1d3b4066f2872dcfe201f"
},
"m68k": {
"revision": "d097b123f19c6eaba2bf181c05420d88b9fc489d"
},

View file

@ -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",

5
queries/luau/folds.scm Normal file
View file

@ -0,0 +1,5 @@
; inherits: lua
[
(object_type)
] @fold

252
queries/luau/highlights.scm Normal file
View file

@ -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

5
queries/luau/indents.scm Normal file
View file

@ -0,0 +1,5 @@
; inherits: lua
[
(object_type)
] @indent.begin

View file

@ -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

51
queries/luau/locals.scm Normal file
View file

@ -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)