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  }