d2ir: Add label filter exception for edges too
This commit is contained in:
parent
1800ae3448
commit
2efd87f059
3 changed files with 4679 additions and 3 deletions
|
|
@ -561,7 +561,21 @@ func (c *compiler) ampersandFilter(refctx *RefContext) bool {
|
||||||
kp := refctx.Key.Key.Copy()
|
kp := refctx.Key.Key.Copy()
|
||||||
kp.Path = kp.Path[:len(kp.Path)-1]
|
kp.Path = kp.Path[:len(kp.Path)-1]
|
||||||
if len(kp.Path) == 0 {
|
if len(kp.Path) == 0 {
|
||||||
fa = append(fa, ParentField(refctx.ScopeMap))
|
n := refctx.ScopeMap.Parent()
|
||||||
|
switch n := n.(type) {
|
||||||
|
case *Field:
|
||||||
|
fa = append(fa, n)
|
||||||
|
case *Edge:
|
||||||
|
if n.Primary_ == nil {
|
||||||
|
if refctx.Key.Value.ScalarBox().Unbox().ScalarString() == "" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if n.Primary_.Value.ScalarString() != refctx.Key.Value.ScalarBox().Unbox().ScalarString() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fa, err = refctx.ScopeMap.EnsureField(kp, refctx, false, c)
|
fa, err = refctx.ScopeMap.EnsureField(kp, refctx, false, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -97,12 +97,13 @@ x -> y
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "id-filter",
|
name: "label-filter",
|
||||||
run: func(t testing.TB) {
|
run: func(t testing.TB) {
|
||||||
m, err := compile(t, `
|
m, err := compile(t, `
|
||||||
x
|
x
|
||||||
y
|
y
|
||||||
p: p
|
p: p
|
||||||
|
a -> z: delta
|
||||||
|
|
||||||
*.style.opacity: 0.1
|
*.style.opacity: 0.1
|
||||||
*: {
|
*: {
|
||||||
|
|
@ -113,12 +114,19 @@ p: p
|
||||||
&label: p
|
&label: p
|
||||||
style.opacity: 0.5
|
style.opacity: 0.5
|
||||||
}
|
}
|
||||||
|
(* -> *)[*]: {
|
||||||
|
&label: delta
|
||||||
|
target-arrowhead.shape: diamond
|
||||||
|
}
|
||||||
`)
|
`)
|
||||||
assert.Success(t, err)
|
assert.Success(t, err)
|
||||||
assertQuery(t, m, 9, 0, nil, "")
|
assertQuery(t, m, 17, 1, nil, "")
|
||||||
assertQuery(t, m, 0, 0, 1, "x.style.opacity")
|
assertQuery(t, m, 0, 0, 1, "x.style.opacity")
|
||||||
assertQuery(t, m, 0, 0, 0.1, "y.style.opacity")
|
assertQuery(t, m, 0, 0, 0.1, "y.style.opacity")
|
||||||
assertQuery(t, m, 0, 0, 0.5, "p.style.opacity")
|
assertQuery(t, m, 0, 0, 0.5, "p.style.opacity")
|
||||||
|
assertQuery(t, m, 0, 0, 0.1, "a.style.opacity")
|
||||||
|
assertQuery(t, m, 0, 0, 0.1, "z.style.opacity")
|
||||||
|
assertQuery(t, m, 0, 0, "diamond", "(a -> z).target-arrowhead.shape")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
4654
testdata/d2ir/TestCompile/filters/label-filter.exp.json
generated
vendored
Normal file
4654
testdata/d2ir/TestCompile/filters/label-filter.exp.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue