Merge pull request #2482 from alixander/import-var-bug
d2ir: attempt resolving substitutions from imported files at imported scope first
This commit is contained in:
commit
364969a36b
4 changed files with 148 additions and 0 deletions
|
|
@ -19,6 +19,7 @@
|
|||
- Support for `--omit-version` flag. [#2377](https://github.com/terrastruct/d2/issues/2377)
|
||||
- Compiler:
|
||||
- `link`s can be set to root path, e.g. `/xyz`. [#2357](https://github.com/terrastruct/d2/issues/2357)
|
||||
- When importing a file, attempt resolving substitutions at the imported file scope first [#2482](https://github.com/terrastruct/d2/pull/2482)
|
||||
- Parser:
|
||||
- impose max key length. It's almost certainly a mistake if an ID gets too long, e.g. missing quotes [#2465](https://github.com/terrastruct/d2/pull/2465)
|
||||
- Render:
|
||||
|
|
|
|||
|
|
@ -1714,6 +1714,29 @@ steps: {
|
|||
assert.Equal(t, 1, len(g.Layers[0].Steps))
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "import-nested-var",
|
||||
|
||||
text: `...@models.environment
|
||||
`,
|
||||
files: map[string]string{
|
||||
"models.d2": `
|
||||
vars: {
|
||||
c: {
|
||||
k
|
||||
}
|
||||
}
|
||||
|
||||
environment: {
|
||||
...${c}
|
||||
}
|
||||
`,
|
||||
},
|
||||
assertions: func(t *testing.T, g *d2graph.Graph) {
|
||||
assert.Equal(t, 1, len(g.Objects))
|
||||
assert.Equal(t, "k", g.Objects[0].AbsID())
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "import-connections",
|
||||
|
||||
|
|
|
|||
|
|
@ -111,6 +111,14 @@ func (c *compiler) __import(imp *d2ast.Import) (*Map, bool) {
|
|||
|
||||
c.compileMap(ir, ast, ast)
|
||||
|
||||
// We attempt to resolve variables in the imported file scope first
|
||||
// But ignore errors, in case the variable is meant to be resolved at the
|
||||
// importer
|
||||
savedErrors := make([]d2ast.Error, len(c.err.Errors))
|
||||
copy(savedErrors, c.err.Errors)
|
||||
c.compileSubstitutions(ir, nil)
|
||||
c.err.Errors = savedErrors
|
||||
|
||||
c.seenImports[impPath] = struct{}{}
|
||||
|
||||
return ir, true
|
||||
|
|
|
|||
116
testdata/d2compiler/TestCompile/import-nested-var.exp.json
generated
vendored
Normal file
116
testdata/d2compiler/TestCompile/import-nested-var.exp.json
generated
vendored
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
{
|
||||
"graph": {
|
||||
"name": "",
|
||||
"isFolderOnly": false,
|
||||
"ast": {
|
||||
"range": "d2/testdata/d2compiler/TestCompile/import-nested-var.d2,0:0:0-1:0:23",
|
||||
"nodes": [
|
||||
{
|
||||
"import": {
|
||||
"range": "d2/testdata/d2compiler/TestCompile/import-nested-var.d2,0:0:0-0:22:22",
|
||||
"spread": true,
|
||||
"pre": "",
|
||||
"path": [
|
||||
{
|
||||
"unquoted_string": {
|
||||
"range": "d2/testdata/d2compiler/TestCompile/import-nested-var.d2,0:4:4-0:10:10",
|
||||
"value": [
|
||||
{
|
||||
"string": "models",
|
||||
"raw_string": "models"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"unquoted_string": {
|
||||
"range": "d2/testdata/d2compiler/TestCompile/import-nested-var.d2,0:11:11-0:22:22",
|
||||
"value": [
|
||||
{
|
||||
"string": "environment",
|
||||
"raw_string": "environment"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"root": {
|
||||
"id": "",
|
||||
"id_val": "",
|
||||
"attributes": {
|
||||
"label": {
|
||||
"value": ""
|
||||
},
|
||||
"labelDimensions": {
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"style": {},
|
||||
"iconStyle": {},
|
||||
"near_key": null,
|
||||
"shape": {
|
||||
"value": ""
|
||||
},
|
||||
"direction": {
|
||||
"value": ""
|
||||
},
|
||||
"constraint": null
|
||||
},
|
||||
"zIndex": 0
|
||||
},
|
||||
"edges": null,
|
||||
"objects": [
|
||||
{
|
||||
"id": "k",
|
||||
"id_val": "k",
|
||||
"references": [
|
||||
{
|
||||
"key": {
|
||||
"range": "d2/testdata/d2compiler/TestCompile/models.d2,3:4:20-3:5:21",
|
||||
"path": [
|
||||
{
|
||||
"unquoted_string": {
|
||||
"range": "d2/testdata/d2compiler/TestCompile/models.d2,3:4:20-3:5:21",
|
||||
"value": [
|
||||
{
|
||||
"string": "k",
|
||||
"raw_string": "k"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"key_path_index": 0,
|
||||
"map_key_edge_index": -1
|
||||
}
|
||||
],
|
||||
"attributes": {
|
||||
"label": {
|
||||
"value": "k"
|
||||
},
|
||||
"labelDimensions": {
|
||||
"width": 0,
|
||||
"height": 0
|
||||
},
|
||||
"style": {},
|
||||
"iconStyle": {},
|
||||
"near_key": null,
|
||||
"shape": {
|
||||
"value": "rectangle"
|
||||
},
|
||||
"direction": {
|
||||
"value": ""
|
||||
},
|
||||
"constraint": null
|
||||
},
|
||||
"zIndex": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"err": null
|
||||
}
|
||||
Loading…
Reference in a new issue