diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index f3c0d2a77..4aa513a11 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -3,3 +3,5 @@ #### Improvements 🧹 #### Bugfixes ⛑️ + +- Fix a bug in ID parsing [#322](https://github.com/terrastruct/d2/issues/322) diff --git a/d2parser/parse.go b/d2parser/parse.go index cd6e7094e..683a0a545 100644 --- a/d2parser/parse.go +++ b/d2parser/parse.go @@ -1063,6 +1063,15 @@ func (p *parser) parseUnquotedString(inKey bool) (s *d2ast.UnquotedString) { if eof { return s } + switch r2 { + case '\n', ';', '#', '{', '}', '[', ']': + p.rewind() + p.peek() + p.commit() + sb.WriteRune(r) + rawb.WriteRune(r) + return s + } if r2 == '-' || r2 == '>' || r2 == '*' { p.rewind() return s diff --git a/testdata/d2parser/TestParse/merged_shapes_#322.exp.json b/testdata/d2parser/TestParse/merged_shapes_#322.exp.json index d76a97cd1..bab9e488b 100644 --- a/testdata/d2parser/TestParse/merged_shapes_#322.exp.json +++ b/testdata/d2parser/TestParse/merged_shapes_#322.exp.json @@ -4,17 +4,63 @@ "nodes": [ { "map_key": { - "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,1:0:1-4:0:10", + "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,1:0:1-1:2:3", "key": { - "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,1:0:1-4:0:10", + "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,1:0:1-1:2:3", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,1:0:1-3:1:8", + "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,1:0:1-1:1:2", "value": [ { - "string": "a-\nb-\nc-", - "raw_string": "a-\nb-\nc-" + "string": "a-", + "raw_string": "a-" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + }, + { + "map_key": { + "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,2:0:4-2:2:6", + "key": { + "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,2:0:4-2:2:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,2:0:4-2:1:5", + "value": [ + { + "string": "b-", + "raw_string": "b-" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + }, + { + "map_key": { + "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,3:0:7-3:2:9", + "key": { + "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,3:0:7-3:2:9", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2parser/TestParse/merged_shapes_#322.d2,3:0:7-3:1:8", + "value": [ + { + "string": "c-", + "raw_string": "c-" } ] }