summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcui fliter <imcusg@gmail.com>2022-09-29 02:16:56 +0000
committerGopher Robot <gobot@golang.org>2022-10-06 02:38:04 +0000
commit2e054128bf72c328ed565cfde1ceb7c9a470dc51 (patch)
tree6bde27a41d91fa7921e87ee64d9d790a7f80db8d
parent0bf7ee9977c0218562c50a0b0f0d9cbdf33f65e6 (diff)
downloadgo-git-2e054128bf72c328ed565cfde1ceb7c9a470dc51.tar.gz
cmd/go/internal: use strings.Cut
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>
-rw-r--r--src/cmd/go/internal/cmdflag/flag.go9
-rw-r--r--src/cmd/go/internal/envcmd/env.go5
-rw-r--r--src/cmd/go/internal/modcmd/edit.go25
-rw-r--r--src/cmd/go/internal/modconv/dep.go8
-rw-r--r--src/cmd/go/internal/modfetch/codehost/vcs.go6
-rw-r--r--src/cmd/go/internal/modget/query.go10
-rw-r--r--src/cmd/go/internal/modload/build.go4
-rw-r--r--src/cmd/go/internal/modload/list.go9
-rw-r--r--src/cmd/go/internal/test/test.go6
-rw-r--r--src/cmd/go/internal/vcs/vcs.go6
-rw-r--r--src/cmd/go/internal/work/gccgo.go5
-rw-r--r--src/cmd/go/internal/workcmd/edit.go11
12 files changed, 42 insertions, 62 deletions
diff --git a/src/cmd/go/internal/cmdflag/flag.go b/src/cmd/go/internal/cmdflag/flag.go
index a634bc1ab8..86e33ea111 100644
--- a/src/cmd/go/internal/cmdflag/flag.go
+++ b/src/cmd/go/internal/cmdflag/flag.go
@@ -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 {
diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go
index 2d8f7afd6b..f7f065529d 100644
--- a/src/cmd/go/internal/envcmd/env.go
+++ b/src/cmd/go/internal/envcmd/env.go
@@ -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)
}
diff --git a/src/cmd/go/internal/modcmd/edit.go b/src/cmd/go/internal/modcmd/edit.go
index e5182a9590..edc1b19877 100644
--- a/src/cmd/go/internal/modcmd/edit.go
+++ b/src/cmd/go/internal/modcmd/edit.go
@@ -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)
}
diff --git a/src/cmd/go/internal/modconv/dep.go b/src/cmd/go/internal/modconv/dep.go
index 2e673c3ab9..9bea761b49 100644
--- a/src/cmd/go/internal/modconv/dep.go
+++ b/src/cmd/go/internal/modconv/dep.go
@@ -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 {
diff --git a/src/cmd/go/internal/modfetch/codehost/vcs.go b/src/cmd/go/internal/modfetch/codehost/vcs.go
index 99be8646a4..300a23c6ac 100644
--- a/src/cmd/go/internal/modfetch/codehost/vcs.go
+++ b/src/cmd/go/internal/modfetch/codehost/vcs.go
@@ -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 {
diff --git a/src/cmd/go/internal/modget/query.go b/src/cmd/go/internal/modget/query.go
index 8fffb3354c..d18770e889 100644
--- a/src/cmd/go/internal/modget/query.go
+++ b/src/cmd/go/internal/modget/query.go
@@ -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.
diff --git a/src/cmd/go/internal/modload/build.go b/src/cmd/go/internal/modload/build.go
index f5e16e2a92..14ba83c9c9 100644
--- a/src/cmd/go/internal/modload/build.go
+++ b/src/cmd/go/internal/modload/build.go
@@ -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)
}
diff --git a/src/cmd/go/internal/modload/list.go b/src/cmd/go/internal/modload/list.go
index 6586309291..f77901fa21 100644
--- a/src/cmd/go/internal/modload/list.go
+++ b/src/cmd/go/internal/modload/list.go
@@ -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)
diff --git a/src/cmd/go/internal/test/test.go b/src/cmd/go/internal/test/test.go
index 2b59763211..dac13e9a4b 100644
--- a/src/cmd/go/internal/test/test.go
+++ b/src/cmd/go/internal/test/test.go
@@ -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 {
diff --git a/src/cmd/go/internal/vcs/vcs.go b/src/cmd/go/internal/vcs/vcs.go
index baa0876742..d2004579c4 100644
--- a/src/cmd/go/internal/vcs/vcs.go
+++ b/src/cmd/go/internal/vcs/vcs.go
@@ -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)
}
diff --git a/src/cmd/go/internal/work/gccgo.go b/src/cmd/go/internal/work/gccgo.go
index d37b8df07b..a65c61ffd5 100644
--- a/src/cmd/go/internal/work/gccgo.go
+++ b/src/cmd/go/internal/work/gccgo.go
@@ -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)
diff --git a/src/cmd/go/internal/workcmd/edit.go b/src/cmd/go/internal/workcmd/edit.go
index a0b96cd730..8d1d38318b 100644
--- a/src/cmd/go/internal/workcmd/edit.go
+++ b/src/cmd/go/internal/workcmd/edit.go
@@ -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)
}