.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / go / analysis / passes / unusedwrite / testdata / src / a / unusedwrite.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/go/analysis/passes/unusedwrite/testdata/src/a/unusedwrite.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/go/analysis/passes/unusedwrite/testdata/src/a/unusedwrite.go
new file mode 100644 (file)
index 0000000..7e43ee4
--- /dev/null
@@ -0,0 +1,75 @@
+package a
+
+type T1 struct{ x int }
+
+type T2 struct {
+       x int
+       y int
+}
+
+type T3 struct{ y *T1 }
+
+func BadWrites() {
+       // Test struct field writes.
+       var s1 T1
+       s1.x = 10 // want "unused write to field x"
+
+       // Test array writes.
+       var s2 [10]int
+       s2[1] = 10 // want "unused write to array index 1:int"
+
+       // Test range variables of struct type.
+       s3 := []T1{T1{x: 100}}
+       for i, v := range s3 {
+               v.x = i // want "unused write to field x"
+       }
+
+       // Test the case where a different field is read after the write.
+       s4 := []T2{T2{x: 1, y: 2}}
+       for i, v := range s4 {
+               v.x = i // want "unused write to field x"
+               _ = v.y
+       }
+}
+
+func (t T1) BadValueReceiverWrite(v T2) {
+       t.x = 10 // want "unused write to field x"
+       v.y = 20 // want "unused write to field y"
+}
+
+func GoodWrites(m map[int]int) {
+       // A map is copied by reference such that a write will affect the original map.
+       m[1] = 10
+
+       // Test struct field writes.
+       var s1 T1
+       s1.x = 10
+       print(s1.x)
+
+       // Test array writes.
+       var s2 [10]int
+       s2[1] = 10
+       // Current the checker doesn't distinguish index 1 and index 2.
+       _ = s2[2]
+
+       // Test range variables of struct type.
+       s3 := []T1{T1{x: 100}}
+       for i, v := range s3 { // v is a copy
+               v.x = i
+               _ = v.x // still a usage
+       }
+
+       // Test an object with multiple fields.
+       o := &T2{x: 10, y: 20}
+       print(o)
+
+       // Test an object of embedded struct/pointer type.
+       t1 := &T1{x: 10}
+       t2 := &T3{y: t1}
+       print(t2)
+}
+
+func (t *T1) GoodPointerReceiverWrite(v *T2) {
+       t.x = 10
+       v.y = 20
+}