From 57952c46a4f3bf75d0b9940c2c42399980416523 Mon Sep 17 00:00:00 2001
From: lydiandy <lydiandylin@gmail.com>
Date: Mon, 31 Jul 2023 07:04:55 +0800
Subject: [PATCH] replace new lsp for vlang (#7760)

* fix vlang grammar fetch and build fail

* update highlights.scm for v-analyzer

* Update languages.toml

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

* Update runtime/queries/v/highlights.scm

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

* update scm for new lsp

* gen doc lang-support.md

---------

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
---
 book/src/generated/lang-support.md |   2 +-
 languages.toml                     |   4 +-
 runtime/queries/v/highlights.scm   | 138 ++++++++++++++++++-----------
 runtime/queries/v/indents.scm      |   5 +-
 runtime/queries/v/textobjects.scm  |   6 +-
 5 files changed, 94 insertions(+), 61 deletions(-)

diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index ee7caf99..4b19c4b8 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -156,7 +156,7 @@
 | typescript | ✓ | ✓ | ✓ | `typescript-language-server` |
 | ungrammar | ✓ |  |  |  |
 | uxntal | ✓ |  |  |  |
-| v | ✓ | ✓ | ✓ | `v` |
+| v | ✓ | ✓ | ✓ | `v-analyzer` |
 | vala | ✓ |  |  | `vala-language-server` |
 | verilog | ✓ | ✓ |  | `svlangserver` |
 | vhdl | ✓ |  |  | `vhdl_ls` |
diff --git a/languages.toml b/languages.toml
index 91fc0587..b6278730 100644
--- a/languages.toml
+++ b/languages.toml
@@ -70,7 +70,7 @@ terraform-ls = { command = "terraform-ls", args = ["serve"] }
 texlab = { command = "texlab" }
 vala-language-server = { command = "vala-language-server" }
 vhdl_ls = { command = "vhdl_ls", args = [] }
-vlang-language-server = { command = "v", args = ["ls"] }
+vlang-language-server = { command = "v-analyzer" }
 vscode-css-language-server = { command = "vscode-css-language-server", args = ["--stdio"], config = { "provideFormatter" = true }}
 vscode-html-language-server = { command = "vscode-html-language-server", args = ["--stdio"], config = { provideFormatter = true } }
 vscode-json-language-server =  { command = "vscode-json-language-server", args = ["--stdio"], config = { provideFormatter = true } }
@@ -1826,7 +1826,7 @@ indent = { tab-width = 4, unit = "\t" }
 
 [[grammar]]
 name = "v"
-source = { git = "https://github.com/vlang/vls", subpath = "tree_sitter_v", rev = "66cf9d3086fb5ecc827cb32c64c5d812ab17d2c6" }
+source = {git = "https://github.com/v-analyzer/v-analyzer", subpath = "tree_sitter_v", rev = "e14fdf6e661b10edccc744102e4ccf0b187aa8ad"}
 
 [[language]]
 name = "verilog"
diff --git a/runtime/queries/v/highlights.scm b/runtime/queries/v/highlights.scm
index e014b77d..fbaf7088 100644
--- a/runtime/queries/v/highlights.scm
+++ b/runtime/queries/v/highlights.scm
@@ -1,83 +1,112 @@
+(comment) @comment
+
+(module_clause
+ (identifier) @namespace)
+
+(import_path
+ (import_name) @namespace)
+
+(import_alias
+ (import_name) @namespace)
+
+(enum_fetch
+ (reference_expression) @constant)
+
+(enum_field_definition
+ (identifier) @constant)
+
+(global_var_definition
+ (identifier) @constant)
+
+(compile_time_if_expression
+ condition: (reference_expression) @constant)
+
+(compile_time_if_expression
+ condition: (binary_expression
+              left: (reference_expression) @constant
+              right: (reference_expression) @constant))
+
+(compile_time_if_expression
+ condition: (binary_expression
+              left: (reference_expression) @constant
+              right: (unary_expression (reference_expression) @constant)))
+
+(label_reference) @label
+
 (parameter_declaration
-  name: (identifier) @variable.parameter)
+ name: (identifier) @variable.parameter)
+(receiver
+ name: (identifier) @variable.parameter)
 (function_declaration
-  name: (identifier) @function)
+ name: (identifier) @function)
 (function_declaration
-  receiver: (parameter_list)
-  name: (identifier) @function.method)
+ receiver: (receiver)
+ name: (identifier) @function.method)
+(interface_method_definition
+ name: (identifier) @function.method)
 
 (call_expression
-  function: (identifier) @function)
-(call_expression
-  function: (selector_expression
-    field: (identifier) @function.method))
+ name: (selector_expression
+  field: (reference_expression) @function.method))
+
+(call_expression
+ name: (reference_expression) @function)
+
+(struct_declaration
+ name: (identifier) @type)
+
+(enum_declaration
+ name: (identifier) @type)
+
+(interface_declaration
+ name: (identifier) @type)
+
+(type_declaration
+ name: (identifier) @type)
+
+(struct_field_declaration
+ name: (identifier) @variable.other.member)
+
+(field_name) @variable.other.member
 
