func parseParenRanges()

in providers/snyk/schema/versionrange.go [55:96]


func parseParenRanges(s string) (vr []versionRange, err error) {
	for len(s) > 0 {
		var r versionRange
		left := strings.IndexAny(s, "([")
		right := strings.IndexAny(s, ")]")
		if left == -1 || right == -1 || right < left {
			return nil, fmt.Errorf("invalid range %q", s)
		}
		boundaries := strings.Split(s[left+1:right], ",")
		if len(boundaries) == 1 {
			r.minVerIncl = strings.TrimSpace(boundaries[0])
			r.maxVerIncl = r.minVerIncl
			vr = append(vr, r)
			s = s[right+1:]
			continue
		}
		if len(boundaries) != 2 {
			return nil, fmt.Errorf("invalid range %q", s)
		}
		if s[left] == '(' {
			r.minVerExcl = strings.TrimSpace(boundaries[0])
		} else {
			r.minVerIncl = strings.TrimSpace(boundaries[0])
		}
		if s[right] == ')' {
			r.maxVerExcl = strings.TrimSpace(boundaries[1])
		} else {
			r.maxVerIncl = strings.TrimSpace(boundaries[1])
		}
		vr = append(vr, r)
		// skip trailing spaces
		suffix := s[right+1:]
		for _, r := range suffix {
			if !unicode.IsSpace(r) {
				break
			}
			right++
		}
		s = s[right+1:]
	}
	return vr, nil
}