
-- flags --
-ignore_extra_diags

-- settings.json --
{
	"importsSource": "gopls"
}

-- 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", "type (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)
}
