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 }