diff options
Diffstat (limited to 'gopls/internal/lsp/testdata/typdef/typdef.go')
-rw-r--r-- | gopls/internal/lsp/testdata/typdef/typdef.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/gopls/internal/lsp/testdata/typdef/typdef.go b/gopls/internal/lsp/testdata/typdef/typdef.go new file mode 100644 index 000000000..bd2ea4b00 --- /dev/null +++ b/gopls/internal/lsp/testdata/typdef/typdef.go @@ -0,0 +1,65 @@ +package typdef + +type Struct struct { //@item(Struct, "Struct", "struct{...}", "struct") + Field string +} + +type Int int //@item(Int, "Int", "int", "type") + +func _() { + var ( + value Struct + point *Struct + ) + _ = value //@typdef("value", Struct) + _ = point //@typdef("point", Struct) + + var ( + array [3]Struct + slice []Struct + ch chan Struct + complex [3]chan *[5][]Int + ) + _ = array //@typdef("array", Struct) + _ = slice //@typdef("slice", Struct) + _ = ch //@typdef("ch", Struct) + _ = complex //@typdef("complex", Int) + + var s struct { + x struct { + xx struct { + field1 []Struct + field2 []Int + } + } + } + s.x.xx.field1 //@typdef("field1", Struct) + s.x.xx.field2 //@typdef("field2", Int) +} + +func F1() Int { return 0 } +func F2() (Int, float64) { return 0, 0 } +func F3() (Struct, int, bool, error) { return Struct{}, 0, false, nil } +func F4() (**int, Int, bool, *error) { return nil, Struct{}, false, nil } +func F5() (int, float64, error, Struct) { return 0, 0, nil, Struct{} } +func F6() (int, float64, ***Struct, error) { return 0, 0, nil, nil } + +func _() { + F1() //@typdef("F1", Int) + F2() //@typdef("F2", Int) + F3() //@typdef("F3", Struct) + F4() //@typdef("F4", Int) + F5() //@typdef("F5", Struct) + F6() //@typdef("F6", Struct) + + f := func() Int { return 0 } + f() //@typdef("f", Int) +} + +// https://github.com/golang/go/issues/38589#issuecomment-620350922 +func _() { + type myFunc func(int) Int //@item(myFunc, "myFunc", "func", "type") + + var foo myFunc + bar := foo() //@typdef("foo", myFunc) +} |