// However, neither of those behaviors would be consistent with the
// plain meaning of the query. To try to reduce confusion, reject the
// query explicitly.
- return errSet(&modload.QueryMatchesMainModulesError{LoaderState: loaderstate, MainModules: []module.Version{v}, Pattern: q.pattern, Query: q.version})
+ return errSet(&modload.QueryMatchesMainModulesError{
+ MainModules: []module.Version{v},
+ Pattern: q.pattern,
+ Query: q.version,
+ PatternIsModule: loaderstate.MainModules.Contains(q.pattern),
+ })
}
return pathSet{mod: module.Version{Path: q.pattern, Version: "none"}}
}
q.pathOnce(curM.Path, func() pathSet {
if modload.HasModRoot(loaderstate) && curM.Version == "" && loaderstate.MainModules.Contains(curM.Path) {
- return errSet(&modload.QueryMatchesMainModulesError{LoaderState: loaderstate, MainModules: []module.Version{curM}, Pattern: q.pattern, Query: q.version})
+ return errSet(&modload.QueryMatchesMainModulesError{
+ MainModules: []module.Version{curM},
+ Pattern: q.pattern,
+ Query: q.version,
+ PatternIsModule: loaderstate.MainModules.Contains(q.pattern),
+ })
}
return pathSet{mod: module.Version{Path: curM.Path, Version: "none"}}
})
if loaderstate.MainModules.Contains(curM.Path) && !versionOkForMainModule(q.version) {
if q.matchesPath(curM.Path) {
return errSet(&modload.QueryMatchesMainModulesError{
- LoaderState: loaderstate,
- MainModules: []module.Version{curM},
- Pattern: q.pattern,
- Query: q.version,
+ MainModules: []module.Version{curM},
+ Pattern: q.pattern,
+ Query: q.version,
+ PatternIsModule: loaderstate.MainModules.Contains(q.pattern),
})
}
if s.MainModules.Contains(m.Path) && m.Version != "" {
reportError(q, &modload.QueryMatchesMainModulesError{
- LoaderState: s,
- MainModules: []module.Version{{Path: m.Path}},
- Pattern: q.pattern,
- Query: q.version,
+ MainModules: []module.Version{{Path: m.Path}},
+ Pattern: q.pattern,
+ Query: q.version,
+ PatternIsModule: s.MainModules.Contains(q.pattern),
})
return
}
return nil, modOnly, nil
} else if len(mainModuleMatches) != 0 {
return nil, nil, &QueryMatchesMainModulesError{
- LoaderState: loaderstate,
- MainModules: mainModuleMatches,
- Pattern: pattern,
- Query: query,
+ MainModules: mainModuleMatches,
+ Pattern: pattern,
+ Query: query,
+ PatternIsModule: loaderstate.MainModules.Contains(pattern),
}
} else {
return nil, nil, &PackageNotInModuleError{
if len(mainModuleMatches) > 0 && len(results) == 0 && modOnly == nil && errors.Is(err, fs.ErrNotExist) {
return nil, nil, &QueryMatchesMainModulesError{
- LoaderState: loaderstate,
- Pattern: pattern,
- Query: query,
+ Pattern: pattern,
+ Query: query,
+ PatternIsModule: loaderstate.MainModules.Contains(pattern),
}
}
return slices.Clip(results), modOnly, err
// a version of the main module that cannot be satisfied.
// (The main module's version cannot be changed.)
type QueryMatchesMainModulesError struct {
- LoaderState *State
- MainModules []module.Version
- Pattern string
- Query string
+ MainModules []module.Version
+ Pattern string
+ Query string
+ PatternIsModule bool // true if pattern is one of the main modules
}
func (e *QueryMatchesMainModulesError) Error() string {
- // TODO(jitsu): break dependency on loaderstate
- if e.LoaderState.MainModules.Contains(e.Pattern) {
+ if e.PatternIsModule {
return fmt.Sprintf("can't request version %q of the main module (%s)", e.Query, e.Pattern)
}