d2parser: Allow .d2 extension on quoted import strings

This commit is contained in:
Anmol Sethi 2023-05-30 15:54:37 -07:00
parent 89e1e324d7
commit c325e94cad
No known key found for this signature in database
GPG key ID: 8CEF1878FF10ADEB
8 changed files with 108 additions and 39 deletions

View file

@ -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 {

View file

@ -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 {

View file

@ -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)

View file

@ -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"
}
]
}
}
]
}

View file

@ -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"
}
]
}
}
]
}

View file

@ -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"
}
]
}
}
]
}

38
testdata/d2parser/TestParse/import/#04.exp.json generated vendored Normal file
View file

@ -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
}

38
testdata/d2parser/TestParse/import/#05.exp.json generated vendored Normal file
View file

@ -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
}