diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index e47ccbc4d..c4e602452 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -89,6 +89,7 @@ | tsx | ✓ | | | `typescript-language-server` | | twig | ✓ | | | | | typescript | ✓ | | ✓ | `typescript-language-server` | +| v | ✓ | | | `vls` | | vala | ✓ | | | `vala-language-server` | | verilog | ✓ | ✓ | | `svlangserver` | | vue | ✓ | | | `vls` | diff --git a/languages.toml b/languages.toml index e2bf26bf4..35c4b4704 100644 --- a/languages.toml +++ b/languages.toml @@ -1381,6 +1381,21 @@ indent = { tab-width = 2, unit = " " } name = "scheme" source = { git = "https://github.com/6cdh/tree-sitter-scheme", rev = "27fb77db05f890c2823b4bd751c6420378df146b" } +[[language]] +name = "v" +scope = "source.v" +file-types = ["v", "vv"] +shebangs = ["v run"] +roots = ["v.mod"] +language-server = { command = "vls", args = [] } +auto-format = true +comment-token = "//" +indent = { tab-width = 4, unit = "\t" } + +[[grammar]] +name = "v" +source = { git = "https://github.com/vlang/vls", subpath = "tree_sitter_v", rev = "3e8124ea4ab80aa08ec77f03df53f577902a0cdd" } + [[language]] name = "verilog" scope = "source.verilog" diff --git a/runtime/queries/v/highlights.scm b/runtime/queries/v/highlights.scm new file mode 100644 index 000000000..c71245dca --- /dev/null +++ b/runtime/queries/v/highlights.scm @@ -0,0 +1,150 @@ +(parameter_declaration + name: (identifier) @variable.parameter) +(function_declaration + name: (identifier) @function) +(function_declaration + receiver: (parameter_list) + name: (identifier) @function.method) + +(call_expression + function: (identifier) @function) +(call_expression + function: (selector_expression + field: (identifier) @function.method)) + +(field_identifier) @variable.other.member +(selector_expression + field: (identifier) @variable.other.member) + +(int_literal) @constant.numeric.integer +(interpreted_string_literal) @string +(rune_literal) @string +(escape_sequence) @constant.character.escape + +[ + (type_identifier) + (builtin_type) + (pointer_type) + (array_type) +] @type + +[ + (identifier) + (module_identifier) + (import_path) +] @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" +] @keyword + +[ + (true) + (false) +] @boolean + +[ + "." + "," + ":" + ";" +] @punctuation.delimiter + +[ + "(" + ")" + "{" + "}" + "[" + "]" +] @punctuation.bracket + +(array) @punctuation.bracket + +[ + "++" + "--" + + "+" + "-" + "*" + "/" + "%" + + "~" + "&" + "|" + "^" + + "!" + "&&" + "||" + "!=" + + "<<" + ">>" + + "<" + ">" + "<=" + ">=" + + "+=" + "-=" + "*=" + "/=" + "&=" + "|=" + "^=" + "<<=" + ">>=" + + "=" + ":=" + "==" + + "?" + "<-" + "$" + ".." + "..." +] @operator + +(comment) @comment \ No newline at end of file