Skip to content

Commit ca2b8f6

Browse files
gammazerolidel
authored andcommitted
refactor: use slices.Sort where appropriate (#10858)
(cherry picked from commit b95845e)
1 parent 120ea0d commit ca2b8f6

File tree

10 files changed

+67
-82
lines changed

10 files changed

+67
-82
lines changed

core/commands/active.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package commands
33
import (
44
"fmt"
55
"io"
6-
"sort"
6+
"slices"
77
"text/tabwriter"
88
"time"
99

@@ -60,7 +60,7 @@ Lists running and recently run commands.
6060
for k := range req.Options {
6161
keys = append(keys, k)
6262
}
63-
sort.Strings(keys)
63+
slices.Sort(keys)
6464

6565
for _, k := range keys {
6666
fmt.Fprintf(tw, "%s=%v,", k, req.Options[k])

core/commands/bootstrap.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import (
44
"errors"
55
"fmt"
66
"io"
7-
"sort"
7+
"slices"
8+
"strings"
89

10+
cmds "github.com/ipfs/go-ipfs-cmds"
11+
config "github.com/ipfs/kubo/config"
912
cmdenv "github.com/ipfs/kubo/core/commands/cmdenv"
1013
repo "github.com/ipfs/kubo/repo"
1114
fsrepo "github.com/ipfs/kubo/repo/fsrepo"
12-
13-
cmds "github.com/ipfs/go-ipfs-cmds"
14-
config "github.com/ipfs/kubo/config"
1515
peer "github.com/libp2p/go-libp2p/core/peer"
1616
ma "github.com/multiformats/go-multiaddr"
1717
)
@@ -284,7 +284,9 @@ var bootstrapListCmd = &cmds.Command{
284284
}
285285

286286
func bootstrapWritePeers(w io.Writer, prefix string, peers []string) error {
287-
sort.Stable(sort.StringSlice(peers))
287+
slices.SortStableFunc(peers, func(a, b string) int {
288+
return strings.Compare(a, b)
289+
})
288290
for _, peer := range peers {
289291
_, err := w.Write([]byte(prefix + peer + "\n"))
290292
if err != nil {

core/commands/cid.go

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package commands
22

33
import (
4+
"cmp"
45
"errors"
56
"fmt"
67
"io"
7-
"sort"
8+
"slices"
89
"strings"
910
"unicode"
1011

@@ -287,7 +288,7 @@ var basesCmd = &cmds.Command{
287288
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, val []CodeAndName) error {
288289
prefixes, _ := req.Options[prefixOptionName].(bool)
289290
numeric, _ := req.Options[numericOptionName].(bool)
290-
sort.Sort(multibaseSorter{val})
291+
multibaseSorter{val}.Sort()
291292
for _, v := range val {
292293
code := v.Code
293294
if code < 32 || code >= 127 {
@@ -357,7 +358,7 @@ var codecsCmd = &cmds.Command{
357358
Encoders: cmds.EncoderMap{
358359
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, val []CodeAndName) error {
359360
numeric, _ := req.Options[codecsNumericOptionName].(bool)
360-
sort.Sort(codeAndNameSorter{val})
361+
codeAndNameSorter{val}.Sort()
361362
for _, v := range val {
362363
if numeric {
363364
fmt.Fprintf(w, "%5d %s\n", v.Code, v.Name)
@@ -398,23 +399,22 @@ type multibaseSorter struct {
398399
data []CodeAndName
399400
}
400401

401-
func (s multibaseSorter) Len() int { return len(s.data) }
402-
func (s multibaseSorter) Swap(i, j int) { s.data[i], s.data[j] = s.data[j], s.data[i] }
403-
404-
func (s multibaseSorter) Less(i, j int) bool {
405-
a := unicode.ToLower(rune(s.data[i].Code))
406-
b := unicode.ToLower(rune(s.data[j].Code))
407-
if a != b {
408-
return a < b
409-
}
410-
// lowecase letters should come before uppercase
411-
return s.data[i].Code > s.data[j].Code
402+
func (s multibaseSorter) Sort() {
403+
slices.SortFunc(s.data, func(a, b CodeAndName) int {
404+
if n := cmp.Compare(unicode.ToLower(rune(a.Code)), unicode.ToLower(rune(b.Code))); n != 0 {
405+
return n
406+
}
407+
// lowecase letters should come before uppercase
408+
return cmp.Compare(b.Code, a.Code)
409+
})
412410
}
413411

414412
type codeAndNameSorter struct {
415413
data []CodeAndName
416414
}
417415

418-
func (s codeAndNameSorter) Len() int { return len(s.data) }
419-
func (s codeAndNameSorter) Swap(i, j int) { s.data[i], s.data[j] = s.data[j], s.data[i] }
420-
func (s codeAndNameSorter) Less(i, j int) bool { return s.data[i].Code < s.data[j].Code }
416+
func (s codeAndNameSorter) Sort() {
417+
slices.SortFunc(s.data, func(a, b CodeAndName) int {
418+
return cmp.Compare(a.Code, b.Code)
419+
})
420+
}

core/commands/commands.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"fmt"
1111
"io"
1212
"os"
13-
"sort"
13+
"slices"
1414
"strings"
1515

1616
cmds "github.com/ipfs/go-ipfs-cmds"
@@ -131,7 +131,7 @@ func cmdPathStrings(cmd *Command, showOptions bool) []string {
131131
}
132132

133133
recurse("", cmd)
134-
sort.Strings(cmds)
134+
slices.Sort(cmds)
135135
return cmds
136136
}
137137

core/commands/completion.go

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package commands
22

33
import (
44
"io"
5-
"sort"
5+
"slices"
6+
"strings"
67
"text/template"
78

89
cmds "github.com/ipfs/go-ipfs-cmds"
@@ -39,8 +40,8 @@ func commandToCompletions(name string, fullName string, cmd *cmds.Command) *comp
3940
parsed.Subcommands = append(parsed.Subcommands,
4041
commandToCompletions(name, fullName+" "+name, subCmd))
4142
}
42-
sort.Slice(parsed.Subcommands, func(i, j int) bool {
43-
return parsed.Subcommands[i].Name < parsed.Subcommands[j].Name
43+
slices.SortFunc(parsed.Subcommands, func(a, b *completionCommand) int {
44+
return strings.Compare(a.Name, b.Name)
4445
})
4546

4647
for _, opt := range cmd.Options {
@@ -68,18 +69,10 @@ func commandToCompletions(name string, fullName string, cmd *cmds.Command) *comp
6869
parsed.Options = append(parsed.Options, flag)
6970
}
7071
}
71-
sort.Slice(parsed.LongFlags, func(i, j int) bool {
72-
return parsed.LongFlags[i] < parsed.LongFlags[j]
73-
})
74-
sort.Slice(parsed.ShortFlags, func(i, j int) bool {
75-
return parsed.ShortFlags[i] < parsed.ShortFlags[j]
76-
})
77-
sort.Slice(parsed.LongOptions, func(i, j int) bool {
78-
return parsed.LongOptions[i] < parsed.LongOptions[j]
79-
})
80-
sort.Slice(parsed.ShortOptions, func(i, j int) bool {
81-
return parsed.ShortOptions[i] < parsed.ShortOptions[j]
82-
})
72+
slices.Sort(parsed.LongFlags)
73+
slices.Sort(parsed.ShortFlags)
74+
slices.Sort(parsed.LongOptions)
75+
slices.Sort(parsed.ShortOptions)
8376
return parsed
8477
}
8578

core/commands/files.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"io"
99
"os"
1010
gopath "path"
11-
"sort"
11+
"slices"
1212
"strconv"
1313
"strings"
1414
"time"
@@ -698,8 +698,8 @@ Examples:
698698
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *filesLsOutput) error {
699699
noSort, _ := req.Options[dontSortOptionName].(bool)
700700
if !noSort {
701-
sort.Slice(out.Entries, func(i, j int) bool {
702-
return strings.Compare(out.Entries[i].Name, out.Entries[j].Name) < 0
701+
slices.SortFunc(out.Entries, func(a, b mfs.NodeListing) int {
702+
return strings.Compare(a.Name, b.Name)
703703
})
704704
}
705705

core/commands/id.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"errors"
77
"fmt"
88
"io"
9-
"sort"
9+
"slices"
1010
"strings"
1111

1212
version "github.com/ipfs/kubo"
@@ -170,11 +170,11 @@ func printPeer(keyEnc ke.KeyEncoder, ps pstore.Peerstore, p peer.ID) (interface{
170170
for _, a := range addrs {
171171
info.Addresses = append(info.Addresses, a.String())
172172
}
173-
sort.Strings(info.Addresses)
173+
slices.Sort(info.Addresses)
174174

175175
protocols, _ := ps.GetProtocols(p) // don't care about errors here.
176176
info.Protocols = append(info.Protocols, protocols...)
177-
sort.Slice(info.Protocols, func(i, j int) bool { return info.Protocols[i] < info.Protocols[j] })
177+
slices.Sort(info.Protocols)
178178

179179
if v, err := ps.Get(p, "AgentVersion"); err == nil {
180180
if vs, ok := v.(string); ok {
@@ -205,9 +205,9 @@ func printSelf(keyEnc ke.KeyEncoder, node *core.IpfsNode) (interface{}, error) {
205205
for _, a := range addrs {
206206
info.Addresses = append(info.Addresses, a.String())
207207
}
208-
sort.Strings(info.Addresses)
208+
slices.Sort(info.Addresses)
209209
info.Protocols = node.PeerHost.Mux().Protocols()
210-
sort.Slice(info.Protocols, func(i, j int) bool { return info.Protocols[i] < info.Protocols[j] })
210+
slices.Sort(info.Protocols)
211211
}
212212
info.AgentVersion = version.GetUserAgentVersion()
213213
return info, nil

core/commands/ls.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import (
55
"fmt"
66
"io"
77
"os"
8-
"sort"
8+
"slices"
9+
"strings"
910
"text/tabwriter"
1011
"time"
1112

@@ -118,8 +119,8 @@ The JSON output contains type information.
118119
return nil
119120
}, func(i int) {
120121
// after each dir
121-
sort.Slice(outputLinks, func(i, j int) bool {
122-
return outputLinks[i].Name < outputLinks[j].Name
122+
slices.SortFunc(outputLinks, func(a, b LsLink) int {
123+
return strings.Compare(a.Name, b.Name)
123124
})
124125

125126
output[i] = LsObject{

core/commands/pubsub.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"fmt"
77
"io"
88
"net/http"
9-
"sort"
9+
"slices"
1010

1111
cmdenv "github.com/ipfs/kubo/core/commands/cmdenv"
1212
mbase "github.com/multiformats/go-multibase"
@@ -325,7 +325,7 @@ TOPIC AND DATA ENCODING
325325
for _, peer := range peers {
326326
list.Strings = append(list.Strings, peer.String())
327327
}
328-
sort.Strings(list.Strings)
328+
slices.Sort(list.Strings)
329329
return cmds.EmitOnce(res, list)
330330
},
331331
Type: stringList{},

core/commands/swarm.go

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import (
88
"fmt"
99
"io"
1010
"path"
11-
"sort"
11+
"slices"
1212
"strconv"
13+
"strings"
1314
"sync"
1415
"text/tabwriter"
1516
"time"
@@ -301,11 +302,11 @@ var swarmPeersCmd = &cmds.Command{
301302
identifyResult, _ := ci.identifyPeer(n.Peerstore, c.ID())
302303
ci.Identify = identifyResult
303304
}
304-
sort.Sort(&ci)
305+
ci.Sort()
305306
out.Peers = append(out.Peers, ci)
306307
}
307308

308-
sort.Sort(&out)
309+
out.Sort()
309310
return cmds.EmitOnce(res, &out)
310311
},
311312
Encoders: cmds.EncoderMap{
@@ -435,32 +436,20 @@ type connInfo struct {
435436
Identify IdOutput `json:",omitempty"`
436437
}
437438

438-
func (ci *connInfo) Less(i, j int) bool {
439-
return ci.Streams[i].Protocol < ci.Streams[j].Protocol
440-
}
441-
442-
func (ci *connInfo) Len() int {
443-
return len(ci.Streams)
444-
}
445-
446-
func (ci *connInfo) Swap(i, j int) {
447-
ci.Streams[i], ci.Streams[j] = ci.Streams[j], ci.Streams[i]
439+
func (ci *connInfo) Sort() {
440+
slices.SortFunc(ci.Streams, func(a, b streamInfo) int {
441+
return strings.Compare(a.Protocol, b.Protocol)
442+
})
448443
}
449444

450445
type connInfos struct {
451446
Peers []connInfo
452447
}
453448

454-
func (ci connInfos) Less(i, j int) bool {
455-
return ci.Peers[i].Addr < ci.Peers[j].Addr
456-
}
457-
458-
func (ci connInfos) Len() int {
459-
return len(ci.Peers)
460-
}
461-
462-
func (ci connInfos) Swap(i, j int) {
463-
ci.Peers[i], ci.Peers[j] = ci.Peers[j], ci.Peers[i]
449+
func (ci *connInfos) Sort() {
450+
slices.SortFunc(ci.Peers, func(a, b connInfo) int {
451+
return strings.Compare(a.Addr, b.Addr)
452+
})
464453
}
465454

466455
func (ci *connInfo) identifyPeer(ps pstore.Peerstore, p peer.ID) (IdOutput, error) {
@@ -484,11 +473,11 @@ func (ci *connInfo) identifyPeer(ps pstore.Peerstore, p peer.ID) (IdOutput, erro
484473
for _, a := range addrs {
485474
info.Addresses = append(info.Addresses, a.String())
486475
}
487-
sort.Strings(info.Addresses)
476+
slices.Sort(info.Addresses)
488477

489478
if protocols, err := ps.GetProtocols(p); err == nil {
490479
info.Protocols = append(info.Protocols, protocols...)
491-
sort.Slice(info.Protocols, func(i, j int) bool { return info.Protocols[i] < info.Protocols[j] })
480+
slices.Sort(info.Protocols)
492481
}
493482

494483
if v, err := ps.Get(p, "AgentVersion"); err == nil {
@@ -551,7 +540,7 @@ var swarmAddrsCmd = &cmds.Command{
551540
for p := range am.Addrs {
552541
ids = append(ids, p)
553542
}
554-
sort.Strings(ids)
543+
slices.Sort(ids)
555544

556545
for _, p := range ids {
557546
paddrs := am.Addrs[p]
@@ -603,7 +592,7 @@ var swarmAddrsLocalCmd = &cmds.Command{
603592
}
604593
addrs = append(addrs, saddr)
605594
}
606-
sort.Strings(addrs)
595+
slices.Sort(addrs)
607596
return cmds.EmitOnce(res, &stringList{addrs})
608597
},
609598
Type: stringList{},
@@ -634,7 +623,7 @@ var swarmAddrsListenCmd = &cmds.Command{
634623
for _, addr := range maddrs {
635624
addrs = append(addrs, addr.String())
636625
}
637-
sort.Strings(addrs)
626+
slices.Sort(addrs)
638627

639628
return cmds.EmitOnce(res, &stringList{addrs})
640629
},

0 commit comments

Comments
 (0)