summaryrefslogtreecommitdiffstats
path: root/modules/util
diff options
context:
space:
mode:
authorCaiCandong <50507092+CaiCandong@users.noreply.github.com>2023-09-07 17:37:47 +0800
committerGitHub <noreply@github.com>2023-09-07 09:37:47 +0000
commita78c2eae243077c1fed5f7b056c64072d3c63ac8 (patch)
tree53b63a8dafde117e76f5fede968e384ae55779b1 /modules/util
parente97e883ad50774f249c8c694598c25a17227299b (diff)
downloadgitea-a78c2eae243077c1fed5f7b056c64072d3c63ac8.tar.gz
gitea-a78c2eae243077c1fed5f7b056c64072d3c63ac8.zip
Replace `util.SliceXxx` with `slices.Xxx` (#26958)
Diffstat (limited to 'modules/util')
-rw-r--r--modules/util/slice.go57
-rw-r--r--modules/util/slice_test.go33
2 files changed, 7 insertions, 83 deletions
diff --git a/modules/util/slice.go b/modules/util/slice.go
index 74356f5496..6d63ab4a77 100644
--- a/modules/util/slice.go
+++ b/modules/util/slice.go
@@ -1,37 +1,21 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
-// Most of the functions in this file can have better implementations with "golang.org/x/exp/slices".
-// However, "golang.org/x/exp" is experimental and unreliable, we shouldn't use it.
-// So lets waiting for the "slices" has be promoted to the main repository one day.
-
package util
-import "strings"
-
-// SliceContains returns true if the target exists in the slice.
-func SliceContains[T comparable](slice []T, target T) bool {
- return SliceContainsFunc(slice, func(t T) bool { return t == target })
-}
-
-// SliceContainsFunc returns true if any element in the slice satisfies the targetFunc.
-func SliceContainsFunc[T any](slice []T, targetFunc func(T) bool) bool {
- for _, v := range slice {
- if targetFunc(v) {
- return true
- }
- }
- return false
-}
+import (
+ "slices"
+ "strings"
+)
// SliceContainsString sequential searches if string exists in slice.
func SliceContainsString(slice []string, target string, insensitive ...bool) bool {
if len(insensitive) != 0 && insensitive[0] {
target = strings.ToLower(target)
- return SliceContainsFunc(slice, func(t string) bool { return strings.ToLower(t) == target })
+ return slices.ContainsFunc(slice, func(t string) bool { return strings.ToLower(t) == target })
}
- return SliceContains(slice, target)
+ return slices.Contains(slice, target)
}
// SliceSortedEqual returns true if the two slices will be equal when they get sorted.
@@ -57,34 +41,7 @@ func SliceSortedEqual[T comparable](s1, s2 []T) bool {
return true
}
-// SliceEqual returns true if the two slices are equal.
-func SliceEqual[T comparable](s1, s2 []T) bool {
- if len(s1) != len(s2) {
- return false
- }
-
- for i, v := range s1 {
- if s2[i] != v {
- return false
- }
- }
- return true
-}
-
// SliceRemoveAll removes all the target elements from the slice.
func SliceRemoveAll[T comparable](slice []T, target T) []T {
- return SliceRemoveAllFunc(slice, func(t T) bool { return t == target })
-}
-
-// SliceRemoveAllFunc removes all elements which satisfy the targetFunc from the slice.
-func SliceRemoveAllFunc[T comparable](slice []T, targetFunc func(T) bool) []T {
- idx := 0
- for _, v := range slice {
- if targetFunc(v) {
- continue
- }
- slice[idx] = v
- idx++
- }
- return slice[:idx]
+ return slices.DeleteFunc(slice, func(t T) bool { return t == target })
}
diff --git a/modules/util/slice_test.go b/modules/util/slice_test.go
index 373c1a3b7b..a910f5edfe 100644
--- a/modules/util/slice_test.go
+++ b/modules/util/slice_test.go
@@ -9,20 +9,6 @@ import (
"github.com/stretchr/testify/assert"
)
-func TestSliceContains(t *testing.T) {
- assert.True(t, SliceContains([]int{2, 0, 2, 3}, 2))
- assert.True(t, SliceContains([]int{2, 0, 2, 3}, 0))
- assert.True(t, SliceContains([]int{2, 0, 2, 3}, 3))
-
- assert.True(t, SliceContains([]string{"2", "0", "2", "3"}, "0"))
- assert.True(t, SliceContains([]float64{2, 0, 2, 3}, 0))
- assert.True(t, SliceContains([]bool{false, true, false}, true))
-
- assert.False(t, SliceContains([]int{2, 0, 2, 3}, 4))
- assert.False(t, SliceContains([]int{}, 4))
- assert.False(t, SliceContains(nil, 4))
-}
-
func TestSliceContainsString(t *testing.T) {
assert.True(t, SliceContainsString([]string{"c", "b", "a", "b"}, "a"))
assert.True(t, SliceContainsString([]string{"c", "b", "a", "b"}, "b"))
@@ -54,25 +40,6 @@ func TestSliceSortedEqual(t *testing.T) {
assert.False(t, SliceSortedEqual([]int{2, 0, 0, 3}, []int{2, 0, 2, 3}))
}
-func TestSliceEqual(t *testing.T) {
- assert.True(t, SliceEqual([]int{2, 0, 2, 3}, []int{2, 0, 2, 3}))
- assert.True(t, SliceEqual([]int{}, []int{}))
- assert.True(t, SliceEqual([]int(nil), nil))
- assert.True(t, SliceEqual([]int(nil), []int{}))
- assert.True(t, SliceEqual([]int{}, []int{}))
-
- assert.True(t, SliceEqual([]string{"2", "0", "2", "3"}, []string{"2", "0", "2", "3"}))
- assert.True(t, SliceEqual([]float64{2, 0, 2, 3}, []float64{2, 0, 2, 3}))
- assert.True(t, SliceEqual([]bool{false, true, false}, []bool{false, true, false}))
-
- assert.False(t, SliceEqual([]int{3, 0, 2, 2}, []int{2, 0, 2, 3}))
- assert.False(t, SliceEqual([]int{2, 0, 2}, []int{2, 0, 2, 3}))
- assert.False(t, SliceEqual([]int{}, []int{2, 0, 2, 3}))
- assert.False(t, SliceEqual(nil, []int{2, 0, 2, 3}))
- assert.False(t, SliceEqual([]int{2, 0, 2, 4}, []int{2, 0, 2, 3}))
- assert.False(t, SliceEqual([]int{2, 0, 0, 3}, []int{2, 0, 2, 3}))
-}
-
func TestSliceRemoveAll(t *testing.T) {
assert.ElementsMatch(t, []int{2, 2, 3}, SliceRemoveAll([]int{2, 0, 2, 3}, 0))
assert.ElementsMatch(t, []int{0, 3}, SliceRemoveAll([]int{2, 0, 2, 3}, 2))