diff --git a/d2ir/d2ir.go b/d2ir/d2ir.go index 28d1c6d8e..8ef67de0b 100644 --- a/d2ir/d2ir.go +++ b/d2ir/d2ir.go @@ -672,12 +672,39 @@ func (m *Map) EnsureField(kp *d2ast.KeyPath, refctx *RefContext) ([]*Field, erro func (m *Map) ensureField(i int, kp *d2ast.KeyPath, refctx *RefContext, fa *[]*Field) error { us, ok := kp.Path[i].Unbox().(*d2ast.UnquotedString) if ok && us.Pattern != nil { + fa2, ok := m.doubleGlob(us.Pattern) + if ok { + if i == len(kp.Path)-1 { + *fa = append(*fa, fa2...) + } else { + for _, f := range fa2 { + if f.Map() == nil { + f.Composite = &Map{ + parent: f, + } + } + err := f.Map().ensureField(i+1, kp, refctx, fa) + if err != nil { + return err + } + } + } + return nil + } for _, f := range m.Fields { if matchPattern(f.Name, us.Pattern) { if i == len(kp.Path)-1 { *fa = append(*fa, f) - } else if f.Map() != nil { - f.Map().ensureField(i+1, kp, refctx, fa) + } else { + if f.Map() == nil { + f.Composite = &Map{ + parent: f, + } + } + err := f.Map().ensureField(i+1, kp, refctx, fa) + if err != nil { + return err + } } } } diff --git a/d2ir/pattern.go b/d2ir/pattern.go index 39fd5c397..90773cca3 100644 --- a/d2ir/pattern.go +++ b/d2ir/pattern.go @@ -2,8 +2,31 @@ package d2ir import ( "strings" + + "oss.terrastruct.com/d2/d2graph" ) +func (m *Map) doubleGlob(pattern []string) ([]*Field, bool) { + if !(len(pattern) == 3 && pattern[0] == "*" && pattern[1] == "" && pattern[2] == "*") { + return nil, false + } + var fa []*Field + m._doubleGlob(&fa) + return fa, true +} + +func (m *Map) _doubleGlob(fa *[]*Field) { + for _, f := range m.Fields { + if _, ok := d2graph.ReservedKeywords[f.Name]; ok { + continue + } + *fa = append(*fa, f) + if f.Map() != nil { + f.Map()._doubleGlob(fa) + } + } +} + func matchPattern(s string, pattern []string) bool { if len(pattern) == 0 { return true diff --git a/d2ir/pattern_test.go b/d2ir/pattern_test.go index e264e5e02..90e6dd35c 100644 --- a/d2ir/pattern_test.go +++ b/d2ir/pattern_test.go @@ -134,7 +134,7 @@ sh*.an* -> sh*.an*`) }, }, { - name: "double-glob", + name: "double-glob/1", run: func(t testing.TB) { m, err := compile(t, `shared.animate shared.animal @@ -142,9 +142,11 @@ shared.animal assert.Success(t, err) assertQuery(t, m, 9, 0, nil, "") assertQuery(t, m, 8, 0, nil, "shared") - assertQuery(t, m, 2, 0, nil, "shared.style") + assertQuery(t, m, 1, 0, nil, "shared.style") assertQuery(t, m, 2, 0, nil, "shared.animate") + assertQuery(t, m, 1, 0, nil, "shared.animate.style") assertQuery(t, m, 2, 0, nil, "shared.animal") + assertQuery(t, m, 1, 0, nil, "shared.animal.style") }, }, } diff --git a/testdata/d2ir/TestCompile/patterns/double-glob.exp.json b/testdata/d2ir/TestCompile/patterns/double-glob.exp.json index e50aa0ff6..4696f0b15 100644 --- a/testdata/d2ir/TestCompile/patterns/double-glob.exp.json +++ b/testdata/d2ir/TestCompile/patterns/double-glob.exp.json @@ -6,6 +6,203 @@ "fields": [ { "name": "animate", + "composite": { + "fields": [ + { + "name": "style", + "composite": { + "fields": [ + { + "name": "fill", + "primary": { + "value": { + "range": "TestCompile/patterns/double-glob.d2,2:18:47-2:21:50", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:22:51", + "key": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:18:47-2:21:50", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:22:51", + "key": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:18:47-2:21:50", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + } + ] + } + ], + "edges": null + }, "references": [ { "string": { @@ -84,6 +281,203 @@ }, { "name": "animal", + "composite": { + "fields": [ + { + "name": "style", + "composite": { + "fields": [ + { + "name": "fill", + "primary": { + "value": { + "range": "TestCompile/patterns/double-glob.d2,2:18:47-2:21:50", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:22:51", + "key": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:18:47-2:21:50", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:22:51", + "key": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob.d2,2:18:47-2:21:50", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + } + ] + } + ], + "edges": null + }, "references": [ { "string": { @@ -168,7 +562,7 @@ "name": "fill", "primary": { "value": { - "range": "TestCompile/patterns/double-glob.d2,2:15:44-2:18:47", + "range": "TestCompile/patterns/double-glob.d2,2:18:47-2:21:50", "value": [ { "string": "red", @@ -180,7 +574,7 @@ "references": [ { "string": { - "range": "TestCompile/patterns/double-glob.d2,2:9:38-2:13:42", + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", "value": [ { "string": "fill", @@ -189,27 +583,11 @@ ] }, "key_path": { - "range": "TestCompile/patterns/double-glob.d2,2:0:29-2:13:42", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", "path": [ { "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:0:29-2:2:31", - "value": [ - { - "string": "**", - "raw_string": "**" - } - ], - "pattern": [ - "*", - "", - "*" - ] - } - }, - { - "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:3:32-2:8:37", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", "value": [ { "string": "style", @@ -220,7 +598,7 @@ }, { "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:9:38-2:13:42", + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", "value": [ { "string": "fill", @@ -234,29 +612,13 @@ "context": { "edge": null, "key": { - "range": "TestCompile/patterns/double-glob.d2,2:0:29-2:18:47", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:22:51", "key": { - "range": "TestCompile/patterns/double-glob.d2,2:0:29-2:13:42", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", "path": [ { "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:0:29-2:2:31", - "value": [ - { - "string": "**", - "raw_string": "**" - } - ], - "pattern": [ - "*", - "", - "*" - ] - } - }, - { - "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:3:32-2:8:37", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", "value": [ { "string": "style", @@ -267,7 +629,7 @@ }, { "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:9:38-2:13:42", + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", "value": [ { "string": "fill", @@ -281,7 +643,7 @@ "primary": {}, "value": { "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:15:44-2:18:47", + "range": "TestCompile/patterns/double-glob.d2,2:18:47-2:21:50", "value": [ { "string": "red", @@ -301,7 +663,7 @@ "references": [ { "string": { - "range": "TestCompile/patterns/double-glob.d2,2:3:32-2:8:37", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", "value": [ { "string": "style", @@ -310,27 +672,11 @@ ] }, "key_path": { - "range": "TestCompile/patterns/double-glob.d2,2:0:29-2:13:42", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", "path": [ { "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:0:29-2:2:31", - "value": [ - { - "string": "**", - "raw_string": "**" - } - ], - "pattern": [ - "*", - "", - "*" - ] - } - }, - { - "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:3:32-2:8:37", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", "value": [ { "string": "style", @@ -341,7 +687,7 @@ }, { "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:9:38-2:13:42", + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", "value": [ { "string": "fill", @@ -355,29 +701,13 @@ "context": { "edge": null, "key": { - "range": "TestCompile/patterns/double-glob.d2,2:0:29-2:18:47", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:22:51", "key": { - "range": "TestCompile/patterns/double-glob.d2,2:0:29-2:13:42", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:16:45", "path": [ { "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:0:29-2:2:31", - "value": [ - { - "string": "**", - "raw_string": "**" - } - ], - "pattern": [ - "*", - "", - "*" - ] - } - }, - { - "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:3:32-2:8:37", + "range": "TestCompile/patterns/double-glob.d2,2:6:35-2:11:40", "value": [ { "string": "style", @@ -388,7 +718,7 @@ }, { "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:9:38-2:13:42", + "range": "TestCompile/patterns/double-glob.d2,2:12:41-2:16:45", "value": [ { "string": "fill", @@ -402,7 +732,7 @@ "primary": {}, "value": { "unquoted_string": { - "range": "TestCompile/patterns/double-glob.d2,2:15:44-2:18:47", + "range": "TestCompile/patterns/double-glob.d2,2:18:47-2:21:50", "value": [ { "string": "red", diff --git a/testdata/d2ir/TestCompile/patterns/double-glob/1.exp.json b/testdata/d2ir/TestCompile/patterns/double-glob/1.exp.json new file mode 100644 index 000000000..804f187d0 --- /dev/null +++ b/testdata/d2ir/TestCompile/patterns/double-glob/1.exp.json @@ -0,0 +1,1095 @@ +{ + "fields": [ + { + "name": "shared", + "composite": { + "fields": [ + { + "name": "animate", + "composite": { + "fields": [ + { + "name": "style", + "composite": { + "fields": [ + { + "name": "fill", + "primary": { + "value": { + "range": "TestCompile/patterns/double-glob/1.d2,2:15:44-2:18:47", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:18:47", + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:15:44-2:18:47", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:18:47", + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:15:44-2:18:47", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob/1.d2,0:7:7-0:14:14", + "value": [ + { + "string": "animate", + "raw_string": "animate" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:14:14", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:6:6", + "value": [ + { + "string": "shared", + "raw_string": "shared" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,0:7:7-0:14:14", + "value": [ + { + "string": "animate", + "raw_string": "animate" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:14:14", + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:14:14", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:6:6", + "value": [ + { + "string": "shared", + "raw_string": "shared" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,0:7:7-0:14:14", + "value": [ + { + "string": "animate", + "raw_string": "animate" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + } + } + ] + }, + { + "name": "animal", + "composite": { + "fields": [ + { + "name": "style", + "composite": { + "fields": [ + { + "name": "fill", + "primary": { + "value": { + "range": "TestCompile/patterns/double-glob/1.d2,2:15:44-2:18:47", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:18:47", + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:15:44-2:18:47", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:18:47", + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:15:44-2:18:47", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob/1.d2,1:7:22-1:13:28", + "value": [ + { + "string": "animal", + "raw_string": "animal" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:13:28", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:6:21", + "value": [ + { + "string": "shared", + "raw_string": "shared" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,1:7:22-1:13:28", + "value": [ + { + "string": "animal", + "raw_string": "animal" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:13:28", + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:13:28", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:6:21", + "value": [ + { + "string": "shared", + "raw_string": "shared" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,1:7:22-1:13:28", + "value": [ + { + "string": "animal", + "raw_string": "animal" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + } + } + ] + }, + { + "name": "style", + "composite": { + "fields": [ + { + "name": "fill", + "primary": { + "value": { + "range": "TestCompile/patterns/double-glob/1.d2,2:15:44-2:18:47", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:18:47", + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:15:44-2:18:47", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:18:47", + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:13:42", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:0:29-2:2:31", + "value": [ + { + "string": "**", + "raw_string": "**" + } + ], + "pattern": [ + "*", + "", + "*" + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:3:32-2:8:37", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:9:38-2:13:42", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,2:15:44-2:18:47", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + } + ] + } + ], + "edges": null + }, + "references": [ + { + "string": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:6:6", + "value": [ + { + "string": "shared", + "raw_string": "shared" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:14:14", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:6:6", + "value": [ + { + "string": "shared", + "raw_string": "shared" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,0:7:7-0:14:14", + "value": [ + { + "string": "animate", + "raw_string": "animate" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:14:14", + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:14:14", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,0:0:0-0:6:6", + "value": [ + { + "string": "shared", + "raw_string": "shared" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,0:7:7-0:14:14", + "value": [ + { + "string": "animate", + "raw_string": "animate" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + } + }, + { + "string": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:6:21", + "value": [ + { + "string": "shared", + "raw_string": "shared" + } + ] + }, + "key_path": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:13:28", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:6:21", + "value": [ + { + "string": "shared", + "raw_string": "shared" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,1:7:22-1:13:28", + "value": [ + { + "string": "animal", + "raw_string": "animal" + } + ] + } + } + ] + }, + "context": { + "edge": null, + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:13:28", + "key": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:13:28", + "path": [ + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,1:0:15-1:6:21", + "value": [ + { + "string": "shared", + "raw_string": "shared" + } + ] + } + }, + { + "unquoted_string": { + "range": "TestCompile/patterns/double-glob/1.d2,1:7:22-1:13:28", + "value": [ + { + "string": "animal", + "raw_string": "animal" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + } + } + ] + } + ], + "edges": null +}