d2compiler: validate that reserved keywords have values

This commit is contained in:
Alexander Wang 2024-12-14 22:12:41 -07:00
parent f3d2120b64
commit 9de283cd38
No known key found for this signature in database
GPG key ID: BE3937D0D52D8927
3 changed files with 30 additions and 5 deletions

View file

@ -239,8 +239,6 @@ func (c *compiler) compileMap(obj *d2graph.Object, m *d2ir.Map) {
}
}
}
} else {
c.errorf(class.LastRef().AST(), "class missing value")
}
for _, className := range classNames {
@ -505,6 +503,8 @@ func (c *compiler) compileReserved(attrs *d2graph.Attributes, f *d2ir.Field) {
default:
c.errorf(f.LastPrimaryKey(), "reserved field %v does not accept composite", f.Name.ScalarString())
}
} else {
c.errorf(f.LastRef().AST(), `reserved field "%v" must have a value`, f.Name.ScalarString())
}
return
}
@ -817,8 +817,6 @@ func (c *compiler) compileEdgeMap(edge *d2graph.Edge, m *d2ir.Map) {
}
}
}
} else {
c.errorf(class.LastRef().AST(), "class missing value")
}
for _, className := range classNames {

View file

@ -127,6 +127,18 @@ x: {
tassert.Equal(t, "200", g.Objects[0].Top.Value)
},
},
{
name: "reserved_missing_values",
text: `foobar: {
width
bottom
left
right
}
`,
expErr: `d2/testdata/d2compiler/TestCompile/reserved_missing_values.d2:2:3: reserved field "width" must have a value
d2/testdata/d2compiler/TestCompile/reserved_missing_values.d2:4:3: reserved field "left" must have a value`,
},
{
name: "positions_negative",
text: `hey: {
@ -3066,7 +3078,7 @@ object: {
name: "no-class-primary",
text: `x.class
`,
expErr: `d2/testdata/d2compiler/TestCompile/no-class-primary.d2:1:3: class missing value`,
expErr: `d2/testdata/d2compiler/TestCompile/no-class-primary.d2:1:3: reserved field "class" must have a value`,
},
{
name: "no-class-inside-classes",

View file

@ -0,0 +1,15 @@
{
"graph": null,
"err": {
"errs": [
{
"range": "d2/testdata/d2compiler/TestCompile/reserved_missing_values.d2,1:2:12-1:7:17",
"errmsg": "d2/testdata/d2compiler/TestCompile/reserved_missing_values.d2:2:3: reserved field width must have a value"
},
{
"range": "d2/testdata/d2compiler/TestCompile/reserved_missing_values.d2,3:2:29-3:6:33",
"errmsg": "d2/testdata/d2compiler/TestCompile/reserved_missing_values.d2:4:3: reserved field left must have a value"
}
]
}
}