diff --git a/d2compiler/compile.go b/d2compiler/compile.go index fe40dd3e8..0675ebf34 100644 --- a/d2compiler/compile.go +++ b/d2compiler/compile.go @@ -1089,16 +1089,35 @@ func (c *compiler) validateNear(g *d2graph.Graph) { func (c *compiler) validateEdges(g *d2graph.Graph) { for _, edge := range g.Edges { + // edges from a grid to something outside is ok + // grid -> outside : ok + // grid -> grid.cell : not ok + // grid -> grid.cell.inner : not ok + if edge.Src.IsGridDiagram() && edge.Dst.IsDescendantOf(edge.Src) { + c.errorf(edge.GetAstEdge(), "edge from grid diagram %#v cannot enter itself", edge.Src.AbsID()) + continue + } + if edge.Dst.IsGridDiagram() && edge.Src.IsDescendantOf(edge.Dst) { + c.errorf(edge.GetAstEdge(), "edge from grid diagram %#v cannot enter itself", edge.Dst.AbsID()) + continue + } + srcGrid := edge.Src.Parent.ClosestGridDiagram() dstGrid := edge.Dst.Parent.ClosestGridDiagram() if srcGrid != nil || dstGrid != nil { if srcGrid != dstGrid { // valid: a -> grid // invalid: a -> grid.child - c.errorf(edge.GetAstEdge(), "edges into grid diagrams are not supported yet") + if dstGrid != nil && !(srcGrid != nil && srcGrid.IsDescendantOf(dstGrid)) { + c.errorf(edge.GetAstEdge(), "edge cannot enter grid diagram %#v", dstGrid.AbsID()) + } else { + c.errorf(edge.GetAstEdge(), "edge cannot exit grid diagram %#v", srcGrid.AbsID()) + } continue } + srcCell := edge.Src.ClosestGridCell() + dstCell := edge.Dst.ClosestGridCell() // edges within a grid cell are ok now // grid.cell.a -> grid.cell.b : ok // grid.cell.a.c -> grid.cell.b.d : ok @@ -1106,14 +1125,8 @@ func (c *compiler) validateEdges(g *d2graph.Graph) { // grid.cell -> grid.cell2 : ok // grid.cell -> grid.cell.inside : not ok // grid.cell -> grid.cell2.inside : not ok - srcIsGridCell := edge.Src.Parent.IsGridDiagram() - dstIsGridCell := edge.Dst.Parent.IsGridDiagram() - // if srcIsGridCell && dstIsGridCell { - // if edge.Src.Parent != edge.Dst.Parent { - - // } - // } - + srcIsGridCell := edge.Src == srcCell + dstIsGridCell := edge.Dst == dstCell if srcIsGridCell != dstIsGridCell { if srcIsGridCell { c.errorf(edge.GetAstEdge(), "grid cell %#v can only connect to another grid cell", edge.Src.AbsID()) @@ -1122,16 +1135,11 @@ func (c *compiler) validateEdges(g *d2graph.Graph) { } continue } - } - // edges from a grid to something outside is ok - // grid -> outside : ok - // grid -> grid.cell : not ok - // grid -> grid.cell.inner : not ok - if (edge.Src.IsGridDiagram() && edge.Dst.IsDescendantOf(edge.Src)) || - (edge.Dst.IsGridDiagram() && edge.Src.IsDescendantOf(edge.Dst)) { - c.errorf(edge.GetAstEdge(), "edges from grid diagram container must be external") - continue + if srcCell != dstCell && (!srcIsGridCell || !dstIsGridCell) { + c.errorf(edge.GetAstEdge(), "edge cannot exit grid cell %#v", srcCell.AbsID()) + continue + } } } diff --git a/d2compiler/compile_test.go b/d2compiler/compile_test.go index bbe5cfdf4..942da6970 100644 --- a/d2compiler/compile_test.go +++ b/d2compiler/compile_test.go @@ -2478,15 +2478,15 @@ d2/testdata/d2compiler/TestCompile/grid_gap_negative.d2:3:16: vertical-gap must grid-rows: 1 a -> b: ok } - c -> hey.b - hey.a -> c - hey -> hey.a +c -> hey.b +hey.a -> c +hey -> hey.a - hey -> c: ok +hey -> c: ok `, - expErr: `d2/testdata/d2compiler/TestCompile/grid_edge.d2:5:2: edges into grid diagrams are not supported yet -d2/testdata/d2compiler/TestCompile/grid_edge.d2:6:2: edges into grid diagrams are not supported yet -d2/testdata/d2compiler/TestCompile/grid_edge.d2:7:2: edges into grid diagrams are not supported yet`, + expErr: `d2/testdata/d2compiler/TestCompile/grid_edge.d2:5:1: edge cannot enter grid diagram "hey" +d2/testdata/d2compiler/TestCompile/grid_edge.d2:6:1: edge cannot exit grid diagram "hey" +d2/testdata/d2compiler/TestCompile/grid_edge.d2:7:1: edge from grid diagram "hey" cannot enter itself`, }, { name: "grid_deeper_edge", @@ -2511,13 +2511,14 @@ d2/testdata/d2compiler/TestCompile/grid_edge.d2:7:2: edges into grid diagrams ar } a -> b.c: not yet a.e -> b.c: also not yet + a -> a.e: not ok } `, - expErr: ` -d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:17:3: grid cell "hey.a.e" can only connect to another grid cell -d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:18:2: edge cannot go outside of grid cell "hey.a.e" + expErr: `d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:17:3: grid cell "hey.a.e" can only connect to another grid cell +d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:18:3: edge cannot exit grid cell "hey.a.e" d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:20:2: grid cell "hey.a" can only connect to another grid cell -d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:21:2: edges into grid diagrams are not supported yet`, +d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:21:2: edge cannot exit grid diagram "hey.a" +d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:22:2: edge from grid diagram "hey.a" cannot enter itself`, }, { name: "grid_nested", diff --git a/d2graph/grid_diagram.go b/d2graph/grid_diagram.go index 62659df59..46f1f034d 100644 --- a/d2graph/grid_diagram.go +++ b/d2graph/grid_diagram.go @@ -15,6 +15,17 @@ func (obj *Object) ClosestGridDiagram() *Object { return obj.Parent.ClosestGridDiagram() } +func (obj *Object) ClosestGridCell() *Object { + if obj == nil { + return nil + } + // grid cells can be a nested grid diagram + if obj.Parent.IsGridDiagram() { + return obj + } + return obj.Parent.ClosestGridCell() +} + // TopGridDiagram returns the least nested (outermost) grid diagram func (obj *Object) TopGridDiagram() *Object { if obj == nil { diff --git a/testdata/d2compiler/TestCompile/grid_deeper_edge.exp.json b/testdata/d2compiler/TestCompile/grid_deeper_edge.exp.json index d823720b8..55eac24ae 100644 --- a/testdata/d2compiler/TestCompile/grid_deeper_edge.exp.json +++ b/testdata/d2compiler/TestCompile/grid_deeper_edge.exp.json @@ -1,803 +1,27 @@ { - "graph": { - "name": "", - "isFolderOnly": false, - "ast": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,0:0:0-11:0:110", - "nodes": [ - { - "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,0:0:0-10:1:109", - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,0:0:0-0:3:3", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,0:0:0-0:3:3", - "value": [ - { - "string": "hey", - "raw_string": "hey" - } - ] - } - } - ] - }, - "primary": {}, - "value": { - "map": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,0:5:5-10:1:109", - "nodes": [ - { - "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,1:1:8-1:13:20", - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,1:1:8-1:10:17", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,1:1:8-1:10:17", - "value": [ - { - "string": "grid-rows", - "raw_string": "grid-rows" - } - ] - } - } - ] - }, - "primary": {}, - "value": { - "number": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,1:12:19-1:13:20", - "raw": "1", - "value": "1" - } - } - } - }, - { - "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:1:22-2:11:32", - "edges": [ - { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:1:22-2:7:28", - "src": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:1:22-2:2:23", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:1:22-2:2:23", - "value": [ - { - "string": "a", - "raw_string": "a" - } - ] - } - } - ] - }, - "src_arrow": "", - "dst": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:6:27-2:7:28", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:6:27-2:7:28", - "value": [ - { - "string": "b", - "raw_string": "b" - } - ] - } - } - ] - }, - "dst_arrow": ">" - } - ], - "primary": {}, - "value": { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:9:30-2:11:32", - "value": [ - { - "string": "ok", - "raw_string": "ok" - } - ] - } - } - } - }, - { - "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,3:1:34-5:2:58", - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,3:1:34-3:2:35", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,3:1:34-3:2:35", - "value": [ - { - "string": "b", - "raw_string": "b" - } - ] - } - } - ] - }, - "primary": {}, - "value": { - "map": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,3:4:37-5:2:58", - "nodes": [ - { - "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:2:41-4:16:55", - "edges": [ - { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:2:41-4:8:47", - "src": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:2:41-4:3:42", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:2:41-4:3:42", - "value": [ - { - "string": "c", - "raw_string": "c" - } - ] - } - } - ] - }, - "src_arrow": "", - "dst": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:7:46-4:8:47", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:7:46-4:8:47", - "value": [ - { - "string": "d", - "raw_string": "d" - } - ] - } - } - ] - }, - "dst_arrow": ">" - } - ], - "primary": {}, - "value": { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:10:49-4:16:55", - "value": [ - { - "string": "ok now", - "raw_string": "ok now" - } - ] - } - } - } - } - ] - } - } - } - }, - { - "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,6:1:60-9:2:107", - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,6:1:60-6:2:61", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,6:1:60-6:2:61", - "value": [ - { - "string": "a", - "raw_string": "a" - } - ] - } - } - ] - }, - "primary": {}, - "value": { - "map": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,6:4:63-9:2:107", - "nodes": [ - { - "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,7:2:67-7:17:82", - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,7:2:67-7:14:79", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,7:2:67-7:14:79", - "value": [ - { - "string": "grid-columns", - "raw_string": "grid-columns" - } - ] - } - } - ] - }, - "primary": {}, - "value": { - "number": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,7:16:81-7:17:82", - "raw": "1", - "value": "1" - } - } - } - }, - { - "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:2:85-8:21:104", - "edges": [ - { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:2:85-8:8:91", - "src": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:2:85-8:3:86", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:2:85-8:3:86", - "value": [ - { - "string": "e", - "raw_string": "e" - } - ] - } - } - ] - }, - "src_arrow": "", - "dst": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:7:90-8:8:91", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:7:90-8:8:91", - "value": [ - { - "string": "f", - "raw_string": "f" - } - ] - } - } - ] - }, - "dst_arrow": ">" - } - ], - "primary": {}, - "value": { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:10:93-8:21:104", - "value": [ - { - "string": "also ok now", - "raw_string": "also ok now" - } - ] - } - } - } - } - ] - } - } - } - } - ] - } - } - } - } - ] - }, - "root": { - "id": "", - "id_val": "", - "attributes": { - "label": { - "value": "" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "" - }, - "direction": { - "value": "" - }, - "constraint": null - }, - "zIndex": 0 - }, - "edges": [ + "graph": null, + "err": { + "errs": [ { - "index": 0, - "isCurve": false, - "src_arrow": false, - "dst_arrow": true, - "references": [ - { - "map_key_edge_index": 0 - } - ], - "attributes": { - "label": { - "value": "ok" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "" - }, - "direction": { - "value": "" - }, - "constraint": null - }, - "zIndex": 0 + "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,16:2:199-16:10:207", + "errmsg": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:17:3: grid cell \"hey.a.e\" can only connect to another grid cell" }, { - "index": 0, - "isCurve": false, - "src_arrow": false, - "dst_arrow": true, - "references": [ - { - "map_key_edge_index": 0 - } - ], - "attributes": { - "label": { - "value": "ok now" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "" - }, - "direction": { - "value": "" - }, - "constraint": null - }, - "zIndex": 0 + "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,17:2:218-17:12:228", + "errmsg": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:18:3: edge cannot exit grid cell \"hey.a.e\"" }, { - "index": 0, - "isCurve": false, - "src_arrow": false, - "dst_arrow": true, - "references": [ - { - "map_key_edge_index": 0 - } - ], - "attributes": { - "label": { - "value": "also ok now" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "" - }, - "direction": { - "value": "" - }, - "constraint": null - }, - "zIndex": 0 - } - ], - "objects": [ - { - "id": "hey", - "id_val": "hey", - "references": [ - { - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,0:0:0-0:3:3", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,0:0:0-0:3:3", - "value": [ - { - "string": "hey", - "raw_string": "hey" - } - ] - } - } - ] - }, - "key_path_index": 0, - "map_key_edge_index": -1 - } - ], - "attributes": { - "label": { - "value": "hey" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "rectangle" - }, - "direction": { - "value": "" - }, - "constraint": null, - "gridRows": { - "value": "1" - } - }, - "zIndex": 0 + "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,19:1:241-19:9:249", + "errmsg": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:20:2: grid cell \"hey.a\" can only connect to another grid cell" }, { - "id": "a", - "id_val": "a", - "references": [ - { - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:1:22-2:2:23", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:1:22-2:2:23", - "value": [ - { - "string": "a", - "raw_string": "a" - } - ] - } - } - ] - }, - "key_path_index": 0, - "map_key_edge_index": 0 - }, - { - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,6:1:60-6:2:61", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,6:1:60-6:2:61", - "value": [ - { - "string": "a", - "raw_string": "a" - } - ] - } - } - ] - }, - "key_path_index": 0, - "map_key_edge_index": -1 - } - ], - "attributes": { - "label": { - "value": "a" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "rectangle" - }, - "direction": { - "value": "" - }, - "constraint": null, - "gridColumns": { - "value": "1" - } - }, - "zIndex": 0 + "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,20:1:260-20:11:270", + "errmsg": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:21:2: edge cannot exit grid diagram \"hey.a\"" }, { - "id": "b", - "id_val": "b", - "references": [ - { - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:6:27-2:7:28", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,2:6:27-2:7:28", - "value": [ - { - "string": "b", - "raw_string": "b" - } - ] - } - } - ] - }, - "key_path_index": 0, - "map_key_edge_index": 0 - }, - { - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,3:1:34-3:2:35", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,3:1:34-3:2:35", - "value": [ - { - "string": "b", - "raw_string": "b" - } - ] - } - } - ] - }, - "key_path_index": 0, - "map_key_edge_index": -1 - } - ], - "attributes": { - "label": { - "value": "b" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "rectangle" - }, - "direction": { - "value": "" - }, - "constraint": null - }, - "zIndex": 0 - }, - { - "id": "c", - "id_val": "c", - "references": [ - { - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:2:41-4:3:42", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:2:41-4:3:42", - "value": [ - { - "string": "c", - "raw_string": "c" - } - ] - } - } - ] - }, - "key_path_index": 0, - "map_key_edge_index": 0 - } - ], - "attributes": { - "label": { - "value": "c" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "rectangle" - }, - "direction": { - "value": "" - }, - "constraint": null - }, - "zIndex": 0 - }, - { - "id": "d", - "id_val": "d", - "references": [ - { - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:7:46-4:8:47", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,4:7:46-4:8:47", - "value": [ - { - "string": "d", - "raw_string": "d" - } - ] - } - } - ] - }, - "key_path_index": 0, - "map_key_edge_index": 0 - } - ], - "attributes": { - "label": { - "value": "d" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "rectangle" - }, - "direction": { - "value": "" - }, - "constraint": null - }, - "zIndex": 0 - }, - { - "id": "e", - "id_val": "e", - "references": [ - { - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:2:85-8:3:86", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:2:85-8:3:86", - "value": [ - { - "string": "e", - "raw_string": "e" - } - ] - } - } - ] - }, - "key_path_index": 0, - "map_key_edge_index": 0 - } - ], - "attributes": { - "label": { - "value": "e" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "rectangle" - }, - "direction": { - "value": "" - }, - "constraint": null - }, - "zIndex": 0 - }, - { - "id": "f", - "id_val": "f", - "references": [ - { - "key": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:7:90-8:8:91", - "path": [ - { - "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,8:7:90-8:8:91", - "value": [ - { - "string": "f", - "raw_string": "f" - } - ] - } - } - ] - }, - "key_path_index": 0, - "map_key_edge_index": 0 - } - ], - "attributes": { - "label": { - "value": "f" - }, - "labelDimensions": { - "width": 0, - "height": 0 - }, - "style": {}, - "near_key": null, - "shape": { - "value": "rectangle" - }, - "direction": { - "value": "" - }, - "constraint": null - }, - "zIndex": 0 + "range": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2,21:1:286-21:9:294", + "errmsg": "d2/testdata/d2compiler/TestCompile/grid_deeper_edge.d2:22:2: edge from grid diagram \"hey.a\" cannot enter itself" } ] - }, - "err": null + } } diff --git a/testdata/d2compiler/TestCompile/grid_edge.exp.json b/testdata/d2compiler/TestCompile/grid_edge.exp.json index 01dc6d78b..ceaeca9c2 100644 --- a/testdata/d2compiler/TestCompile/grid_edge.exp.json +++ b/testdata/d2compiler/TestCompile/grid_edge.exp.json @@ -3,16 +3,16 @@ "err": { "errs": [ { - "range": "d2/testdata/d2compiler/TestCompile/grid_edge.d2,4:1:36-4:11:46", - "errmsg": "d2/testdata/d2compiler/TestCompile/grid_edge.d2:5:2: edges into grid diagrams are not supported yet" + "range": "d2/testdata/d2compiler/TestCompile/grid_edge.d2,4:0:35-4:10:45", + "errmsg": "d2/testdata/d2compiler/TestCompile/grid_edge.d2:5:1: edge cannot enter grid diagram \"hey\"" }, { - "range": "d2/testdata/d2compiler/TestCompile/grid_edge.d2,5:1:48-5:11:58", - "errmsg": "d2/testdata/d2compiler/TestCompile/grid_edge.d2:6:2: edges into grid diagrams are not supported yet" + "range": "d2/testdata/d2compiler/TestCompile/grid_edge.d2,5:0:46-5:10:56", + "errmsg": "d2/testdata/d2compiler/TestCompile/grid_edge.d2:6:1: edge cannot exit grid diagram \"hey\"" }, { - "range": "d2/testdata/d2compiler/TestCompile/grid_edge.d2,6:1:60-6:13:72", - "errmsg": "d2/testdata/d2compiler/TestCompile/grid_edge.d2:7:2: edges into grid diagrams are not supported yet" + "range": "d2/testdata/d2compiler/TestCompile/grid_edge.d2,6:0:57-6:12:69", + "errmsg": "d2/testdata/d2compiler/TestCompile/grid_edge.d2:7:1: edge from grid diagram \"hey\" cannot enter itself" } ] }