This test exercises some renaming conflict scenarios
and ensures that the errors are informative.

-- go.mod --
module example.com
go 1.12

-- super/p.go --
package super

var x int

func f(y int) {
	println(x)
	println(y) //@renameerr("y", "x", errSuperBlockConflict)
}

-- @errSuperBlockConflict --
super/p.go:5:8: renaming this var "y" to "x"
super/p.go:6:10:	would shadow this reference
super/p.go:3:5:	to the var declared here
-- sub/p.go --
package sub

var a int

func f2(b int) {
	println(a) //@renameerr("a", "b", errSubBlockConflict)
	println(b)
}

-- @errSubBlockConflict --
sub/p.go:3:5: renaming this var "a" to "b"
sub/p.go:6:10:	would cause this reference to become shadowed
sub/p.go:5:9:	by this intervening var definition
-- pkgname/p.go --
package pkgname

import e1 "errors" //@renameerr("e1", "errors", errImportConflict)
import "errors"

var _ = errors.New
var _ = e1.New

-- @errImportConflict --
pkgname/p.go:3:8: renaming this imported package name "e1" to "errors"
pkgname/p.go:4:8:	conflicts with imported package name in same block
-- pkgname2/p1.go --
package pkgname2
var x int

-- pkgname2/p2.go --
package pkgname2
import "errors" //@renameerr("errors", "x", errImportConflict2)
var _ = errors.New

-- @errImportConflict2 --
pkgname2/p2.go:2:8: renaming this imported package name "errors" to "x" would conflict
pkgname2/p1.go:2:5:	with this package member var
