From b30f9702bd85e5c003b320f6b86bd51dc7f0a421 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Fri, 16 Jun 2023 16:50:16 -0700 Subject: [PATCH] fix shape composite --- d2compiler/compile.go | 6 +++++- d2compiler/compile_test.go | 9 +++++++++ .../TestCompile/reserved-composite.exp.json | 11 +++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 testdata/d2compiler/TestCompile/reserved-composite.exp.json 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" + } + ] + } +}