diff --git a/d2compiler/compile.go b/d2compiler/compile.go index c1bed291b..c1800e571 100644 --- a/d2compiler/compile.go +++ b/d2compiler/compile.go @@ -283,9 +283,6 @@ func (c *compiler) compileField(obj *d2graph.Object, f *d2ir.Field) { c.errorf(f.Map().Edges[0].LastRef().AST(), "vars cannot contain an edge") } } - if d2ir.NodeBoardKind(d2ir.ParentMap(f)) == "" { - c.errorf(f.LastRef().AST(), "vars must be defined at the root of a board") - } return } else if isReserved { c.compileReserved(&obj.Attributes, f) diff --git a/d2compiler/compile_test.go b/d2compiler/compile_test.go index 878199312..b401bb4f5 100644 --- a/d2compiler/compile_test.go +++ b/d2compiler/compile_test.go @@ -3181,7 +3181,7 @@ func testVars(t *testing.T) { run func(t *testing.T) }{ { - name: "label", + name: "shape-label", run: func(t *testing.T) { g := assertCompile(t, ` vars: { @@ -3278,7 +3278,7 @@ hi: '1 ${x} 2' }, }, { - name: "edge label", + name: "edge-label", run: func(t *testing.T) { g := assertCompile(t, ` vars: { @@ -3361,6 +3361,23 @@ hi: not a var assert.Equal(t, "not a var", g.Objects[0].Label.Value) }, }, + { + name: "map", + run: func(t *testing.T) { + g := assertCompile(t, ` +vars: { + x: im root var +} +a: { + vars: { + x: im nested var + } + hi: ${x} +} +`, "") + assert.Equal(t, "im nested var", g.Objects[1].Label.Value) + }, + }, } for _, tc := range tca { @@ -3545,18 +3562,6 @@ hi: ${colors} `, `d2/testdata/d2compiler/TestCompile2/vars/errors/map.d2:7:1: cannot reference map variable "colors"`) }, }, - { - name: "non-root", - run: func(t *testing.T) { - assertCompile(t, ` -x: { - vars: { - x: hey - } -} -`, `d2/testdata/d2compiler/TestCompile2/vars/errors/non-root.d2:3:3: vars must be defined at the root of a board`) - }, - }, } for _, tc := range tca { diff --git a/d2ir/compile.go b/d2ir/compile.go index bcfabb346..c8fae9c02 100644 --- a/d2ir/compile.go +++ b/d2ir/compile.go @@ -53,6 +53,7 @@ func Compile(ast *d2ast.Map, opts *CompileOptions) (*Map, error) { defer c.popImportStack() c.compileMap(m, ast, ast) + c.compileSubstitutions(m, nil) c.overlayClasses(m) if !c.err.Empty() { return nil, c.err @@ -97,55 +98,63 @@ func (c *compiler) overlayClasses(m *Map) { } } -func (c *compiler) resolveSubstitutions(refctx *RefContext) { - boardScope := refctx.ScopeMap - if NodeBoardKind(refctx.ScopeMap) == "" { - boardScope = ParentBoard(refctx.ScopeMap).Map() +func (c *compiler) compileSubstitutions(m *Map, varsStack []*Map) { + for _, f := range m.Fields { + if f.Name == "vars" && f.Map() != nil { + varsStack = append([]*Map{f.Map()}, varsStack...) + } + if f.Primary() != nil { + c.resolveSubstitutions(varsStack, f.LastRef().AST(), f.Primary()) + } + if f.Map() != nil { + c.compileSubstitutions(f.Map(), varsStack) + } } - - varsMap := &Map{} - vars := boardScope.GetField("vars") - if vars != nil { - varsMap = vars.Map() + for _, e := range m.Edges { + if e.Primary() != nil { + c.resolveSubstitutions(varsStack, e.LastRef().AST(), e.Primary()) + } } +} +func (c *compiler) resolveSubstitutions(varsStack []*Map, node d2ast.Node, scalar *Scalar) { subbed := false - switch { - case refctx.Key.Value.UnquotedString != nil: - for i, box := range refctx.Key.Value.UnquotedString.Value { + switch s := scalar.Value.(type) { + case *d2ast.UnquotedString: + for i, box := range s.Value { if box.Substitution != nil { - resolvedField := c.resolveSubstitution(varsMap, refctx.Key, box.Substitution) + resolvedField := c.resolveSubstitution(varsStack[0], node, box.Substitution) if resolvedField != nil { // If lone and unquoted, replace with value of sub - if len(refctx.Key.Value.UnquotedString.Value) == 1 { - refctx.Key.Value = d2ast.MakeValueBox(resolvedField.Primary().Value) + if len(s.Value) == 1 { + scalar.Value = resolvedField.Primary().Value } else { - refctx.Key.Value.UnquotedString.Value[i].String = go2.Pointer(resolvedField.Primary().String()) + s.Value[i].String = go2.Pointer(resolvedField.Primary().String()) subbed = true } } } } if subbed { - refctx.Key.Value.UnquotedString.Coalesce() + s.Coalesce() } - case refctx.Key.Value.DoubleQuotedString != nil: - for i, box := range refctx.Key.Value.DoubleQuotedString.Value { + case *d2ast.DoubleQuotedString: + for i, box := range s.Value { if box.Substitution != nil { - resolvedField := c.resolveSubstitution(varsMap, refctx.Key, box.Substitution) + resolvedField := c.resolveSubstitution(varsStack[0], node, box.Substitution) if resolvedField != nil { - refctx.Key.Value.DoubleQuotedString.Value[i].String = go2.Pointer(resolvedField.Primary().String()) + s.Value[i].String = go2.Pointer(resolvedField.Primary().String()) subbed = true } } } if subbed { - refctx.Key.Value.DoubleQuotedString.Coalesce() + s.Coalesce() } } } -func (c *compiler) resolveSubstitution(vars *Map, mk *d2ast.Key, substitution *d2ast.Substitution) *Field { +func (c *compiler) resolveSubstitution(vars *Map, node d2ast.Node, substitution *d2ast.Substitution) *Field { var resolved *Field for _, p := range substitution.Path { if vars == nil { @@ -162,29 +171,15 @@ func (c *compiler) resolveSubstitution(vars *Map, mk *d2ast.Key, substitution *d } if resolved == nil { - c.errorf(mk, `could not resolve variable "%s"`, strings.Join(substitution.IDA(), ".")) + c.errorf(node, `could not resolve variable "%s"`, strings.Join(substitution.IDA(), ".")) } else if resolved.Composite != nil { - c.errorf(mk, `cannot reference map variable "%s"`, strings.Join(substitution.IDA(), ".")) + c.errorf(node, `cannot reference map variable "%s"`, strings.Join(substitution.IDA(), ".")) } else { return resolved } return nil } -func (c *compiler) compileVars(m *Map, ast *d2ast.Map) { - for _, n := range ast.Nodes { - if n.MapKey != nil && n.MapKey.Key != nil && len(n.MapKey.Key.Path) == 1 && strings.EqualFold(n.MapKey.Key.Path[0].Unbox().ScalarString(), "vars") { - c.compileKey(&RefContext{ - Key: n.MapKey, - Scope: ast, - ScopeMap: m, - ScopeAST: ast, - }) - break - } - } -} - func (c *compiler) overlayVars(base, overlay *Map) { vars := overlay.GetField("vars") if vars == nil { @@ -215,10 +210,6 @@ func (c *compiler) overlay(base *Map, f *Field) { } func (c *compiler) compileMap(dst *Map, ast, scopeAST *d2ast.Map) { - // When compiling a new board, compile vars before all else, as it might be referenced - if NodeBoardKind(dst) != "" { - c.compileVars(dst, ast) - } for _, n := range ast.Nodes { switch { case n.MapKey != nil: @@ -252,7 +243,6 @@ func (c *compiler) compileMap(dst *Map, ast, scopeAST *d2ast.Map) { } func (c *compiler) compileKey(refctx *RefContext) { - c.resolveSubstitutions(refctx) if len(refctx.Key.Edges) == 0 { c.compileField(refctx.ScopeMap, refctx.Key.Key, refctx) } else { diff --git a/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf b/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf index 7f3e137b3..763c539b9 100644 Binary files a/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf and b/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf differ diff --git a/lib/urlenc/testdata/TestChanges.exp.txt b/lib/urlenc/testdata/TestChanges.exp.txt index c8aeb9aed..0ab14ee94 100644 --- a/lib/urlenc/testdata/TestChanges.exp.txt +++ b/lib/urlenc/testdata/TestChanges.exp.txt @@ -1 +1 @@ -vFdtb9s4Ev6uXzFwWvQuiN5sN0mFwx1yadMUaLHe2rv9UmBBiyOZrUSqJGUn3ea_L4aSbFl2usUusPkQkzPkzMNnXkhZUSIpoBR3qBMYjeB3DwDvqoJJRkwm8K3kHgDAyQmcni72NpyeOo0Pb-QnTC0wbs5gs1K-VX6mikJtzkDJpWKaC5m3a6-VXKM2zjqUitcFdppaG6WFzM8qlovGf6tabJBZ4MjrqhBpXzNHvUYOnFkGhcrzxtE378GboaoKBC5Mqtao7xMYDUXwURrUa5HiyGO8JeGKN6dzVDiiA0qZBEYnaczG2WTkPXje7lzQmkhg9NNO2LO8zzL4_4UhjiNLDu0fWdRi9lJKRyFRR9sY5ppVqy-FB5CqskRpPQBbGFYJ76G3PmjXJfCaBj-__ShvkKOmyoO51cwquHbl0NBB6ZqAKFlOUaPkT2BlbWWSMKyrQjEebMRnUSIXLFA6D2lW0SwkHEqa0K7qchnGYXwRtj5_e6tyFZh1HsbjKKru_KE8qGS-D7s9VJeeJyeUImjD2qAGWofSwuqea5crZ7AWRixFIew9ZKKwSGnmfetbbMhJYPF27l_N3sC_lkjkc6w0pkTHv4_QRkHYD8swSv_x4cCJZzeCWhFklDSLdnKjHWwOTQD3uaWZCSxqzYzVdWqJgdCoVLAijOKJ35r0Y-JrGKmHnkeCfCz-YrZSEmGDy8cXdxzdLhYzuJJcK8G9DS4T-IDLH0bNvtYaww-4fDqO5k1uPx1H19SHw6uq2pO-VCUT0hw_lPemIsxJz_OzzrUxF8H668Y5FCZ0W8Jf0bXuD0JjgcaErKoK9IWz4sdj_3yaL_2q1iR9PoniC7_8JONJUfjsf084Eia_yJ88O4TSkpEcISHlchqQKBPUiB0ialcNO6Epmba-g2B8i-lKqkLlAk34PB6HrLHb6F0ZHLKwwaXLw23UdjloUqVdY-8a90c5d6LRke6WZRyzmLrbSpUImsnPtPeWJu_dxOtZ7pre9kqYP9qmDuAsVlpkFt7Pro-s3nO-Q9m7CROYDsQEP4qiV5OXBP97CFqQzknb8G-3Y-fu5NGmf7z--6b-EtydgSNkDbR_n5zHvLXElEyumLVMwjiBd93Ey8VXuqvTzwm87oZe034cFQnM3aS5dzxLzfi-EpQfbggzgQPXPU8DzdbZQN7zNzxG569tCYN6aKtzIK00cuHei93pxwnMdsI2of_84ku59F0x-5XMg6xglmau0KmGz6fnsft3Gb9obzKHvqsGl39NWX63KreE9QNTYpmydIUJvGtHR1oQj7-cZxHD4i6qlA7SQtU8o-smkGjDShPZ1i9UrkzIMZrGz6OpH3G-9KeT7NxfXr5AP8NoOo0macouud955e15vAxtukrghn56h-gewAlYXeOOR3rhNtuYrTXSRjf48a1EnpB54oiji_qHdzqolAqt8w6Ey7DGmHckN_6p1GghEJpDEDvw2140DlLdvDz6WbVXYPQoPNRuE2c0GuqOVEb_Ttg2on6L2qkOoSVwzSQXnFlsUmTXSsfbF-tjLeuwIOiP5Dvr-t22fQ-X31zcXN68ouUP9GnDdHG_FJon8IqG_xea3o-1ZXkCv1jm7teKUbjn9NO-n2sprECTwPVu4j14aNMEgiBAmx7w63RdWt92L1Gvn23bAO0J27j0Zc7WjsLme9F4fwQAAP__ \ No newline at end of file +vFdtb9s4Ev6uXzFwWvQuiN5sN0mFwx1yadMUaLHe2rv9UmBBiyOZrUSqJGUn3ea_L4aSbFl2usUusPkQkzPkzMNnXkhZUSIpoRR3qBMYjeB3DwDvqoJJRmwm8K3kHgDAyQmcni72NpyeOo0Pb-QnTC0wbs5gs1K-VX6mikJtzkDJpWKaC5m3a6-VXKM2zjqUitcFdppaG6WFzM8qlovGf6tabJBZ4MjrqhBpXzNHvUYOnFkGhcrzxtE378GboaoKBC5Mqtao7xMYDUXwURrUa5HiyGO8JeGKN6dzVDiyA0qbBEYnaczG2WTkPXje7lzQmkhg9NNO2LO8zzL4_4UhjiNLDu0fWdRi9lJKSSFRR9sY5ppVqy-FB5CqskRpPQBbGFYJ76G3PmjXJfCaBj-__ShvkKOm6oO51cwquHYl0dBBKZuAKFlOUaMCSGBlbWWSMKyrQjEebMRnUSIXLFA6D2lW0SwkHEqa0K7qchnGYXwRtj5_e6tyFZh1HsbjKKru_KE8qGS-D7s9VJeeJyeUImjD2qAGWofSwuqea5crZ7AWRixFIew9ZKKwSGnmfetbbMhJYPF27l_N3sC_lkjkc6w0pkTHv4_QRkHYD8swSv_x4cCJZzeC2hFklDSLdnKjHWwOTQD3uaWZCSxqzYzVdWqJgdCoVLAijOKJ35r0Y-JrGKmHnkeCfCz-YrZSEmGDy8cXdxzdLhYzuJJcK8G9DS4T-IDLH0bNvtYaww-4fDqO5k1uPx1H19SLw6uq2pO-VCUT0hw_lPemIsxJz_OzzrUxF8H668Y5FCZ0W8Jf0bXvD0JjgcaErKoK9IWz4sdj_3yaL_2q1iR9PoniC7_8JONJUfjsf084Eia_yJ88O4TSkpEcISHlchqQKBPUjB0ialcNO6Epmba-g2B8i-lKqkLlAk34PB6HrLHb6F0ZHLKwwaXLw23UdjloUqVdY-8a90c5d6LRke6WZRyzmLrbSpUImsnPtPeWJu_dxOtZ7pre9kqYP9qmDuAsVlpkFt7Pro-s3nO-Q9m7DROYDsQEP4qiV5OXBP97CFqQzknb8G-3Y-fu5NGmf7z--6b-EtydgSNkDbR_n5zHvLXElEyumLVMwjiBd93Ey8VXuqvTzwm87oZe034cFQnM3aS5dzxLzfi-EpQfbggzgQPXPU8DzdbZQN7zNzxG569tCYN6aKtzIK00cuHejN3pxwnMdsI2of_84ku59F0x-5XMg6xglmau0KmGz6fnsft3Gb9obzKHvqsGl39NWX63KreE9QNTYpmydIUJvGtHR1oQj7-cZxHD4i6qlA7SQtU8o-smkGjDShPZ1i9UrkzIMZrGz6OpH3G-9KeT7NxfXr5AP8NoOo0macouud955e15vAxtukrghn56h-gewQlYXeOOR3rlNtuYrTXSRjf48a1EnpB54oiji_qHdzqolAqt8w6Ey7DGmHckN_6p1GghEJpDEDvw2140DlLdvDz6WbVXYPQoPNRuE2c0GuqOVEb_Ttg2on6L2qkOoSVwzSQXnFlsUmTXSsfbF-tjLeuwIOiP5Dvr-t22fQ-X31zcXN68ouUP9GnDdHG_FJon8IqG_xea3o-1ZXkCv1jm7teKUbjn9NO-n2sprECTwPVu4j14aNMEgiBAmx7w63RdWt92L1Gvn23bAO0J27j0Zc7WjsLmm9F4fwQAAP__ \ No newline at end of file diff --git a/testdata/d2compiler/TestCompile2/vars/basic/edge-label.exp.json b/testdata/d2compiler/TestCompile2/vars/basic/edge-label.exp.json new file mode 100644 index 000000000..87391a571 --- /dev/null +++ b/testdata/d2compiler/TestCompile2/vars/basic/edge-label.exp.json @@ -0,0 +1,292 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,0:0:0-5:0:38", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,1:0:1-3:1:24", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,1:0:1-1:4:5", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,1:0:1-1:4:5", + "value": [ + { + "string": "vars", + "raw_string": "vars" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,1:6:7-3:1:24", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,2:2:11-2:13:22", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,2:2:11-2:3:12", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,2:2:11-2:3:12", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,2:5:14-2:13:22", + "value": [ + { + "string": "im a var", + "raw_string": "im a var" + } + ] + } + } + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:0:25-4:12:37", + "edges": [ + { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:0:25-4:6:31", + "src": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:0:25-4:1:26", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:0:25-4:1:26", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + } + ] + }, + "src_arrow": "", + "dst": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:5:30-4:6:31", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:5:30-4:6:31", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + }, + "dst_arrow": ">" + } + ], + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:8:33-4:9:34", + "value": [ + { + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:8:33-4:12:37", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:10:35-4:11:36", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } + } + ] + } + } + } + } + ] + }, + "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": [ + { + "index": 0, + "isCurve": false, + "src_arrow": false, + "dst_arrow": true, + "references": [ + { + "map_key_edge_index": 0 + } + ], + "attributes": { + "label": { + "value": "im a var" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ], + "objects": [ + { + "id": "a", + "id_val": "a", + "references": [ + { + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:0:25-4:1:26", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:0:25-4:1:26", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": 0 + } + ], + "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": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:5:30-4:6:31", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge-label.d2,4:5:30-4:6:31", + "value": [ + { + "string": "b", + "raw_string": "b" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": 0 + } + ], + "attributes": { + "label": { + "value": "b" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ] + }, + "err": null +} diff --git a/testdata/d2compiler/TestCompile2/vars/basic/edge_label.exp.json b/testdata/d2compiler/TestCompile2/vars/basic/edge_label.exp.json index 77d0d380f..b5d58ba79 100644 --- a/testdata/d2compiler/TestCompile2/vars/basic/edge_label.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/basic/edge_label.exp.json @@ -112,11 +112,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge_label.d2,2:5:14-2:13:22", + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge_label.d2,4:8:33-4:9:34", "value": [ { - "string": "im a var", - "raw_string": "im a var" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge_label.d2,4:8:33-4:12:37", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/edge_label.d2,4:10:35-4:11:36", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } } ] } @@ -161,7 +176,7 @@ ], "attributes": { "label": { - "value": "im a var" + "value": "" }, "labelDimensions": { "width": 0, diff --git a/testdata/d2compiler/TestCompile2/vars/basic/label.exp.json b/testdata/d2compiler/TestCompile2/vars/basic/label.exp.json index 723fae322..7c20031a3 100644 --- a/testdata/d2compiler/TestCompile2/vars/basic/label.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/basic/label.exp.json @@ -89,11 +89,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/label.d2,2:5:14-2:13:22", + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/label.d2,4:4:29-4:5:30", "value": [ { - "string": "im a var", - "raw_string": "im a var" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/label.d2,4:4:29-4:8:33", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/label.d2,4:6:31-4:7:32", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } } ] } @@ -154,7 +169,7 @@ ], "attributes": { "label": { - "value": "im a var" + "value": "" }, "labelDimensions": { "width": 0, diff --git a/testdata/d2compiler/TestCompile2/vars/basic/nested.exp.json b/testdata/d2compiler/TestCompile2/vars/basic/nested.exp.json index 759360078..2b5c53b82 100644 --- a/testdata/d2compiler/TestCompile2/vars/basic/nested.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/basic/nested.exp.json @@ -182,11 +182,48 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/nested.d2,4:14:49-4:17:52", + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/nested.d2,9:14:85-9:15:86", "value": [ { - "string": "red", - "raw_string": "red" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/nested.d2,9:14:85-9:38:109", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/nested.d2,9:16:87-9:22:93", + "value": [ + { + "string": "colors", + "raw_string": "colors" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/nested.d2,9:23:94-9:30:101", + "value": [ + { + "string": "primary", + "raw_string": "primary" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/nested.d2,9:31:102-9:37:108", + "value": [ + { + "string": "button", + "raw_string": "button" + } + ] + } + } + ] + } } ] } diff --git a/testdata/d2compiler/TestCompile2/vars/basic/number.exp.json b/testdata/d2compiler/TestCompile2/vars/basic/number.exp.json index a7a5fb0e5..a27ca9ad5 100644 --- a/testdata/d2compiler/TestCompile2/vars/basic/number.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/basic/number.exp.json @@ -108,10 +108,29 @@ }, "primary": {}, "value": { - "number": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/number.d2,2:10:19-2:11:20", - "raw": "2", - "value": "2" + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/number.d2,5:15:44-5:16:45", + "value": [ + { + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/number.d2,5:15:44-5:25:54", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/number.d2,5:17:46-5:24:53", + "value": [ + { + "string": "columns", + "raw_string": "columns" + } + ] + } + } + ] + } + } + ] } } } diff --git a/testdata/d2compiler/TestCompile2/vars/basic/quoted-var.exp.json b/testdata/d2compiler/TestCompile2/vars/basic/quoted-var.exp.json index 4b4d56a32..ec1525372 100644 --- a/testdata/d2compiler/TestCompile2/vars/basic/quoted-var.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/basic/quoted-var.exp.json @@ -223,12 +223,49 @@ }, "primary": {}, "value": { - "double_quoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/quoted-var.d2,4:14:56-4:23:65", + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/quoted-var.d2,12:10:131-12:11:132", "value": [ { - "string": "#4baae5", - "raw_string": "#4baae5" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/quoted-var.d2,12:10:131-12:40:161", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/quoted-var.d2,12:12:133-12:25:146", + "value": [ + { + "string": "primaryColors", + "raw_string": "primaryColors" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/quoted-var.d2,12:26:147-12:32:153", + "value": [ + { + "string": "button", + "raw_string": "button" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/quoted-var.d2,12:33:154-12:39:160", + "value": [ + { + "string": "active", + "raw_string": "active" + } + ] + } + } + ] + } } ] } diff --git a/testdata/d2compiler/TestCompile2/vars/basic/shape-label.exp.json b/testdata/d2compiler/TestCompile2/vars/basic/shape-label.exp.json new file mode 100644 index 000000000..faf48d651 --- /dev/null +++ b/testdata/d2compiler/TestCompile2/vars/basic/shape-label.exp.json @@ -0,0 +1,193 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,0:0:0-5:0:34", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,1:0:1-3:1:24", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,1:0:1-1:4:5", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,1:0:1-1:4:5", + "value": [ + { + "string": "vars", + "raw_string": "vars" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,1:6:7-3:1:24", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,2:2:11-2:13:22", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,2:2:11-2:3:12", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,2:2:11-2:3:12", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,2:5:14-2:13:22", + "value": [ + { + "string": "im a var", + "raw_string": "im a var" + } + ] + } + } + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,4:0:25-4:8:33", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,4:0:25-4:2:27", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,4:0:25-4:2:27", + "value": [ + { + "string": "hi", + "raw_string": "hi" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,4:4:29-4:5:30", + "value": [ + { + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,4:4:29-4:8:33", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,4:6:31-4:7:32", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } + } + ] + } + } + } + } + ] + }, + "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": "hi", + "id_val": "hi", + "references": [ + { + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,4:0:25-4:2:27", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/shape-label.d2,4:0:25-4:2:27", + "value": [ + { + "string": "hi", + "raw_string": "hi" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "im a var" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ] + }, + "err": null +} diff --git a/testdata/d2compiler/TestCompile2/vars/basic/style.exp.json b/testdata/d2compiler/TestCompile2/vars/basic/style.exp.json index c5a5ae699..9cd133ce4 100644 --- a/testdata/d2compiler/TestCompile2/vars/basic/style.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/basic/style.exp.json @@ -124,11 +124,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/style.d2,2:17:26-2:20:29", + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/style.d2,5:14:52-5:15:53", "value": [ { - "string": "red", - "raw_string": "red" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/style.d2,5:14:52-5:30:68", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/basic/style.d2,5:16:54-5:29:67", + "value": [ + { + "string": "primary-color", + "raw_string": "primary-color" + } + ] + } + } + ] + } } ] } diff --git a/testdata/d2compiler/TestCompile2/vars/boards/layer.exp.json b/testdata/d2compiler/TestCompile2/vars/boards/layer.exp.json index 6ca33821b..2f2a237c8 100644 --- a/testdata/d2compiler/TestCompile2/vars/boards/layer.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/boards/layer.exp.json @@ -137,11 +137,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/layer.d2,2:5:14-2:13:22", + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/layer.d2,7:8:51-7:9:52", "value": [ { - "string": "im a var", - "raw_string": "im a var" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/layer.d2,7:8:51-7:12:55", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/layer.d2,7:10:53-7:11:54", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } } ] } diff --git a/testdata/d2compiler/TestCompile2/vars/boards/overlay.exp.json b/testdata/d2compiler/TestCompile2/vars/boards/overlay.exp.json index 06ce2bc1c..b2557d9b0 100644 --- a/testdata/d2compiler/TestCompile2/vars/boards/overlay.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/boards/overlay.exp.json @@ -199,11 +199,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,2:5:14-2:13:22", + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,10:7:89-10:8:90", "value": [ { - "string": "im x var", - "raw_string": "im x var" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,10:7:89-10:11:93", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,10:9:91-10:10:92", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } } ] } @@ -232,11 +247,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,8:9:67-8:17:75", + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,11:7:101-11:8:102", "value": [ { - "string": "im y var", - "raw_string": "im y var" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,11:7:101-11:11:105", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,11:9:103-11:10:104", + "value": [ + { + "string": "y", + "raw_string": "y" + } + ] + } + } + ] + } } ] } @@ -385,11 +415,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,2:5:14-2:13:22", + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,19:7:173-19:8:174", "value": [ { - "string": "im x var", - "raw_string": "im x var" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,19:7:173-19:11:177", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,19:9:175-19:10:176", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } } ] } @@ -418,11 +463,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,17:9:151-17:17:159", + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,20:7:185-20:8:186", "value": [ { - "string": "im y var", - "raw_string": "im y var" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,20:7:185-20:11:189", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/overlay.d2,20:9:187-20:10:188", + "value": [ + { + "string": "y", + "raw_string": "y" + } + ] + } + } + ] + } } ] } diff --git a/testdata/d2compiler/TestCompile2/vars/boards/replace.exp.json b/testdata/d2compiler/TestCompile2/vars/boards/replace.exp.json index 0637551ac..86ad2c0cb 100644 --- a/testdata/d2compiler/TestCompile2/vars/boards/replace.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/boards/replace.exp.json @@ -199,11 +199,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/replace.d2,8:9:67-8:26:84", + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/replace.d2,10:7:98-10:8:99", "value": [ { - "string": "im replaced x var", - "raw_string": "im replaced x var" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/replace.d2,10:7:98-10:11:102", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/replace.d2,10:9:100-10:10:101", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } } ] } diff --git a/testdata/d2compiler/TestCompile2/vars/boards/scenario.exp.json b/testdata/d2compiler/TestCompile2/vars/boards/scenario.exp.json index aed67f583..1da21aa14 100644 --- a/testdata/d2compiler/TestCompile2/vars/boards/scenario.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/boards/scenario.exp.json @@ -137,11 +137,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/scenario.d2,2:5:14-2:13:22", + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/scenario.d2,7:8:54-7:9:55", "value": [ { - "string": "im a var", - "raw_string": "im a var" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/scenario.d2,7:8:54-7:12:58", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/boards/scenario.d2,7:10:56-7:11:57", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } } ] } diff --git a/testdata/d2compiler/TestCompile2/vars/errors/map.exp.json b/testdata/d2compiler/TestCompile2/vars/errors/map.exp.json index 0d8156660..ca00beed9 100644 --- a/testdata/d2compiler/TestCompile2/vars/errors/map.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/errors/map.exp.json @@ -3,7 +3,7 @@ "err": { "errs": [ { - "range": "d2/testdata/d2compiler/TestCompile2/vars/errors/map.d2,6:0:43-6:13:56", + "range": "d2/testdata/d2compiler/TestCompile2/vars/errors/map.d2,6:0:43-6:2:45", "errmsg": "d2/testdata/d2compiler/TestCompile2/vars/errors/map.d2:7:1: cannot reference map variable \"colors\"" } ] diff --git a/testdata/d2compiler/TestCompile2/vars/errors/missing.exp.json b/testdata/d2compiler/TestCompile2/vars/errors/missing.exp.json index bf2e45fed..c87799688 100644 --- a/testdata/d2compiler/TestCompile2/vars/errors/missing.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/errors/missing.exp.json @@ -3,7 +3,7 @@ "err": { "errs": [ { - "range": "d2/testdata/d2compiler/TestCompile2/vars/errors/missing.d2,4:0:20-4:8:28", + "range": "d2/testdata/d2compiler/TestCompile2/vars/errors/missing.d2,4:0:20-4:2:22", "errmsg": "d2/testdata/d2compiler/TestCompile2/vars/errors/missing.d2:5:1: could not resolve variable \"z\"" } ] diff --git a/testdata/d2compiler/TestCompile2/vars/errors/nested-missing.exp.json b/testdata/d2compiler/TestCompile2/vars/errors/nested-missing.exp.json index 96bef919a..e105b1ef0 100644 --- a/testdata/d2compiler/TestCompile2/vars/errors/nested-missing.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/errors/nested-missing.exp.json @@ -3,7 +3,7 @@ "err": { "errs": [ { - "range": "d2/testdata/d2compiler/TestCompile2/vars/errors/nested-missing.d2,6:0:33-6:10:43", + "range": "d2/testdata/d2compiler/TestCompile2/vars/errors/nested-missing.d2,6:0:33-6:2:35", "errmsg": "d2/testdata/d2compiler/TestCompile2/vars/errors/nested-missing.d2:7:1: could not resolve variable \"x.z\"" } ] diff --git a/testdata/d2compiler/TestCompile2/vars/override/label.exp.json b/testdata/d2compiler/TestCompile2/vars/override/label.exp.json index f1a1cb4be..7101e2e4f 100644 --- a/testdata/d2compiler/TestCompile2/vars/override/label.exp.json +++ b/testdata/d2compiler/TestCompile2/vars/override/label.exp.json @@ -89,11 +89,26 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile2/vars/override/label.d2,2:5:14-2:13:22", + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/label.d2,4:4:29-4:5:30", "value": [ { - "string": "im a var", - "raw_string": "im a var" + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/label.d2,4:4:29-4:8:33", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/label.d2,4:6:31-4:7:32", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } } ] } diff --git a/testdata/d2compiler/TestCompile2/vars/override/map.exp.json b/testdata/d2compiler/TestCompile2/vars/override/map.exp.json new file mode 100644 index 000000000..11208a29b --- /dev/null +++ b/testdata/d2compiler/TestCompile2/vars/override/map.exp.json @@ -0,0 +1,329 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,0:0:0-10:0:81", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,1:0:1-3:1:27", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,1:0:1-1:4:5", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,1:0:1-1:4:5", + "value": [ + { + "string": "vars", + "raw_string": "vars" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,1:6:7-3:1:27", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,2:2:11-2:16:25", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,2:2:11-2:3:12", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,2:2:11-2:3:12", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,2:5:14-2:16:25", + "value": [ + { + "string": "im root var", + "raw_string": "im root var" + } + ] + } + } + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,4:0:28-9:1:80", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,4:0:28-4:1:29", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,4:0:28-4:1:29", + "value": [ + { + "string": "a", + "raw_string": "a" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,4:3:31-9:1:80", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,5:2:35-7:3:67", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,5:2:35-5:6:39", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,5:2:35-5:6:39", + "value": [ + { + "string": "vars", + "raw_string": "vars" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,5:8:41-7:3:67", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,6:4:47-6:20:63", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,6:4:47-6:5:48", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,6:4:47-6:5:48", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,6:7:50-6:20:63", + "value": [ + { + "string": "im nested var", + "raw_string": "im nested var" + } + ] + } + } + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,8:2:70-8:10:78", + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,8:2:70-8:4:72", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,8:2:70-8:4:72", + "value": [ + { + "string": "hi", + "raw_string": "hi" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,8:6:74-8:7:75", + "value": [ + { + "substitution": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,8:6:74-8:10:78", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,8:8:76-8:9:77", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + } + } + ] + } + } + } + } + ] + } + } + } + } + ] + }, + "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": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,4:0:28-4:1:29", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,4:0:28-4:1:29", + "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": "hi", + "id_val": "hi", + "references": [ + { + "key": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,8:2:70-8:4:72", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile2/vars/override/map.d2,8:2:70-8:4:72", + "value": [ + { + "string": "hi", + "raw_string": "hi" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "im nested var" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ] + }, + "err": null +} diff --git a/testdata/d2ir/TestCompile/imports/vars/1.exp.json b/testdata/d2ir/TestCompile/imports/vars/1.exp.json index bd5c4b97e..9d278fd74 100644 --- a/testdata/d2ir/TestCompile/imports/vars/1.exp.json +++ b/testdata/d2ir/TestCompile/imports/vars/1.exp.json @@ -18,67 +18,6 @@ } }, "references": [ - { - "string": { - "range": "x.d2,0:0:0-0:4:4", - "value": [ - { - "string": "meow", - "raw_string": "meow" - } - ] - }, - "key_path": { - "range": "x.d2,0:0:0-0:4:4", - "path": [ - { - "unquoted_string": { - "range": "x.d2,0:0:0-0:4:4", - "value": [ - { - "string": "meow", - "raw_string": "meow" - } - ] - } - } - ] - }, - "context": { - "edge": null, - "key": { - "range": "x.d2,0:0:0-0:18:18", - "key": { - "range": "x.d2,0:0:0-0:4:4", - "path": [ - { - "unquoted_string": { - "range": "x.d2,0:0:0-0:4:4", - "value": [ - { - "string": "meow", - "raw_string": "meow" - } - ] - } - } - ] - }, - "primary": {}, - "value": { - "unquoted_string": { - "range": "x.d2,0:6:6-0:18:18", - "value": [ - { - "string": "var replaced", - "raw_string": "var replaced" - } - ] - } - } - } - } - }, { "string": { "range": "x.d2,0:0:0-0:4:4", @@ -146,83 +85,6 @@ "edges": null }, "references": [ - { - "string": { - "range": "index.d2,0:0:0-0:4:4", - "value": [ - { - "string": "vars", - "raw_string": "vars" - } - ] - }, - "key_path": { - "range": "index.d2,0:0:0-0:4:4", - "path": [ - { - "unquoted_string": { - "range": "index.d2,0:0:0-0:4:4", - "value": [ - { - "string": "vars", - "raw_string": "vars" - } - ] - } - } - ] - }, - "context": { - "edge": null, - "key": { - "range": "index.d2,0:0:0-0:15:15", - "key": { - "range": "index.d2,0:0:0-0:4:4", - "path": [ - { - "unquoted_string": { - "range": "index.d2,0:0:0-0:4:4", - "value": [ - { - "string": "vars", - "raw_string": "vars" - } - ] - } - } - ] - }, - "primary": {}, - "value": { - "map": { - "range": "index.d2,0:6:6-0:15:15", - "nodes": [ - { - "import": { - "range": "index.d2,0:8:8-0:14:14", - "spread": true, - "pre": "", - "path": [ - { - "unquoted_string": { - "range": "index.d2,0:12:12-0:13:13", - "value": [ - { - "string": "x", - "raw_string": "x" - } - ] - } - } - ] - } - } - ] - } - } - } - } - }, { "string": { "range": "index.d2,0:0:0-0:4:4", @@ -306,10 +168,11 @@ "name": "q", "primary": { "value": { - "range": "index.d2,0:20:20-0:21:21", + "range": "x.d2,0:6:6-0:18:18", "value": [ { - "string": "var replaced" + "string": "var replaced", + "raw_string": "var replaced" } ] } @@ -367,7 +230,23 @@ "range": "index.d2,0:20:20-0:21:21", "value": [ { - "string": "var replaced" + "substitution": { + "range": "index.d2,0:20:20-0:27:27", + "spread": false, + "path": [ + { + "unquoted_string": { + "range": "index.d2,0:22:22-0:26:26", + "value": [ + { + "string": "meow", + "raw_string": "meow" + } + ] + } + } + ] + } } ] }