go/analysis/passes/sortslice: add missing functions using empty interface
Add missing functions using empty interface in `sort` package.
Change-Id: Ic39bc55897705b08d3739a993b30d4b4e9a77baf
GitHub-Last-Rev: 1cfb9149456ebe6489299564e53666cdafcf49de
GitHub-Pull-Request: golang/tools#318
Reviewed-on: https://go-review.googlesource.com/c/tools/+/319689
Reviewed-by: Tim King <taking@google.com>
Trust: Tim King <taking@google.com>
Trust: Than McIntosh <thanm@google.com>
Run-TryBot: Tim King <taking@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
diff --git a/go/analysis/passes/sortslice/analyzer.go b/go/analysis/passes/sortslice/analyzer.go
index 69a6793..5eb957a 100644
--- a/go/analysis/passes/sortslice/analyzer.go
+++ b/go/analysis/passes/sortslice/analyzer.go
@@ -45,7 +45,8 @@
return
}
- if fn.FullName() != "sort.Slice" {
+ fnName := fn.FullName()
+ if fnName != "sort.Slice" && fnName != "sort.SliceStable" && fnName != "sort.SliceIsSorted" {
return
}
@@ -115,7 +116,7 @@
pass.Report(analysis.Diagnostic{
Pos: call.Pos(),
End: call.End(),
- Message: fmt.Sprintf("sort.Slice's argument must be a slice; is called with %s", typ.String()),
+ Message: fmt.Sprintf("%s's argument must be a slice; is called with %s", fnName, typ.String()),
SuggestedFixes: fixes,
})
})
diff --git a/go/analysis/passes/sortslice/testdata/src/a/a.go b/go/analysis/passes/sortslice/testdata/src/a/a.go
index 3403660..bc6cc16 100644
--- a/go/analysis/passes/sortslice/testdata/src/a/a.go
+++ b/go/analysis/passes/sortslice/testdata/src/a/a.go
@@ -7,6 +7,8 @@
i := 5
sortFn := func(i, j int) bool { return false }
sort.Slice(i, sortFn) // want "sort.Slice's argument must be a slice; is called with int"
+ sort.SliceStable(i, sortFn) // want "sort.SliceStable's argument must be a slice; is called with int"
+ sort.SliceIsSorted(i, sortFn) // want "sort.SliceIsSorted's argument must be a slice; is called with int"
}
// CorrectSort sorts integers. It should not produce a diagnostic.
@@ -14,6 +16,8 @@
s := []int{2, 3, 5, 6}
sortFn := func(i, j int) bool { return s[i] < s[j] }
sort.Slice(s, sortFn)
+ sort.SliceStable(s, sortFn)
+ sort.SliceIsSorted(s, sortFn)
}
// CorrectInterface sorts an interface with a slice
@@ -23,6 +27,8 @@
s = interface{}([]int{2, 1, 0})
sortFn := func(i, j int) bool { return s.([]int)[i] < s.([]int)[j] }
sort.Slice(s, sortFn)
+ sort.SliceStable(s, sortFn)
+ sort.SliceIsSorted(s, sortFn)
}
type slicecompare interface {
@@ -41,6 +47,8 @@
var s slicecompare
s = intslice([]int{2, 1, 0})
sort.Slice(s, s.compare)
+ sort.SliceStable(s, s.compare)
+ sort.SliceIsSorted(s, s.compare)
}
type mySlice []int
@@ -51,4 +59,6 @@
s := mySlice{2, 3, 5, 6}
sortFn := func(i, j int) bool { return s[i] < s[j] }
sort.Slice(s, sortFn)
+ sort.SliceStable(s, sortFn)
+ sort.SliceIsSorted(s, sortFn)
}