diff options
| author | Amaan Qureshi <amaanq12@gmail.com> | 2023-08-22 02:10:29 -0400 |
|---|---|---|
| committer | Amaan Qureshi <amaanq12@gmail.com> | 2023-08-24 02:52:48 -0400 |
| commit | c58694685d0a4387ea10aeac1932c6afc55bcf3e (patch) | |
| tree | fcf5551992e32b84dc5dc4bf5662122268322d7d | |
| parent | refactor: replace some match & vim-match usages (diff) | |
| download | nvim-treesitter-c58694685d0a4387ea10aeac1932c6afc55bcf3e.tar nvim-treesitter-c58694685d0a4387ea10aeac1932c6afc55bcf3e.tar.gz nvim-treesitter-c58694685d0a4387ea10aeac1932c6afc55bcf3e.tar.bz2 nvim-treesitter-c58694685d0a4387ea10aeac1932c6afc55bcf3e.tar.lz nvim-treesitter-c58694685d0a4387ea10aeac1932c6afc55bcf3e.tar.xz nvim-treesitter-c58694685d0a4387ea10aeac1932c6afc55bcf3e.tar.zst nvim-treesitter-c58694685d0a4387ea10aeac1932c6afc55bcf3e.zip | |
feat: add re2c
| -rw-r--r-- | README.md | 1 | ||||
| -rw-r--r-- | lockfile.json | 3 | ||||
| -rw-r--r-- | lua/nvim-treesitter/parsers.lua | 8 | ||||
| -rw-r--r-- | queries/c/injections.scm | 4 | ||||
| -rw-r--r-- | queries/go/injections.scm | 10 | ||||
| -rw-r--r-- | queries/re2c/folds.scm | 4 | ||||
| -rw-r--r-- | queries/re2c/highlights.scm | 190 | ||||
| -rw-r--r-- | queries/re2c/indents.scm | 11 | ||||
| -rw-r--r-- | queries/re2c/injections.scm | 12 | ||||
| -rw-r--r-- | queries/re2c/locals.scm | 1 | ||||
| -rw-r--r-- | queries/rust/injections.scm | 4 |
11 files changed, 245 insertions, 3 deletions
@@ -325,6 +325,7 @@ We are looking for maintainers to add more parsers and to write query files for - [x] [r](https://github.com/r-lib/tree-sitter-r) (maintained by @echasnovski) - [ ] [racket](https://github.com/6cdh/tree-sitter-racket) - [x] [rasi](https://github.com/Fymyte/tree-sitter-rasi) (maintained by @Fymyte) +- [x] [re2c](https://github.com/amaanq/tree-sitter-re2c) (maintained by @amaanq) - [x] [regex](https://github.com/tree-sitter/tree-sitter-regex) (maintained by @theHamsta) - [x] [rego](https://github.com/FallenAngel97/tree-sitter-rego) (maintained by @FallenAngel97) - [x] [pip requirements](https://github.com/ObserverOfTime/tree-sitter-requirements) (maintained by @ObserverOfTime) diff --git a/lockfile.json b/lockfile.json index 49d3b8a20..6144680e2 100644 --- a/lockfile.json +++ b/lockfile.json @@ -455,6 +455,9 @@ "rasi": { "revision": "371dac6bcce0df5566c1cfebde69d90ecbeefd2d" }, + "re2c": { + "revision": "47aa19cf5f7aba2ed30e2b377f7172df76e819a6" + }, "regex": { "revision": "2354482d7e2e8f8ff33c1ef6c8aa5690410fbc96" }, diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index bd956ea9d..0f0d7b90a 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1357,6 +1357,14 @@ list.rasi = { maintainers = { "@Fymyte" }, } +list.re2c = { + install_info = { + url = "https://github.com/amaanq/tree-sitter-re2c", + files = { "src/parser.c" }, + }, + maintainers = { "@amaanq" }, +} + list.regex = { install_info = { url = "https://github.com/tree-sitter/tree-sitter-regex", diff --git a/queries/c/injections.scm b/queries/c/injections.scm index 933903ebb..f67cd22c6 100644 --- a/queries/c/injections.scm +++ b/queries/c/injections.scm @@ -4,6 +4,10 @@ ((comment) @injection.content (#set! injection.language "comment")) +((comment) @injection.content + (#match? @injection.content "/\*!([a-zA-Z]+:)?re2c") + (#set! injection.language "re2c")) + ; TODO: add when asm is added ; (gnu_asm_expression assembly_code: (string_literal) @injection.content ; (#set! injection.language "asm")) diff --git a/queries/go/injections.scm b/queries/go/injections.scm index 68aa552cd..d44c9897c 100644 --- a/queries/go/injections.scm +++ b/queries/go/injections.scm @@ -1,4 +1,4 @@ -((comment) @injection.content +((comment) @injection.content (#set! injection.language "comment")) (call_expression @@ -11,10 +11,14 @@ "regexp.MustCompile" "regexp.MustCompilePOSIX") (argument_list - . + . [ - (raw_string_literal) + (raw_string_literal) (interpreted_string_literal) ] @injection.content (#offset! @injection.content 0 1 0 -1) (#set! injection.language "regex"))) + +((comment) @injection.content + (#match? @injection.content "/\*!([a-zA-Z]+:)?re2c") + (#set! injection.language "re2c")) diff --git a/queries/re2c/folds.scm b/queries/re2c/folds.scm new file mode 100644 index 000000000..b4cf5f24e --- /dev/null +++ b/queries/re2c/folds.scm @@ -0,0 +1,4 @@ +[ + (body) + (action) +] @fold diff --git a/queries/re2c/highlights.scm b/queries/re2c/highlights.scm new file mode 100644 index 000000000..6d3a27f5a --- /dev/null +++ b/queries/re2c/highlights.scm @@ -0,0 +1,190 @@ +; Namespaces + +[ + "re2c" + "re2c" + "local" + "rules" +] @namespace + +; Includes + +[ + "!use" + "!include" +] @include + +; Keywords + +[ + "flags" + "define" + "cond" + "label" + "variable" + "yych" + "state" + "yybm" + "cgoto" + "api" + "tags" + "indent" + "yyfill" + "eof" + "sentinel" + "condprefix" + "condenumprefix" + "labelprefix" + "startlabel" + "posix-captures" + "max" + "maxnmatch" + "mtags" + "stags" + "header" + "getstate" +] @keyword + +[ + "*" + "+" + "?" +] @repeat + +; Constants + +[ + "ignore" + "substitute" + "fail" + "default" + "custom" + "match-empty" + "match-none" + "error" + "functions" + "free-form" + "format" + "separator" +] @constant.builtin + +(linedir) @constant.macro + +; Operators + +[ + "=" + "=>" + ":=>" + "/" + "|" + "\\" + "->" + "^" +] @operator + +[ + "." + (default) + (end_of_input) +] @constant.macro + +(field_expression + "." @operator) + +(condition + (any) @constant.macro) + + +; Names + +(name) @type + +(block_name) @constant + +(label) @label + +(option_name) @constant.builtin + +((option_name) @constant.macro + (#match? @constant.macro "^YY")) + +(field_expression + argument: (identifier) @variable) + +(field_identifier) @property + +; Literals + +(regex) @string.regex + +[ + (dstring) ; case sensitive + (sstring) ; case insensitive +] @string + +[ + (quote) + (ctrl_code) + (code_unit) +] @string.escape + +(number) @number + +[ + "on" + "off" +] @boolean + +[ + (stag) + (mtag) +] @property + +; Configurations + +(define + option: (option_name) @_yy + value: (dstring) @type + (#eq? @_yy "YYCTYPE") + (#offset! @type 0 1 0 -1)) + +(set_header + value: (dstring) @string.special @text.underline) + +(host_lang) @none + +; Punctuation + +[ + ":" + ";" + "," + "-" +] @punctuation.delimiter + +[ + "{" "}" + "[" "]" + "(" ")" + "<" ">" +] @punctuation.bracket + +(repetition + (limits + ["{" "}"] @punctuation.bracket)) + +[ + "!" + "@" + "#" +] @punctuation.special + +; Comments and error + +[ + (comment) + (ignore_block) +] @comment @spell + +(ERROR) @error diff --git a/queries/re2c/indents.scm b/queries/re2c/indents.scm new file mode 100644 index 000000000..72539143a --- /dev/null +++ b/queries/re2c/indents.scm @@ -0,0 +1,11 @@ +[ + (re2c) + (action) +] @indent.begin + +"}" @indent.branch @indent.end + +[ + (comment) + (linedir) +] @indent.ignore diff --git a/queries/re2c/injections.scm b/queries/re2c/injections.scm new file mode 100644 index 000000000..e5e40a09d --- /dev/null +++ b/queries/re2c/injections.scm @@ -0,0 +1,12 @@ +((host_lang) @injection.content + (#set! injection.parent)) + +((define + option: (option_name) @_yy + value: (dstring) @injection.content) + (#any-of? @_yy "YYPEEK" "YYSKIP" "YYBACKUP" "YYBACKUPCTX" "YYRESTORE" "YYRESTORECTX" "YYFILL" "YYSHIFT") + (#offset! @injection.content 0 1 0 -1) + (#set! injection.parent)) + +((comment) @injection.content + (#set! injection.language "comment")) diff --git a/queries/re2c/locals.scm b/queries/re2c/locals.scm new file mode 100644 index 000000000..0a77995d5 --- /dev/null +++ b/queries/re2c/locals.scm @@ -0,0 +1 @@ +(body) @scope diff --git a/queries/rust/injections.scm b/queries/rust/injections.scm index 5dead8564..a8dff4ca5 100644 --- a/queries/rust/injections.scm +++ b/queries/rust/injections.scm @@ -37,3 +37,7 @@ arguments: (arguments (raw_string_literal) @injection.content) (#set! injection.language "regex")) + +((block_comment) @injection.content + (#match? @injection.content "/\*!([a-zA-Z]+:)?re2c") + (#set! injection.language "re2c")) |
