diff --git a/cmd/preferredimports/preferredimports.go b/cmd/preferredimports/preferredimports.go index 0213bd7e72e..5397ab6e17e 100644 --- a/cmd/preferredimports/preferredimports.go +++ b/cmd/preferredimports/preferredimports.go @@ -43,7 +43,7 @@ var ( regex = flag.String("include-path", "(test/e2e/|test/e2e_node)", "only files with paths matching this regex is touched") isTerminal = term.IsTerminal(int(os.Stdout.Fd())) logPrefix = "" - aliases map[string]string + aliases = map[*regexp.Regexp]string{} ) type analyzer struct { @@ -95,7 +95,17 @@ func (a *analyzer) collect(dir string) { if imp.Name != nil { importName = imp.Name.Name } - if alias, ok := aliases[importPath]; ok { + for re, template := range aliases { + match := re.FindStringSubmatchIndex(importPath) + if match == nil { + // No match. + continue + } + if match[0] > 0 || match[1] < len(importPath) { + // Not a full match. + continue + } + alias := string(re.ExpandString(nil, template, importPath, match)) if alias != importName { if !*confirm { fmt.Fprintf(os.Stderr, "%sERROR wrong alias for import \"%s\" should be %s in file %s\n", logPrefix, importPath, alias, pathToFile) @@ -108,6 +118,7 @@ func (a *analyzer) collect(dir string) { imp.Name = ast.NewIdent(alias) } } + break } } @@ -238,10 +249,18 @@ func main() { if err != nil { log.Fatalf("Error reading import aliases: %v", err) } - err = json.Unmarshal(bytes, &aliases) + var stringAliases map[string]string + err = json.Unmarshal(bytes, &stringAliases) if err != nil { log.Fatalf("Error loading aliases: %v", err) } + for pattern, name := range stringAliases { + re, err := regexp.Compile(pattern) + if err != nil { + log.Fatalf("Error parsing import path pattern %q as regular expression: %v", pattern, err) + } + aliases[re] = name + } } if isTerminal { logPrefix = "\r" // clear status bar when printing