From fb612e11b66a422efbb0724b192fa336795b55b8 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 12:01:25 +0300 Subject: [PATCH] add container and shape blocks to conflicts --- grammar.js | 14 ++++++++++---- queries/highlights.scm | 1 + src/grammar.json | 35 +++++++++++++++++++++++------------ src/node-types.json | 8 -------- src/parser.c | Bin 115444 -> 113696 bytes test/corpus/container.txt | 27 +++++++++++++++++++++++++++ test/highlight/shape.d2 | 2 +- tree-sitter-d2.wasm | Bin 15627 -> 25891 bytes 8 files changed, 62 insertions(+), 25 deletions(-) diff --git a/grammar.js b/grammar.js index eb42878..7a4b946 100644 --- a/grammar.js +++ b/grammar.js @@ -1,9 +1,12 @@ const PREC = { COMMENT: -2, + EOL: -1, UNQUOTED_STRING: 0, CONTAINER: 2, CONNECTION: 2, SHAPE: 3, + CONTAINER_BLOCK: 4, + SHAPE_BLOCK: 4, IDENTIFIER: 0, ARROW: 0, ATTRIBUTE: 0, @@ -20,7 +23,10 @@ module.exports = grammar({ word: ($) => $._identifier, - conflicts: ($) => [[$._connection_path, $.container]], + conflicts: ($) => [ + [$._connection_path, $.container], + [$._container_block_definition, $._shape_block_definition], + ], rules: { source_file: ($) => repeat($._root_definition), @@ -83,7 +89,7 @@ module.exports = grammar({ _container_block_definition: ($) => prec( - PREC.CONTAINER, + PREC.CONTAINER_BLOCK, choice($._eol, seq(choice($.shape, $.container, $.connection), $._end)) ), @@ -114,7 +120,7 @@ module.exports = grammar({ _shape_block: ($) => prec(PREC.SHAPE, seq("{", repeat($._shape_block_definition), "}")), - _shape_block_definition: ($) => prec(PREC.SHAPE, choice($._eol)), + _shape_block_definition: ($) => prec(PREC.SHAPE_BLOCK, choice($._eol)), // attributes @@ -233,7 +239,7 @@ module.exports = grammar({ line_comment: ($) => token(prec(PREC.COMMENT, seq("#", /.*/))), - _eol: ($) => choice("\n", "\0"), + _eol: ($) => token(prec(PREC.EOL, choice("\n", "\0"))), _end: ($) => seq(choice(";", $._eol)), }, }); diff --git a/queries/highlights.scm b/queries/highlights.scm index 71fdff8..54a6672 100644 --- a/queries/highlights.scm +++ b/queries/highlights.scm @@ -3,6 +3,7 @@ (container_key) @constant (shape_key) @variable (attr_key) @property +(reserved) @error ; Literals ;------------------------------------------------------------------------------- diff --git a/src/grammar.json b/src/grammar.json index d2cd3a7..6e0a6fd 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -265,7 +265,7 @@ }, "_container_block_definition": { "type": "PREC", - "value": 2, + "value": 4, "content": { "type": "CHOICE", "members": [ @@ -469,7 +469,7 @@ }, "_shape_block_definition": { "type": "PREC", - "value": 3, + "value": 4, "content": { "type": "CHOICE", "members": [ @@ -977,17 +977,24 @@ } }, "_eol": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": "\n" - }, - { - "type": "STRING", - "value": "\u0000" + "type": "TOKEN", + "content": { + "type": "PREC", + "value": -1, + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "\n" + }, + { + "type": "STRING", + "value": "\u0000" + } + ] } - ] + } }, "_end": { "type": "SEQ", @@ -1022,6 +1029,10 @@ [ "_connection_path", "container" + ], + [ + "_container_block_definition", + "_shape_block_definition" ] ], "precedences": [], diff --git a/src/node-types.json b/src/node-types.json index fbd7a09..3a738c0 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -266,14 +266,6 @@ "named": true, "fields": {} }, - { - "type": "\u0000", - "named": false - }, - { - "type": "\n", - "named": false - }, { "type": "\"", "named": false diff --git a/src/parser.c b/src/parser.c index 3d1bdfa32f8cec2d5cc131e35afe3eb51eed87eb..c72ab26ed7f42e27ac0c65452666b5bdeb11161c 100644 GIT binary patch delta 11370 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 delta 12848 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 S(|G0GcAB!=XSUNXWB(WGx#G|O diff --git a/test/corpus/container.txt b/test/corpus/container.txt index e95d05c..704d2b5 100644 --- a/test/corpus/container.txt +++ b/test/corpus/container.txt @@ -196,4 +196,31 @@ Foo biz bar: Biz biz Bar { ) ) +================================================================================ +Declare shapes sparsely in a container +================================================================================ +Foo: Baz { + + biz + + baz + + bar + + +} + +-------------------------------------------------------------------------------- + +(source_file + (container + (container_key) + (label) + (block + (shape (shape_key)) + (shape (shape_key)) + (shape (shape_key)) + ) + ) +) diff --git a/test/highlight/shape.d2 b/test/highlight/shape.d2 index ca98449..ef251c4 100644 --- a/test/highlight/shape.d2 +++ b/test/highlight/shape.d2 @@ -15,7 +15,7 @@ foo: Foo Bar # ^ string foo: Foo Bar { - # <- variable + # <- constant # ^ string # ^ punctuation.bracket diff --git a/tree-sitter-d2.wasm b/tree-sitter-d2.wasm index da01d16be5ab9e23c350d4e5131d5ff13f591b51..07e54749327db76a4897a4040ef5cb72eed7fc78 100755 GIT binary patch literal 25891 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 literal 15627 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