]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal: use strings.Cut
authorcui fliter <imcusg@gmail.com>
Thu, 29 Sep 2022 02:16:56 +0000 (02:16 +0000)
committerGopher Robot <gobot@golang.org>
Thu, 6 Oct 2022 02:38:04 +0000 (02:38 +0000)
Change-Id: Icbe2af4f2abf22b6a8c9cec33f0f88018f3bd1c7
GitHub-Last-Rev: 81392a6e88d5297f958116031949b37f70271556
GitHub-Pull-Request: golang/go#55908
Reviewed-on: https://go-review.googlesource.com/c/go/+/435737
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>

12 files changed:
src/cmd/go/internal/cmdflag/flag.go
src/cmd/go/internal/envcmd/env.go
src/cmd/go/internal/modcmd/edit.go
src/cmd/go/internal/modconv/dep.go
src/cmd/go/internal/modfetch/codehost/vcs.go
src/cmd/go/internal/modget/query.go
src/cmd/go/internal/modload/build.go
src/cmd/go/internal/modload/list.go
src/cmd/go/internal/test/test.go
src/cmd/go/internal/vcs/vcs.go
src/cmd/go/internal/work/gccgo.go
src/cmd/go/internal/workcmd/edit.go

index a634bc1ab8d7ea1a256b386c2c6720009613284c..86e33ea111eb4b432bc453be8fb83b97438c63c1 100644 (file)
@@ -70,14 +70,7 @@ func ParseOne(fs *flag.FlagSet, args []string) (f *flag.Flag, remainingArgs []st
                return nil, args, NonFlagError{RawArg: raw}
        }
 