-(field_identifier) @variable.other.member
 (selector_expression
-  operand: (identifier) @variable
-  field: (identifier) @variable.other.member)
+ field: (reference_expression) @variable.other.member)
 
 (int_literal) @constant.numeric.integer
-
-(attribute_declaration) @attribute
-(comment) @comment
-[
-  (c_string_literal)
-  (raw_string_literal)
-  (interpreted_string_literal)
-  (string_interpolation)
-  (rune_literal)
-] @string
-
 (escape_sequence) @constant.character.escape
 
 [
-  (pointer_type)
-  (array_type)
-] @type
+ (c_string_literal)
+ (raw_string_literal)
+ (interpreted_string_literal)
+ (string_interpolation)
+ (rune_literal)
+] @string
 
-(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_]*$"))
+(string_interpolation
+ (braced_interpolation_opening) @punctuation.bracket
+ (interpolated_expression) @embedded
+ (braced_interpolation_closing) @punctuation.bracket)
 
+(attribute) @attribute
 
 [
-  (generic_type)
-  (type_identifier)
-] @constructor 
-
-(builtin_type) @type.builtin
+ (type_reference_expression)
+ ] @type
 
 [
  (true)
  (false)
 ] @constant.builtin.boolean
 
-
-[
-  (module_identifier)
-  (import_path)
-] @namespace
-
-[
-  (pseudo_comptime_identifier)
-  (label_name)
-] @label
-
-[
-  (identifier)
-] @variable
-
-
 [
   "pub"
   "assert"
-  "go"
   "asm"
   "defer"
   "unsafe"
   "sql"
+  (nil)
   (none)
 ] @keyword
 
@@ -105,12 +134,17 @@
   "lock"
   "rlock"
   "spawn"
+  "break"
+  "continue"
+  "go"
 ] @keyword.control
 
 [
   "if"
+  "$if"
   "select"
   "else"
+  "$else"
   "match"
 ] @keyword.control.conditional
 
@@ -155,7 +189,7 @@
  "]"
 ] @punctuation.bracket
 
-(array) @punctuation.bracket
+(array_creation) @punctuation.bracket
 
 [
  "++"
diff --git a/runtime/queries/v/indents.scm b/runtime/queries/v/indents.scm
index 5573d489..21dae30f 100644
--- a/runtime/queries/v/indents.scm
+++ b/runtime/queries/v/indents.scm
@@ -3,11 +3,10 @@
   (function_declaration)
   (if_expression)
   (match_expression)
-  (expression_case)
-  (default_case)
   (for_statement)
   (unsafe_expression)
-  (short_var_declaration)
+  (var_declaration)
+  (const_declaration)
 ] @indent
 
 [
diff --git a/runtime/queries/v/textobjects.scm b/runtime/queries/v/textobjects.scm
index 40eb101f..5015af17 100644
--- a/runtime/queries/v/textobjects.scm
+++ b/runtime/queries/v/textobjects.scm
@@ -6,7 +6,7 @@
    body: (block)? @test.inside) @test.around
  (#match? @_name "^test"))
 
-(fn_literal
+(function_literal
   body: (block)? @function.inside) @function.around
 
 (parameter_list
@@ -17,9 +17,9 @@
     ((_) @parameter.inside) @parameter.around))
 
 (struct_declaration
-  (struct_field_declaration_list) @class.inside) @class.around
+    (struct_field_declaration) @class.inside) @class.around
 
-(struct_field_declaration_list
+(struct_field_declaration
   ((_) @parameter.inside) @parameter.around)
 
 (comment) @comment.inside