From c1708af849d4de3957aab8b90f021fe243408cee Mon Sep 17 00:00:00 2001 From: Eng Zer Jun Date: Sun, 5 Nov 2023 17:28:10 +0800 Subject: [PATCH] Avoid allocations with `(*regexp.Regexp).MatchString` We should use `(*regexp.Regexp).MatchString` instead of `(*regexp.Regexp).Match([]byte(...))` when matching string to avoid unnecessary `[]byte` conversions and reduce allocations. Example benchmark: var excludeRegex = regexp.MustCompile("vendor") func BenchmarkMatch(b *testing.B) { for i := 0; i < b.N; i++ { if match := excludeRegex.Match([]byte("vendor/pkg/main.go")); !match { b.Fail() } } } func BenchmarkMatchString(b *testing.B) { for i := 0; i < b.N; i++ { if match := excludeRegex.MatchString("vendor/pkg/main.go"); !match { b.Fail() } } } goos: linux goarch: amd64 pkg: github.com/boyter/scc/v3/processor cpu: AMD Ryzen 7 PRO 4750U with Radeon Graphics BenchmarkMatch-16 4123592 274.9 ns/op 24 B/op 1 allocs/op BenchmarkMatchString-16 7006401 145.1 ns/op 0 B/op 0 allocs/op PASS ok github.com/boyter/scc/v3/processor 2.637s Signed-off-by: Eng Zer Jun --- processor/file.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/processor/file.go b/processor/file.go index 29ca2e3dd..bf7c4e235 100644 --- a/processor/file.go +++ b/processor/file.go @@ -158,7 +158,7 @@ DIRENTS: } for _, exclude := range dw.excludes { - if exclude.Match([]byte(name)) || exclude.Match([]byte(path)) { + if exclude.MatchString(name) || exclude.MatchString(path) { if Verbose { printWarn("skipping file/directory due to match exclude: " + name) }