func parseCmpRanges()

in providers/snyk/schema/versionrange.go [100:137]


func parseCmpRanges(s string) (vr []versionRange, err error) {
	re := regexp.MustCompile(`([<>](:?=)?)\s*(\S+)`)
	ss := strings.Split(s, "||")
	for _, rs := range ss {
		var r versionRange
		if rs == "" {
			continue
		}
		rs = strings.TrimSpace(rs)
		// first, check if it is just an equality check
		if rs[0] == '=' {
			r.maxVerIncl = strings.TrimSpace(rs[1:])
			r.minVerIncl = r.maxVerIncl
			vr = append(vr, r)
			continue
		}
		// then process the range
		matches := re.FindAllString(strings.TrimSpace(rs), -1)
		for _, match := range matches {
			switch match[0] {
			case '<':
				if match[1] == '=' {
					r.maxVerIncl = strings.TrimSpace(match[2:])
				} else {
					r.maxVerExcl = strings.TrimSpace(match[1:])
				}
			case '>':
				if match[1] == '=' {
					r.minVerIncl = strings.TrimSpace(match[2:])
				} else {
					r.minVerExcl = strings.TrimSpace(match[1:])
				}
			}
		}
		vr = append(vr, r)
	}
	return vr, nil
}