summaryrefslogtreecommitdiff
path: root/runtime/queries/lua
diff options
context:
space:
mode:
authorLennard Hofmann2022-10-12 13:45:56 +0000
committerGitHub2022-10-12 13:45:56 +0000
commita24fae3b3cca81a4716bc92915005cd424ccf23b (patch)
treea3534f397bfe1bad40538d2793973516518c1bc0 /runtime/queries/lua
parent68909dcef46c7b68f1a92cdc7fd04eb89549b6fb (diff)
Update tree-sitter-lua and add textobjects for Lua (#3552)
Diffstat (limited to 'runtime/queries/lua')
-rw-r--r--runtime/queries/lua/folds.scm10
-rw-r--r--runtime/queries/lua/highlights.scm77
-rw-r--r--runtime/queries/lua/indents.scm10
-rw-r--r--runtime/queries/lua/injections.scm3
-rw-r--r--runtime/queries/lua/textobjects.scm15
5 files changed, 70 insertions, 45 deletions
diff --git a/runtime/queries/lua/folds.scm b/runtime/queries/lua/folds.scm
new file mode 100644
index 00000000..d8f0b42d
--- /dev/null
+++ b/runtime/queries/lua/folds.scm
@@ -0,0 +1,10 @@
+[
+ (do_statement)
+ (while_statement)
+ (repeat_statement)
+ (if_statement)
+ (for_statement)
+ (function_declaration)
+ (function_definition)
+ (table_constructor)
+] @fold
diff --git a/runtime/queries/lua/highlights.scm b/runtime/queries/lua/highlights.scm
index e73b32d6..f48e607c 100644
--- a/runtime/queries/lua/highlights.scm
+++ b/runtime/queries/lua/highlights.scm
@@ -1,7 +1,8 @@
;;; Highlighting for lua
;;; Builtins
-(self) @variable.builtin
+((identifier) @variable.builtin
+ (#eq? @variable.builtin "self"))
;; Keywords
@@ -12,20 +13,20 @@
"end"
] @keyword.control.conditional)
+(elseif_statement
[
- "else"
"elseif"
"then"
-] @keyword.control.conditional
+ "end"
+] @keyword.control.conditional)
-(for_statement
+(else_statement
[
- "for"
- "do"
+ "else"
"end"
-] @keyword.control.repeat)
+] @keyword.control.conditional)
-(for_in_statement
+(for_statement
[
"for"
"do"
@@ -51,21 +52,34 @@
"end"
] @keyword)
+"return" @keyword.control.return
+
[
"in"
"local"
(break_statement)
"goto"
- "return"
] @keyword
+(function_declaration
+[
+ "function"
+ "end"
+] @keyword.function)
+
+(function_definition
+[
+ "function"
+ "end"
+] @keyword.function)
+
;; Operators
[
"not"
"and"
"or"
-] @operator
+] @keyword.operator
[
"="
@@ -95,6 +109,7 @@
["," "." ":" ";"] @punctuation.delimiter
;; Brackets
+
[
"("
")"
@@ -110,7 +125,8 @@
(true)
] @constant.builtin.boolean
(nil) @constant.builtin
-(spread) @constant ;; "..."
+(vararg_expression) @constant
+
((identifier) @constant
(#match? @constant "^[A-Z][A-Z_0-9]*$"))
@@ -119,45 +135,32 @@
(identifier) @variable.parameter)
; ;; Functions
-(function [(function_name) (identifier)] @function)
-(function ["function" "end"] @keyword.function)
-
-(function
- (function_name
- (function_name_field
- (property_identifier) @function .)))
-
-(local_function (identifier) @function)
-(local_function ["function" "end"] @keyword.function)
+(function_declaration name: (identifier) @function)
+(function_call name: (identifier) @function.call)
-(variable_declaration
- (variable_declarator (identifier) @function) (function_definition))
-(local_variable_declaration
- (variable_declarator (identifier) @function) (function_definition))
+(function_declaration name: (dot_index_expression field: (identifier) @function))
+(function_call name: (dot_index_expression field: (identifier) @function.call))
-(function_definition ["function" "end"] @keyword.function)
+; TODO: incorrectly highlights variable N in `N, nop = 42, function() end`
+(assignment_statement
+ (variable_list
+ name: (identifier) @function)
+ (expression_list
+ value: (function_definition)))
-(function_call
- [
- ((identifier) @variable (method) @function.method)
- ((_) (method) @function.method)
- (identifier) @function
- (field_expression (property_identifier) @function)
- ]
- . (arguments))
+(method_index_expression method: (identifier) @function.method)
;; Nodes
-(table ["{" "}"] @constructor)
(comment) @comment
(string) @string
(number) @constant.numeric.integer
(label_statement) @label
; A bit of a tricky one, this will only match field names
(field . (identifier) @variable.other.member (_))
-(shebang) @comment
+(hash_bang_line) @comment
;; Property
-(property_identifier) @variable.other.member
+(dot_index_expression field: (identifier) @variable.other.member)
;; Variable
(identifier) @variable
diff --git a/runtime/queries/lua/indents.scm b/runtime/queries/lua/indents.scm
index 55a812c5..2e5a108e 100644
--- a/runtime/queries/lua/indents.scm
+++ b/runtime/queries/lua/indents.scm
@@ -1,17 +1,13 @@
[
(function_definition)
- (variable_declaration)
- (local_variable_declaration)
+ (function_declaration)
+ (method_index_expression)
(field)
- (local_function)
- (function)
(if_statement)
(for_statement)
- (for_in_statement)
(repeat_statement)
- (return_statement)
(while_statement)
- (table)
+ (table_constructor)
(arguments)
(do_statement)
] @indent
diff --git a/runtime/queries/lua/injections.scm b/runtime/queries/lua/injections.scm
index 321c90ad..fca94d58 100644
--- a/runtime/queries/lua/injections.scm
+++ b/runtime/queries/lua/injections.scm
@@ -1,2 +1,3 @@
((comment) @injection.content
- (#set! injection.language "comment"))
+ (#set! injection.language "comment")
+ (#set! injection.include-children))
diff --git a/runtime/queries/lua/textobjects.scm b/runtime/queries/lua/textobjects.scm
new file mode 100644
index 00000000..6fb2000d
--- /dev/null
+++ b/runtime/queries/lua/textobjects.scm
@@ -0,0 +1,15 @@
+(function_definition
+ body: (_) @function.inside) @function.around
+
+(function_declaration
+ body: (_) @function.inside) @function.around
+
+(parameters
+ ((_) @parameter.inside . ","? @parameter.around) @parameter.around)
+
+(arguments
+ ((_) @parameter.inside . ","? @parameter.around) @parameter.around)
+
+(comment) @comment.inside
+
+(comment)+ @comment.around