diff options
| author | tami5 <kkharji@protonmail.com> | 2022-02-22 17:36:44 +0300 |
|---|---|---|
| committer | Stephan Seitz <stephan.seitz@fau.de> | 2022-05-21 13:48:58 +0200 |
| commit | 010f3642956099806f25793f92ba58f1a3114c17 (patch) | |
| tree | a08b8f9e1e8132162f8aa3f339c95772c3340335 | |
| parent | Add wiki link to information on languages (diff) | |
| download | nvim-treesitter-010f3642956099806f25793f92ba58f1a3114c17.tar nvim-treesitter-010f3642956099806f25793f92ba58f1a3114c17.tar.gz nvim-treesitter-010f3642956099806f25793f92ba58f1a3114c17.tar.bz2 nvim-treesitter-010f3642956099806f25793f92ba58f1a3114c17.tar.lz nvim-treesitter-010f3642956099806f25793f92ba58f1a3114c17.tar.xz nvim-treesitter-010f3642956099806f25793f92ba58f1a3114c17.tar.zst nvim-treesitter-010f3642956099806f25793f92ba58f1a3114c17.zip | |
feat(vlang): initial support
Add support for vlang filetypes.
- [ ] Highlight `C` as builtin variable. This is FFI in vlang land,
where C act like extern and access c functions. The vlang parser does
some extension between C function calls and arguments but I believe
highlighting C as builtin variable is sufficient indicator for now. I
tried to use offset! but failed. Any suggestions?
- [ ] Set up parser url. the vlang parser is located within [vls] repo. Is
installing from nested repo supported? `tree_sitter_v/src/parser.c`?
[vls]: https://github.com/vlang/vls/tree/master/tree_sitter_v
cc @elianiva @theHamsta
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | lua/nvim-treesitter/parsers.lua | 11 | ||||
| -rw-r--r-- | queries/v/folds.scm | 8 | ||||
| -rw-r--r-- | queries/v/highlights.scm | 387 | ||||
| -rw-r--r-- | queries/v/indents.scm | 18 | ||||
| -rw-r--r-- | queries/v/injections.scm | 6 | ||||
| -rw-r--r-- | queries/v/locals.scm | 29 |
7 files changed, 460 insertions, 1 deletions
@@ -402,7 +402,7 @@ in the `install_info` table for you parser config. Queries are what `nvim-treesitter` uses to extract information from the syntax tree; they are located in the `queries/{language}/*` runtime directories (see `:h rtp`), like the `queries` folder of this plugin, e.g. `queries/{language}/{locals,highlights,textobjects}.scm`. -Other modules may require additional queries such as `folding.scm`. You can find a +Other modules may require additional queries such as `folding.scm`. You can find a list of all supported capture names in [CONTRIBUTING.md](https://github.com/nvim-treesitter/nvim-treesitter/blob/master/CONTRIBUTING.md#parser-configurations). All queries found in the runtime directories will be combined. diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 51d8f29d0..93e333236 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1068,6 +1068,17 @@ list.proto = { filetype = "proto", } +list.v = { + install_info = { + url = "~/sources/vls/tree_sitter_v", + files = { "src/parser.c", "src/scanner.c" }, + generate_requires_npm = false, + requires_generate_from_grammar = false, + }, + filetype = "vlang", + maintainers = { "@tami5" }, +} + local M = { list = list, filetype_to_parsername = filetype_to_parsername, diff --git a/queries/v/folds.scm b/queries/v/folds.scm new file mode 100644 index 000000000..d8ded9257 --- /dev/null +++ b/queries/v/folds.scm @@ -0,0 +1,8 @@ +;; WARNING: Doesn't seems to work .. +[(function_declaration) + (const_declaration) + (type_declaration) + (var_declaration) + (import_declaration) + (if_expression) + (struct_declaration)] @fold diff --git a/queries/v/highlights.scm b/queries/v/highlights.scm new file mode 100644 index 000000000..9d31354aa --- /dev/null +++ b/queries/v/highlights.scm @@ -0,0 +1,387 @@ +;; reference https://github.com/vlang/vls +;; rev: c3e9874fa6c3b38beaa50d53aff4967403e251a4 + +;; Identifiers ------------------- +(import_path) @namespace +[(module_identifier) ] @variable.builtin +[(identifier)] @variable + +[(type_identifier) (array_type) (pointer_type)] @type + +(field_identifier) @property + +(builtin_type) @type.builtin + +(parameter_declaration + name: (identifier) @parameter) + +(const_spec + name: (identifier) @constant) + +((((selector_expression field: (identifier) @property)) @_parent + (#not-has-parent? @_parent call_expression special_call_expression))) + +((identifier) @variable.builtin + (#match? @variable.builtin "^err$")) + +;; C: TODO: fixme make `C`.exten highlighted as variable.builtin +; ((binded_identifier) @content +; (#offset! @content 0 3 0 -1) +; (#match? @content "^C$")) + +;; Function calls ---------------- +(call_expression + function: (identifier) @function) + +(((_ + function: (selector_expression field: (identifier) @function) + arguments: (_) @_args) + (#not-has-type? @_args arguments_list))) + +((call_expression + function: (binded_identifier name: (identifier) @function) + @function)) + + +;; Function definitions --------- +(function_declaration + name: (identifier) @function) + +(function_declaration + receiver: (parameter_list) + name: (identifier) @method) + +((function_declaration + (binded_identifier name: (identifier) @function) + @function)) + +;; Keywords + +[ + "as" + "asm" + "assert" + "const" + "defer" + "else" + "enum" + "$for" + "go" + "goto" + "if" + "$if" + "import" + "in" + "!in" + "interface" + "is" + "!is" + "lock" + "match" + "module" + "mut" + "or" + "pub" + "rlock" + "select" + "struct" + "type" + "unsafe"] + ;; Either not supported or will be droped + ;"atomic" + ;"break" + ; "continue" + ;"shared" + ;"static" + ;"union" +@keyword + +"fn" @keyword.function +"return" @keyword.return +"for" @repeat + +; "import" @include ;; note: comment out b/c of import_path @namespace + +[ (true) (false)] @boolean + + + +;; Conditionals ---------------- +[ "else" "if"] @conditional + +;; Operators ---------------- +[ "." "," ":" ";"] @punctuation.delimiter + +[ "(" ")" "{" "}" "[" "]"] @punctuation.bracket + +(array) @punctuation.bracket + +[ + "++" + "--" + + "+" + "-" + "*" + "/" + "%" + + "~" + "&" + "|" + "^" + + "!" + "&&" + "||" + "!=" + + "<<" + ">>" + + "<" + ">" + "<=" + ">=" + + "+=" + "-=" + "*=" + "/=" + "&=" + "|=" + "^=" + "<<=" + ">>=" + + "=" + ":=" + "==" + + "?" + "<-" + "$" + ".." + "..."] +@operator + +;; Builtin Functions, maybe redundant with (builtin_type) +((identifier) @function.builtin + (#any-of? @function.builtin + "eprint" + "eprintln" + "error" + "exit" + "panic" + "print" + "println" + "after" + "after_char" + "all" + "all_after" + "all_after_last" + "all_before" + "all_before_last" + "any" + "ascii_str" + "before" + "bool" + "byte" + "byterune" + "bytes" + "bytestr" + "c_error_number_str" + "capitalize" + "clear" + "clone" + "clone_to_depth" + "close" + "code" + "compare" + "compare_strings" + "contains" + "contains_any" + "contains_any_substr" + "copy" + "count" + "cstring_to_vstring" + "delete" + "delete_last" + "delete_many" + "ends_with" + "eprint" + "eprintln" + "eq_epsilon" + "error" + "error_with_code" + "exit" + "f32" + "f32_abs" + "f32_max" + "f32_min" + "f64" + "f64_max" + "fields" + "filter" + "find_between" + "first" + "flush_stderr" + "flush_stdout" + "free" + "gc_check_leaks" + "get_str_intp_u32_format" + "get_str_intp_u64_format" + "grow_cap" + "grow_len" + "hash" + "hex" + "hex2" + "hex_full" + "i16" + "i64" + "i8" + "index" + "index_after" + "index_any" + "index_byte" + "insert" + "int" + "is_alnum" + "is_bin_digit" + "is_capital" + "is_digit" + "is_hex_digit" + "is_letter" + "is_lower" + "is_oct_digit" + "is_space" + "is_title" + "is_upper" + "isnil" + "join" + "join_lines" + "keys" + "last" + "last_index" + "last_index_byte" + "length_in_bytes" + "limit" + "malloc" + "malloc_noscan" + "map" + "match_glob" + "memdup" + "memdup_noscan" + "move" + "msg" + "panic" + "panic_error_number" + "panic_lasterr" + "panic_optional_not_set" + "parse_int" + "parse_uint" + "pointers" + "pop" + "prepend" + "print" + "print_backtrace" + "println" + "proc_pidpath" + "ptr_str" + "push_many" + "realloc_data" + "reduce" + "repeat" + "repeat_to_depth" + "replace" + "replace_each" + "replace_once" + "reverse" + "reverse_in_place" + "runes" + "sort" + "sort_by_len" + "sort_ignore_case" + "sort_with_compare" + "split" + "split_any" + "split_into_lines" + "split_nth" + "starts_with" + "starts_with_capital" + "str" + "str_escaped" + "str_intp" + "str_intp_g32" + "str_intp_g64" + "str_intp_rune" + "str_intp_sq" + "str_intp_sub" + "strg" + "string_from_wide" + "string_from_wide2" + "strip_margin" + "strip_margin_custom" + "strlong" + "strsci" + "substr" + "substr_ni" + "substr_with_check" + "title" + "to_lower" + "to_upper" + "to_wide" + "tos" + "tos2" + "tos3" + "tos4" + "tos5" + "tos_clone" + "trim" + "trim_left" + "trim_pr" + "try_pop" + "try_push" + "utf32_decode_to_buffer" + "utf32_to_str" + "utf32_to_str_no_malloc" + "utf8_char_len" + "utf8_getchar" + "utf8_str_len" + "utf8_str_visible_length" + "utf8_to_utf32" + "v_realloc" + "vbytes" + "vcalloc" + "vcalloc_noscan" + "vmemcmp" + "vmemcpy" + "vmemmove" + "vmemset" + "vstring" + "vstring_literal" + "vstring_literal_with_len" + "vstring_with_len" + "vstrlen" + "vstrlen_char" + "winapi_lasterr_str")) + + +;; Literals + +(int_literal) @number + +(interpreted_string_literal) @string + +(rune_literal) @string + +(escape_sequence) @string.escape + +(float_literal) @float + +[(true) (false)] @boolean + +(ERROR) @error + +(comment) @comment + diff --git a/queries/v/indents.scm b/queries/v/indents.scm new file mode 100644 index 000000000..4e59fa9ae --- /dev/null +++ b/queries/v/indents.scm @@ -0,0 +1,18 @@ +[(import_declaration + (const_declaration) + (var_declaration) + (type_declaration) + (literal_value) + (type_initializer) + (block) + (map) + (call_expression) + (parameter_list))] +@indent + +[ "}"] +@branch + +(parameter_list ")" @branch) + +(comment) @ignore diff --git a/queries/v/injections.scm b/queries/v/injections.scm new file mode 100644 index 000000000..b77e7c630 --- /dev/null +++ b/queries/v/injections.scm @@ -0,0 +1,6 @@ +(comment) @comment +;; asm_statement if asm ever highlighted :) + +;; #include <...> +(hash_statement) @c + diff --git a/queries/v/locals.scm b/queries/v/locals.scm new file mode 100644 index 000000000..ed2e3a6d4 --- /dev/null +++ b/queries/v/locals.scm @@ -0,0 +1,29 @@ +((function_declaration + name: (identifier) @definition.function)) ;@function + +(short_var_declaration + left: (expression_list + (identifier) @definition.var)) + +((function_declaration + name: (binded_identifier + name: (identifier) @definition.function))) + +(const_declaration (const_spec (identifier) @definition.var)) + +(identifier) @reference +(type_identifier) @reference + +((call_expression function: (identifier) @reference) + (set! reference.kind "call")) + +((call_expression + function: (selector_expression + field: (identifier) @function)) + (set! reference.kind "call")) + +(source_file) @scope +(function_declaration) @scope +(if_expression) @scope +(block) @scope +(for_statement) @scope |
