in internal/report/lint.go [112:150]
func checkModVersions(path string, vr []VersionRange) (err error) {
defer derrors.Wrap(&err, "checkModVersions(%q, vr)", path)
realVersions, err := getModVersions(path)
if err != nil {
return fmt.Errorf("unable to retrieve module versions from proxy: %s", err)
}
checkVersion := func(version string) error {
if !semver.IsValid(version) {
return errors.New("invalid module semver")
}
if err := module.Check(path, version); err != nil {
return err
}
if err := versionExists(version, realVersions); err != nil {
return err
}
canonicalPath, err := getCanonicalModName(path, version)
if err != nil {
return err
}
if canonicalPath != path {
return fmt.Errorf("invalid module path at version (canonical path is %s)", canonicalPath)
}
return nil
}
for _, version := range vr {
if version.Introduced != "" {
if err := checkVersion(version.Introduced); err != nil {
return fmt.Errorf("bad version.introduced %q: %s", version.Introduced, err)
}
}
if version.Fixed != "" {
if err := checkVersion(version.Fixed); err != nil {
return fmt.Errorf("bad version.fixed %q: %s", version.Fixed, err)
}
}
}
return nil
}