| This test exercises the textDocument/typeDefinition action. |
| |
| -- typedef.go -- |
| package typedef |
| |
| type Struct struct { //@loc(Struct, "Struct"), |
| Field string |
| } |
| |
| type Int int //@loc(Int, "Int") |
| |
| func _() { |
| var ( |
| value Struct |
| point *Struct |
| ) |
| _ = value //@typedef("value", Struct) |
| _ = point //@typedef("point", Struct) |
| |
| var ( |
| array [3]Struct |
| slice []Struct |
| ch chan Struct |
| complex [3]chan *[5][]Int |
| ) |
| _ = array //@typedef("array", Struct) |
| _ = slice //@typedef("slice", Struct) |
| _ = ch //@typedef("ch", Struct) |
| _ = complex //@typedef("complex", Int) |
| |
| var s struct { |
| x struct { |
| xx struct { |
| field1 []Struct |
| field2 []Int |
| } |
| } |
| } |
| _ = s.x.xx.field1 //@typedef("field1", Struct) |
| _ = s.x.xx.field2 //@typedef("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, 0, 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() //@typedef("F1", Int) |
| F2() //@typedef("F2", Int) |
| F3() //@typedef("F3", Struct) |
| F4() //@typedef("F4", Int) |
| F5() //@typedef("F5", Struct) |
| F6() //@typedef("F6", Struct) |
| |
| f := func() Int { return 0 } |
| f() //@typedef("f", Int) |
| } |
| |
| // https://github.com/golang/go/issues/38589#issuecomment-620350922 |
| func _() { |
| type myFunc func(int) Int //@loc(myFunc, "myFunc") |
| |
| var foo myFunc |
| _ = foo() //@typedef("foo", myFunc), diag(")", re"not enough arguments") |
| } |