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()
|
||||
dstGrid := edge.Dst.Parent.ClosestGridDiagram()
|
||||
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 {
|
||||
// valid: a -> grid
|
||||
// invalid: a -> grid.child
|
||||
c.errorf(edge.GetAstEdge(), "edges into grid diagrams are not supported yet")
|
||||
continue
|
||||
} else {
|
||||
if srcGrid != edge.Src.Parent || dstGrid != edge.Dst.Parent {
|
||||
c.errorf(edge.GetAstEdge(), "grid diagrams can only have edges between children right now")
|
||||
continue
|
||||
}
|
||||
}
|
||||
if srcGrid != edge.Src.Parent || dstGrid != edge.Dst.Parent {
|
||||
// valid: grid.child1 -> grid.child2
|
||||
// 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: {
|
||||
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",
|
||||
|
|
|
|||
|
|
@ -14,3 +14,22 @@ func (obj *Object) ClosestGridDiagram() *Object {
|
|||
}
|
||||
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_right"),
|
||||
loadFromFile(t, "simple_grid_edges"),
|
||||
loadFromFile(t, "grid_nested_simple_edges"),
|
||||
}
|
||||
|
||||
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,
|
||||
"err": {
|
||||
"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",
|
||||
"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