-       name := arg[1:]
-       hasValue := false
-       value := ""
-       if i := strings.Index(name, "="); i >= 0 {
-               value = name[i+1:]
-               hasValue = true
-               name = name[0:i]
-       }
+       name, value, hasValue := strings.Cut(arg[1:], "=")
 
        f = fs.Lookup(name)
        if f == nil {
index 2d8f7afd6b1cd36e486fe76bd3161da144226cdb..f7f065529d6f884cec65b7f7e4eac8548a67772a 100644 (file)
@@ -318,11 +318,10 @@ func runEnvW(args []string) {
        }
        add := make(map[string]string)
        for _, arg := range args {
-               i := strings.Index(arg, "=")
-               if i < 0 {
+               key, val, found := strings.Cut(arg, "=")
+               if !found {
                        base.Fatalf("go: arguments must be KEY=VALUE: invalid argument: %s", arg)
                }
-               key, val := arg[:i], arg[i+1:]
                if err := checkEnvWrite(key, val); err != nil {
                        base.Fatalf("go: %v", err)
                }
index e5182a9590adc866532d0dfde80130808706faad..edc1b19877c611864c746b4a66278401ec2a935b 100644 (file)
@@ -262,11 +262,11 @@ func runEdit(ctx context.Context, cmd *base.Command, args []string) {
 
 // parsePathVersion parses -flag=arg expecting arg to be path@version.
 func parsePathVersion(flag, arg string) (path, version string) {
-       i := strings.Index(arg, "@")
-       if i < 0 {
+       before, after, found := strings.Cut(arg, "@")
+       if !found {
                base.Fatalf("go: -%s=%s: need path@version", flag, arg)
        }
-       path, version = strings.TrimSpace(arg[:i]), strings.TrimSpace(arg[i+1:])
+       path, version = strings.TrimSpace(before), strings.TrimSpace(after)
        if err := module.CheckImportPath(path); err != nil {
                base.Fatalf("go: -%s=%s: invalid path: %v", flag, arg, err)
        }
@@ -293,10 +293,11 @@ func parsePath(flag, arg string) (path string) {
 // parsePathVersionOptional parses path[@version], using adj to
 // describe any errors.
 func parsePathVersionOptional(adj, arg string, allowDirPath bool) (path, version string, err error) {
-       if i := strings.Index(arg, "@"); i < 0 {
+       before, after, found := strings.Cut(arg, "@")
+       if !found {
                path = arg
        } else {
-               path, version = strings.TrimSpace(arg[:i]), strings.TrimSpace(arg[i+1:])
+               path, version = strings.TrimSpace(before), strings.TrimSpace(after)
        }
        if err := module.CheckImportPath(path); err != nil {
                if !allowDirPath || !modfile.IsDirectoryPath(path) {
@@ -324,12 +325,12 @@ func parseVersionInterval(arg string) (modfile.VersionInterval, error) {
                return modfile.VersionInterval{}, fmt.Errorf("invalid version interval: %q", arg)
        }
        s := arg[1 : len(arg)-1]
-       i := strings.Index(s, ",")
-       if i < 0 {
+       before, after, found := strings.Cut(s, ",")
+       if !found {
                return modfile.VersionInterval{}, fmt.Errorf("invalid version interval: %q", arg)
        }
-       low := strings.TrimSpace(s[:i])
-       high := strings.TrimSpace(s[i+1:])
+       low := strings.TrimSpace(before)
+       high := strings.TrimSpace(after)
        if !allowedVersionArg(low) || !allowedVersionArg(high) {
                return modfile.VersionInterval{}, fmt.Errorf("invalid version interval: %q", arg)
        }
@@ -387,11 +388,11 @@ func flagDropExclude(arg string) {
 
 // flagReplace implements the -replace flag.
 func flagReplace(arg string) {
-       var i int
-       if i = strings.Index(arg, "="); i < 0 {
+       before, after, found := strings.Cut(arg, "=")
+       if !found {
                base.Fatalf("go: -replace=%s: need old[@v]=new[@w] (missing =)", arg)
        }
-       old, new := strings.TrimSpace(arg[:i]), strings.TrimSpace(arg[i+1:])
+       old, new := strings.TrimSpace(before), strings.TrimSpace(after)
        if strings.HasPrefix(new, ">") {
                base.Fatalf("go: -replace=%s: separator between old and new is =, not =>", arg)
        }
index 2e673c3ab9f63695e970daba042b9f095292b51a..9bea761b49babc66599404ea44a6e9b537c6f130 100644 (file)
@@ -44,12 +44,12 @@ func ParseGopkgLock(file string, data []byte) (*modfile.File, error) {
                if r == nil {
                        continue
                }
-               i := strings.Index(line, "=")
-               if i < 0 {
+               before, after, found := strings.Cut(line, "=")
+               if !found {
                        continue
                }
-               key := strings.TrimSpace(line[:i])
-               val := strings.TrimSpace(line[i+1:])
+               key := strings.TrimSpace(before)
+               val := strings.TrimSpace(after)
                if len(val) >= 2 && val[0] == '"' && val[len(val)-1] == '"' {
                        q, err := strconv.Unquote(val) // Go unquoting, but close enough for now
                        if err != nil {
index 99be8646a448f76ac4f3e5b2053b2473234ab1d6..300a23c6ac5387477527039950c40fc17676f820 100644 (file)
@@ -539,12 +539,12 @@ func bzrParseStat(rev, out string) (*RevInfo, error) {
                if line[0] == '-' {
                        continue
                }
-               i := strings.Index(line, ":")
-               if i < 0 {
+               before, after, found := strings.Cut(line, ":")
+               if !found {
                        // End of header, start of commit message.
                        break
                }
-               key, val := line[:i], strings.TrimSpace(line[i+1:])
+               key, val := before, strings.TrimSpace(after)
                switch key {
                case "revno":
                        if j := strings.Index(val, " "); j >= 0 {
index 8fffb3354ca9c11f2368353a893ec6879ed0f511..d18770e889ecf2b65dc416138ca2060445f3f809 100644 (file)
@@ -138,13 +138,9 @@ func errSet(err error) pathSet { return pathSet{err: err} }
 // newQuery returns a new query parsed from the raw argument,
 // which must be either path or path@version.
 func newQuery(raw string) (*query, error) {
-       pattern := raw
-       rawVers := ""
-       if i := strings.Index(raw, "@"); i >= 0 {
-               pattern, rawVers = raw[:i], raw[i+1:]
-               if strings.Contains(rawVers, "@") || rawVers == "" {
-                       return nil, fmt.Errorf("invalid module version syntax %q", raw)
-               }
+       pattern, rawVers, found := strings.Cut(raw, "@")
+       if found && (strings.Contains(rawVers, "@") || rawVers == "") {
+               return nil, fmt.Errorf("invalid module version syntax %q", raw)
        }
 
        // If no version suffix is specified, assume @upgrade.
index f5e16e2a926747d7157e8a096bd2bab0275da469..14ba83c9c9c1a798e7692cd9e3b2294ddebe774d 100644 (file)
@@ -89,8 +89,8 @@ func ModuleInfo(ctx context.Context, path string) *modinfo.ModulePublic {
                return nil
        }
 
-       if i := strings.Index(path, "@"); i >= 0 {
-               m := module.Version{Path: path[:i], Version: path[i+1:]}
+       if path, vers, found := strings.Cut(path, "@"); found {
+               m := module.Version{Path: path, Version: vers}
                return moduleInfo(ctx, nil, m, 0, nil)
        }
 
index 65863092910c6d30393b8897612386c60b3919a1..f77901fa218ec67b00cacde46784925267ca9420 100644 (file)
@@ -140,9 +140,7 @@ func listModules(ctx context.Context, rs *Requirements, args []string, mode List
                        }
                        continue
                }
-               if i := strings.Index(arg, "@"); i >= 0 {
-                       path := arg[:i]
-                       vers := arg[i+1:]
+               if path, vers, found := strings.Cut(arg, "@"); found {
                        if vers == "upgrade" || vers == "patch" {
                                if _, ok := rs.rootSelected(path); !ok || rs.pruning == unpruned {
                                        needFullGraph = true
@@ -168,10 +166,7 @@ func listModules(ctx context.Context, rs *Requirements, args []string, mode List
 
        matchedModule := map[module.Version]bool{}
        for _, arg := range args {
-               if i := strings.Index(arg, "@"); i >= 0 {
-                       path := arg[:i]
-                       vers := arg[i+1:]
-
+               if path, vers, found := strings.Cut(arg, "@"); found {
                        var current string
                        if mg == nil {
                                current, _ = rs.rootSelected(path)
index 2b597632113167fe8e05226182f54105be342134..dac13e9a4b34f9b4b171e641de50e515ebf7e5c7 100644 (file)
@@ -1507,15 +1507,13 @@ func computeTestInputsID(a *work.Action, testlog []byte) (cache.ActionID, error)
                        continue
                }
                s := string(line)
-               i := strings.Index(s, " ")
-               if i < 0 {
+               op, name, found := strings.Cut(s, " ")
+               if !found {
                        if cache.DebugTest {
                                fmt.Fprintf(os.Stderr, "testcache: %s: input list malformed (%q)\n", a.Package.ImportPath, line)
                        }
                        return cache.ActionID{}, errBadTestInputs
                }
-               op := s[:i]
-               name := s[i+1:]
                switch op {
                default:
                        if cache.DebugTest {
index baa08767421895ee24b12bc9e5a21fce94249448..d2004579c43dccf6ec31276378f8349e4ac81aed 100644 (file)
@@ -880,11 +880,11 @@ func parseGOVCS(s string) (govcsConfig, error) {
                if item == "" {
                        return nil, fmt.Errorf("empty entry in GOVCS")
                }
-               i := strings.Index(item, ":")
-               if i < 0 {
+               pattern, list, found := strings.Cut(item, ":")
+               if !found {
                        return nil, fmt.Errorf("malformed entry in GOVCS (missing colon): %q", item)
                }
-               pattern, list := strings.TrimSpace(item[:i]), strings.TrimSpace(item[i+1:])
+               pattern, list = strings.TrimSpace(pattern), strings.TrimSpace(list)
                if pattern == "" {
                        return nil, fmt.Errorf("empty pattern in GOVCS: %q", item)
                }
index d37b8df07b463bae29da1df643b30212018ba5da..a65c61ffd53e2b80368abd4f5df332a8bb248bd5 100644 (file)
@@ -157,10 +157,7 @@ func buildImportcfgSymlinks(b *Builder, root string, importcfg []byte) error {
                } else {
                        verb, args = line[:i], strings.TrimSpace(line[i+1:])
                }
-               var before, after string
-               if i := strings.Index(args, "="); i >= 0 {
-                       before, after = args[:i], args[i+1:]
-               }
+               before, after, _ := strings.Cut(args, "=")
                switch verb {
                default:
                        base.Fatalf("importcfg:%d: unknown directive %q", lineNum, verb)
index a0b96cd730daa342be3057d06821a21dd1fef4c9..8d1d38318b1e7ebcdc68b90c4005876232a23b3e 100644 (file)
@@ -219,10 +219,11 @@ func allowedVersionArg(arg string) bool {
 // parsePathVersionOptional parses path[@version], using adj to
 // describe any errors.
 func parsePathVersionOptional(adj, arg string, allowDirPath bool) (path, version string, err error) {
-       if i := strings.Index(arg, "@"); i < 0 {
+       before, after, found := strings.Cut(arg, "@")
+       if !found {
                path = arg
        } else {
-               path, version = strings.TrimSpace(arg[:i]), strings.TrimSpace(arg[i+1:])
+               path, version = strings.TrimSpace(before), strings.TrimSpace(after)
        }
        if err := module.CheckImportPath(path); err != nil {
                if !allowDirPath || !modfile.IsDirectoryPath(path) {
@@ -237,11 +238,11 @@ func parsePathVersionOptional(adj, arg string, allowDirPath bool) (path, version
 
 // flagEditworkReplace implements the -replace flag.
 func flagEditworkReplace(arg string) {
-       var i int
-       if i = strings.Index(arg, "="); i < 0 {
+       before, after, found := strings.Cut(arg, "=")
+       if !found {
                base.Fatalf("go: -replace=%s: need old[@v]=new[@w] (missing =)", arg)
        }
-       old, new := strings.TrimSpace(arg[:i]), strings.TrimSpace(arg[i+1:])
+       old, new := strings.TrimSpace(before), strings.TrimSpace(after)
        if strings.HasPrefix(new, ">") {
                base.Fatalf("go: -replace=%s: separator between old and new is =, not =>", arg)
        }