honnef.co/go/tools@v0.4.7/staticcheck/testdata/src/example.com/CheckIneffectiveFieldAssignments/CheckIneffectiveFieldAssignments.go (about)

     1  package pkg
     2  
     3  type T1 struct {
     4  	T2 // make sure embedded fields don't throw off our numbering
     5  	x  int
     6  	y  int
     7  	z  T2
     8  }
     9  
    10  type T2 struct {
    11  	x int
    12  	y int
    13  	z int
    14  }
    15  
    16  type T3 struct {
    17  	T2
    18  }
    19  
    20  func (v T1) fn1() {
    21  	v.x = 1
    22  	v.y = 1 //@ diag(`ineffective assignment to field T1.y`)
    23  	println(v.x)
    24  }
    25  
    26  func (v T1) fn2() {
    27  	println(v.x)
    28  	v.x = 1 //@ diag(`ineffective assignment to field T1.x`)
    29  }
    30  
    31  func (v T1) fn3() {
    32  	if true {
    33  		println(v.x)
    34  	}
    35  	v.x = 1 //@ diag(`ineffective assignment to field T1.x`)
    36  }
    37  
    38  func (v T1) fn10() {
    39  	v.x = 1
    40  	if true {
    41  		println(v.x)
    42  	}
    43  }
    44  
    45  func (v T1) fn4() {
    46  	v.x = 1
    47  	v.dump()
    48  }
    49  
    50  func (v T1) fn5() {
    51  	v.dump()
    52  	// This is currently broken because of our more aggressive lifting
    53  	v.x = 1
    54  }
    55  
    56  func (v T1) fn6() {
    57  	v.x = 1
    58  	v.y = 1
    59  	println(v.y)
    60  	println(v.x)
    61  }
    62  
    63  func (v T1) fn7() {
    64  	// not currently being flagged because it's a nested field
    65  	v.z.x = 1
    66  }
    67  
    68  func (v T1) fn8() {
    69  	v.x++ //@ diag(`ineffective assignment to field T1.x`)
    70  }
    71  
    72  func (v T1) fn9() {
    73  	v.x++
    74  	println(v.x)
    75  }
    76  
    77  func (v T1) fn11() {
    78  	v = T1{x: 42, y: 23} // not currently being flagged
    79  }
    80  
    81  func (v T1) fn12() {
    82  	v = T1{x: 42, y: 23} // not currently being flagged
    83  	println(v.y)
    84  }
    85  
    86  func (v T1) fn13() {
    87  	v = T1{x: 42}
    88  	v.y = 23 // not currently being flagged, we gave up when we saw the assignment to v
    89  	println(v.x)
    90  }
    91  
    92  func (v T1) fn14() {
    93  	v = T1{x: 42} // not currently being flagged
    94  	v.y = 23
    95  	println(v.y)
    96  }
    97  
    98  func (v T1) fn15() {
    99  	// not currently being flagged
   100  	v = T1{x: 42}
   101  }
   102  
   103  func (v T1) dump() {}
   104  
   105  func (v T3) fn1() {
   106  	// not currently being flagged because it's a nested field (via
   107  	// embedding)
   108  	v.x = 1
   109  }