Skip to content

Commit 66d4c35

Browse files
committed
all: start using slices.Backward
The resulting code is slightly smaller, but what's nice about it is that it is much easier to understand its purpose. Signed-off-by: Daniel Martí <[email protected]> Change-Id: I89d86426c9cf983e987cbf326d4e81cac87bfe09 Reviewed-on: https://review.gerrithub.io/c/cue-lang/cue/+/1209067 Reviewed-by: Roger Peppe <[email protected]> Unity-Result: CUE porcuepine <[email protected]> TryBot-Result: CUEcueckoo <[email protected]>
1 parent 873afd5 commit 66d4c35

File tree

8 files changed

+20
-18
lines changed

8 files changed

+20
-18
lines changed

cue/types.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"io"
2222
"math"
2323
"math/big"
24+
"slices"
2425
"strings"
2526

2627
"github.com/cockroachdb/apd/v3"
@@ -1579,8 +1580,8 @@ func (v Value) FillPath(p Path, x interface{}) Value {
15791580
default:
15801581
expr = convert.GoValueToValue(ctx, x, true)
15811582
}
1582-
for i := len(p.path) - 1; i >= 0; i-- {
1583-
switch sel := p.path[i]; sel.Type() {
1583+
for _, sel := range slices.Backward(p.path) {
1584+
switch sel.Type() {
15841585
case StringLabel | PatternConstraint:
15851586
expr = &adt.StructLit{Decls: []adt.Decl{
15861587
&adt.BulkOptionalField{

encoding/jsonschema/util.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,7 @@ func pathRefSyntax(cuePath cue.Path, root ast.Expr) (ast.Expr, error) {
112112
// be exposed as a method on [cue.Path], say
113113
// `SyntaxForDefinition` or something.
114114
func exprAtPath(path cue.Path, expr ast.Expr) (ast.Expr, error) {
115-
sels := path.Selectors()
116-
for i := len(sels) - 1; i >= 0; i-- {
117-
sel := sels[i]
115+
for i, sel := range slices.Backward(path.Selectors()) {
118116
label, err := labelForSelector(sel)
119117
if err != nil {
120118
return nil, err

encoding/protobuf/parse.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"os"
2121
"path"
2222
"path/filepath"
23+
"slices"
2324
"strconv"
2425
"strings"
2526
"text/scanner"
@@ -260,8 +261,8 @@ func (p *protoConverter) resolve(pos scanner.Position, name string, options []*p
260261
if strings.HasPrefix(name, ".") {
261262
return p.resolveTopScope(pos, name[1:], options)
262263
}
263-
for i := len(p.scope) - 1; i > 0; i-- {
264-
if m, ok := p.scope[i][name]; ok {
264+
for _, scope := range slices.Backward(p.scope) {
265+
if m, ok := scope[name]; ok {
265266
return m.cue()
266267
}
267268
}

internal/encoding/yaml/decode.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"io"
99
"regexp"
10+
"slices"
1011
"strconv"
1112
"strings"
1213
"sync"
@@ -420,8 +421,8 @@ func (d *decoder) merge(yn *yaml.Node, m *ast.StructLit, multiline bool) error {
420421
return d.insertMap(yn.Alias, m, multiline, true)
421422
case yaml.SequenceNode:
422423
// Step backwards as earlier nodes take precedence.
423-
for i := len(yn.Content) - 1; i >= 0; i-- {
424-
if err := d.merge(yn.Content[i], m, multiline); err != nil {
424+
for _, c := range slices.Backward(yn.Content) {
425+
if err := d.merge(c, m, multiline); err != nil {
425426
return err
426427
}
427428
}

internal/mod/mvs/mvs.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,7 @@ func Req[V comparable](mainModule V, base []string, reqs Reqs[V]) ([]V, error) {
257257
haveBase[path] = true
258258
}
259259
// Now the reverse postorder to bring in anything else.
260-
for i := len(postorder) - 1; i >= 0; i-- {
261-
m := postorder[i]
260+
for _, m := range slices.Backward(postorder) {
262261
if max[reqs.Path(m)] != reqs.Version(m) {
263262
// Older version.
264263
continue

mod/modcache/fetch.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"math/rand"
1111
"os"
1212
"path/filepath"
13+
"slices"
1314
"strconv"
1415
"strings"
1516

@@ -305,8 +306,8 @@ func makeDirsReadOnly(dir string) {
305306
})
306307

307308
// Run over list backward to chmod children before parents.
308-
for i := len(dirs) - 1; i >= 0; i-- {
309-
os.Chmod(dirs[i].path, dirs[i].mode&^0222)
309+
for _, dir := range slices.Backward(dirs) {
310+
os.Chmod(dir.path, dir.mode&^0222)
310311
}
311312
}
312313

mod/modconfig/modconfig.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"io/fs"
1010
"net/http"
1111
"os"
12+
"slices"
1213
"strings"
1314
"sync"
1415

@@ -359,8 +360,8 @@ func getenvFunc(env []string) func(string) string {
359360
return os.Getenv
360361
}
361362
return func(key string) string {
362-
for i := len(env) - 1; i >= 0; i-- {
363-
if e := env[i]; len(e) >= len(key)+1 && e[len(key)] == '=' && e[:len(key)] == key {
363+
for _, e := range slices.Backward(env) {
364+
if len(e) >= len(key)+1 && e[len(key)] == '=' && e[:len(key)] == key {
364365
return e[len(key)+1:]
365366
}
366367
}

tools/flow/run.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ package flow
2828
import (
2929
"fmt"
3030
"os"
31+
"slices"
3132

3233
"cuelang.org/go/cue/errors"
3334
"cuelang.org/go/internal/core/adt"
@@ -210,14 +211,13 @@ func (c *Controller) updateTaskResults(t *Task) bool {
210211
}
211212

212213
expr := t.update
213-
for i := len(t.labels) - 1; i >= 0; i-- {
214-
label := t.labels[i]
214+
for _, label := range slices.Backward(t.labels) {
215215
switch label.Typ() {
216216
case adt.StringLabel, adt.HiddenLabel:
217217
expr = &adt.StructLit{
218218
Decls: []adt.Decl{
219219
&adt.Field{
220-
Label: t.labels[i],
220+
Label: label,
221221
Value: expr,
222222
},
223223
},

0 commit comments

Comments
 (0)