aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmaan Qureshi <amaanq12@gmail.com>2023-08-22 02:10:29 -0400
committerAmaan Qureshi <amaanq12@gmail.com>2023-08-24 02:52:48 -0400
commitc58694685d0a4387ea10aeac1932c6afc55bcf3e (patch)
treefcf5551992e32b84dc5dc4bf5662122268322d7d
parentrefactor: replace some match & vim-match usages (diff)
downloadnvim-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.md1
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua8
-rw-r--r--queries/c/injections.scm4
-rw-r--r--queries/go/injections.scm10
-rw-r--r--queries/re2c/folds.scm4
-rw-r--r--queries/re2c/highlights.scm190
-rw-r--r--queries/re2c/indents.scm11
-rw-r--r--queries/re2c/injections.scm12
-rw-r--r--queries/re2c/locals.scm1
-rw-r--r--queries/rust/injections.scm4
11 files changed, 245 insertions, 3 deletions
diff --git a/README.md b/README.md
index c701aeed7..0001645b1 100644
--- a/README.md
+++ b/README.md
@@ -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"))