summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--languages.toml2
-rw-r--r--runtime/queries/lua/highlights.scm81
2 files changed, 69 insertions, 14 deletions
diff --git a/languages.toml b/languages.toml
index ea2339f8..fb4cda22 100644
--- a/languages.toml
+++ b/languages.toml
@@ -1129,7 +1129,7 @@ language-servers = [ "lua-language-server" ]
[[grammar]]
name = "lua"
-source = { git = "https://github.com/MunifTanjim/tree-sitter-lua", rev = "887dfd4e83c469300c279314ff1619b1d0b85b91" }
+source = { git = "https://github.com/tree-sitter-grammars/tree-sitter-lua", rev = "88e446476a1e97a8724dff7a23e2d709855077f2" }
[[language]]
name = "svelte"
diff --git a/runtime/queries/lua/highlights.scm b/runtime/queries/lua/highlights.scm
index f48e607c..2f3b3c05 100644
--- a/runtime/queries/lua/highlights.scm
+++ b/runtime/queries/lua/highlights.scm
@@ -1,9 +1,5 @@
;;; Highlighting for lua
-;;; Builtins
-((identifier) @variable.builtin
- (#eq? @variable.builtin "self"))
-
;; Keywords
(if_statement
@@ -130,16 +126,65 @@
((identifier) @constant
(#match? @constant "^[A-Z][A-Z_0-9]*$"))
-;; Parameters
-(parameters
- (identifier) @variable.parameter)
+;; Tables
+
+(field name: (identifier) @variable.other.member)
+
+(dot_index_expression field: (identifier) @variable.other.member)
+
+(table_constructor
+[
+ "{"
+ "}"
+] @constructor)
-; ;; Functions
-(function_declaration name: (identifier) @function)
-(function_call name: (identifier) @function.call)
+;; Functions
-(function_declaration name: (dot_index_expression field: (identifier) @function))
-(function_call name: (dot_index_expression field: (identifier) @function.call))
+(parameters (identifier) @variable.parameter)
+
+(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" "rawset" "require" "select" "setfenv" "setmetatable"
+ "tonumber" "tostring" "type" "unpack" "xpcall"))
+
+(function_declaration
+ name: [
+ (identifier) @function
+ (dot_index_expression
+ field: (identifier) @function)
+ ])
+
+(function_declaration
+ name: (method_index_expression
+ method: (identifier) @function.method))
+
+(assignment_statement
+ (variable_list .
+ name: [
+ (identifier) @function
+ (dot_index_expression
+ field: (identifier) @function)
+ ])
+ (expression_list .
+ value: (function_definition)))
+
+(table_constructor
+ (field
+ name: (identifier) @function
+ value: (function_definition)))
+
+(function_call
+ name: [
+ (identifier) @function.call
+ (dot_index_expression
+ field: (identifier) @function.call)
+ (method_index_expression
+ method: (identifier) @function.method.call)
+ ])
; TODO: incorrectly highlights variable N in `N, nop = 42, function() end`
(assignment_statement
@@ -153,6 +198,7 @@
;; Nodes
(comment) @comment
(string) @string
+(escape_sequence) @constant.character.escape
(number) @constant.numeric.integer
(label_statement) @label
; A bit of a tricky one, this will only match field names
@@ -162,7 +208,16 @@
;; Property
(dot_index_expression field: (identifier) @variable.other.member)
-;; Variable
+;; Variables
+((identifier) @variable.builtin
+ (#eq? @variable.builtin "self"))
+
+(variable_list
+ (attribute
+ "<" @punctuation.bracket
+ (identifier) @attribute
+ ">" @punctuation.bracket))
+
(identifier) @variable
;; Error