kythe.io@v0.0.68-0.20240422202219-7225dbc01741/kythe/go/indexer/testdata/structinit.go (about) 1 package structinit 2 3 // - @Inky defines/binding Inky 4 // - Inky.node/kind record 5 // - Inky.subkind struct 6 type Inky struct { 7 //- @Pinky defines/binding Pinky 8 //- Pinky.node/kind variable 9 Pinky string 10 11 //- @Blinky defines/binding Blinky 12 //- Blinky.node/kind variable 13 Blinky []byte 14 15 //- @Sue defines/binding Sue 16 //- Sue.node/kind variable 17 Sue int 18 } 19 20 func msPacMan() { 21 // Verify that named initializers ref/init their fields, and that the names 22 // ref the fields. 23 a := &Inky{ 24 //- @Pinky ref/writes Pinky 25 //- @"\"pink\"" ref/init Pinky 26 Pinky: "pink", 27 //- @Blinky ref/writes Blinky 28 //- @"[]byte{255, 0, 0}" ref/init Blinky 29 Blinky: []byte{255, 0, 0}, 30 //- @Sue ref/writes Sue 31 //- @"0x84077e" ref/init Sue 32 Sue: 0x84077e, 33 } 34 _ = a 35 36 // Verify that unnamed initializers ref/init their fields. 37 b := &Inky{ 38 //- @"a.Pinky" ref/init Pinky 39 a.Pinky, 40 41 //- @"[]byte{255, 0, 0}" ref/init Blinky 42 []byte{255, 0, 0}, 43 44 //- @"0x84077e" ref/init Sue 45 0x84077e, 46 } 47 _ = b 48 } 49 50 func realNames() { 51 //- @ghost defines/binding Ghost 52 type ghost struct { 53 //- @name defines/binding Name 54 //- @nick defines/binding Nick 55 name, nick string 56 } 57 58 // Verify that fields composite literals without explicit type names 59 // correctly point back to the fields of their defining type. 60 61 //- @ghost ref Ghost 62 _ = []ghost{ 63 //- @"\"bashful\"" ref/init Name 64 //- @"\"inky\"" ref/init Nick 65 {"bashful", "inky"}, 66 //- @"\"speedy\"" ref/init Name 67 //- @"\"pinky\"" ref/init Nick 68 {"speedy", "pinky"}, 69 //- @"\"shadow\"" ref/init Name 70 //- @"\"blinky\"" ref/init Nick 71 {"shadow", "blinky"}, 72 73 //- @name ref/writes Name 74 //- @"\"pokey\"" ref/init Name 75 //- @nick ref/writes Nick 76 //- @"\"clyde\"" ref/init Nick 77 {name: "pokey", nick: "clyde"}, 78 79 // Order and missing fields should not cause problems. 80 //- @nick ref/writes Nick 81 //- @"\"sue\"" ref/init Nick 82 //- @name ref/writes Name 83 //- @"\"Susannah\"" ref/init Name 84 {nick: "sue", name: "Susannah"}, 85 86 //- @nick ref/writes Nick 87 //- @"\"kyle\"" ref/init Nick 88 {nick: "kyle"}, 89 } 90 } 91 92 func anonSlice() { 93 type S = struct{ N string } 94 _ = []struct { 95 //- @F defines/binding F 96 F string 97 98 A []S 99 }{ 100 { 101 //- @F ref/writes F 102 F: "", 103 104 //- @N defines/binding N 105 A: []struct{ N string }{ 106 // TODO: tie anon field back to original def 107 //- @N ref/writes N 108 {N: ""}, 109 }, 110 }, 111 } 112 }