Skip to content

Commit

Permalink
Merge pull request #1393 from nhooyr/import-fixes
Browse files Browse the repository at this point in the history
Import fixes
  • Loading branch information
alixander authored Jun 10, 2023
2 parents f561b83 + 1f891a3 commit 21f59a6
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 25 deletions.
4 changes: 0 additions & 4 deletions d2compiler/compile.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"io"
"io/fs"
"net/url"
"os"
"strconv"
"strings"

Expand All @@ -32,9 +31,6 @@ func Compile(p string, r io.RuneReader, opts *CompileOptions) (*d2graph.Graph, e
if opts == nil {
opts = &CompileOptions{}
}
if opts.FS == nil {
opts.FS = os.DirFS("/")
}

ast, err := d2parser.Parse(p, r, &d2parser.ParseOptions{
UTF16: opts.UTF16,
Expand Down
6 changes: 6 additions & 0 deletions d2format/format.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,12 @@ func (p *printer) _import(i *d2ast.Import) {
p.sb.WriteString(pre)
p.sb.WriteRune('/')
}
if len(i.Path) > 0 {
i2 := *i
i2.Path = append([]*d2ast.StringBox{}, i.Path...)
i2.Path[0] = d2ast.RawStringBox(path.Clean(i.Path[0].Unbox().ScalarString()), true)
i = &i2
}
p.path(i.Path)
}

Expand Down
8 changes: 8 additions & 0 deletions d2format/format_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -649,6 +649,14 @@ x: @./file
x: @../file
`,
exp: `x: @../file
`,
},
{
name: "import/4",
in: `
x: @"x/../file"
`,
exp: `x: @file
`,
},
}
Expand Down
25 changes: 7 additions & 18 deletions d2ir/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package d2ir

import (
"bufio"
"io/fs"
"os"
"path"
"strings"
Expand Down Expand Up @@ -85,25 +86,13 @@ func (c *compiler) __import(imp *d2ast.Import) (*Map, bool) {
return ir, true
}

p := path.Clean(impPath)
if path.IsAbs(p) {
// Path cannot be absolute. DirFS does not accept absolute paths. We strip off the leading
// slash to make it relative to the root.
p = p[1:]
} else if c.fs == os.DirFS("/") {
wd, err := os.Getwd()
if err != nil {
c.errorf(imp, "failed to import %q: %v", impPath, err)
return nil, false
}
p = path.Join(wd, p)
// See above explanation.
if path.IsAbs(p) {
p = p[1:]
}
var f fs.File
var err error
if c.fs == nil {
f, err = os.Open(impPath)
} else {
f, err = c.fs.Open(impPath)
}

f, err := c.fs.Open(p)
if err != nil {
c.errorf(imp, "failed to import %q: %v", impPath, err)
return nil, false
Expand Down
4 changes: 1 addition & 3 deletions d2parser/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -1742,9 +1742,7 @@ func (p *parser) parseImport(spread bool) *d2ast.Import {
if k.Path[0].UnquotedString != nil && len(k.Path) > 1 && k.Path[1].UnquotedString != nil && k.Path[1].Unbox().ScalarString() == "d2" {
k.Path = append(k.Path[:1], k.Path[2:]...)
}
if k != nil {
imp.Path = k.Path
}
imp.Path = k.Path
return imp
}

Expand Down

0 comments on commit 21f59a6

Please sign in to comment.