package unimported

func _() {
	http //@unimported("p", nethttp)
	// container/ring is extremely unlikely to be imported by anything, so shouldn't have type information.
	ring.Ring     //@unimported("Ring", ringring)
	signature.Foo //@unimported("Foo", signaturefoo)

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

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

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

/* signature.Foo */ //@item(signaturefoo, "Foo", "func (from \"golang.org/lsptests/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")
