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
}