Skip to content

Commit

Permalink
Improve tree-sitter queries for vlang (helix-editor#6279)
Browse files Browse the repository at this point in the history
- Update hightlight
- add indents
- add textobject
- add injections
  • Loading branch information
erasin authored and Sagnik Bhattacharya committed Mar 21, 2023
1 parent ba68311 commit 17a6d6e
Show file tree
Hide file tree
Showing 6 changed files with 158 additions and 51 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 @@ -140,7 +140,7 @@
| typescript |||| `typescript-language-server` |
| ungrammar || | | |
| uxntal || | | |
| v || | | `v` |
| v || | | `v` |
| vala || | | `vala-language-server` |
| verilog ||| | `svlangserver` |
| vhs || | | |
Expand Down
4 changes: 2 additions & 2 deletions languages.toml
Original file line number Diff line number Diff line change
Expand Up @@ -1687,7 +1687,7 @@ source = { git = "https://github.com/6cdh/tree-sitter-scheme", rev = "c0741320bf
[[language]]
name = "v"
scope = "source.v"
file-types = ["v", "vv"]
file-types = ["v", "vv", "vsh"]
shebangs = ["v run"]
roots = ["v.mod"]
language-server = { command = "v", args = ["ls"] }
Expand All @@ -1697,7 +1697,7 @@ indent = { tab-width = 4, unit = "\t" }

[[grammar]]
name = "v"
source = { git = "https://github.com/vlang/vls", subpath = "tree_sitter_v", rev = "3e8124ea4ab80aa08ec77f03df53f577902a0cdd" }
source = { git = "https://github.com/vlang/vls", subpath = "tree_sitter_v", rev = "66cf9d3086fb5ecc827cb32c64c5d812ab17d2c6" }

[[language]]
name = "verilog"
Expand Down
153 changes: 105 additions & 48 deletions runtime/queries/v/highlights.scm
Original file line number Diff line number Diff line change
Expand Up @@ -14,71 +14,130 @@

(field_identifier) @variable.other.member
(selector_expression
operand: (identifier) @variable
field: (identifier) @variable.other.member)

(int_literal) @constant.numeric.integer
(interpreted_string_literal) @string
(rune_literal) @string

(attribute_declaration) @attribute
(comment) @comment
[
(c_string_literal)
(raw_string_literal)
(interpreted_string_literal)
(string_interpolation)
(rune_literal)
] @string

(escape_sequence) @constant.character.escape

[
(type_identifier)
(builtin_type)
(pointer_type)
(array_type)
] @type

(const_spec name: (identifier) @constant)
(global_var_type_initializer name: (identifier) @constant)
(global_var_spec name: (identifier) @constant)
((identifier) @constant (#match? @constant "^[A-Z][A-Z\\d_]*$"))


[
(generic_type)
(type_identifier)
] @constructor

(builtin_type) @type.builtin

[
(true)
(false)
] @constant.builtin.boolean


[
(identifier)
(module_identifier)
(import_path)
] @namespace

[
(pseudo_comptime_identifier)
(label_name)
] @label

[
(identifier)
] @variable


[
"as"
"asm"
"assert"
;"atomic"
;"break"
"const"
;"continue"
"defer"
"else"
"enum"
"fn"
"for"
"$for"
"go"
"goto"
"if"
"$if"
"import"
"in"
"!in"
"interface"
"is"
"!is"
"lock"
"match"
"module"
"mut"
"or"
"pub"
"return"
"rlock"
"select"
;"shared"
;"static"
"struct"
"type"
;"union"
"unsafe"
"pub"
"assert"
"go"
"asm"
"defer"
"unsafe"
"sql"
(none)
] @keyword

[
(true)
(false)
] @boolean
"interface"
"enum"
"type"
"union"
"struct"
"module"
] @keyword.storage.type

[
"static"
"const"
"__global"
] @keyword.storage.modifier

[
"mut"
] @keyword.storage.modifier.mut

[
"shared"
"lock"
"rlock"
"spawn"
] @keyword.control

[
"if"
"select"
"else"
"match"
] @keyword.control.conditional

[
"for"
] @keyword.control.repeat

[
"goto"
"return"
] @keyword.control.return

[
"fn"
] @keyword.control.function


[
"import"
] @keyword.control.import

[
"as"
"in"
"is"
"or"
] @keyword.operator

[
"."
Expand Down Expand Up @@ -146,5 +205,3 @@
".."
"..."
] @operator

(comment) @comment
17 changes: 17 additions & 0 deletions runtime/queries/v/indents.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[
(struct_declaration)
(function_declaration)
(if_expression)
(match_expression)
(expression_case)
(default_case)
(for_statement)
(unsafe_expression)
(short_var_declaration)
] @indent

[
"]"
")"
"}"
] @outdent
6 changes: 6 additions & 0 deletions runtime/queries/v/injections.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
((comment) @injection.content
(#set! injection.language "comment"))

((sql_expression) @injection.content
(#set! injection.language "sql"))

27 changes: 27 additions & 0 deletions runtime/queries/v/textobjects.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
(function_declaration
body: (block)? @function.inside) @function.around

((function_declaration
name: (identifier) @_name
body: (block)? @test.inside) @test.around
(#match? @_name "^test"))

(fn_literal
body: (block)? @function.inside) @function.around

(parameter_list
((_) @parameter.inside . ","? @parameter.around) @parameter.around)

(call_expression
(argument_list
((_) @parameter.inside) @parameter.around))

(struct_declaration
(struct_field_declaration_list) @class.inside) @class.around

(struct_field_declaration_list
((_) @parameter.inside) @parameter.around)

(comment) @comment.inside
(comment)+ @comment.around

0 comments on commit 17a6d6e

Please sign in to comment.