mirror of
https://github.com/golang/go
synced 2024-11-19 04:04:47 -07:00
f66ef90017
Completion often fails when the completion prefix happens to be a keyword. We previously tried to fix this with AST surgery, but often the accidental keyword is not apparent looking at the AST. For example: chan<> foo() parses as CallExpr{Fun: ChanType{Value: Ident{"foo"}}} with very few hints that something is wrong, and: default foo() is completely omitted from the AST. Rather than look in the AST, we now instead manually look for a keyword token that contains the completion position. If we find one, we treat that as our surrounding identifier. Updates golang/go#34332. Change-Id: I68ed0dd905848c0eae61f39ecb8b73adb1e72746 Reviewed-on: https://go-review.googlesource.com/c/tools/+/216961 Run-TryBot: Muir Manders <muir@mnd.rs> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org>
32 lines
728 B
Go
32 lines
728 B
Go
package keywords
|
|
|
|
// non-matching candidate - shouldn't show up as completion
|
|
var apple = "apple"
|
|
|
|
func _() {
|
|
foo.bar() // insert some extra statements to excercise our AST surgery
|
|
variance := 123 //@item(kwVariance, "variance", "int", "var")
|
|
foo.bar()
|
|
println(var) //@complete(")", kwVariance)
|
|
}
|
|
|
|
func _() {
|
|
foo.bar()
|
|
var s struct { variance int } //@item(kwVarianceField, "variance", "int", "field")
|
|
foo.bar()
|
|
s.var //@complete(" //", kwVarianceField)
|
|
}
|
|
|
|
func _() {
|
|
channel := 123 //@item(kwChannel, "channel", "int", "var")
|
|
chan //@complete(" //", kwChannel)
|
|
foo.bar()
|
|
}
|
|
|
|
func _() {
|
|
foo.bar()
|
|
var typeName string //@item(kwTypeName, "typeName", "string", "var")
|
|
foo.bar()
|
|
type //@complete(" //", kwTypeName)
|
|
}
|