From c325e94cad60047cbdba595d96e7c9d146a8d2c8 Mon Sep 17 00:00:00 2001 From: Anmol Sethi Date: Tue, 30 May 2023 15:54:37 -0700 Subject: [PATCH] d2parser: Allow .d2 extension on quoted import strings --- d2format/format_test.go | 18 ++++++--- d2parser/parse.go | 2 +- d2parser/parse_test.go | 18 +++++++++ .../d2parser/TestParse/import/#01.exp.json | 11 ------ .../d2parser/TestParse/import/#02.exp.json | 11 ------ .../d2parser/TestParse/import/#03.exp.json | 11 ------ .../d2parser/TestParse/import/#04.exp.json | 38 +++++++++++++++++++ .../d2parser/TestParse/import/#05.exp.json | 38 +++++++++++++++++++ 8 files changed, 108 insertions(+), 39 deletions(-) create mode 100644 testdata/d2parser/TestParse/import/#04.exp.json create mode 100644 testdata/d2parser/TestParse/import/#05.exp.json diff --git a/d2format/format_test.go b/d2format/format_test.go index fe83a3204..1a190db48 100644 --- a/d2format/format_test.go +++ b/d2format/format_test.go @@ -619,14 +619,22 @@ x <= y exp: `x <- = y `, }, - { - name: "import", - in: ` + { + name: "import/1", + in: ` x: @file.d2 `, - exp: `x: @file + exp: `x: @file `, - }, + }, + { + name: "import/2", + in: ` +x: @file."d2" +`, + exp: `x: @file."d2" +`, + }, } for _, tc := range testCases { diff --git a/d2parser/parse.go b/d2parser/parse.go index 0824bda7c..e253e35f2 100644 --- a/d2parser/parse.go +++ b/d2parser/parse.go @@ -1704,7 +1704,7 @@ func (p *parser) parseImport(spread bool) *d2ast.Import { } k := p.parseKey() - if k.Path[0].UnquotedString != nil && len(k.Path) > 1 && k.Path[1].Unbox().ScalarString() == "d2" { + if k.Path[0].UnquotedString != nil && len(k.Path) > 1 && k.Path[1].UnquotedString != nil && k.Path[1].Unbox().ScalarString() == "d2" { k.Path = append(k.Path[:1], k.Path[2:]...) } if k != nil { diff --git a/d2parser/parse_test.go b/d2parser/parse_test.go index 79cd3e562..e9b1ea146 100644 --- a/d2parser/parse_test.go +++ b/d2parser/parse_test.go @@ -433,6 +433,24 @@ func testImport(t *testing.T) { assert.Equal(t, "file", imp.Path[0].Unbox().ScalarString()) }, }, + { + text: "...@\"file\".d2", + assert: func(t testing.TB, ast *d2ast.Map, err error) { + assert.Success(t, err) + assert.True(t, ast.Nodes[0].Import.Spread) + assert.Equal(t, "file", ast.Nodes[0].Import.Path[0].Unbox().ScalarString()) + assert.Equal(t, "d2", ast.Nodes[0].Import.Path[1].Unbox().ScalarString()) + }, + }, + { + text: "...@file.\"d2\"", + assert: func(t testing.TB, ast *d2ast.Map, err error) { + assert.Success(t, err) + assert.True(t, ast.Nodes[0].Import.Spread) + assert.Equal(t, "file", ast.Nodes[0].Import.Path[0].Unbox().ScalarString()) + assert.Equal(t, "d2", ast.Nodes[0].Import.Path[1].Unbox().ScalarString()) + }, + }, } runa(t, tca) diff --git a/testdata/d2parser/TestParse/import/#01.exp.json b/testdata/d2parser/TestParse/import/#01.exp.json index 0b0f19076..ab516c33c 100644 --- a/testdata/d2parser/TestParse/import/#01.exp.json +++ b/testdata/d2parser/TestParse/import/#01.exp.json @@ -37,17 +37,6 @@ } ] } - }, - { - "unquoted_string": { - "range": "d2/testdata/d2parser/TestParse/import/#01.d2,0:9:9-0:11:11", - "value": [ - { - "string": "d2", - "raw_string": "d2" - } - ] - } } ] } diff --git a/testdata/d2parser/TestParse/import/#02.exp.json b/testdata/d2parser/TestParse/import/#02.exp.json index 085b759d7..a8c9309bf 100644 --- a/testdata/d2parser/TestParse/import/#02.exp.json +++ b/testdata/d2parser/TestParse/import/#02.exp.json @@ -17,17 +17,6 @@ } ] } - }, - { - "unquoted_string": { - "range": "d2/testdata/d2parser/TestParse/import/#02.d2,0:9:9-0:11:11", - "value": [ - { - "string": "d2", - "raw_string": "d2" - } - ] - } } ] } diff --git a/testdata/d2parser/TestParse/import/#03.exp.json b/testdata/d2parser/TestParse/import/#03.exp.json index 70aa137a8..f964faf08 100644 --- a/testdata/d2parser/TestParse/import/#03.exp.json +++ b/testdata/d2parser/TestParse/import/#03.exp.json @@ -41,17 +41,6 @@ } ] } - }, - { - "unquoted_string": { - "range": "d2/testdata/d2parser/TestParse/import/#03.d2,0:13:13-0:15:15", - "value": [ - { - "string": "d2", - "raw_string": "d2" - } - ] - } } ] } diff --git a/testdata/d2parser/TestParse/import/#04.exp.json b/testdata/d2parser/TestParse/import/#04.exp.json new file mode 100644 index 000000000..7f6f3edf9 --- /dev/null +++ b/testdata/d2parser/TestParse/import/#04.exp.json @@ -0,0 +1,38 @@ +{ + "ast": { + "range": "d2/testdata/d2parser/TestParse/import/#04.d2,0:0:0-0:13:13", + "nodes": [ + { + "import": { + "range": "d2/testdata/d2parser/TestParse/import/#04.d2,0:0:0-0:13:13", + "spread": true, + "path": [ + { + "double_quoted_string": { + "range": "d2/testdata/d2parser/TestParse/import/#04.d2,0:4:4-0:10:10", + "value": [ + { + "string": "file", + "raw_string": "file" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2parser/TestParse/import/#04.d2,0:11:11-0:13:13", + "value": [ + { + "string": "d2", + "raw_string": "d2" + } + ] + } + } + ] + } + } + ] + }, + "err": null +} diff --git a/testdata/d2parser/TestParse/import/#05.exp.json b/testdata/d2parser/TestParse/import/#05.exp.json new file mode 100644 index 000000000..49eec25d3 --- /dev/null +++ b/testdata/d2parser/TestParse/import/#05.exp.json @@ -0,0 +1,38 @@ +{ + "ast": { + "range": "d2/testdata/d2parser/TestParse/import/#05.d2,0:0:0-0:13:13", + "nodes": [ + { + "import": { + "range": "d2/testdata/d2parser/TestParse/import/#05.d2,0:0:0-0:13:13", + "spread": true, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2parser/TestParse/import/#05.d2,0:4:4-0:8:8", + "value": [ + { + "string": "file", + "raw_string": "file" + } + ] + } + }, + { + "double_quoted_string": { + "range": "d2/testdata/d2parser/TestParse/import/#05.d2,0:9:9-0:13:13", + "value": [ + { + "string": "d2", + "raw_string": "d2" + } + ] + } + } + ] + } + } + ] + }, + "err": null +}