From 095dd7d8f30fe1df666e86cf5291ba06496657fb Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 12:54:11 +0300 Subject: [PATCH] handle end of file Closes #1 --- grammar.js | 2 +- src/grammar.json | 9 +++++++-- test/corpus/shape.txt | 10 ++++++++++ tree-sitter-d2.wasm | Bin 25898 -> 26122 bytes 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/grammar.js b/grammar.js index bd702d7..9ad7fa8 100644 --- a/grammar.js +++ b/grammar.js @@ -36,7 +36,7 @@ module.exports = grammar({ $.container, $.connection ), - $._end + choice($._end, "\0") ) ), diff --git a/src/grammar.json b/src/grammar.json index 45a4ba0..9b6a3e6 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -46,8 +46,13 @@ ] }, { - "type": "SYMBOL", - "name": "_end" + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_end" + } + ] } ] } diff --git a/test/corpus/shape.txt b/test/corpus/shape.txt index cf52896..8d24a7a 100644 --- a/test/corpus/shape.txt +++ b/test/corpus/shape.txt @@ -1,3 +1,13 @@ +================================================================================ +Handle end of file (issue #1) +================================================================================ +foo +-------------------------------------------------------------------------------- + +(source_file + (shape (shape_key)) +) + ================================================================================ Simple shape key ================================================================================ diff --git a/tree-sitter-d2.wasm b/tree-sitter-d2.wasm index 609a0111088564c286b2066b776e87661ae38007..bb3ea26fd436aea46f49f5eae1946c3e5b2d6113 100755 GIT binary patch literal 26122 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

l#*$RF%_7aANo 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 F{|nFKIQ;+s