feat: add re2c

This commit is contained in:
Amaan Qureshi 2023-08-22 02:10:29 -04:00
parent 05fe2c38a3
commit c58694685d
11 changed files with 245 additions and 3 deletions

View file

@ -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)

View file

@ -455,6 +455,9 @@
"rasi": {
"revision": "371dac6bcce0df5566c1cfebde69d90ecbeefd2d"
},
"re2c": {
"revision": "47aa19cf5f7aba2ed30e2b377f7172df76e819a6"
},
"regex": {
"revision": "2354482d7e2e8f8ff33c1ef6c8aa5690410fbc96"
},

View file

@ -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",

View file

@ -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"))

View file

@ -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"))

4
queries/re2c/folds.scm Normal file
View file

@ -0,0 +1,4 @@
[
(body)
(action)
] @fold

190
queries/re2c/highlights.scm Normal file
View file

@ -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

11
queries/re2c/indents.scm Normal file
View file

@ -0,0 +1,11 @@
[
(re2c)
(action)
] @indent.begin
"}" @indent.branch @indent.end
[
(comment)
(linedir)
] @indent.ignore

View file

@ -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"))

1
queries/re2c/locals.scm Normal file
View file

@ -0,0 +1 @@
(body) @scope

View file

@ -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"))