blob: 8f604f3cbe4180d405b8de7a1de5f29a402e5a6f [file] [edit]
package a
import (
"bufio"
"bytes"
"hash/maphash"
"os"
"strings"
)
func _(v string) {
var s strings.Builder
a := "a"
b := "b"
s.WriteString(a)
s.WriteString(b) // want "Inefficient string concatenation in call to WriteString"
var p *string
s.WriteString(a)
s.WriteString("b")
s.WriteString(*p) // want "Inefficient string concatenation in call to WriteString"
type S struct{ B bytes.Buffer }
var sb S
sb.B.WriteString(a)
sb.B.WriteString(b) // want "Inefficient string concatenation in call to WriteString"
var bufw bufio.Writer
const k = "k"
bufw.WriteString(a)
bufw.WriteString(getString())
bufw.WriteString("b") // want "Inefficient string concatenation in call to WriteString"
bufw.WriteString(k + "b")
bufw.WriteString(v)
bufw.WriteString("c") // want "Inefficient string concatenation in call to WriteString"
var h maphash.Hash
h.WriteString(a)
h.WriteString(b) // want "Inefficient string concatenation in call to WriteString"
var buf bytes.Buffer
buf.WriteString(a) // nope - nothing to extract
buf.WriteString("a" + "b") // nope - no need to split because the concatenation is resolved without allocations
f(buf.WriteString(a + b)) // nope - inside function call
_, _ = buf.WriteString(a + b) // nope - inside assignment
getBuf().WriteString(a + b) // nope - function call in receiver
var bufs []bytes.Buffer
bufs[getIndex()].WriteString(a + b) // nope - index expression in receiver
var f *os.File
f.WriteString(a + b) // nope - os.File is not an allowed writer for this analyzer
}
func f(i int, err error) {}
func getIndex() int {
return 0
}
func getString() string {
return "string"
}
func getBuf() *bytes.Buffer { return &bytes.Buffer{} }