diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 0202204b5..44d3f8661 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -6,6 +6,7 @@ - Display version on CLI help invocation [#1400](https://github.com/terrastruct/d2/pull/1400) - Improved readability of connection labels when they overlap another connection. [#447](https://github.com/terrastruct/d2/pull/447) +- Error message when `shape` is given a composite [#1415](https://github.com/terrastruct/d2/pull/1415) #### Bugfixes ⛑️ diff --git a/d2compiler/compile.go b/d2compiler/compile.go index 67edfe184..c3650fdb1 100644 --- a/d2compiler/compile.go +++ b/d2compiler/compile.go @@ -176,7 +176,11 @@ func (c *compiler) compileMap(obj *d2graph.Object, m *d2ir.Map) { } shape := m.GetField("shape") if shape != nil { - c.compileField(obj, shape) + if shape.Composite != nil { + c.errorf(shape.LastPrimaryKey(), "reserved field shape does not accept composite") + } else { + c.compileField(obj, shape) + } } for _, f := range m.Fields { if f.Name == "shape" { diff --git a/d2compiler/compile_test.go b/d2compiler/compile_test.go index c6fa266ba..efa7ec146 100644 --- a/d2compiler/compile_test.go +++ b/d2compiler/compile_test.go @@ -2614,6 +2614,15 @@ object: { `, expErr: `d2/testdata/d2compiler/TestCompile/classes-internal-edge.d2:8:3: classes cannot contain an edge`, }, + { + name: "reserved-composite", + text: `shape: sequence_diagram { + alice -> bob: What does it mean\nto be well-adjusted? + bob -> alice: The ability to play bridge or\ngolf as if they were games. +} +`, + expErr: `d2/testdata/d2compiler/TestCompile/reserved-composite.d2:1:1: reserved field shape does not accept composite`, + }, } for _, tc := range testCases { diff --git a/testdata/d2compiler/TestCompile/reserved-composite.exp.json b/testdata/d2compiler/TestCompile/reserved-composite.exp.json new file mode 100644 index 000000000..bd9bbab98 --- /dev/null +++ b/testdata/d2compiler/TestCompile/reserved-composite.exp.json @@ -0,0 +1,11 @@ +{ + "graph": null, + "err": { + "errs": [ + { + "range": "d2/testdata/d2compiler/TestCompile/reserved-composite.d2,0:0:0-3:1:158", + "errmsg": "d2/testdata/d2compiler/TestCompile/reserved-composite.d2:1:1: reserved field shape does not accept composite" + } + ] + } +}