)
type ImportMissingError struct {
- Path string
- Module module.Version
- QueryErr error
-
+ Path string
+ Module module.Version
+ QueryErr error
+ modContainingCWD module.Version
+
+ // modRoot is dependent on the value of ImportingMainModule and should be
+ // kept in sync.
+ modRoot string
ImportingMainModule module.Version
// isStd indicates whether we would expect to find the package in the standard
if e.QueryErr != nil {
return fmt.Sprintf("%s: %v", message, e.QueryErr)
}
- if e.ImportingMainModule.Path != "" && e.ImportingMainModule != LoaderState.MainModules.ModContainingCWD() {
- return fmt.Sprintf("%s; to add it:\n\tcd %s\n\tgo get %s", message, LoaderState.MainModules.ModRoot(e.ImportingMainModule), e.Path)
+ if e.ImportingMainModule.Path != "" && e.ImportingMainModule != e.modContainingCWD {
+ return fmt.Sprintf("%s; to add it:\n\tcd %s\n\tgo get %s", message, e.modRoot, e.Path)
}
return fmt.Sprintf("%s; to add it:\n\tgo get %s", message, e.Path)
}
}
if len(mods) == 0 {
- return module.Version{}, "", "", nil, &ImportMissingError{Path: path}
+ return module.Version{}, "", "", nil, &ImportMissingError{
+ Path: path,
+ modContainingCWD: loaderstate.MainModules.ModContainingCWD(),
+ }
}
return mods[0], roots[0], dirs[0], nil, nil
if !HasModRoot(loaderstate) {
queryErr = NewNoMainModulesError(loaderstate)
}
- return module.Version{}, "", "", nil, &ImportMissingError{Path: path, QueryErr: queryErr, isStd: pathIsStd}
+ return module.Version{}, "", "", nil, &ImportMissingError{
+ Path: path,
+ QueryErr: queryErr,
+ isStd: pathIsStd,
+ modContainingCWD: loaderstate.MainModules.ModContainingCWD(),
+ }
}
// So far we've checked the root dependencies.
return m, err
} else if ok {
if cfg.BuildMod == "readonly" {
- return module.Version{}, &ImportMissingError{Path: path, replaced: m}
+ return module.Version{}, &ImportMissingError{
+ Path: path,
+ replaced: m,
+ modContainingCWD: loaderstate.MainModules.ModContainingCWD(),
+ }
}
return m, nil
}
// QueryPattern cannot possibly find a module containing this package.
//
// Instead of trying QueryPattern, report an ImportMissingError immediately.
- return module.Version{}, &ImportMissingError{Path: path, isStd: true}
+ return module.Version{}, &ImportMissingError{
+ Path: path,
+ isStd: true,
+ modContainingCWD: loaderstate.MainModules.ModContainingCWD(),
+ }
}
if (cfg.BuildMod == "readonly" || cfg.BuildMod == "vendor") && !allowMissingModuleImports {
} else if cfg.BuildModReason != "" {
queryErr = fmt.Errorf("import lookup disabled by -mod=%s\n\t(%s)", cfg.BuildMod, cfg.BuildModReason)
}
- return module.Version{}, &ImportMissingError{Path: path, QueryErr: queryErr}
+ return module.Version{}, &ImportMissingError{
+ Path: path,
+ QueryErr: queryErr,
+ modContainingCWD: loaderstate.MainModules.ModContainingCWD(),
+ }
}
// Look up module containing the package, for addition to the build list.
if errors.Is(err, fs.ErrNotExist) {
// Return "cannot find module providing package […]" instead of whatever
// low-level error QueryPattern produced.
- return module.Version{}, &ImportMissingError{Path: path, QueryErr: err}
+ return module.Version{}, &ImportMissingError{
+ Path: path,
+ QueryErr: err,
+ modContainingCWD: loaderstate.MainModules.ModContainingCWD(),
+ }
} else {
return module.Version{}, err
}
Path: path,
Module: candidates[0].Mod,
newMissingVersion: candidate0MissingVersion,
+ modContainingCWD: loaderstate.MainModules.ModContainingCWD(),
}
}