diff --git a/d2compiler/compile.go b/d2compiler/compile.go index 007e8cacd..b3a0380eb 100644 --- a/d2compiler/compile.go +++ b/d2compiler/compile.go @@ -1047,16 +1047,18 @@ func (c *compiler) validateKey(obj *d2graph.Object, f *d2ir.Field) { func (c *compiler) validateLabels(g *d2graph.Graph) { for _, obj := range g.Objects { - if !strings.EqualFold(obj.Shape.Value, d2target.ShapeText) { - continue - } - if obj.Attributes.Language != "" { - // blockstrings have already been validated - continue - } - if strings.TrimSpace(obj.Label.Value) == "" { - c.errorf(obj.Label.MapKey, "shape text must have a non-empty label") - continue + if strings.EqualFold(obj.Shape.Value, d2target.ShapeText) { + if obj.Attributes.Language != "" { + // blockstrings have already been validated + continue + } + if strings.TrimSpace(obj.Label.Value) == "" { + c.errorf(obj.Label.MapKey, "shape text must have a non-empty label") + } + } else if strings.EqualFold(obj.Shape.Value, d2target.ShapeSQLTable) { + if strings.Contains(obj.Label.Value, "\n") { + c.errorf(obj.Label.MapKey, "shape sql_table cannot have newlines") + } } } } diff --git a/d2compiler/compile_test.go b/d2compiler/compile_test.go index 5b5368434..6d0e818bc 100644 --- a/d2compiler/compile_test.go +++ b/d2compiler/compile_test.go @@ -3114,6 +3114,21 @@ layers: { "y/n.d2": "p", }, }, + { + name: "sql-table-header-newline", + text: `x: { + shape: sql_table + label: hello\nworld +} + +y: "hello\nworld" { + shape: sql_table + hi: there +} +`, + expErr: `d2/testdata/d2compiler/TestCompile/sql-table-header-newline.d2:3:3: shape sql_table cannot have newlines +d2/testdata/d2compiler/TestCompile/sql-table-header-newline.d2:6:1: shape sql_table cannot have newlines`, + }, } for _, tc := range testCases { diff --git a/testdata/d2compiler/TestCompile/sql-table-header-newline.exp.json b/testdata/d2compiler/TestCompile/sql-table-header-newline.exp.json new file mode 100644 index 000000000..b38cb4925 --- /dev/null +++ b/testdata/d2compiler/TestCompile/sql-table-header-newline.exp.json @@ -0,0 +1,15 @@ +{ + "graph": null, + "err": { + "errs": [ + { + "range": "d2/testdata/d2compiler/TestCompile/sql-table-header-newline.d2,2:2:26-2:21:45", + "errmsg": "d2/testdata/d2compiler/TestCompile/sql-table-header-newline.d2:3:3: shape sql_table cannot have newlines" + }, + { + "range": "d2/testdata/d2compiler/TestCompile/sql-table-header-newline.d2,5:0:49-8:1:100", + "errmsg": "d2/testdata/d2compiler/TestCompile/sql-table-header-newline.d2:6:1: shape sql_table cannot have newlines" + } + ] + } +}