diff --git a/d2parser/parse.go b/d2parser/parse.go index 18c4187d2..a19690081 100644 --- a/d2parser/parse.go +++ b/d2parser/parse.go @@ -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 diff --git a/d2parser/parse_test.go b/d2parser/parse_test.go index 4591c729b..ffe2464b5 100644 --- a/d2parser/parse_test.go +++ b/d2parser/parse_test.go @@ -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?") }, }, } diff --git a/testdata/d2parser/TestParse/import/#07.exp.json b/testdata/d2parser/TestParse/import/#07.exp.json new file mode 100644 index 000000000..b9b56bff8 --- /dev/null +++ b/testdata/d2parser/TestParse/import/#07.exp.json @@ -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?" + } + ] + } +}