Test of cross-package inlining.
The first case creates a new import,
the second reuses an existing one.

-- go.mod --
module testdata
go 1.12

-- a/a.go --
package a

// This comment does not migrate.

import (
	"fmt"
	"testdata/b"
)

// Nor this one.

func A() {
	fmt.Println()
	b.B1() //@ inline(re"B1", b1result)
	b.B2() //@ inline(re"B2", b2result)
	b.B3() //@ inline(re"B3", b3result)
}

-- b/b.go --
package b

import "testdata/c"
import "testdata/d"
import "fmt"

func B1() { c.C() }
func B2() { fmt.Println() }
func B3() { e.E() } // (note that "testdata/d" points to package e)

-- c/c.go --
package c

func C() {}

-- d/d.go --
package e // <- this package name intentionally mismatches the path

func E() {}

-- b1result --
package a

// This comment does not migrate.

import (
	"fmt"
	"testdata/b"
	"testdata/c"
)

// Nor this one.

func A() {
	fmt.Println()
	c.C()  //@ inline(re"B1", b1result)
	b.B2() //@ inline(re"B2", b2result)
	b.B3() //@ inline(re"B3", b3result)
}

-- b2result --
package a

// This comment does not migrate.

import (
	"fmt"
	"testdata/b"
)

// Nor this one.

func A() {
	fmt.Println()
	b.B1()        //@ inline(re"B1", b1result)
	fmt.Println() //@ inline(re"B2", b2result)
	b.B3()        //@ inline(re"B3", b3result)
}
-- b3result --
package a

// This comment does not migrate.

import (
	"fmt"
	"testdata/b"
	e "testdata/d"
)

// Nor this one.

func A() {
	fmt.Println()
	b.B1() //@ inline(re"B1", b1result)
	b.B2() //@ inline(re"B2", b2result)
	e.E()  //@ inline(re"B3", b3result)
}
