validate nested grid edges (not implemented yet)
This commit is contained in:
parent
64313e1787
commit
fc06b09df6
6 changed files with 93 additions and 6 deletions
|
|
@ -1075,14 +1075,29 @@ func (c *compiler) validateEdges(g *d2graph.Graph) {
|
||||||
srcGrid := edge.Src.Parent.ClosestGridDiagram()
|
srcGrid := edge.Src.Parent.ClosestGridDiagram()
|
||||||
dstGrid := edge.Dst.Parent.ClosestGridDiagram()
|
dstGrid := edge.Dst.Parent.ClosestGridDiagram()
|
||||||
if srcGrid != nil || dstGrid != nil {
|
if srcGrid != nil || dstGrid != nil {
|
||||||
|
if top := srcGrid.TopGridDiagram(); srcGrid != top {
|
||||||
|
// valid: grid.child1 -> grid.child2
|
||||||
|
// invalid: grid.childGrid.child1 -> grid.childGrid.child2
|
||||||
|
c.errorf(edge.GetAstEdge(), "edge must be on direct child of grid diagram %#v", top.AbsID())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if top := dstGrid.TopGridDiagram(); dstGrid != top {
|
||||||
|
// valid: grid.child1 -> grid.child2
|
||||||
|
// invalid: grid.childGrid.child1 -> grid.childGrid.child2
|
||||||
|
c.errorf(edge.GetAstEdge(), "edge must be on direct child of grid diagram %#v", top.AbsID())
|
||||||
|
continue
|
||||||
|
}
|
||||||
if srcGrid != dstGrid {
|
if srcGrid != dstGrid {
|
||||||
|
// valid: a -> grid
|
||||||
|
// invalid: a -> grid.child
|
||||||
c.errorf(edge.GetAstEdge(), "edges into grid diagrams are not supported yet")
|
c.errorf(edge.GetAstEdge(), "edges into grid diagrams are not supported yet")
|
||||||
continue
|
continue
|
||||||
} else {
|
}
|
||||||
if srcGrid != edge.Src.Parent || dstGrid != edge.Dst.Parent {
|
if srcGrid != edge.Src.Parent || dstGrid != edge.Dst.Parent {
|
||||||
c.errorf(edge.GetAstEdge(), "grid diagrams can only have edges between children right now")
|
// valid: grid.child1 -> grid.child2
|
||||||
continue
|
// invalid: grid.child1 -> grid.child2.child1
|
||||||
}
|
c.errorf(edge.GetAstEdge(), "grid diagrams can only have edges between children right now")
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2496,9 +2496,14 @@ d2/testdata/d2compiler/TestCompile/grid_edge.d2:7:2: edges into grid diagrams ar
|
||||||
b: {
|
b: {
|
||||||
c -> d: not yet
|
c -> d: not yet
|
||||||
}
|
}
|
||||||
|
a: {
|
||||||
|
grid-columns: 1
|
||||||
|
e -> f: also not yet
|
||||||
|
}
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
expErr: `d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:5:3: grid diagrams can only have edges between children right now`,
|
expErr: `d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:9:3: edge must be on direct child of grid diagram "hey"
|
||||||
|
d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:5:3: grid diagrams can only have edges between children right now`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "grid_nested",
|
name: "grid_nested",
|
||||||
|
|
|
||||||
|
|
@ -14,3 +14,22 @@ func (obj *Object) ClosestGridDiagram() *Object {
|
||||||
}
|
}
|
||||||
return obj.Parent.ClosestGridDiagram()
|
return obj.Parent.ClosestGridDiagram()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TopGridDiagram returns the least nested (outermost) grid diagram
|
||||||
|
func (obj *Object) TopGridDiagram() *Object {
|
||||||
|
if obj == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var gd *Object
|
||||||
|
if obj.IsGridDiagram() {
|
||||||
|
gd = obj
|
||||||
|
}
|
||||||
|
curr := obj.Parent
|
||||||
|
for curr != nil {
|
||||||
|
if curr.IsGridDiagram() {
|
||||||
|
gd = curr
|
||||||
|
}
|
||||||
|
curr = curr.Parent
|
||||||
|
}
|
||||||
|
return gd
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -2834,6 +2834,7 @@ y: profits {
|
||||||
loadFromFile(t, "dagre_spacing"),
|
loadFromFile(t, "dagre_spacing"),
|
||||||
loadFromFile(t, "dagre_spacing_right"),
|
loadFromFile(t, "dagre_spacing_right"),
|
||||||
loadFromFile(t, "simple_grid_edges"),
|
loadFromFile(t, "simple_grid_edges"),
|
||||||
|
loadFromFile(t, "grid_nested_simple_edges"),
|
||||||
}
|
}
|
||||||
|
|
||||||
runa(t, tcs)
|
runa(t, tcs)
|
||||||
|
|
|
||||||
43
e2etests/testdata/files/grid_nested_simple_edges.d2
vendored
Normal file
43
e2etests/testdata/files/grid_nested_simple_edges.d2
vendored
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
direction: right
|
||||||
|
outer-grid -> outer-container
|
||||||
|
|
||||||
|
outer-grid: {
|
||||||
|
grid-columns: 1
|
||||||
|
|
||||||
|
inner-grid -> container -> etc
|
||||||
|
|
||||||
|
container: {
|
||||||
|
label.near: top-left
|
||||||
|
# edges not yet supported here since they must be direct grid children
|
||||||
|
a
|
||||||
|
b
|
||||||
|
c
|
||||||
|
}
|
||||||
|
|
||||||
|
inner-grid: {
|
||||||
|
grid-rows: 1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
# edges here are not supported yet since this is inside another grid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
outer-container: {
|
||||||
|
grid -> container
|
||||||
|
|
||||||
|
grid: {
|
||||||
|
grid-rows: 1
|
||||||
|
# direct child edges ok in least nested grid
|
||||||
|
1 -> 2 -> 3
|
||||||
|
}
|
||||||
|
|
||||||
|
container: {
|
||||||
|
# non grid edges ok
|
||||||
|
4 -> 5 -> 6
|
||||||
|
nested container: {
|
||||||
|
# nested non grid edges ok
|
||||||
|
7 -> 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
4
testdata/d2compiler/TestCompile/grid_deeper_edge.exp.json
generated
vendored
4
testdata/d2compiler/TestCompile/grid_deeper_edge.exp.json
generated
vendored
|
|
@ -2,6 +2,10 @@
|
||||||
"graph": null,
|
"graph": null,
|
||||||
"err": {
|
"err": {
|
||||||
"errs": [
|
"errs": [
|
||||||
|
{
|
||||||
|
"range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:2:86-8:8:92",
|
||||||
|
"errmsg": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:9:3: edge must be on direct child of grid diagram \"hey\""
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:2:41-4:8:47",
|
"range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:2:41-4:8:47",
|
||||||
"errmsg": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:5:3: grid diagrams can only have edges between children right now"
|
"errmsg": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:5:3: grid diagrams can only have edges between children right now"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue