diff --git a/pkg/dependency/parser/gradle/lockfile/parse.go b/pkg/dependency/parser/gradle/lockfile/parse.go index 93e2fc68dc..4b10889f00 100644 --- a/pkg/dependency/parser/gradle/lockfile/parse.go +++ b/pkg/dependency/parser/gradle/lockfile/parse.go @@ -36,10 +36,9 @@ func (Parser) Parse(r xio.ReadSeekerAt) ([]ftypes.Package, []ftypes.Dependency, name := strings.Join(dep[:2], ":") version, classPathsString, _ := strings.Cut(dep[2], "=") - classPaths := strings.Split(classPathsString, ",") dev := true - for _, classPath := range classPaths { + for classPath := range strings.SplitSeq(classPathsString, ",") { if !strings.HasPrefix(classPath, "test") { dev = false break diff --git a/pkg/dependency/parser/ruby/gemspec/parse.go b/pkg/dependency/parser/ruby/gemspec/parse.go index 6fa0b140de..ecb3a5da78 100644 --- a/pkg/dependency/parser/ruby/gemspec/parse.go +++ b/pkg/dependency/parser/ruby/gemspec/parse.go @@ -123,12 +123,12 @@ func trim(s string) string { func parseLicenses(s string) string { // e.g. `"Ruby".freeze, "BSDL".freeze` // => {"\"Ruby\".freeze", "\"BSDL\".freeze"} - ss := strings.Split(s, ",") + ss := strings.SplitSeq(s, ",") // e.g. {"\"Ruby\".freeze", "\"BSDL\".freeze"} // => {"Ruby", "BSDL"} var licenses []string - for _, l := range ss { + for l := range ss { licenses = append(licenses, trim(l)) } diff --git a/pkg/detector/library/driver.go b/pkg/detector/library/driver.go index 67e8b3037c..83c4a0ee4f 100644 --- a/pkg/detector/library/driver.go +++ b/pkg/detector/library/driver.go @@ -148,7 +148,7 @@ func createFixedVersions(advisory dbTypes.Advisory) string { var fixedVersions []string for _, version := range advisory.VulnerableVersions { - for _, s := range strings.Split(version, ",") { + for s := range strings.SplitSeq(version, ",") { s = strings.TrimSpace(s) if !strings.HasPrefix(s, "<=") && strings.HasPrefix(s, "<") { s = strings.TrimPrefix(s, "<") diff --git a/pkg/fanal/analyzer/imgconf/apk/apk.go b/pkg/fanal/analyzer/imgconf/apk/apk.go index a43e483822..64302ba9af 100644 --- a/pkg/fanal/analyzer/imgconf/apk/apk.go +++ b/pkg/fanal/analyzer/imgconf/apk/apk.go @@ -151,8 +151,8 @@ func (a alpineCmdAnalyzer) parseCommand(command string, envs map[string]string) command = strings.TrimPrefix(command, "/bin/sh -c") var commands []string - for _, cmd := range strings.Split(command, "&&") { - for _, c := range strings.Split(cmd, ";") { + for cmd := range strings.SplitSeq(command, "&&") { + for c := range strings.SplitSeq(cmd, ";") { commands = append(commands, strings.TrimSpace(c)) } } @@ -162,7 +162,7 @@ func (a alpineCmdAnalyzer) parseCommand(command string, envs map[string]string) } var add bool - for _, field := range strings.Fields(cmd) { + for field := range strings.FieldsSeq(cmd) { switch { case strings.HasPrefix(field, "-") || strings.HasPrefix(field, "."): continue diff --git a/pkg/fanal/analyzer/pkg/apk/apk.go b/pkg/fanal/analyzer/pkg/apk/apk.go index 37c29da58f..547009eaf1 100644 --- a/pkg/fanal/analyzer/pkg/apk/apk.go +++ b/pkg/fanal/analyzer/pkg/apk/apk.go @@ -150,7 +150,7 @@ func (a alpinePkgAnalyzer) parseLicense(line string) []string { } func (a alpinePkgAnalyzer) parseProvides(line, pkgID string, provides map[string]string) { - for _, p := range strings.Fields(line[2:]) { + for p := range strings.FieldsSeq(line[2:]) { p = a.trimRequirement(p) // Assume name ("P:") and version ("V:") are defined before provides ("p:") diff --git a/pkg/fanal/analyzer/pkg/dpkg/dpkg.go b/pkg/fanal/analyzer/pkg/dpkg/dpkg.go index 098e97800e..9449e04b88 100644 --- a/pkg/fanal/analyzer/pkg/dpkg/dpkg.go +++ b/pkg/fanal/analyzer/pkg/dpkg/dpkg.go @@ -306,7 +306,7 @@ func (a dpkgAnalyzer) pkgID(name, version string) string { } func (a dpkgAnalyzer) parseStatus(s string) bool { - for _, ss := range strings.Fields(s) { + for ss := range strings.FieldsSeq(s) { if ss == "deinstall" || ss == "purge" { return false } @@ -317,10 +317,9 @@ func (a dpkgAnalyzer) parseStatus(s string) bool { func (a dpkgAnalyzer) parseDepends(s string) []string { // e.g. passwd, debconf (>= 0.5) | debconf-2.0 var dependencies []string - depends := strings.Split(s, ",") - for _, dep := range depends { + for dep := range strings.SplitSeq(s, ",") { // e.g. gpgv | gpgv2 | gpgv1 - for _, d := range strings.Split(dep, "|") { + for d := range strings.SplitSeq(dep, "|") { d = a.trimVersionRequirement(d) // Store only uniq package names here diff --git a/pkg/flag/options_test.go b/pkg/flag/options_test.go index 2c5d5d0a43..b3d2ffe330 100644 --- a/pkg/flag/options_test.go +++ b/pkg/flag/options_test.go @@ -137,7 +137,7 @@ type Output struct { func (o Output) Messages() []string { var messages []string - for _, line := range strings.Split(o.b.String(), "\n") { + for line := range strings.SplitSeq(o.b.String(), "\n") { if line == "" { continue } diff --git a/pkg/iac/adapters/arm/storage/adapt.go b/pkg/iac/adapters/arm/storage/adapt.go index 26a0d10c86..871512cd2f 100644 --- a/pkg/iac/adapters/arm/storage/adapt.go +++ b/pkg/iac/adapters/arm/storage/adapt.go @@ -22,7 +22,7 @@ func adaptAccounts(deployment azure.Deployment) []storage.Account { var bypasses []types.StringValue bypassProp := acl.GetMapValue("bypass") - for _, bypass := range strings.Split(bypassProp.AsString(), ",") { + for bypass := range strings.SplitSeq(bypassProp.AsString(), ",") { bypasses = append(bypasses, types.String(strings.TrimSpace(bypass), bypassProp.GetMetadata())) } diff --git a/pkg/iac/detection/detect.go b/pkg/iac/detection/detect.go index 56af6a14e4..27b503059e 100644 --- a/pkg/iac/detection/detect.go +++ b/pkg/iac/detection/detect.go @@ -239,7 +239,7 @@ func init() { marker = altMarker } - for _, partial := range bytes.Split(data, marker) { + for partial := range bytes.SplitSeq(data, marker) { var result map[string]any if err := yaml.Unmarshal(partial, &result); err != nil { continue diff --git a/pkg/iac/scanners/azure/arm/parser/armjson/decode_object.go b/pkg/iac/scanners/azure/arm/parser/armjson/decode_object.go index 5d7e153570..a2c78b1e20 100644 --- a/pkg/iac/scanners/azure/arm/parser/armjson/decode_object.go +++ b/pkg/iac/scanners/azure/arm/parser/armjson/decode_object.go @@ -87,9 +87,9 @@ func (n *node) decodeObjectToStruct(v reflect.Value) error { t := v.Type() for i := 0; i < t.NumField(); i++ { fv := t.Field(i) - tags := strings.Split(fv.Tag.Get("json"), ",") + var tagName string - for _, tag := range tags { + for tag := range strings.SplitSeq(fv.Tag.Get("json"), ",") { if tag != "omitempty" && tag != "-" { tagName = tag } diff --git a/pkg/iac/scanners/cloudformation/parser/fn_split.go b/pkg/iac/scanners/cloudformation/parser/fn_split.go index cddda20ef1..6e534b542f 100644 --- a/pkg/iac/scanners/cloudformation/parser/fn_split.go +++ b/pkg/iac/scanners/cloudformation/parser/fn_split.go @@ -31,13 +31,11 @@ func ResolveSplit(property *Property) (resolved *Property, success bool) { } func createPropertyList(splitProp, delimiterProp, parent *Property) []*Property { - splitString := splitProp.AsString() delimiter := delimiterProp.AsString() - splits := strings.Split(splitString, delimiter) var props []*Property - for _, split := range splits { + for split := range strings.SplitSeq(splitString, delimiter) { props = append(props, parent.deriveResolved(cftypes.String, split)) } return props diff --git a/pkg/iac/scanners/generic/scanner.go b/pkg/iac/scanners/generic/scanner.go index 98106309c0..52672a4986 100644 --- a/pkg/iac/scanners/generic/scanner.go +++ b/pkg/iac/scanners/generic/scanner.go @@ -212,7 +212,7 @@ func parseYaml(_ context.Context, r io.Reader, _ string) (any, error) { marker = altMarker } - for _, partial := range strings.Split(string(contents), marker) { + for partial := range strings.SplitSeq(string(contents), marker) { var target any if err := yaml.Unmarshal([]byte(partial), &target); err != nil { return nil, err diff --git a/pkg/iac/scanners/terraform/parser/parser.go b/pkg/iac/scanners/terraform/parser/parser.go index db59f8d6ef..a6da375d30 100644 --- a/pkg/iac/scanners/terraform/parser/parser.go +++ b/pkg/iac/scanners/terraform/parser/parser.go @@ -458,7 +458,7 @@ func (s *paramParser) Parse(str string) bool { str = str[idx+1:] paramStr := strings.TrimSuffix(str, "]") - for _, pair := range strings.Split(paramStr, ",") { + for pair := range strings.SplitSeq(paramStr, ",") { parts := strings.Split(pair, "=") if len(parts) != 2 { continue diff --git a/pkg/k8s/scanner/scanner.go b/pkg/k8s/scanner/scanner.go index ff6fe8b65e..b1b0fa0cd9 100644 --- a/pkg/k8s/scanner/scanner.go +++ b/pkg/k8s/scanner/scanner.go @@ -581,8 +581,8 @@ func osNameVersion(name string) (string, string) { var buffer bytes.Buffer var v string var err error - parts := strings.Split(name, " ") - for _, p := range parts { + parts := strings.SplitSeq(name, " ") + for p := range parts { _, err = version.Parse(p) if err != nil { buffer.WriteString(p + " ") diff --git a/pkg/licensing/normalize.go b/pkg/licensing/normalize.go index d7d51e3cb1..353fab50f8 100644 --- a/pkg/licensing/normalize.go +++ b/pkg/licensing/normalize.go @@ -752,7 +752,7 @@ func LaxSplitLicenses(str string) []string { } var licenses []string str = versionRegexp.ReplaceAllString(str, "$1-$4") - for _, s := range strings.Fields(str) { + for s := range strings.FieldsSeq(str) { s = strings.Trim(s, "()") switch s { case "": diff --git a/pkg/log/handler_test.go b/pkg/log/handler_test.go index 82ab5fc5e3..40ac1df7a4 100644 --- a/pkg/log/handler_test.go +++ b/pkg/log/handler_test.go @@ -187,7 +187,7 @@ func TestSlogtest(t *testing.T) { } results := func(*testing.T) map[string]any { - for _, line := range strings.Split(buf.String(), "\n") { + for line := range strings.SplitSeq(buf.String(), "\n") { if line == "" { continue } @@ -218,7 +218,7 @@ func parseLogLine(line string) (map[string]any, error) { m["msg"] = parts[1] if len(parts) == 3 { - for _, attr := range strings.Split(parts[2], " ") { + for attr := range strings.SplitSeq(parts[2], " ") { kv := strings.SplitN(attr, "=", 2) if len(kv) == 2 { parseAttr(m, kv[0], kv[1]) diff --git a/pkg/sbom/cyclonedx/marshal.go b/pkg/sbom/cyclonedx/marshal.go index 0e2f152164..1baab2c1e6 100644 --- a/pkg/sbom/cyclonedx/marshal.go +++ b/pkg/sbom/cyclonedx/marshal.go @@ -352,8 +352,8 @@ func (*Marshaler) advisories(refs []string) *[]cdx.Advisory { // trimNonUrlInfo returns first valid URL. func trimNonUrlInfo(ref string) string { - ss := strings.Split(ref, " ") - for _, s := range ss { + ss := strings.SplitSeq(ref, " ") + for s := range ss { if u, err := url.Parse(s); err == nil && u.Scheme != "" && u.Host != "" { return s }