Skip to content

Commit

Permalink
cmd/compile: add -importmap option
Browse files Browse the repository at this point in the history
The -importmap option takes an argument of the form old=new
and specifies that import "old" should be interpreted as if it said
import "new". The option may be repeated to specify multiple mappings.

This option is here to support the go command's new -vendor flag.

Change-Id: I31b4ed4249b549982a720bf61bb230462b33c59b
Reviewed-on: https://go-review.googlesource.com/10922
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
  • Loading branch information
rsc committed Jun 19, 2015
1 parent f5d494b commit 7bcc6a1
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/cmd/compile/doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ Flags:
Remove the limit on the number of errors reported (default limit is 10).
-h
Halt with a stack trace at the first error detected.
-importmap old=new
Interpret import "old" as import "new" during compilation.
The option may be repeated to add multiple mappings.
-installsuffix suffix
Look for packages in $GOROOT/pkg/$GOOS_$GOARCH_suffix
instead of $GOROOT/pkg/$GOOS_$GOARCH.
Expand Down
20 changes: 20 additions & 0 deletions src/cmd/compile/internal/gc/lex.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ func Main() {
obj.Flagcount("g", "debug code generation", &Debug['g'])
obj.Flagcount("h", "halt on error", &Debug['h'])
obj.Flagcount("i", "debug line number stack", &Debug['i'])
obj.Flagfn1("importmap", "add `definition` of the form source=actual to import map", addImportMap)
obj.Flagstr("installsuffix", "set pkg directory `suffix`", &flag_installsuffix)
obj.Flagcount("j", "debug runtime-initialized variables", &Debug['j'])
obj.Flagcount("l", "disable inlining", &Debug['l'])
Expand Down Expand Up @@ -501,6 +502,20 @@ func Main() {
Flusherrors()
}

var importMap = map[string]string{}

func addImportMap(s string) {
if strings.Count(s, "=") != 1 {
log.Fatal("-importmap argument must be of the form source=actual")
}
i := strings.Index(s, "=")
source, actual := s[:i], s[i+1:]
if source == "" || actual == "" {
log.Fatal("-importmap argument must be of the form source=actual; source and actual must be non-empty")
}
importMap[source] = actual
}

func saveerrors() {
nsavederrors += nerrors
nerrors = 0
Expand Down Expand Up @@ -687,6 +702,11 @@ func importfile(f *Val, line int) {
}

path_ := f.U.(string)

if mapped, ok := importMap[path_]; ok {
path_ = mapped
}

if islocalname(path_) {
if path_[0] == '/' {
Yyerror("import path cannot be absolute path")
Expand Down

0 comments on commit 7bcc6a1

Please sign in to comment.