Fixes invalid sequence diagram inputs

This commit is contained in:
Júlio César Batista 2022-12-06 11:46:53 -08:00
parent b6612d32b6
commit 6a4d31904c
No known key found for this signature in database
GPG key ID: 10C4B861BF314878

View file

@ -17,9 +17,10 @@ import (
func GenDSL(maxi int) (_ string, err error) {
gs := &dslGenState{
rand: mathrand.New(mathrand.NewSource(time.Now().UnixNano())),
g: d2graph.NewGraph(&d2ast.Map{}),
nodeShapes: make(map[string]string),
rand: mathrand.New(mathrand.NewSource(time.Now().UnixNano())),
g: d2graph.NewGraph(&d2ast.Map{}),
nodeShapes: make(map[string]string),
nodeContainer: make(map[string]string),
}
err = gs.gen(maxi)
if err != nil {
@ -32,8 +33,9 @@ type dslGenState struct {
rand *mathrand.Rand
g *d2graph.Graph
nodesArr []string
nodeShapes map[string]string
nodesArr []string
nodeShapes map[string]string
nodeContainer map[string]string
}
func (gs *dslGenState) gen(maxi int) error {
@ -70,6 +72,7 @@ func (gs *dslGenState) genNode(containerID string) (string, error) {
}
gs.nodesArr = append(gs.nodesArr, nodeID)
gs.nodeShapes[nodeID] = "square"
gs.nodeContainer[nodeID] = containerID
return nodeID, nil
}
@ -123,7 +126,7 @@ func (gs *dslGenState) edge() error {
if err != nil {
return err
}
if src != dst {
if gs.findOuterSequenceDiagram(src) == gs.findOuterSequenceDiagram(dst) {
break
}
err = gs.node()
@ -194,6 +197,16 @@ func randRune() rune {
return mathrand.Int31n(128) + 1
}
func (gs *dslGenState) findOuterSequenceDiagram(nodeID string) string {
for {
containerID := gs.nodeContainer[nodeID]
if containerID == "" || gs.nodeShapes[containerID] == d2target.ShapeSequenceDiagram {
return containerID
}
nodeID = containerID
}
}
func String(n int, exclude []rune) string {
var b strings.Builder
for i := 0; i < n; i++ {