d2ir: Fix and add test for glob-edge-glob-index

This commit is contained in:
Anmol Sethi 2023-07-29 16:16:05 -07:00
parent b119174a09
commit 95667750e0
No known key found for this signature in database
GPG key ID: 8CEF1878FF10ADEB
7 changed files with 4766 additions and 25 deletions

View file

@ -396,7 +396,7 @@ func (c *compiler) compileKey(refctx *RefContext) {
}
func (c *compiler) compileField(dst *Map, kp *d2ast.KeyPath, refctx *RefContext) {
fa, err := dst.EnsureField(kp, refctx)
fa, err := dst.EnsureField(kp, refctx, true)
if err != nil {
c.err.Errors = append(c.err.Errors, err.(d2ast.Error))
return
@ -614,7 +614,7 @@ func (c *compiler) compileEdges(refctx *RefContext) {
return
}
fa, err := refctx.ScopeMap.EnsureField(refctx.Key.Key, refctx)
fa, err := refctx.ScopeMap.EnsureField(refctx.Key.Key, refctx, true)
if err != nil {
c.err.Errors = append(c.err.Errors, err.(d2ast.Error))
return
@ -648,7 +648,7 @@ func (c *compiler) _compileEdges(refctx *RefContext) {
var ea []*Edge
if eid.Index != nil || eid.Glob {
ea = refctx.ScopeMap.GetEdges(eid)
ea = refctx.ScopeMap.GetEdges(eid, refctx)
if len(ea) == 0 {
c.errorf(refctx.Edge, "indexed edge does not exist")
continue
@ -661,12 +661,12 @@ func (c *compiler) _compileEdges(refctx *RefContext) {
refctx.ScopeMap.appendFieldReferences(0, refctx.Edge.Dst, refctx)
}
} else {
_, err := refctx.ScopeMap.EnsureField(refctx.Edge.Src, refctx)
_, err := refctx.ScopeMap.EnsureField(refctx.Edge.Src, refctx, true)
if err != nil {
c.err.Errors = append(c.err.Errors, err.(d2ast.Error))
continue
}
_, err = refctx.ScopeMap.EnsureField(refctx.Edge.Dst, refctx)
_, err = refctx.ScopeMap.EnsureField(refctx.Edge.Dst, refctx, true)
if err != nil {
c.err.Errors = append(c.err.Errors, err.(d2ast.Error))
continue

View file

@ -653,7 +653,7 @@ func (m *Map) getField(ida []string) *Field {
return nil
}
func (m *Map) EnsureField(kp *d2ast.KeyPath, refctx *RefContext) ([]*Field, error) {
func (m *Map) EnsureField(kp *d2ast.KeyPath, refctx *RefContext, create bool) ([]*Field, error) {
i := 0
for kp.Path[i].Unbox().ScalarString() == "_" {
m = ParentMap(m)
@ -667,11 +667,11 @@ func (m *Map) EnsureField(kp *d2ast.KeyPath, refctx *RefContext) ([]*Field, erro
}
var fa []*Field
err := m.ensureField(i, kp, refctx, &fa)
err := m.ensureField(i, kp, refctx, create, &fa)
return fa, err
}
func (m *Map) ensureField(i int, kp *d2ast.KeyPath, refctx *RefContext, fa *[]*Field) error {
func (m *Map) ensureField(i int, kp *d2ast.KeyPath, refctx *RefContext, create bool, fa *[]*Field) error {
us, ok := kp.Path[i].Unbox().(*d2ast.UnquotedString)
if ok && us.Pattern != nil {
fa2, ok := m.doubleGlob(us.Pattern)
@ -685,7 +685,7 @@ func (m *Map) ensureField(i int, kp *d2ast.KeyPath, refctx *RefContext, fa *[]*F
parent: f,
}
}
err := f.Map().ensureField(i+1, kp, refctx, fa)
err := f.Map().ensureField(i+1, kp, refctx, create, fa)
if err != nil {
return err
}
@ -703,7 +703,7 @@ func (m *Map) ensureField(i int, kp *d2ast.KeyPath, refctx *RefContext, fa *[]*F
parent: f,
}
}
err := f.Map().ensureField(i+1, kp, refctx, fa)
err := f.Map().ensureField(i+1, kp, refctx, create, fa)
if err != nil {
return err
}
@ -760,9 +760,12 @@ func (m *Map) ensureField(i int, kp *d2ast.KeyPath, refctx *RefContext, fa *[]*F
parent: f,
}
}
return f.Map().ensureField(i+1, kp, refctx, fa)
return f.Map().ensureField(i+1, kp, refctx, create, fa)
}
if !create {
return nil
}
f := &Field{
parent: m,
Name: head,
@ -783,7 +786,7 @@ func (m *Map) ensureField(i int, kp *d2ast.KeyPath, refctx *RefContext, fa *[]*F
f.Composite = &Map{
parent: f,
}
return f.Map().ensureField(i+1, kp, refctx, fa)
return f.Map().ensureField(i+1, kp, refctx, create, fa)
}
func (m *Map) DeleteEdge(eid *EdgeID) *Edge {
@ -848,7 +851,13 @@ func (m *Map) DeleteField(ida ...string) *Field {
return nil
}
func (m *Map) GetEdges(eid *EdgeID) []*Edge {
func (m *Map) GetEdges(eid *EdgeID, refctx *RefContext) []*Edge {
if refctx != nil {
var ea []*Edge
m.getEdges(eid, refctx, &ea)
return ea
}
eid, m, common, err := eid.resolve(m)
if err != nil {
return nil
@ -859,7 +868,7 @@ func (m *Map) GetEdges(eid *EdgeID) []*Edge {
return nil
}
if f.Map() != nil {
return f.Map().GetEdges(eid)
return f.Map().GetEdges(eid, nil)
}
return nil
}
@ -873,6 +882,90 @@ func (m *Map) GetEdges(eid *EdgeID) []*Edge {
return ea
}
func (m *Map) getEdges(eid *EdgeID, refctx *RefContext, ea *[]*Edge) error {
eid, m, common, err := eid.resolve(m)
if err != nil {
return err
}
if len(common) > 0 {
commonKP := d2ast.MakeKeyPath(common)
lastMatch := 0
for i, el := range commonKP.Path {
for j := lastMatch; j < len(refctx.Edge.Src.Path); j++ {
realEl := refctx.Edge.Src.Path[j]
if el.ScalarString() == realEl.ScalarString() {
commonKP.Path[i] = realEl
lastMatch += j + 1
}
}
}
fa, err := m.EnsureField(commonKP, nil, false)
if err != nil {
return nil
}
for _, f := range fa {
if _, ok := f.Composite.(*Array); ok {
return d2parser.Errorf(refctx.Edge.Src, "cannot index into array")
}
if f.Map() == nil {
f.Composite = &Map{
parent: f,
}
}
err = f.Map().getEdges(eid, refctx, ea)
if err != nil {
return err
}
}
return nil
}
srcKP := d2ast.MakeKeyPath(eid.SrcPath)
lastMatch := 0
for i, el := range srcKP.Path {
for j := lastMatch; j < len(refctx.Edge.Src.Path); j++ {
realEl := refctx.Edge.Src.Path[j]
if el.ScalarString() == realEl.ScalarString() {
srcKP.Path[i] = realEl
lastMatch += j + 1
}
}
}
dstKP := d2ast.MakeKeyPath(eid.DstPath)
lastMatch = 0
for i, el := range dstKP.Path {
for j := lastMatch; j < len(refctx.Edge.Dst.Path); j++ {
realEl := refctx.Edge.Dst.Path[j]
if el.ScalarString() == realEl.ScalarString() {
dstKP.Path[i] = realEl
lastMatch += j + 1
}
}
}
srcFA, err := m.EnsureField(srcKP, nil, false)
if err != nil {
return err
}
dstFA, err := m.EnsureField(dstKP, nil, false)
if err != nil {
return err
}
for _, src := range srcFA {
for _, dst := range dstFA {
eid2 := eid.Copy()
eid2.SrcPath = RelIDA(m, src)
eid2.DstPath = RelIDA(m, dst)
ea2 := m.GetEdges(eid2, nil)
*ea = append(*ea, ea2...)
}
}
return nil
}
func (m *Map) CreateEdge(eid *EdgeID, refctx *RefContext) ([]*Edge, error) {
var ea []*Edge
return ea, m.createEdge(eid, refctx, &ea)
@ -888,11 +981,18 @@ func (m *Map) createEdge(eid *EdgeID, refctx *RefContext, ea *[]*Edge) error {
return d2parser.Errorf(refctx.Edge, err.Error())
}
if len(common) > 0 {
commonEnd := len(refctx.Edge.Src.Path) - len(eid.SrcPath)
commonStart := commonEnd - len(common)
commonKP := refctx.Edge.Src.Copy()
commonKP.Path = commonKP.Path[commonStart:commonEnd]
fa, err := m.EnsureField(commonKP, nil)
commonKP := d2ast.MakeKeyPath(common)
lastMatch := 0
for i, el := range commonKP.Path {
for j := lastMatch; j < len(refctx.Edge.Src.Path); j++ {
realEl := refctx.Edge.Src.Path[j]
if el.ScalarString() == realEl.ScalarString() {
commonKP.Path[i] = realEl
lastMatch += j + 1
}
}
}
fa, err := m.EnsureField(commonKP, nil, true)
if err != nil {
return err
}
@ -954,11 +1054,11 @@ func (m *Map) createEdge(eid *EdgeID, refctx *RefContext, ea *[]*Edge) error {
}
}
srcFA, err := m.EnsureField(srcKP, nil)
srcFA, err := m.EnsureField(srcKP, nil, true)
if err != nil {
return err
}
dstFA, err := m.EnsureField(dstKP, nil)
dstFA, err := m.EnsureField(dstKP, nil, true)
if err != nil {
return err
}
@ -990,9 +1090,11 @@ func (m *Map) createEdge2(eid *EdgeID, refctx *RefContext, src, dst *Field) (*Ed
}
eid.Index = nil
ea := m.GetEdges(eid)
eid.Glob = true
ea := m.GetEdges(eid, refctx)
index := len(ea)
eid.Index = &index
eid.Glob = false
e := &Edge{
parent: m,
ID: eid,

View file

@ -11,7 +11,7 @@ func OverlayMap(base, overlay *Map) {
}
for _, oe := range overlay.Edges {
bea := base.GetEdges(oe.ID)
bea := base.GetEdges(oe.ID, nil)
if len(bea) == 0 {
base.Edges = append(base.Edges, oe.Copy(base).(*Edge))
continue

View file

@ -148,6 +148,23 @@ a -> b
assertQuery(t, m, 0, 0, "red", "(a -> b)[2].style.fill")
},
},
{
name: "glob-edge-glob-index",
run: func(t testing.TB) {
m, err := compile(t, `a -> b
a -> b
a -> b
c -> b
(* -> b)[*].style.fill: red
`)
assert.Success(t, err)
assertQuery(t, m, 11, 4, nil, "")
assertQuery(t, m, 0, 0, "red", "(a -> b)[0].style.fill")
assertQuery(t, m, 0, 0, "red", "(a -> b)[1].style.fill")
assertQuery(t, m, 0, 0, "red", "(a -> b)[2].style.fill")
assertQuery(t, m, 0, 0, "red", "(c -> b)[0].style.fill")
},
},
{
name: "double-glob/1",
run: func(t testing.TB) {
@ -169,7 +186,17 @@ shared.animal
runa(t, tca)
t.Run("errors", func(t *testing.T) {
tca := []testCase{}
tca := []testCase{
{
name: "glob-edge-glob-index",
run: func(t testing.TB) {
m, err := compile(t, `(* -> b)[*].style.fill: red
`)
assert.ErrorString(t, err, `TestCompile/patterns/errors/glob-edge-glob-index.d2:1:2: indexed edge does not exist`)
assertQuery(t, m, 0, 0, nil, "")
},
},
}
runa(t, tca)
})
}

View file

@ -30,7 +30,7 @@ func (m *Map) QueryAll(idStr string) (na []Node, _ error) {
eida := NewEdgeIDs(k)
for _, eid := range eida {
ea := m.GetEdges(eid)
ea := m.GetEdges(eid, nil)
for _, e := range ea {
if k.EdgeKey == nil {
na = append(na, e)

View file

@ -0,0 +1,667 @@
{
"fields": [
{
"name": "b",
"references": [
{
"string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
},
"key_path": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
}
]
},
"context": {
"edge": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:7:7",
"src": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"value": [
{
"string": "*",
"raw_string": "*"
}
],
"pattern": [
"*"
]
}
}
]
},
"src_arrow": "",
"dst": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
}
]
},
"dst_arrow": ">"
},
"key": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:0:0-0:24:24",
"edges": [
{
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:7:7",
"src": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"value": [
{
"string": "*",
"raw_string": "*"
}
],
"pattern": [
"*"
]
}
}
]
},
"src_arrow": "",
"dst": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
}
]
},
"dst_arrow": ">"
}
],
"edge_key": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:19:19",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:14:14",
"value": [
{
"string": "style",
"raw_string": "style"
}
]
}
},
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:15:15-0:19:19",
"value": [
{
"string": "fill",
"raw_string": "fill"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:21:21-0:24:24",
"value": [
{
"string": "red",
"raw_string": "red"
}
]
}
}
}
}
}
]
}
],
"edges": [
{
"edge_id": {
"src_path": [
"b"
],
"src_arrow": false,
"dst_path": [
"b"
],
"dst_arrow": true,
"index": 0,
"glob": false
},
"map": {
"fields": [
{
"name": "style",
"composite": {
"fields": [
{
"name": "fill",
"primary": {
"value": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:21:21-0:24:24",
"value": [
{
"string": "red",
"raw_string": "red"
}
]
}
},
"references": [
{
"string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:15:15-0:19:19",
"value": [
{
"string": "fill",
"raw_string": "fill"
}
]
},
"key_path": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:19:19",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:14:14",
"value": [
{
"string": "style",
"raw_string": "style"
}
]
}
},
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:15:15-0:19:19",
"value": [
{
"string": "fill",
"raw_string": "fill"
}
]
}
}
]
},
"context": {
"edge": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:7:7",
"src": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"value": [
{
"string": "*",
"raw_string": "*"
}
],
"pattern": [
"*"
]
}
}
]
},
"src_arrow": "",
"dst": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
}
]
},
"dst_arrow": ">"
},
"key": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:0:0-0:24:24",
"edges": [
{
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:7:7",
"src": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"value": [
{
"string": "*",
"raw_string": "*"
}
],
"pattern": [
"*"
]
}
}
]
},
"src_arrow": "",
"dst": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
}
]
},
"dst_arrow": ">"
}
],
"edge_key": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:19:19",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:14:14",
"value": [
{
"string": "style",
"raw_string": "style"
}
]
}
},
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:15:15-0:19:19",
"value": [
{
"string": "fill",
"raw_string": "fill"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:21:21-0:24:24",
"value": [
{
"string": "red",
"raw_string": "red"
}
]
}
}
}
}
}
]
}
],
"edges": null
},
"references": [
{
"string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:14:14",
"value": [
{
"string": "style",
"raw_string": "style"
}
]
},
"key_path": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:19:19",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:14:14",
"value": [
{
"string": "style",
"raw_string": "style"
}
]
}
},
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:15:15-0:19:19",
"value": [
{
"string": "fill",
"raw_string": "fill"
}
]
}
}
]
},
"context": {
"edge": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:7:7",
"src": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"value": [
{
"string": "*",
"raw_string": "*"
}
],
"pattern": [
"*"
]
}
}
]
},
"src_arrow": "",
"dst": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
}
]
},
"dst_arrow": ">"
},
"key": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:0:0-0:24:24",
"edges": [
{
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:7:7",
"src": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"value": [
{
"string": "*",
"raw_string": "*"
}
],
"pattern": [
"*"
]
}
}
]
},
"src_arrow": "",
"dst": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
}
]
},
"dst_arrow": ">"
}
],
"edge_key": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:19:19",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:14:14",
"value": [
{
"string": "style",
"raw_string": "style"
}
]
}
},
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:15:15-0:19:19",
"value": [
{
"string": "fill",
"raw_string": "fill"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:21:21-0:24:24",
"value": [
{
"string": "red",
"raw_string": "red"
}
]
}
}
}
}
}
]
}
],
"edges": null
},
"references": [
{
"context": {
"edge": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:7:7",
"src": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"value": [
{
"string": "*",
"raw_string": "*"
}
],
"pattern": [
"*"
]
}
}
]
},
"src_arrow": "",
"dst": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
}
]
},
"dst_arrow": ">"
},
"key": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:0:0-0:24:24",
"edges": [
{
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:7:7",
"src": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:1:1-0:2:2",
"value": [
{
"string": "*",
"raw_string": "*"
}
],
"pattern": [
"*"
]
}
}
]
},
"src_arrow": "",
"dst": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:6:6-0:7:7",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
}
]
},
"dst_arrow": ">"
}
],
"edge_key": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:19:19",
"path": [
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:9:9-0:14:14",
"value": [
{
"string": "style",
"raw_string": "style"
}
]
}
},
{
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:15:15-0:19:19",
"value": [
{
"string": "fill",
"raw_string": "fill"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "TestCompile/patterns/errors/glob-edge-glob-index.d2,0:21:21-0:24:24",
"value": [
{
"string": "red",
"raw_string": "red"
}
]
}
}
}
}
}
]
}
]
}

File diff suppressed because it is too large Load diff