Fixes invalid sequence diagram inputs
This commit is contained in:
parent
b6612d32b6
commit
6a4d31904c
1 changed files with 19 additions and 6 deletions
|
|
@ -17,9 +17,10 @@ import (
|
||||||
|
|
||||||
func GenDSL(maxi int) (_ string, err error) {
|
func GenDSL(maxi int) (_ string, err error) {
|
||||||
gs := &dslGenState{
|
gs := &dslGenState{
|
||||||
rand: mathrand.New(mathrand.NewSource(time.Now().UnixNano())),
|
rand: mathrand.New(mathrand.NewSource(time.Now().UnixNano())),
|
||||||
g: d2graph.NewGraph(&d2ast.Map{}),
|
g: d2graph.NewGraph(&d2ast.Map{}),
|
||||||
nodeShapes: make(map[string]string),
|
nodeShapes: make(map[string]string),
|
||||||
|
nodeContainer: make(map[string]string),
|
||||||
}
|
}
|
||||||
err = gs.gen(maxi)
|
err = gs.gen(maxi)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -32,8 +33,9 @@ type dslGenState struct {
|
||||||
rand *mathrand.Rand
|
rand *mathrand.Rand
|
||||||
g *d2graph.Graph
|
g *d2graph.Graph
|
||||||
|
|
||||||
nodesArr []string
|
nodesArr []string
|
||||||
nodeShapes map[string]string
|
nodeShapes map[string]string
|
||||||
|
nodeContainer map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gs *dslGenState) gen(maxi int) error {
|
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.nodesArr = append(gs.nodesArr, nodeID)
|
||||||
gs.nodeShapes[nodeID] = "square"
|
gs.nodeShapes[nodeID] = "square"
|
||||||
|
gs.nodeContainer[nodeID] = containerID
|
||||||
return nodeID, nil
|
return nodeID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -123,7 +126,7 @@ func (gs *dslGenState) edge() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if src != dst {
|
if gs.findOuterSequenceDiagram(src) == gs.findOuterSequenceDiagram(dst) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
err = gs.node()
|
err = gs.node()
|
||||||
|
|
@ -194,6 +197,16 @@ func randRune() rune {
|
||||||
return mathrand.Int31n(128) + 1
|
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 {
|
func String(n int, exclude []rune) string {
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue