nested null
This commit is contained in:
parent
a54907e28a
commit
fb0c0d20ed
5 changed files with 74 additions and 17 deletions
|
|
@ -3572,6 +3572,42 @@ hi: {
|
|||
assert.Equal(t, "a-b", g.Objects[1].Label.Value)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "null",
|
||||
run: func(t *testing.T) {
|
||||
assertCompile(t, `
|
||||
vars: {
|
||||
surname: Smith
|
||||
}
|
||||
a: {
|
||||
vars: {
|
||||
surname: null
|
||||
}
|
||||
hi: John ${surname}
|
||||
}
|
||||
`, `d2/testdata/d2compiler/TestCompile2/vars/override/null.d2:9:3: could not resolve variable "surname"`)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "nested-null",
|
||||
run: func(t *testing.T) {
|
||||
assertCompile(t, `
|
||||
vars: {
|
||||
surnames: {
|
||||
john: smith
|
||||
}
|
||||
}
|
||||
a: {
|
||||
vars: {
|
||||
surnames: {
|
||||
john: null
|
||||
}
|
||||
}
|
||||
hi: John ${surname}
|
||||
}
|
||||
`, `d2/testdata/d2compiler/TestCompile2/vars/override/nested-null.d2:13:3: could not resolve variable "surname"`)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tca {
|
||||
|
|
@ -3711,22 +3747,6 @@ scenarios: {
|
|||
assert.Equal(t, "im replaced x var", g.Scenarios[0].Objects[0].Label.Value)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "null",
|
||||
run: func(t *testing.T) {
|
||||
assertCompile(t, `
|
||||
vars: {
|
||||
surname: Smith
|
||||
}
|
||||
a: {
|
||||
vars: {
|
||||
surname: null
|
||||
}
|
||||
hi: John ${surname}
|
||||
}
|
||||
`, `d2/testdata/d2compiler/TestCompile2/vars/boards/null.d2:9:3: could not resolve variable "surname"`)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tca {
|
||||
|
|
|
|||
|
|
@ -331,7 +331,7 @@ func (c *compiler) compileField(dst *Map, kp *d2ast.KeyPath, refctx *RefContext)
|
|||
if refctx.Key != nil && len(refctx.Key.Edges) == 0 && refctx.Key.Value.Null != nil {
|
||||
// For vars, if we delete the field, it may just resolve to an outer scope var of the same name
|
||||
// Instead we keep it around, so that resolveSubstitutions can find it
|
||||
if ParentField(dst) == nil || ParentField(dst).Name != "vars" {
|
||||
if !IsVar(dst) {
|
||||
dst.DeleteField(kp.IDA()...)
|
||||
return
|
||||
}
|
||||
|
|
|
|||
15
d2ir/d2ir.go
15
d2ir/d2ir.go
|
|
@ -1026,6 +1026,21 @@ func ParentField(n Node) *Field {
|
|||
}
|
||||
}
|
||||
|
||||
func IsVar(n Node) bool {
|
||||
for {
|
||||
if n == nil {
|
||||
return false
|
||||
}
|
||||
if NodeBoardKind(n) != "" {
|
||||
return false
|
||||
}
|
||||
if f, ok := n.(*Field); ok && f.Name == "vars" {
|
||||
return true
|
||||
}
|
||||
n = n.Parent()
|
||||
}
|
||||
}
|
||||
|
||||
func ParentBoard(n Node) Node {
|
||||
for {
|
||||
n = n.Parent()
|
||||
|
|
|
|||
11
testdata/d2compiler/TestCompile2/vars/override/nested-null.exp.json
generated
vendored
Normal file
11
testdata/d2compiler/TestCompile2/vars/override/nested-null.exp.json
generated
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"graph": null,
|
||||
"err": {
|
||||
"errs": [
|
||||
{
|
||||
"range": "d2/testdata/d2compiler/TestCompile2/vars/override/nested-null.d2,12:2:102-12:4:104",
|
||||
"errmsg": "d2/testdata/d2compiler/TestCompile2/vars/override/nested-null.d2:13:3: could not resolve variable \"surname\""
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
11
testdata/d2compiler/TestCompile2/vars/override/null.exp.json
generated
vendored
Normal file
11
testdata/d2compiler/TestCompile2/vars/override/null.exp.json
generated
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"graph": null,
|
||||
"err": {
|
||||
"errs": [
|
||||
{
|
||||
"range": "d2/testdata/d2compiler/TestCompile2/vars/override/null.d2,8:2:64-8:4:66",
|
||||
"errmsg": "d2/testdata/d2compiler/TestCompile2/vars/override/null.d2:9:3: could not resolve variable \"surname\""
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue