Skip to content

Commit 03795d8

Browse files
authored
Merge pull request #1833 from alixander/fix-delete-attribute
d2oracle: fix deleting imported attributes
2 parents 20c3598 + 994a67d commit 03795d8

File tree

5 files changed

+690
-10
lines changed

5 files changed

+690
-10
lines changed

d2oracle/edit.go

+28-10
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,7 @@ func Delete(g *d2graph.Graph, boardPath []string, key string) (_ *d2graph.Graph,
847847
baseAST = boardG.BaseAST
848848
}
849849

850-
g2, err := deleteReserved(g, mk)
850+
g2, err := deleteReserved(g, baseAST, mk)
851851
if err != nil {
852852
return nil, err
853853
}
@@ -1185,7 +1185,7 @@ func renameConflictsToParent(g *d2graph.Graph, key *d2ast.KeyPath) (*d2graph.Gra
11851185
return g, nil
11861186
}
11871187

1188-
func deleteReserved(g *d2graph.Graph, mk *d2ast.Key) (*d2graph.Graph, error) {
1188+
func deleteReserved(g *d2graph.Graph, baseAST *d2ast.Map, mk *d2ast.Key) (*d2graph.Graph, error) {
11891189
targetKey := mk.Key
11901190
if len(mk.Edges) == 1 {
11911191
if mk.EdgeKey == nil {
@@ -1212,14 +1212,21 @@ func deleteReserved(g *d2graph.Graph, mk *d2ast.Key) (*d2graph.Graph, error) {
12121212
if !ok {
12131213
return g, nil
12141214
}
1215+
imported := IsImportedEdge(baseAST, e)
12151216

1216-
if err := deleteEdgeField(g, e, targetKey.Path[len(targetKey.Path)-1].Unbox().ScalarString()); err != nil {
1217-
return nil, err
1217+
if imported {
1218+
mk.Value = d2ast.MakeValueBox(&d2ast.Null{})
1219+
appendMapKey(baseAST, mk)
1220+
} else {
1221+
if err := deleteEdgeField(g, e, targetKey.Path[len(targetKey.Path)-1].Unbox().ScalarString()); err != nil {
1222+
return nil, err
1223+
}
12181224
}
12191225
return recompile(g)
12201226
}
12211227

12221228
isStyleKey := false
1229+
imported := false
12231230
for _, id := range d2graph.Key(targetKey) {
12241231
_, ok := d2graph.ReservedKeywords[id]
12251232
if ok {
@@ -1228,9 +1235,14 @@ func deleteReserved(g *d2graph.Graph, mk *d2ast.Key) (*d2graph.Graph, error) {
12281235
continue
12291236
}
12301237
if isStyleKey {
1231-
err := deleteObjField(g, obj, id)
1232-
if err != nil {
1233-
return nil, err
1238+
if imported {
1239+
mk.Value = d2ast.MakeValueBox(&d2ast.Null{})
1240+
appendMapKey(baseAST, mk)
1241+
} else {
1242+
err := deleteObjField(g, obj, id)
1243+
if err != nil {
1244+
return nil, err
1245+
}
12341246
}
12351247
}
12361248

@@ -1242,9 +1254,14 @@ func deleteReserved(g *d2graph.Graph, mk *d2ast.Key) (*d2graph.Graph, error) {
12421254
id == "left" ||
12431255
id == "top" ||
12441256
id == "link" {
1245-
err := deleteObjField(g, obj, id)
1246-
if err != nil {
1247-
return nil, err
1257+
if imported {
1258+
mk.Value = d2ast.MakeValueBox(&d2ast.Null{})
1259+
appendMapKey(baseAST, mk)
1260+
} else {
1261+
err := deleteObjField(g, obj, id)
1262+
if err != nil {
1263+
return nil, err
1264+
}
12481265
}
12491266
}
12501267
break
@@ -1253,6 +1270,7 @@ func deleteReserved(g *d2graph.Graph, mk *d2ast.Key) (*d2graph.Graph, error) {
12531270
if !ok {
12541271
return nil, fmt.Errorf("object not found")
12551272
}
1273+
imported = IsImportedObj(baseAST, obj)
12561274
}
12571275

12581276
return recompile(g)

d2oracle/edit_test.go

+44
Original file line numberDiff line numberDiff line change
@@ -7233,6 +7233,50 @@ scenarios: {
72337233
key: `(a -> b)[0]`,
72347234
exp: `...@meow
72357235
(a -> b)[0]: null
7236+
`,
7237+
},
7238+
{
7239+
name: "import/4",
7240+
7241+
text: `...@meow
7242+
`,
7243+
fsTexts: map[string]string{
7244+
"meow.d2": `a.link: https://google.com
7245+
`,
7246+
},
7247+
key: `a.link`,
7248+
exp: `...@meow
7249+
a.link: null
7250+
`,
7251+
},
7252+
{
7253+
name: "import/5",
7254+
7255+
text: `...@meow
7256+
`,
7257+
fsTexts: map[string]string{
7258+
"meow.d2": `a -> b: {
7259+
target-arrowhead: 1
7260+
}
7261+
`,
7262+
},
7263+
key: `(a -> b)[0].target-arrowhead`,
7264+
exp: `...@meow
7265+
(a -> b)[0].target-arrowhead: null
7266+
`,
7267+
},
7268+
{
7269+
name: "import/6",
7270+
7271+
text: `...@meow
7272+
`,
7273+
fsTexts: map[string]string{
7274+
"meow.d2": `a.style.fill: red
7275+
`,
7276+
},
7277+
key: `a.style.fill`,
7278+
exp: `...@meow
7279+
a.style.fill: null
72367280
`,
72377281
},
72387282
}

testdata/d2oracle/TestDelete/import/4.exp.json

+183
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)