--- /dev/null
+package pkg
+
+import (
+ "bytes"
+ "strings"
+)
+
+func foo(s string) int { return 0 }
+func gen() string {
+ return ""
+}
+
+func fn() {
+ const s1 = "a string value"
+ var s2 = "a string value"
+ const n = 14
+
+ var id1 = "a string value"
+ var id2 string
+ if strings.HasPrefix(id1, s1) { // want `should replace.*with.*strings\.TrimPrefix`
+ id1 = id1[len(s1):]
+ }
+
+ if strings.HasPrefix(id1, s1) { // want `should replace.*with.*strings\.TrimPrefix`
+ id1 = strings.TrimPrefix(id1, s1)
+ }
+
+ if strings.HasPrefix(id1, s1) {
+ id1 = strings.TrimPrefix(id1, s2)
+ }
+
+ if strings.Contains(id1, s1) { // want `should replace.*with.*strings\.Replace`
+ id1 = strings.Replace(id1, s1, "something", 123)
+ }
+
+ if strings.HasSuffix(id1, s2) { // want `should replace.*with.*strings\.TrimSuffix`
+ id1 = id1[:len(id1)-len(s2)]
+ }
+
+ var x, y []string
+ var i int
+ if strings.HasPrefix(x[i], s1) { // want `should replace.*with.*strings\.TrimPrefix`
+ x[i] = x[i][len(s1):]
+ }
+
+ if strings.HasPrefix(x[i], y[i]) { // want `should replace.*with.*strings\.TrimPrefix`
+ x[i] = x[i][len(y[i]):]
+ }
+
+ var t struct{ x string }
+ if strings.HasPrefix(t.x, s1) { // want `should replace.*with.*strings\.TrimPrefix`
+ t.x = t.x[len(s1):]
+ }
+
+ if strings.HasPrefix(id1, "test") { // want `should replace.*with.*strings\.TrimPrefix`
+ id1 = id1[len("test"):]
+ }
+
+ if strings.HasPrefix(id1, "test") { // want `should replace.*with.*strings\.TrimPrefix`
+ id1 = id1[4:]
+ }
+
+ if strings.HasPrefix(id1, s1) { // want `should replace.*with.*strings\.TrimPrefix`
+ id1 = id1[14:]
+ }
+
+ if strings.HasPrefix(id1, s1) { // want `should replace.*with.*strings\.TrimPrefix`
+ id1 = id1[n:]
+ }
+
+ var b1, b2 []byte
+ if bytes.HasPrefix(b1, b2) { // want `should replace.*with.*bytes\.TrimPrefix`
+ b1 = b1[len(b2):]
+ }
+
+ id3 := s2
+ if strings.HasPrefix(id1, id3) { // want `should replace.*with.*strings\.TrimPrefix`
+ id1 = id1[len(id3):]
+ }
+
+ if strings.HasSuffix(id1, s2) {
+ id1 = id1[:len(id1)+len(s2)] // wrong operator
+ }
+
+ if strings.HasSuffix(id1, s2) {
+ id1 = id1[:len(s2)-len(id1)] // wrong math
+ }
+
+ if strings.HasSuffix(id1, s2) {
+ id1 = id1[:len(id1)-len(id1)] // wrong string length
+ }
+
+ if strings.HasPrefix(id1, gen()) {
+ id1 = id1[len(gen()):] // dynamic id3
+ }
+
+ if strings.HasPrefix(id1, s1) {
+ id1 = id1[foo(s1):] // wrong function
+ }
+
+ if strings.HasPrefix(id1, s1) {
+ id1 = id1[len(id1):] // len() on wrong value
+ }
+
+ if strings.HasPrefix(id1, "test") {
+ id1 = id1[5:] // wrong length
+ }
+
+ if strings.HasPrefix(id1, s1) {
+ id1 = id1[len(s1)+1:] // wrong length due to math
+ }
+
+ if strings.HasPrefix(id1, s1) {
+ id2 = id1[len(s1):] // assigning to the wrong variable
+ }
+
+ if strings.HasPrefix(id1, s1) {
+ id1 = id1[len(s1):15] // has a max
+ }
+
+ if strings.HasPrefix(id1, s1) {
+ id1 = id2[len(s1):] // assigning the wrong value
+ }
+
+ if strings.HasPrefix(id1, s1) {
+ id1 = id1[len(s1):]
+ id1 += "" // doing more work in the if
+ }
+
+ if strings.HasPrefix(id1, s1) {
+ id1 = id1[len(s1):]
+ } else {
+ id1 = "game over" // else branch
+ }
+
+ if strings.HasPrefix(id1, s1) {
+ // the conditional is guarding additional code
+ id1 = id1[len(s1):]
+ println(id1)
+ }
+}