aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErasin Wang2023-03-15 21:22:24 +0000
committerGitHub2023-03-15 21:22:24 +0000
commitfb56a4bb75121f4797d80e14bceee9feb870cfb2 (patch)
tree07d59a181f3e9cec1a64dbc6a65273fb18d9bb50
parent64c137bd3d7ac7f82f538f5dd520e3aa8bca0d1a (diff)
Improve tree-sitter queries for vlang (#6279)
- Update hightlight - add indents - add textobject - add injections
-rw-r--r--book/src/generated/lang-support.md2
-rw-r--r--languages.toml4
-rw-r--r--runtime/queries/v/highlights.scm153
-rw-r--r--runtime/queries/v/indents.scm17
-rw-r--r--runtime/queries/v/injections.scm6
-rw-r--r--runtime/queries/v/textobjects.scm27
6 files changed, 158 insertions, 51 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 48cb66f1..8aefe581 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -140,7 +140,7 @@
| typescript | ✓ | ✓ | ✓ | `typescript-language-server` |
| ungrammar | ✓ | | | |
| uxntal | ✓ | | | |
-| v | ✓ | | | `v` |
+| v | ✓ | ✓ | ✓ | `v` |
| vala | ✓ | | | `vala-language-server` |
| verilog | ✓ | ✓ | | `svlangserver` |
| vhs | ✓ | | | |
diff --git a/languages.toml b/languages.toml
index 5afd36c9..42ebf154 100644
--- a/languages.toml
+++ b/languages.toml
@@ -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"] }
@@ -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"
diff --git a/runtime/queries/v/highlights.scm b/runtime/queries/v/highlights.scm
index c71245dc..e014b77d 100644
--- a/runtime/queries/v/highlights.scm
+++ b/runtime/queries/v/highlights.scm
@@ -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
[
"."
@@ -146,5 +205,3 @@
".."
"..."
] @operator
-
-(comment) @comment \ No newline at end of file
diff --git a/runtime/queries/v/indents.scm b/runtime/queries/v/indents.scm
new file mode 100644
index 00000000..5573d489
--- /dev/null
+++ b/runtime/queries/v/indents.scm
@@ -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
diff --git a/runtime/queries/v/injections.scm b/runtime/queries/v/injections.scm
new file mode 100644
index 00000000..f698de83
--- /dev/null
+++ b/runtime/queries/v/injections.scm
@@ -0,0 +1,6 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
+
+((sql_expression) @injection.content
+ (#set! injection.language "sql"))
+
diff --git a/runtime/queries/v/textobjects.scm b/runtime/queries/v/textobjects.scm
new file mode 100644
index 00000000..40eb101f
--- /dev/null
+++ b/runtime/queries/v/textobjects.scm
@@ -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
+