diff --git a/cmd/cue/cmd/custom.go b/cmd/cue/cmd/custom.go index 52abb8b56..1b8537fab 100644 --- a/cmd/cue/cmd/custom.go +++ b/cmd/cue/cmd/custom.go @@ -113,8 +113,8 @@ func customCommand(c *Command, typ, name string, tools *cue.Instance) (*cobra.Co txt := docs[0].Text() short, txt = splitLine(txt) short = lookupString(o, "short", short) - if strings.HasPrefix(txt, "Usage:") { - usage, txt = splitLine(txt[len("Usage:"):]) + if rest, ok := strings.CutPrefix(txt, "Usage:"); ok { + usage, txt = splitLine(rest) } usage = lookupString(o, "usage", usage) usage = lookupString(o, "$usage", usage) diff --git a/cmd/cue/cmd/get_go.go b/cmd/cue/cmd/get_go.go index f58fbcd04..95c753bf2 100644 --- a/cmd/cue/cmd/get_go.go +++ b/cmd/cue/cmd/get_go.go @@ -1498,7 +1498,8 @@ func (e *extractor) addFields(x *types.Struct, st *cueast.StructLit) { if t := tags.Get("protobuf"); t != "" { split := strings.Split(t, ",") split = slices.DeleteFunc(split, func(s string) bool { - return strings.HasPrefix(s, "name=") && s[len("name="):] == name + rest, ok := strings.CutPrefix(s, "name=") + return ok && rest == name }) // Put tag first, as type could potentially be elided and is diff --git a/encoding/protobuf/pbinternal/attribute.go b/encoding/protobuf/pbinternal/attribute.go index 53000453e..8f2e82e0d 100644 --- a/encoding/protobuf/pbinternal/attribute.go +++ b/encoding/protobuf/pbinternal/attribute.go @@ -99,8 +99,8 @@ func FromValue(name string, v cue.Value) (info Info, err error) { } case cue.StructKind: - if strings.HasPrefix(info.Type, "map[") { - a := strings.SplitN(info.Type[len("map["):], "]", 2) + if rest, ok := strings.CutPrefix(info.Type, "map["); ok { + a := strings.SplitN(rest, "]", 2) info.KeyTypeString = strings.TrimSpace(a[0]) switch info.KeyTypeString { case "string": diff --git a/internal/cuetxtar/inline.go b/internal/cuetxtar/inline.go index 01353ec69..3890e0b92 100644 --- a/internal/cuetxtar/inline.go +++ b/internal/cuetxtar/inline.go @@ -664,8 +664,8 @@ func (r *inlineRunner) subpath() string { prefix := []byte("#subpath:") for line := range strings.SplitSeq(string(r.archive.Comment), "\n") { b := []byte(strings.TrimSpace(line)) - if strings.HasPrefix(string(b), string(prefix)) { - return strings.TrimSpace(string(b[len(prefix):])) + if rest, ok := bytes.CutPrefix(b, prefix); ok { + return strings.TrimSpace(string(rest)) } } return "" diff --git a/internal/cuetxtar/inline_err.go b/internal/cuetxtar/inline_err.go index c60b5150c..03723b3c5 100644 --- a/internal/cuetxtar/inline_err.go +++ b/internal/cuetxtar/inline_err.go @@ -1136,8 +1136,8 @@ func relativePathTo(epath, fieldPath string) string { if epath == fieldPath { return "" } - if strings.HasPrefix(epath, fieldPath+".") { - return epath[len(fieldPath)+1:] + if rest, ok := strings.CutPrefix(epath, fieldPath+"."); ok { + return rest } return epath } diff --git a/internal/cuetxtar/txtar.go b/internal/cuetxtar/txtar.go index 81a5fea13..ade91a768 100644 --- a/internal/cuetxtar/txtar.go +++ b/internal/cuetxtar/txtar.go @@ -202,8 +202,8 @@ func (t *Test) Value(key string) (value string, ok bool) { s := bufio.NewScanner(bytes.NewReader(t.Archive.Comment)) for s.Scan() { b := s.Bytes() - if bytes.HasPrefix(b, prefix) { - return string(bytes.TrimSpace(b[len(prefix):])), true + if rest, ok := bytes.CutPrefix(b, prefix); ok { + return string(bytes.TrimSpace(rest)), true } } return "", false