diff --git a/d2compiler/compile.go b/d2compiler/compile.go index fe4b99ef12..4264278336 100644 --- a/d2compiler/compile.go +++ b/d2compiler/compile.go @@ -114,8 +114,9 @@ func (c *compiler) compileBoardsField(g *d2graph.Graph, ir *d2ir.Map, fieldName return } for _, f := range boards.Map().Fields { + m := f.Map() if f.Map() == nil { - continue + m = &d2ir.Map{} } if g.GetBoard(f.Name) != nil { c.errorf(f.References[0].AST(), "board name %v already used by another board", f.Name) @@ -123,11 +124,11 @@ func (c *compiler) compileBoardsField(g *d2graph.Graph, ir *d2ir.Map, fieldName } g2 := d2graph.NewGraph() g2.Parent = g - g2.AST = f.Map().AST().(*d2ast.Map) + g2.AST = m.AST().(*d2ast.Map) if g.BaseAST != nil { g2.BaseAST = findFieldAST(g.BaseAST, f) } - c.compileBoard(g2, f.Map()) + c.compileBoard(g2, m) g2.Name = f.Name switch fieldName { case "layers": diff --git a/d2oracle/edit_test.go b/d2oracle/edit_test.go index 794c5c44d8..7eaf57dc2e 100644 --- a/d2oracle/edit_test.go +++ b/d2oracle/edit_test.go @@ -543,6 +543,27 @@ layers: { } } } +`, + }, + { + name: "add_layer/4", + text: `b + +layers: { + c +} +`, + key: `d`, + + boardPath: []string{"c"}, + expKey: `d`, + exp: `b + +layers: { + c: { + d + } +} `, }, { diff --git a/testdata/d2compiler/TestCompile2/boards/isFolderOnly.exp.json b/testdata/d2compiler/TestCompile2/boards/isFolderOnly.exp.json index f62edd25b8..8cdf54d085 100644 --- a/testdata/d2compiler/TestCompile2/boards/isFolderOnly.exp.json +++ b/testdata/d2compiler/TestCompile2/boards/isFolderOnly.exp.json @@ -257,6 +257,10 @@ "raw_string": "one two three" } ] + }, + "map": { + "range": ",1:0:0-1:0:0", + "nodes": null } } } @@ -968,6 +972,41 @@ }, "zIndex": 0 } + ], + "steps": [ + { + "name": "missus", + "isFolderOnly": true, + "ast": { + "range": ",0:0:0-1:0:0", + "nodes": null + }, + "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": null, + "objects": null + } ] } ] diff --git a/testdata/d2oracle/TestCreate/add_layer/1.exp.json b/testdata/d2oracle/TestCreate/add_layer/1.exp.json index 26fe0e14f0..dfb9665637 100644 --- a/testdata/d2oracle/TestCreate/add_layer/1.exp.json +++ b/testdata/d2oracle/TestCreate/add_layer/1.exp.json @@ -72,7 +72,12 @@ ] }, "primary": {}, - "value": {} + "value": { + "map": { + "range": ",1:0:0-1:0:0", + "nodes": null + } + } } } ] @@ -152,6 +157,41 @@ }, "zIndex": 0 } + ], + "layers": [ + { + "name": "c", + "isFolderOnly": true, + "ast": { + "range": ",0:0:0-1:0:0", + "nodes": null + }, + "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": null, + "objects": null + } ] }, "err": "" diff --git a/testdata/d2oracle/TestCreate/add_layer/2.exp.json b/testdata/d2oracle/TestCreate/add_layer/2.exp.json index 9f09761675..2b4f7031f6 100644 --- a/testdata/d2oracle/TestCreate/add_layer/2.exp.json +++ b/testdata/d2oracle/TestCreate/add_layer/2.exp.json @@ -124,7 +124,12 @@ ] }, "primary": {}, - "value": {} + "value": { + "map": { + "range": ",1:0:0-1:0:0", + "nodes": null + } + } } } ] @@ -307,6 +312,39 @@ "zIndex": 0 } ] + }, + { + "name": "b", + "isFolderOnly": true, + "ast": { + "range": ",0:0:0-1:0:0", + "nodes": null + }, + "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": null, + "objects": null } ] }, diff --git a/testdata/d2oracle/TestCreate/add_layer/3.exp.json b/testdata/d2oracle/TestCreate/add_layer/3.exp.json index 8f8c523b2e..9a7caee0ff 100644 --- a/testdata/d2oracle/TestCreate/add_layer/3.exp.json +++ b/testdata/d2oracle/TestCreate/add_layer/3.exp.json @@ -143,7 +143,12 @@ ] }, "primary": {}, - "value": {} + "value": { + "map": { + "range": ",1:0:0-1:0:0", + "nodes": null + } + } } } ] @@ -385,6 +390,41 @@ }, "zIndex": 0 } + ], + "layers": [ + { + "name": "c", + "isFolderOnly": true, + "ast": { + "range": ",0:0:0-1:0:0", + "nodes": null + }, + "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": null, + "objects": null + } ] } ] diff --git a/testdata/d2oracle/TestCreate/add_layer/4.exp.json b/testdata/d2oracle/TestCreate/add_layer/4.exp.json new file mode 100644 index 0000000000..5adb734766 --- /dev/null +++ b/testdata/d2oracle/TestCreate/add_layer/4.exp.json @@ -0,0 +1,291 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,0:0:0-7:0:32", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,0:0:0-0:1:1", + "key": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,0:0:0-0:1:1", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + }, + { + "map_key": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,2:0:3-6:1:31", + "key": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,2:0:3-2:6:9", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,2:0:3-2:6:9", + "value": [ + { + "string": "layers", + "raw_string": "layers" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,2:8:11-6:1:31", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,3:2:15-5:3:29", + "key": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,3:2:15-3:3:16", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,3:2:15-3:3:16", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,3:5:18-5:3:29", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,4:4:24-4:5:25", + "key": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,4:4:24-4:5:25", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,4:4:24-4:5:25", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + } + ] + } + } + } + } + ] + } + } + } + } + ] + }, + "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": null, + "objects": [ + { + "id": "b", + "id_val": "b", + "references": [ + { + "key": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,0:0:0-0:1:1", + "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 + } + ], + "layers": [ + { + "name": "c", + "isFolderOnly": false, + "ast": { + "range": ",0:0:0-1:0:0", + "nodes": [ + { + "map_key": { + "range": ",0:0:0-0:0:0", + "key": { + "range": ",0:0:0-0:0:0", + "path": [ + { + "unquoted_string": { + "range": ",0:0:0-0:0:0", + "value": [ + { + "string": "d" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + } + ] + }, + "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": null, + "objects": [ + { + "id": "d", + "id_val": "d", + "references": [ + { + "key": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,4:4:24-4:5:25", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestCreate/add_layer/4.d2,4:4:24-4:5:25", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "d" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ] + } + ] + }, + "err": "" +} diff --git a/testdata/d2oracle/TestDelete/delete-layer-obj.exp.json b/testdata/d2oracle/TestDelete/delete-layer-obj.exp.json index 5db3c1df32..f8b40706ea 100644 --- a/testdata/d2oracle/TestDelete/delete-layer-obj.exp.json +++ b/testdata/d2oracle/TestDelete/delete-layer-obj.exp.json @@ -49,7 +49,12 @@ ] }, "primary": {}, - "value": {} + "value": { + "map": { + "range": ",1:0:0-1:0:0", + "nodes": null + } + } } } ] @@ -83,7 +88,42 @@ "zIndex": 0 }, "edges": null, - "objects": null + "objects": null, + "layers": [ + { + "name": "x", + "isFolderOnly": true, + "ast": { + "range": ",0:0:0-1:0:0", + "nodes": null + }, + "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": null, + "objects": null + } + ] }, "err": "" }