mirror of
https://github.com/golang/go
synced 2024-11-19 02:24:41 -07:00
98e333b8b3
*ast.ArrayTypes are type expressions like "[]foo" or "[2]int". They show up as standalone types (e.g. "var foo []int") and as part of composite literals (e.g. "[]int{}"). I made the following improvements: - Always expect a type name for array types. - Add a "type modifier" for array types so completions can be smart when we know the expected type. For example: var foo []int foo = []i<> we know we want a type name, but we also know the expected type is "[]int". When evaluating type names such as "int" we turn the type into a slice type "[]int" to match against the expected type. - Tweak the AST fixing to add a phantom selector "_" after a naked "[]" so you can complete directly after the right bracket. I split out the type name related type inference bits into a separate typeNameInference struct. It had become confusing and complicated, especially now that you can have an expected type and expect a type name at the same time. Change-Id: I00878532187ee5366ab8d681346532e36fa58e5f Reviewed-on: https://go-review.googlesource.com/c/tools/+/197438 Run-TryBot: Rebecca Stambler <rstambler@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org>
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
// +build go1.11
|
|
|
|
package bar
|
|
|
|
import (
|
|
"golang.org/x/tools/internal/lsp/foo" //@item(foo, "foo", "\"golang.org/x/tools/internal/lsp/foo\"", "package")
|
|
)
|
|
|
|
func helper(i foo.IntFoo) {} //@item(helper, "helper", "func(i foo.IntFoo)", "func")
|
|
|
|
func _() {
|
|
help //@complete("l", helper)
|
|
_ = foo.StructFoo{} //@complete("S", IntFoo, StructFoo, Foo)
|
|
}
|
|
|
|
// Bar is a function.
|
|
func Bar() { //@item(Bar, "Bar", "func()", "func", "Bar is a function.")
|
|
foo.Foo() //@complete("F", Foo, IntFoo, StructFoo)
|
|
var _ foo.IntFoo //@complete("I", Foo, IntFoo, StructFoo)
|
|
foo.() //@complete("(", Foo, IntFoo, StructFoo)
|
|
}
|
|
|
|
func _() {
|
|
var Valentine int //@item(Valentine, "Valentine", "int", "var")
|
|
|
|
_ = foo.StructFoo{
|
|
Valu //@complete(" //", Value)
|
|
}
|
|
_ = foo.StructFoo{
|
|
Va //@complete("a", Value, Valentine)
|
|
}
|
|
_ = foo.StructFoo{
|
|
Value: 5, //@complete("a", Value)
|
|
}
|
|
_ = foo.StructFoo{
|
|
//@complete("", Value, Valentine, foo, Bar, helper)
|
|
}
|
|
_ = foo.StructFoo{
|
|
Value: Valen //@complete("le", Valentine)
|
|
}
|
|
_ = foo.StructFoo{
|
|
Value: //@complete(" //", Valentine, foo, Bar, helper)
|
|
}
|
|
_ = foo.StructFoo{
|
|
Value: //@complete(" ", Valentine, foo, Bar, helper)
|
|
}
|
|
}
|