diff --git a/d2oracle/edit.go b/d2oracle/edit.go index a2cccce2b..c58c7f62e 100644 --- a/d2oracle/edit.go +++ b/d2oracle/edit.go @@ -391,6 +391,9 @@ func _set(g *d2graph.Graph, baseAST *d2ast.Map, key string, tag, value *string) maybeNewScope = ref.MapKey.Value.Map } } + } else if IsImported(g, obj) { + appendMapKey(scope, mk) + return nil } else { maybeNewScope = obj.Map } diff --git a/d2oracle/edit_test.go b/d2oracle/edit_test.go index 3b8914b1a..b89f4e823 100644 --- a/d2oracle/edit_test.go +++ b/d2oracle/edit_test.go @@ -2,9 +2,6 @@ package d2oracle_test import ( "fmt" - "io" - "io/fs" - "os" "path/filepath" "strconv" "strings" @@ -13,6 +10,7 @@ import ( "oss.terrastruct.com/util-go/assert" "oss.terrastruct.com/util-go/diff" "oss.terrastruct.com/util-go/go2" + "oss.terrastruct.com/util-go/mapfs" "oss.terrastruct.com/util-go/xjson" "oss.terrastruct.com/d2/d2compiler" @@ -1999,7 +1997,7 @@ scenarios: { } `, fsTexts: map[string]string{ - "meow": `x: { + "meow.d2": `x: { style.fill: blue } `, @@ -2022,7 +2020,7 @@ scenarios: { } `, fsTexts: map[string]string{ - "meow": `x: { + "meow.d2": `x: { style.fill: blue } `, @@ -2046,7 +2044,7 @@ scenarios: { } `, fsTexts: map[string]string{ - "meow": `x: { + "meow.d2": `x: { style.fill: blue } `, @@ -2058,6 +2056,55 @@ scenarios: { y style.fill: yellow } +`, + }, + { + name: "import/4", + + text: `...@yo +a`, + fsTexts: map[string]string{ + "yo.d2": `b`, + }, + key: `b.style.fill`, + value: go2.Pointer(`red`), + exp: `...@yo +a +b.style.fill: red +`, + }, + { + name: "import/5", + + text: `a +x: { + ...@yo +}`, + fsTexts: map[string]string{ + "yo.d2": `b`, + }, + key: `x.b.style.fill`, + value: go2.Pointer(`red`), + exp: `a +x: { + ...@yo + b.style.fill: red +} +`, + }, + { + name: "import/6", + + text: `a +x: @yo`, + fsTexts: map[string]string{ + "yo.d2": `b`, + }, + key: `x.b.style.fill`, + value: go2.Pointer(`red`), + exp: `a +x: @yo +x.b.style.fill: red `, }, } @@ -7081,17 +7128,23 @@ type editTest struct { } func (tc editTest) run(t *testing.T) { + var tfs *mapfs.FS d2Path := fmt.Sprintf("d2/testdata/d2oracle/%v.d2", t.Name()) - tfs := testFS(make(map[string]*testF)) - for name, text := range tc.fsTexts { - tfs[name] = &testF{content: text} + if tc.fsTexts != nil { + tc.fsTexts["index.d2"] = tc.text + d2Path = "index.d2" + var err error + tfs, err = mapfs.New(tc.fsTexts) + assert.Success(t, err) + t.Cleanup(func() { + assert.Success(t, tfs.Close()) + }) } + g, _, err := d2compiler.Compile(d2Path, strings.NewReader(tc.text), &d2compiler.CompileOptions{ FS: tfs, }) - if err != nil { - t.Fatal(err) - } + assert.Success(t, err) g, err = tc.testFunc(g) if tc.expErr != "" { @@ -8446,38 +8499,3 @@ scenarios: { }) } } - -type testF struct { - content string - readIndex int -} - -func (tf *testF) Close() error { - return nil -} - -func (tf *testF) Read(p []byte) (int, error) { - data := []byte(tf.content) - if tf.readIndex >= len(data) { - tf.readIndex = 0 - return 0, io.EOF - } - readBytes := copy(p, data[tf.readIndex:]) - tf.readIndex += readBytes - return readBytes, nil -} - -func (tf *testF) Stat() (os.FileInfo, error) { - return nil, nil -} - -type testFS map[string]*testF - -func (tfs testFS) Open(name string) (fs.File, error) { - for k := range tfs { - if strings.HasSuffix(name[:len(name)-3], k) { - return tfs[k], nil - } - } - return nil, fs.ErrNotExist -} diff --git a/d2oracle/get.go b/d2oracle/get.go index 6f2074a08..b75ad12d1 100644 --- a/d2oracle/get.go +++ b/d2oracle/get.go @@ -140,6 +140,16 @@ func GetParentID(g *d2graph.Graph, boardPath []string, absID string) (string, er return obj.Parent.AbsID(), nil } +func IsImported(g *d2graph.Graph, obj *d2graph.Object) bool { + for _, ref := range obj.References { + if ref.MapKey.Range.Path == g.AST.Range.Path { + return false + } + } + + return true +} + func GetObj(g *d2graph.Graph, boardPath []string, absID string) *d2graph.Object { g = GetBoardGraph(g, boardPath) if g == nil { diff --git a/testdata/d2oracle/TestSet/import/1.exp.json b/testdata/d2oracle/TestSet/import/1.exp.json index 6b6107050..a2186cf1f 100644 --- a/testdata/d2oracle/TestSet/import/1.exp.json +++ b/testdata/d2oracle/TestSet/import/1.exp.json @@ -3,17 +3,17 @@ "name": "", "isFolderOnly": false, "ast": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-5:0:44", + "range": "index.d2,0:0:0-5:0:44", "nodes": [ { "map_key": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-4:1:43", + "range": "index.d2,0:0:0-4:1:43", "key": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "value": [ { "string": "x", @@ -27,17 +27,17 @@ "primary": {}, "value": { "map": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:3:3-4:1:43", + "range": "index.d2,0:3:3-4:1:43", "nodes": [ { "import": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,1:2:7-1:12:17", + "range": "index.d2,1:2:7-1:12:17", "spread": true, "pre": "", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,1:6:11-1:10:15", + "range": "index.d2,1:6:11-1:10:15", "value": [ { "string": "meow", @@ -48,7 +48,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,1:11:16-1:12:17", + "range": "index.d2,1:11:16-1:12:17", "value": [ { "string": "x", @@ -62,13 +62,13 @@ }, { "map_key": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "key": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "value": [ { "string": "y", @@ -85,13 +85,13 @@ }, { "map_key": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,3:2:24-3:19:41", + "range": "index.d2,3:2:24-3:19:41", "key": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,3:2:24-3:14:36", + "range": "index.d2,3:2:24-3:14:36", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,3:2:24-3:7:29", + "range": "index.d2,3:2:24-3:7:29", "value": [ { "string": "style", @@ -102,7 +102,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,3:8:30-3:14:36", + "range": "index.d2,3:8:30-3:14:36", "value": [ { "string": "stroke", @@ -116,7 +116,7 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,3:16:38-3:19:41", + "range": "index.d2,3:16:38-3:19:41", "value": [ { "string": "red", @@ -165,11 +165,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "value": [ { "string": "x", @@ -217,11 +217,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/1.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "value": [ { "string": "y", diff --git a/testdata/d2oracle/TestSet/import/2.exp.json b/testdata/d2oracle/TestSet/import/2.exp.json index 37ff8f8e6..929277298 100644 --- a/testdata/d2oracle/TestSet/import/2.exp.json +++ b/testdata/d2oracle/TestSet/import/2.exp.json @@ -3,17 +3,17 @@ "name": "", "isFolderOnly": false, "ast": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-5:0:42", + "range": "index.d2,0:0:0-5:0:42", "nodes": [ { "map_key": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-4:1:41", + "range": "index.d2,0:0:0-4:1:41", "key": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "value": [ { "string": "x", @@ -27,17 +27,17 @@ "primary": {}, "value": { "map": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:3:3-4:1:41", + "range": "index.d2,0:3:3-4:1:41", "nodes": [ { "import": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,1:2:7-1:12:17", + "range": "index.d2,1:2:7-1:12:17", "spread": true, "pre": "", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,1:6:11-1:10:15", + "range": "index.d2,1:6:11-1:10:15", "value": [ { "string": "meow", @@ -48,7 +48,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,1:11:16-1:12:17", + "range": "index.d2,1:11:16-1:12:17", "value": [ { "string": "x", @@ -62,13 +62,13 @@ }, { "map_key": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "key": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "value": [ { "string": "y", @@ -85,13 +85,13 @@ }, { "map_key": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,3:2:24-3:17:39", + "range": "index.d2,3:2:24-3:17:39", "key": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,3:2:24-3:12:34", + "range": "index.d2,3:2:24-3:12:34", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,3:2:24-3:7:29", + "range": "index.d2,3:2:24-3:7:29", "value": [ { "string": "style", @@ -102,7 +102,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,3:8:30-3:12:34", + "range": "index.d2,3:8:30-3:12:34", "value": [ { "string": "fill", @@ -116,7 +116,7 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,3:14:36-3:17:39", + "range": "index.d2,3:14:36-3:17:39", "value": [ { "string": "red", @@ -165,11 +165,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "value": [ { "string": "x", @@ -214,11 +214,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/2.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "value": [ { "string": "y", diff --git a/testdata/d2oracle/TestSet/import/3.exp.json b/testdata/d2oracle/TestSet/import/3.exp.json index 1cca998d1..feeebe288 100644 --- a/testdata/d2oracle/TestSet/import/3.exp.json +++ b/testdata/d2oracle/TestSet/import/3.exp.json @@ -3,17 +3,17 @@ "name": "", "isFolderOnly": false, "ast": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-5:0:45", + "range": "index.d2,0:0:0-5:0:45", "nodes": [ { "map_key": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-4:1:44", + "range": "index.d2,0:0:0-4:1:44", "key": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "value": [ { "string": "x", @@ -27,17 +27,17 @@ "primary": {}, "value": { "map": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:3:3-4:1:44", + "range": "index.d2,0:3:3-4:1:44", "nodes": [ { "import": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,1:2:7-1:12:17", + "range": "index.d2,1:2:7-1:12:17", "spread": true, "pre": "", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,1:6:11-1:10:15", + "range": "index.d2,1:6:11-1:10:15", "value": [ { "string": "meow", @@ -48,7 +48,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,1:11:16-1:12:17", + "range": "index.d2,1:11:16-1:12:17", "value": [ { "string": "x", @@ -62,13 +62,13 @@ }, { "map_key": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "key": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "value": [ { "string": "y", @@ -85,13 +85,13 @@ }, { "map_key": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,3:2:24-3:20:42", + "range": "index.d2,3:2:24-3:20:42", "key": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,3:2:24-3:12:34", + "range": "index.d2,3:2:24-3:12:34", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,3:2:24-3:7:29", + "range": "index.d2,3:2:24-3:7:29", "value": [ { "string": "style", @@ -102,7 +102,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,3:8:30-3:12:34", + "range": "index.d2,3:8:30-3:12:34", "value": [ { "string": "fill", @@ -116,7 +116,7 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,3:14:36-3:20:42", + "range": "index.d2,3:14:36-3:20:42", "value": [ { "string": "yellow", @@ -165,11 +165,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-0:1:1", + "range": "index.d2,0:0:0-0:1:1", "value": [ { "string": "x", @@ -214,11 +214,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestSet/import/3.d2,2:2:20-2:3:21", + "range": "index.d2,2:2:20-2:3:21", "value": [ { "string": "y", diff --git a/testdata/d2oracle/TestSet/import/4.exp.json b/testdata/d2oracle/TestSet/import/4.exp.json new file mode 100644 index 000000000..19de4ef48 --- /dev/null +++ b/testdata/d2oracle/TestSet/import/4.exp.json @@ -0,0 +1,272 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "index.d2,0:0:0-3:0:27", + "nodes": [ + { + "import": { + "range": "index.d2,0:0:0-0:6:6", + "spread": true, + "pre": "", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:4:4-0:6:6", + "value": [ + { + "string": "yo", + "raw_string": "yo" + } + ] + } + } + ] + } + }, + { + "map_key": { + "range": "index.d2,1:0:7-1:1:8", + "key": { + "range": "index.d2,1:0:7-1:1:8", + "path": [ + { + "unquoted_string": { + "range": "index.d2,1:0:7-1:1:8", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + }, + { + "map_key": { + "range": "index.d2,2:0:9-2:17:26", + "key": { + "range": "index.d2,2:0:9-2:12:21", + "path": [ + { + "unquoted_string": { + "range": "index.d2,2:0:9-2:1:10", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:2:11-2:7:16", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:8:17-2:12:21", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "index.d2,2:14:23-2:17:26", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + ] + }, + "root": { + "id": "", + "id_val": "", + "attributes": { + "label": { + "value": "" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + "edges": null, + "objects": [ + { + "id": "b", + "id_val": "b", + "references": [ + { + "key": { + "range": "yo.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "yo.d2,0:0:0-0:1:1", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + }, + { + "key": { + "range": "index.d2,2:0:9-2:12:21", + "path": [ + { + "unquoted_string": { + "range": "index.d2,2:0:9-2:1:10", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:2:11-2:7:16", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:8:17-2:12:21", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "b" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": { + "fill": { + "value": "red" + } + }, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + { + "id": "a", + "id_val": "a", + "references": [ + { + "key": { + "range": "index.d2,1:0:7-1:1:8", + "path": [ + { + "unquoted_string": { + "range": "index.d2,1:0:7-1:1:8", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "a" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ] + }, + "err": "" +} diff --git a/testdata/d2oracle/TestSet/import/5.exp.json b/testdata/d2oracle/TestSet/import/5.exp.json new file mode 100644 index 000000000..fe34e8801 --- /dev/null +++ b/testdata/d2oracle/TestSet/import/5.exp.json @@ -0,0 +1,346 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "index.d2,0:0:0-5:0:38", + "nodes": [ + { + "map_key": { + "range": "index.d2,0:0:0-0:1:1", + "key": { + "range": "index.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:0:0-0:1:1", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + }, + { + "map_key": { + "range": "index.d2,1:0:2-4:1:37", + "key": { + "range": "index.d2,1:0:2-1:1:3", + "path": [ + { + "unquoted_string": { + "range": "index.d2,1:0:2-1:1:3", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "index.d2,1:3:5-4:1:37", + "nodes": [ + { + "import": { + "range": "index.d2,2:2:9-2:8:15", + "spread": true, + "pre": "", + "path": [ + { + "unquoted_string": { + "range": "index.d2,2:6:13-2:8:15", + "value": [ + { + "string": "yo", + "raw_string": "yo" + } + ] + } + } + ] + } + }, + { + "map_key": { + "range": "index.d2,3:2:18-3:19:35", + "key": { + "range": "index.d2,3:2:18-3:14:30", + "path": [ + { + "unquoted_string": { + "range": "index.d2,3:2:18-3:3:19", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,3:4:20-3:9:25", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,3:10:26-3:14:30", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "index.d2,3:16:32-3:19:35", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + ] + } + } + } + } + ] + }, + "root": { + "id": "", + "id_val": "", + "attributes": { + "label": { + "value": "" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + "edges": null, + "objects": [ + { + "id": "a", + "id_val": "a", + "references": [ + { + "key": { + "range": "index.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:0:0-0:1:1", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "a" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + { + "id": "b", + "id_val": "b", + "references": [ + { + "key": { + "range": "yo.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "yo.d2,0:0:0-0:1:1", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + }, + { + "key": { + "range": "index.d2,3:2:18-3:14:30", + "path": [ + { + "unquoted_string": { + "range": "index.d2,3:2:18-3:3:19", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,3:4:20-3:9:25", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,3:10:26-3:14:30", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "b" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": { + "fill": { + "value": "red" + } + }, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + { + "id": "x", + "id_val": "x", + "references": [ + { + "key": { + "range": "index.d2,1:0:2-1:1:3", + "path": [ + { + "unquoted_string": { + "range": "index.d2,1:0:2-1:1:3", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "x" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ] + }, + "err": "" +} diff --git a/testdata/d2oracle/TestSet/import/6.exp.json b/testdata/d2oracle/TestSet/import/6.exp.json new file mode 100644 index 000000000..7c2f2b3e6 --- /dev/null +++ b/testdata/d2oracle/TestSet/import/6.exp.json @@ -0,0 +1,414 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "index.d2,0:0:0-3:0:29", + "nodes": [ + { + "map_key": { + "range": "index.d2,0:0:0-0:1:1", + "key": { + "range": "index.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:0:0-0:1:1", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + }, + { + "map_key": { + "range": "index.d2,1:0:2-1:6:8", + "key": { + "range": "index.d2,1:0:2-1:1:3", + "path": [ + { + "unquoted_string": { + "range": "index.d2,1:0:2-1:1:3", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "import": { + "range": "index.d2,1:3:5-1:6:8", + "spread": false, + "pre": "", + "path": [ + { + "unquoted_string": { + "range": "index.d2,1:4:6-1:6:8", + "value": [ + { + "string": "yo", + "raw_string": "yo" + } + ] + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "index.d2,2:0:9-2:19:28", + "key": { + "range": "index.d2,2:0:9-2:14:23", + "path": [ + { + "unquoted_string": { + "range": "index.d2,2:0:9-2:1:10", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:2:11-2:3:12", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:4:13-2:9:18", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:10:19-2:14:23", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "index.d2,2:16:25-2:19:28", + "value": [ + { + "string": "red", + "raw_string": "red" + } + ] + } + } + } + } + ] + }, + "root": { + "id": "", + "id_val": "", + "attributes": { + "label": { + "value": "" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + "edges": null, + "objects": [ + { + "id": "a", + "id_val": "a", + "references": [ + { + "key": { + "range": "index.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:0:0-0:1:1", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "a" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + { + "id": "b", + "id_val": "b", + "references": [ + { + "key": { + "range": "yo.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "yo.d2,0:0:0-0:1:1", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + }, + { + "key": { + "range": "index.d2,2:0:9-2:14:23", + "path": [ + { + "unquoted_string": { + "range": "index.d2,2:0:9-2:1:10", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:2:11-2:3:12", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:4:13-2:9:18", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:10:19-2:14:23", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "key_path_index": 1, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "b" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": { + "fill": { + "value": "red" + } + }, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + { + "id": "x", + "id_val": "x", + "references": [ + { + "key": { + "range": "index.d2,1:0:2-1:1:3", + "path": [ + { + "unquoted_string": { + "range": "index.d2,1:0:2-1:1:3", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + }, + { + "key": { + "range": "index.d2,2:0:9-2:14:23", + "path": [ + { + "unquoted_string": { + "range": "index.d2,2:0:9-2:1:10", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:2:11-2:3:12", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:4:13-2:9:18", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "index.d2,2:10:19-2:14:23", + "value": [ + { + "string": "fill", + "raw_string": "fill" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "x" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ] + }, + "err": "" +}