/
grammar.js
33 lines (24 loc) · 862 Bytes
/
grammar.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const CSS = require("tree-sitter-css/grammar")
module.exports = grammar(CSS, {
name: "styled",
rules: {
_top_level_item: ($, original) => choice(original, $.interpolation),
_block_item: ($, original) => choice(original, $.interpolation),
_value: ($, original) =>
prec(
-1,
choice(
...original.content.members,
alias($._inline_interpolation, $.interpolation)
)
),
interpolation: $ =>
seq("${", alias($._js_expressions, $.js_expression), choice("}", "};")),
_inline_interpolation: $ =>
seq("${", alias($._js_expressions, $.js_expression), "}"),
_js_expressions: $ => repeat1($._js_expression),
_js_expression: $ => choice($._js_block, $._js_statement),
_js_block: $ => seq("{", repeat($._js_statement), "}"),
_js_statement: $ => /[^{}]+/,
},
})