mirror of
https://github.com/golang/go
synced 2024-11-19 03:34:41 -07:00
920acffc3e
Currently array and slice literals don't work very well for completion. When go/parser is not expecting a type, it often turns array types (e.g. "[]int") into *ast.BadExpr, which messes up completion because we can't figure out the prefix from *ast.BadExpr, and *ast.BadExprs don't get type checked. This change addresses the first problem of not being able to figure out the prefix. If we see an *ast.BadExpr, we now blindly try to reparse it as a composite literal by adding on "{}". If we end up with an *ast.CompositeLit with an *ast.ArrayType "Type", we swap the *ast.BadExpr for the *ast.ArrayType. This approach is dumb but simple, and fixes lexical completions in array types. Change-Id: Ifa42e646bcbf2a30170d73e6dd11982384d40b43 Reviewed-on: https://go-review.googlesource.com/c/tools/+/197437 Run-TryBot: Rebecca Stambler <rstambler@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org>
31 lines
1001 B
Go
31 lines
1001 B
Go
package foo //@mark(PackageFoo, "foo"),item(PackageFoo, "foo", "\"golang.org/x/tools/internal/lsp/foo\"", "package")
|
|
|
|
type StructFoo struct { //@item(StructFoo, "StructFoo", "struct{...}", "struct")
|
|
Value int //@item(Value, "Value", "int", "field")
|
|
}
|
|
|
|
// Pre-set this marker, as we don't have a "source" for it in this package.
|
|
/* Error() */ //@item(Error, "Error", "func() string", "method")
|
|
|
|
func Foo() { //@item(Foo, "Foo", "func()", "func")
|
|
var err error
|
|
err.Error() //@complete("E", Error)
|
|
}
|
|
|
|
func _() {
|
|
var sFoo StructFoo //@mark(sFoo1, "sFoo"),complete("t", StructFoo)
|
|
if x := sFoo; x.Value == 1 { //@mark(sFoo2, "sFoo"),complete("V", Value),typdef("sFoo", StructFoo),refs("sFo", sFoo1, sFoo2)
|
|
return
|
|
}
|
|
}
|
|
|
|
func _() {
|
|
shadowed := 123
|
|
{
|
|
shadowed := "hi" //@item(shadowed, "shadowed", "string", "var"),refs("shadowed", shadowed)
|
|
sha //@complete("a", shadowed)
|
|
}
|
|
}
|
|
|
|
type IntFoo int //@item(IntFoo, "IntFoo", "int", "type"),complete("", Foo, IntFoo, StructFoo)
|