d2oracle: fix deleting nested board
This commit is contained in:
parent
7d84b7c1b9
commit
f55dd43303
3 changed files with 249 additions and 2 deletions
|
|
@ -890,7 +890,7 @@ func Delete(g *d2graph.Graph, boardPath []string, key string) (_ *d2graph.Graph,
|
|||
baseAST = boardG.BaseAST
|
||||
}
|
||||
|
||||
g2, err := deleteReserved(g, baseAST, mk)
|
||||
g2, err := deleteReserved(g, boardPath, baseAST, mk)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -1228,7 +1228,7 @@ func renameConflictsToParent(g *d2graph.Graph, key *d2ast.KeyPath) (*d2graph.Gra
|
|||
return g, nil
|
||||
}
|
||||
|
||||
func deleteReserved(g *d2graph.Graph, baseAST *d2ast.Map, mk *d2ast.Key) (*d2graph.Graph, error) {
|
||||
func deleteReserved(g *d2graph.Graph, boardPath []string, baseAST *d2ast.Map, mk *d2ast.Key) (*d2graph.Graph, error) {
|
||||
targetKey := mk.Key
|
||||
if len(mk.Edges) == 1 {
|
||||
if mk.EdgeKey == nil {
|
||||
|
|
@ -1243,6 +1243,13 @@ func deleteReserved(g *d2graph.Graph, baseAST *d2ast.Map, mk *d2ast.Key) (*d2gra
|
|||
|
||||
var e *d2graph.Edge
|
||||
obj := g.Root
|
||||
if len(boardPath) > 0 {
|
||||
boardG := GetBoardGraph(g, boardPath)
|
||||
if boardG == nil {
|
||||
return nil, fmt.Errorf("board %v not found", boardPath)
|
||||
}
|
||||
obj = boardG.Root
|
||||
}
|
||||
if len(mk.Edges) == 1 {
|
||||
if mk.Key != nil {
|
||||
var ok bool
|
||||
|
|
|
|||
|
|
@ -7618,6 +7618,24 @@ a
|
|||
exp: `*.b
|
||||
a
|
||||
a.b: null
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "delete-layer-style",
|
||||
|
||||
text: `layers: {
|
||||
x: {
|
||||
a.style.fill: red
|
||||
}
|
||||
}
|
||||
`,
|
||||
boardPath: []string{"x"},
|
||||
key: `a.style.fill`,
|
||||
exp: `layers: {
|
||||
x: {
|
||||
a
|
||||
}
|
||||
}
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
222
testdata/d2oracle/TestDelete/delete-layer-style.exp.json
generated
vendored
Normal file
222
testdata/d2oracle/TestDelete/delete-layer-style.exp.json
generated
vendored
Normal file
|
|
@ -0,0 +1,222 @@
|
|||
{
|
||||
"graph": {
|
||||
"name": "",
|
||||
"isFolderOnly": true,
|
||||
"ast": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,0:0:0-5:0:29",
|
||||
"nodes": [
|
||||
{
|
||||
"map_key": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,0:0:0-4:1:28",
|
||||
"key": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,0:0:0-0:6:6",
|
||||
"path": [
|
||||
{
|
||||
"unquoted_string": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,0:0:0-0:6:6",
|
||||
"value": [
|
||||
{
|
||||
"string": "layers",
|
||||
"raw_string": "layers"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"primary": {},
|
||||
"value": {
|
||||
"map": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,0:8:8-4:1:28",
|
||||
"nodes": [
|
||||
{
|
||||
"map_key": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,1:2:12-3:3:26",
|
||||
"key": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,1:2:12-1:3:13",
|
||||
"path": [
|
||||
{
|
||||
"unquoted_string": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,1:2:12-1:3:13",
|
||||
"value": [
|
||||
{
|
||||
"string": "x",
|
||||
"raw_string": "x"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"primary": {},
|
||||
"value": {
|
||||
"map": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,1:5:15-3:3:26",
|
||||
"nodes": [
|
||||
{
|
||||
"map_key": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,2:4:21-2:5:22",
|
||||
"key": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,2:4:21-2:5:22",
|
||||
"path": [
|
||||
{
|
||||
"unquoted_string": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,2:4:21-2:5:22",
|
||||
"value": [
|
||||
{
|
||||
"string": "a",
|
||||
"raw_string": "a"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"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": null,
|
||||
"layers": [
|
||||
{
|
||||
"name": "x",
|
||||
"isFolderOnly": false,
|
||||
"ast": {
|
||||
"range": ",1:0:0-2: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": "a"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"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": "a",
|
||||
"id_val": "a",
|
||||
"references": [
|
||||
{
|
||||
"key": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,2:4:21-2:5:22",
|
||||
"path": [
|
||||
{
|
||||
"unquoted_string": {
|
||||
"range": "d2/testdata/d2oracle/TestDelete/delete-layer-style.d2,2:4:21-2:5:22",
|
||||
"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
|
||||
},
|
||||
"zIndex": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"err": "<nil>"
|
||||
}
|
||||
Loading…
Reference in a new issue