Skip to content

Commit

Permalink
Update tree-sitter-lua and add textobjects for Lua (helix-editor#3552)
Browse files Browse the repository at this point in the history
  • Loading branch information
Ordoviz authored and pathwave committed Nov 4, 2022
1 parent 5d1f6b9 commit ba6bbb0
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 47 deletions.
2 changes: 1 addition & 1 deletion book/src/generated/lang-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
| llvm |||| |
| llvm-mir |||| |
| llvm-mir-yaml || || |
| lua || || `lua-language-server` |
| lua || || `lua-language-server` |
| make || | | |
| markdown || | | `marksman` |
| markdown.inline || | | |
Expand Down
2 changes: 1 addition & 1 deletion languages.toml
Original file line number Diff line number Diff line change
Expand Up @@ -667,7 +667,7 @@ language-server = { command = "lua-language-server", args = [] }

[[grammar]]
name = "lua"
source = { git = "https://github.com/nvim-treesitter/tree-sitter-lua", rev = "6f5d40190ec8a0aa8c8410699353d820f4f7d7a6" }
source = { git = "https://github.com/MunifTanjim/tree-sitter-lua", rev = "887dfd4e83c469300c279314ff1619b1d0b85b91" }

[[language]]
name = "svelte"
Expand Down
10 changes: 10 additions & 0 deletions runtime/queries/lua/folds.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[
(do_statement)
(while_statement)
(repeat_statement)
(if_statement)
(for_statement)
(function_declaration)
(function_definition)
(table_constructor)
] @fold
77 changes: 40 additions & 37 deletions runtime/queries/lua/highlights.scm
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
;;; Highlighting for lua

;;; Builtins
(self) @variable.builtin
((identifier) @variable.builtin
(#eq? @variable.builtin "self"))

;; Keywords

Expand All @@ -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"
Expand All @@ -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

[
"="
Expand Down Expand Up @@ -95,6 +109,7 @@
["," "." ":" ";"] @punctuation.delimiter

;; Brackets

[
"("
")"
Expand All @@ -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]*$"))

Expand All @@ -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
Expand Down
10 changes: 3 additions & 7 deletions runtime/queries/lua/indents.scm
Original file line number Diff line number Diff line change
@@ -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
Expand Down
3 changes: 2 additions & 1 deletion runtime/queries/lua/injections.scm
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
((comment) @injection.content
(#set! injection.language "comment"))
(#set! injection.language "comment")
(#set! injection.include-children))
15 changes: 15 additions & 0 deletions runtime/queries/lua/textobjects.scm
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit ba6bbb0

Please sign in to comment.