d2parser: Error on leading @ in non import key strings

This commit is contained in:
Anmol Sethi 2023-06-06 14:06:59 -07:00
parent 10c6d2af71
commit b4d5bc0be1
No known key found for this signature in database
GPG key ID: 8CEF1878FF10ADEB
3 changed files with 43 additions and 2 deletions

View file

@ -633,7 +633,7 @@ func (p *parser) parseMapKey() (mk *d2ast.Key) {
}
}()
// Check for ampersand.
// Check for ampersand/@.
r, eof := p.peek()
if eof {
return mk
@ -967,6 +967,9 @@ func (p *parser) parseKey() (k *d2ast.KeyPath) {
if s == nil {
return k
}
if strings.HasPrefix(s.ScalarString(), "@") {
p.errorf(s.GetRange().Start, s.GetRange().End, "%s is not a valid import, did you mean ...%[2]s?", s.ScalarString())
}
if len(k.Path) == 0 {
k.Range.Start = s.GetRange().Start

View file

@ -460,7 +460,7 @@ func testImport(t *testing.T) {
{
text: "@file",
assert: func(t testing.TB, ast *d2ast.Map, err error) {
assert.ErrorString(t, err, "d2/testdata/d2parser/TestParse/import/#06.d2:1:5: unexpected text after import")
assert.ErrorString(t, err, "d2/testdata/d2parser/TestParse/import/#07.d2:1:1: @file is not a valid import, did you mean ...@file?")
},
},
}

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

@ -0,0 +1,38 @@
{
"ast": {
"range": "d2/testdata/d2parser/TestParse/import/#07.d2,0:0:0-0:5:5",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2parser/TestParse/import/#07.d2,0:0:0-0:5:5",
"key": {
"range": "d2/testdata/d2parser/TestParse/import/#07.d2,0:0:0-0:5:5",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2parser/TestParse/import/#07.d2,0:0:0-0:5:5",
"value": [
{
"string": "@file",
"raw_string": "@file"
}
]
}
}
]
},
"primary": {},
"value": {}
}
}
]
},
"err": {
"errs": [
{
"range": "d2/testdata/d2parser/TestParse/import/#07.d2,0:0:0-0:5:5",
"errmsg": "d2/testdata/d2parser/TestParse/import/#07.d2:1:1: @file is not a valid import, did you mean ...@file?"
}
]
}
}