func Parse()

in internal/semver/semver.go [194:256]


func Parse(v string) (p Parsed, ok bool) {
	if v == "" || v[0] != 'v' {
		p.Err = "missing v prefix"
		return
	}
	p.Major, v, ok = parseInt(v[1:])
	if !ok {
		p.Err = "bad major version"
		return
	}
	if v == "" {
		p.Minor = "0"
		p.Patch = "0"
		p.short = ".0.0"
		return
	}
	if v[0] != '.' {
		p.Err = "bad minor prefix"
		ok = false
		return
	}
	p.Minor, v, ok = parseInt(v[1:])
	if !ok {
		p.Err = "bad minor version"
		return
	}
	if v == "" {
		p.Patch = "0"
		p.short = ".0"
		return
	}
	if v[0] != '.' {
		p.Err = "bad patch prefix"
		ok = false
		return
	}
	p.Patch, v, ok = parseInt(v[1:])
	if !ok {
		p.Err = "bad patch version"
		return
	}
	if len(v) > 0 && v[0] == '-' {
		p.Prerelease, v, ok = parsePrerelease(v)
		if !ok {
			p.Err = "bad prerelease"
			return
		}
	}
	if len(v) > 0 && v[0] == '+' {
		p.Build, v, ok = parseBuild(v)
		if !ok {
			p.Err = "bad build"
			return
		}
	}
	if v != "" {
		p.Err = "junk on end"
		ok = false
		return
	}
	ok = true
	return
}