I just noticed that import paths that start with an uppercase letter don't 
get imported automatically after the update.

Looking at the code and 
 https://github.com/golang/tools/blob/master/imports/fix.go#L651,
I tried to change the behavior, using strings.ToLower on 
`lastTwoComponents` like:

for _, pkg := range dirScan {
if 
!strings.Contains(strings.ToLower(lastTwoComponents(pkg.importPathShort)), 
pkgName) {
// Speed optimization to minimize disk I/O:
// the last two components on disk must contain the
// package name somewhere.
//
// This permits mismatch naming like directory
// "go-foo" being package "foo", or "pkg.v3" being "pkg",
// or directory "google.golang.org/api/cloudbilling/v1"
// being package "cloudbilling", but doesn't
// permit a directory "foo" to be package
// "bar", which is strongly discouraged
// anyway. There's no reason goimports needs
// to be slow just to accomodate that.
continue
}
if !canUse(filename, pkg.dir) {
continue
}
candidates = append(candidates, pkg)
}

and the imports work again like before.


This is the test case:
 
func TestFindImportGoPath(t *testing.T) {
goroot, err := ioutil.TempDir("", "goimports-")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(goroot)

origStdlib := stdlib
defer func() {
stdlib = origStdlib
}()
stdlib = nil

withEmptyGoPath(func() {
// Test against imaginary bits/bytes package in std lib
bytesDir := filepath.Join(goroot, "src", "pkg", "bits", "Bytes")
for _, tag := range build.Default.ReleaseTags {
// Go 1.4 rearranged the GOROOT tree to remove the "pkg" path component.
if tag == "go1.4" {
bytesDir = filepath.Join(goroot, "src", "bits", "Bytes")
}
}
if err := os.MkdirAll(bytesDir, 0755); err != nil {
t.Fatal(err)
}
bytesSrcPath := filepath.Join(bytesDir, "bytes.go")
bytesPkgPath := "bits/Bytes"
bytesSrc := []byte(`package bytes

type Buffer2 struct {}
`)
if err := ioutil.WriteFile(bytesSrcPath, bytesSrc, 0775); err != nil {
t.Fatal(err)
}
build.Default.GOROOT = goroot

got, rename, err := findImportGoPath("bytes", map[string]bool{"Buffer2": 
true}, "x.go")
if err != nil {
t.Fatal(err)
}
if got != bytesPkgPath || !rename {
t.Errorf(`findImportGoPath("bytes", Buffer2 ...)=%q, %t, want "%s", false`, 
got, rename, bytesPkgPath)
}

got, rename, err = findImportGoPath("bytes", map[string]bool{"Missing": 
true}, "x.go")
if err != nil {
t.Fatal(err)
}
if got != "" || rename {
t.Errorf(`findImportGoPath("bytes", Missing ...)=%q, %t, want "", false`, 
got, rename)
}
})
}



-Vince

On Thursday, July 14, 2016 at 10:34:36 PM UTC-7, bradfitz wrote:
>
> goimports has been updated.
>
> If you've been frustrated by its speed lately, run:
>
>    $ go get -u golang.org/x/tools/cmd/goimports
>
> ... and things should be much nicer.
>
> Details at https://golang.org/cl/24941
>
> If I broke something, file a bug: https://golang.org/issues/new
>
> The general speed tracking bug is https://golang.org/issue/16367 (don't 
> use for new bugs, only for speed)
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to