
-- flags --
-ignore_extra_diags

-- go.mod --
module unimported.test

go 1.18

-- unimported/export_test.go --
package unimported

var TestExport int //@item(testexport, "TestExport", "var (from \"unimported.test/unimported\")", "var")

-- signature/signature.go --
package signature

func Foo() {}

-- foo/foo.go --
package foo

type StructFoo struct{ F int }

-- baz/baz.go --
package baz

import (
	f "unimported.test/foo"
)

var FooStruct f.StructFoo

-- unimported/unimported.go --
package unimported

func _() {
	http //@complete("p", http, httptest, httptrace, httputil)
	// container/ring is extremely unlikely to be imported by anything, so shouldn't have type information.
	ring.Ring     //@complete(re"R()ing", ringring)
	signature.Foo //@complete("Foo", signaturefoo)

	context.Bac //@complete(" //", contextBackground)
}

// Create markers for unimported std lib packages. Only for use by this test.
/* http */ //@item(http, "http", "\"net/http\"", "package")
/* httptest */ //@item(httptest, "httptest", "\"net/http/httptest\"", "package")
/* httptrace */ //@item(httptrace, "httptrace", "\"net/http/httptrace\"", "package")
/* httputil */ //@item(httputil, "httputil", "\"net/http/httputil\"", "package")

/* ring.Ring */ //@item(ringring, "Ring", "(from \"container/ring\")", "var")

/* signature.Foo */ //@item(signaturefoo, "Foo", "func (from \"unimported.test/signature\")", "func")

/* context.Background */ //@item(contextBackground, "Background", "func (from \"context\")", "func")

// Now that we no longer type-check imported completions,
// we don't expect the context.Background().Err method (see golang/go#58663).
/* context.Background().Err */ //@item(contextBackgroundErr, "Background().Err", "func (from \"context\")", "method")

-- unimported/unimported_cand_type.go --
package unimported

import (
	_ "context"

	"unimported.test/baz"
)

func _() {
	foo.StructFoo{} //@item(litFooStructFoo, "foo.StructFoo{}", "struct{...}", "struct")

	// We get the literal completion for "foo.StructFoo{}" even though we haven't
	// imported "foo" yet.
	baz.FooStruct = f //@snippet(" //", litFooStructFoo, "foo.StructFoo{$0\\}")
}

-- unimported/x_test.go --
package unimported_test

import (
	"testing"
)

func TestSomething(t *testing.T) {
	_ = unimported.TestExport //@complete("TestExport", testexport)
}
