diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index c1d4e710b..460e4b017 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -5,6 +5,7 @@ scope (e.g. to a sibling board at the scope its imported to) [#2075](https://github.com/terrastruct/d2/pull/2075) - Autoformat: Reserved keywords are formatted to be lowercase [#2098](https://github.com/terrastruct/d2/pull/2098) - Misc: characters in the unicode range for Latin-1 and geometric shapes are measured more accurately [#2100](https://github.com/terrastruct/d2/pull/2100) +- Imports: can now import from absolute file paths [#2113](https://github.com/terrastruct/d2/pull/2113) #### Improvements 🧹 diff --git a/d2ir/import.go b/d2ir/import.go index c415cf138..2cde21ec8 100644 --- a/d2ir/import.go +++ b/d2ir/import.go @@ -17,17 +17,13 @@ func (c *compiler) pushImportStack(imp *d2ast.Import) (string, bool) { return "", false } if len(c.importStack) > 0 { - if path.IsAbs(impPath) { - c.errorf(imp, "import paths must be relative") - return "", false - } - if path.Ext(impPath) != ".d2" { impPath += ".d2" } - // Imports are always relative to the importing file. - impPath = path.Join(path.Dir(c.importStack[len(c.importStack)-1]), impPath) + if !path.IsAbs(impPath) { + impPath = path.Join(path.Dir(c.importStack[len(c.importStack)-1]), impPath) + } } for i, p := range c.importStack { diff --git a/d2ir/import_test.go b/d2ir/import_test.go index 10de29e2d..e9557b0ab 100644 --- a/d2ir/import_test.go +++ b/d2ir/import_test.go @@ -252,15 +252,6 @@ label: meow`, assert.ErrorString(t, err, `index.d2:1:1: failed to import "../x.d2": open ../x.d2: invalid argument`) }, }, - { - name: "absolute", - run: func(t testing.TB) { - _, err := compileFS(t, "index.d2", map[string]string{ - "index.d2": "...@/x.d2", - }) - assert.ErrorString(t, err, `index.d2:1:1: import paths must be relative`) - }, - }, { name: "parse", run: func(t testing.TB) {