code: func toSemVerRange(input string) string {
  	var output []string
  	fields := strings.Fields(input)
  	for _, f := range fields {
  		numDots, hasDigits := 0, false
  		for _, c := range f {
  			switch {
  			case c == '.':
  				numDots++
  			case c >= '0' && c <= '9':
  				hasDigits = true
  			}
  		}
  		if hasDigits && numDots < semVerDotsCount {
  			f = strings.TrimRight(f, " ")
  			f += ".x"
  		}
  		output = append(output, f)
  	}
  	return strings.Join(output, " ")
  }
docs: // toSemVerRange converts the input to a semantic version range.
  // E.g., ">=1.0"             -> ">=1.0.x"
  //       ">=1"               -> ">=1.x"
  //       ">=1 <=2.3"         -> ">=1.x <=2.3.x"
  //       ">1 || >3.1.0 !4.2" -> ">1.x || >3.1.0 !4.2.x"