mirror of
https://github.com/golang/go
synced 2024-11-18 22:44:48 -07:00
ec14b29651
This CL teaches lsp to report `**T` instead of `**invalid type`, `func (badParam) badResult` instead of `func (invalid type) invalid type`, etc. To do that, we need to detect "invalid type" inside any part of a type. I've added typeIsValid() function for that. To simplify type formating code in resolveInvalid(), formatNode function is added that can also format *ast.StarExpr (of any depth). Since we already used AST printer in the same file, I added formatNode function that is now used in both places. While at it, replaced bytes.Buffer to strings.Builder there. Change-Id: I3bb84c58c417b175cceefb410e238c48425f7cee Reviewed-on: https://go-review.googlesource.com/c/tools/+/210357 Run-TryBot: Iskander Sharipov <quasilyte@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org>
31 lines
2.1 KiB
Go
31 lines
2.1 KiB
Go
// +build go1.11
|
|
|
|
package bad
|
|
|
|
var a unknown //@item(global_a, "a", "unknown", "var"),diag("unknown", "compiler", "undeclared name: unknown")
|
|
|
|
func random() int { //@item(random, "random", "func() int", "func")
|
|
//@complete("", global_a, bob, random, random2, random3, stuff)
|
|
return 0
|
|
}
|
|
|
|
func random2(y int) int { //@item(random2, "random2", "func(y int) int", "func"),item(bad_y_param, "y", "int", "var")
|
|
x := 6 //@item(x, "x", "int", "var"),diag("x", "compiler", "x declared but not used")
|
|
var q blah //@item(q, "q", "blah", "var"),diag("q", "compiler", "q declared but not used"),diag("blah", "compiler", "undeclared name: blah")
|
|
var t **blob //@item(t, "t", "**blob", "var"),diag("t", "compiler", "t declared but not used"),diag("blob", "compiler", "undeclared name: blob")
|
|
//@complete("", q, t, x, bad_y_param, global_a, bob, random, random2, random3, stuff)
|
|
|
|
return y
|
|
}
|
|
|
|
func random3(y ...int) { //@item(random3, "random3", "func(y ...int)", "func"),item(y_variadic_param, "y", "[]int", "var")
|
|
//@complete("", y_variadic_param, global_a, bob, random, random2, random3, stuff)
|
|
|
|
var ch chan (favType1) //@item(ch, "ch", "chan (favType1)", "var"),diag("ch", "compiler", "ch declared but not used"),diag("favType1", "compiler", "undeclared name: favType1")
|
|
var m map[keyType]int //@item(m, "m", "map[keyType]int", "var"),diag("m", "compiler", "m declared but not used"),diag("keyType", "compiler", "undeclared name: keyType")
|
|
var arr []favType2 //@item(arr, "arr", "[]favType2", "var"),diag("arr", "compiler", "arr declared but not used"),diag("favType2", "compiler", "undeclared name: favType2")
|
|
var fn1 func() badResult //@item(fn1, "fn1", "func() badResult", "var"),diag("fn1", "compiler", "fn1 declared but not used"),diag("badResult", "compiler", "undeclared name: badResult")
|
|
var fn2 func(badParam) //@item(fn2, "fn2", "func(badParam)", "var"),diag("fn2", "compiler", "fn2 declared but not used"),diag("badParam", "compiler", "undeclared name: badParam")
|
|
//@complete("", arr, ch, fn1, fn2, m, y_variadic_param, global_a, bob, random, random2, random3, stuff)
|
|
}
|