diff --git a/d2layouts/d2sequence/layout.go b/d2layouts/d2sequence/layout.go index 8f2c6e9e3..28755f3e0 100644 --- a/d2layouts/d2sequence/layout.go +++ b/d2layouts/d2sequence/layout.go @@ -106,8 +106,11 @@ func layoutSequenceDiagram(g *d2graph.Graph, obj *d2graph.Object) (*sequenceDiag } } - sd := newSequenceDiagram(obj.ChildrenArray, edges) - err := sd.layout() + sd, err := newSequenceDiagram(obj.ChildrenArray, edges) + if err != nil { + return nil, err + } + err = sd.layout() return sd, err } diff --git a/d2layouts/d2sequence/sequence_diagram.go b/d2layouts/d2sequence/sequence_diagram.go index cac36e113..98129222c 100644 --- a/d2layouts/d2sequence/sequence_diagram.go +++ b/d2layouts/d2sequence/sequence_diagram.go @@ -1,6 +1,7 @@ package d2sequence import ( + "errors" "fmt" "math" "sort" @@ -64,7 +65,7 @@ func getEdgeEarliestLineNum(e *d2graph.Edge) int { return min } -func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *sequenceDiagram { +func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) (*sequenceDiagram, error) { var actors []*d2graph.Object var groups []*d2graph.Object @@ -84,6 +85,10 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se } } + if len(actors) == 0 { + return nil, errors.New("no actors declared in sequence diagram") + } + sd := &sequenceDiagram{ messages: messages, actors: actors, @@ -185,7 +190,7 @@ func newSequenceDiagram(objects []*d2graph.Object, messages []*d2graph.Edge) *se sd.maxActorHeight += float64(*sd.root.LabelHeight) } - return sd + return sd, nil } func (sd *sequenceDiagram) layout() error { diff --git a/e2etests/regression_test.go b/e2etests/regression_test.go index 33eecefcb..dc2f152bc 100644 --- a/e2etests/regression_test.go +++ b/e2etests/regression_test.go @@ -37,6 +37,7 @@ group.nested: { a -> b } `, + expErr: "no actors declared in sequence diagram", }, { name: "nested_steps",