Skip to content

Commit

Permalink
Merge pull request #1833 from alixander/fix-delete-attribute
Browse files Browse the repository at this point in the history
d2oracle: fix deleting imported attributes
  • Loading branch information
alixander authored Feb 10, 2024
2 parents 20c3598 + 994a67d commit 03795d8
Show file tree
Hide file tree
Showing 5 changed files with 690 additions and 10 deletions.
38 changes: 28 additions & 10 deletions d2oracle/edit.go
Original file line number Diff line number Diff line change
Expand Up @@ -847,7 +847,7 @@ func Delete(g *d2graph.Graph, boardPath []string, key string) (_ *d2graph.Graph,
baseAST = boardG.BaseAST
}

g2, err := deleteReserved(g, mk)
g2, err := deleteReserved(g, baseAST, mk)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -1185,7 +1185,7 @@ func renameConflictsToParent(g *d2graph.Graph, key *d2ast.KeyPath) (*d2graph.Gra
return g, nil
}

func deleteReserved(g *d2graph.Graph, mk *d2ast.Key) (*d2graph.Graph, error) {
func deleteReserved(g *d2graph.Graph, baseAST *d2ast.Map, mk *d2ast.Key) (*d2graph.Graph, error) {
targetKey := mk.Key
if len(mk.Edges) == 1 {
if mk.EdgeKey == nil {
Expand All @@ -1212,14 +1212,21 @@ func deleteReserved(g *d2graph.Graph, mk *d2ast.Key) (*d2graph.Graph, error) {
if !ok {
return g, nil
}
imported := IsImportedEdge(baseAST, e)

if err := deleteEdgeField(g, e, targetKey.Path[len(targetKey.Path)-1].Unbox().ScalarString()); err != nil {
return nil, err
if imported {
mk.Value = d2ast.MakeValueBox(&d2ast.Null{})
appendMapKey(baseAST, mk)
} else {
if err := deleteEdgeField(g, e, targetKey.Path[len(targetKey.Path)-1].Unbox().ScalarString()); err != nil {
return nil, err
}
}
return recompile(g)
}

isStyleKey := false
imported := false
for _, id := range d2graph.Key(targetKey) {
_, ok := d2graph.ReservedKeywords[id]
if ok {
Expand All @@ -1228,9 +1235,14 @@ func deleteReserved(g *d2graph.Graph, mk *d2ast.Key) (*d2graph.Graph, error) {
continue
}
if isStyleKey {
err := deleteObjField(g, obj, id)
if err != nil {
return nil, err
if imported {
mk.Value = d2ast.MakeValueBox(&d2ast.Null{})
appendMapKey(baseAST, mk)
} else {
err := deleteObjField(g, obj, id)
if err != nil {
return nil, err
}
}
}

Expand All @@ -1242,9 +1254,14 @@ func deleteReserved(g *d2graph.Graph, mk *d2ast.Key) (*d2graph.Graph, error) {
id == "left" ||
id == "top" ||
id == "link" {
err := deleteObjField(g, obj, id)
if err != nil {
return nil, err
if imported {
mk.Value = d2ast.MakeValueBox(&d2ast.Null{})
appendMapKey(baseAST, mk)
} else {
err := deleteObjField(g, obj, id)
if err != nil {
return nil, err
}
}
}
break
Expand All @@ -1253,6 +1270,7 @@ func deleteReserved(g *d2graph.Graph, mk *d2ast.Key) (*d2graph.Graph, error) {
if !ok {
return nil, fmt.Errorf("object not found")
}
imported = IsImportedObj(baseAST, obj)
}

return recompile(g)
Expand Down
44 changes: 44 additions & 0 deletions d2oracle/edit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7233,6 +7233,50 @@ scenarios: {
key: `(a -> b)[0]`,
exp: `...@meow
(a -> b)[0]: null
`,
},
{
name: "import/4",

text: `...@meow
`,
fsTexts: map[string]string{
"meow.d2": `a.link: https://google.com
`,
},
key: `a.link`,
exp: `...@meow
a.link: null
`,
},
{
name: "import/5",

text: `...@meow
`,
fsTexts: map[string]string{
"meow.d2": `a -> b: {
target-arrowhead: 1
}
`,
},
key: `(a -> b)[0].target-arrowhead`,
exp: `...@meow
(a -> b)[0].target-arrowhead: null
`,
},
{
name: "import/6",

text: `...@meow
`,
fsTexts: map[string]string{
"meow.d2": `a.style.fill: red
`,
},
key: `a.style.fill`,
exp: `...@meow
a.style.fill: null
`,
},
}
Expand Down
183 changes: 183 additions & 0 deletions testdata/d2oracle/TestDelete/import/4.exp.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 03795d8

Please sign in to comment.