Skip to content

Commit 43c2f1f

Browse files
authored
Merge pull request #265 from lungarella-raffaele/feat-regex-grammar
Add regex support
2 parents 3159c94 + 2c94206 commit 43c2f1f

File tree

7 files changed

+112006
-105230
lines changed

7 files changed

+112006
-105230
lines changed

grammar.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ module.exports = grammar({
464464
$.extension_expression,
465465
$.lazy_expression,
466466
$._jsx_element,
467+
$.regex,
467468
),
468469

469470
parenthesized_expression: ($) =>
@@ -752,6 +753,7 @@ module.exports = grammar({
752753
$.number,
753754
$.true,
754755
$.false,
756+
$.regex,
755757
),
756758

757759
variant_pattern: ($) =>
@@ -1185,6 +1187,30 @@ module.exports = grammar({
11851187

11861188
extension_identifier: ($) => /[a-zA-Z0-9_\.]+/,
11871189

1190+
regex: ($) =>
1191+
seq(
1192+
"/",
1193+
field("pattern", $.regex_pattern),
1194+
token.immediate(prec(1, "/")),
1195+
optional(field("flags", $.regex_flags)),
1196+
),
1197+
1198+
regex_pattern: (_) =>
1199+
token.immediate(
1200+
prec(
1201+
-1,
1202+
repeat1(
1203+
choice(
1204+
seq("[", repeat(choice(seq("\\", /./), /[^\]\n\\]/)), "]"),
1205+
seq("\\", /./),
1206+
/[^/\\\[\n]/,
1207+
),
1208+
),
1209+
),
1210+
),
1211+
1212+
regex_flags: (_) => token.immediate(/[a-z]+/),
1213+
11881214
number: ($) => {
11891215
// OCaml: https://github.com/tree-sitter/tree-sitter-ocaml/blob/f1106bf834703f1f2f795da1a3b5f8f40174ffcc/ocaml/grammar.js#L26
11901216
const hex_literal = seq(

queries/highlights.scm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@
7373
] @string
7474

7575

76+
(regex) @string.special
77+
7678
(character) @character
7779
(escape_sequence) @string.escape
7880

queries/injections.scm

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
((comment) @injection.content (#set! injection.language "comment"))
22

3+
; regex literal
4+
(regex
5+
(regex_pattern) @injection.content (#set! injection.language "regex"))
6+
37
; %re
48
(extension_expression
59
(extension_identifier) @_name
@@ -26,4 +30,3 @@
2630
(#eq? @_name "relay")
2731
(expression_statement
2832
(_ (_) @injection.content (#set! injection.language "graphql") )))
29-

src/grammar.json

Lines changed: 129 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)