зеркало из https://github.com/golang/tools.git
internal/lsp: hash go version into package key
The go directive affects type checking errors so it should be included in the package key. I manually tested that this fixes the issue in golang/go#51325 Fixes golang/go#51325 Change-Id: I109859ae65e7e4d5fdefc63a0a7a838117ee02cf Reviewed-on: https://go-review.googlesource.com/c/tools/+/387914 Trust: Suzy Mueller <suzmue@golang.org> Run-TryBot: Suzy Mueller <suzmue@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
Родитель
5210e0ca15
Коммит
b7525f4396
|
@ -194,7 +194,7 @@ func (s *snapshot) buildKey(ctx context.Context, id PackageID, mode source.Parse
|
||||||
depKeys = append(depKeys, depHandle.key)
|
depKeys = append(depKeys, depHandle.key)
|
||||||
}
|
}
|
||||||
experimentalKey := s.View().Options().ExperimentalPackageCacheKey
|
experimentalKey := s.View().Options().ExperimentalPackageCacheKey
|
||||||
ph.key = checkPackageKey(ph.m.ID, compiledGoFiles, m.Config, depKeys, mode, experimentalKey)
|
ph.key = checkPackageKey(ph.m.ID, compiledGoFiles, m, depKeys, mode, experimentalKey)
|
||||||
return ph, deps, nil
|
return ph, deps, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,15 +214,18 @@ func (s *snapshot) workspaceParseMode(id PackageID) source.ParseMode {
|
||||||
return source.ParseExported
|
return source.ParseExported
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkPackageKey(id PackageID, pghs []*parseGoHandle, cfg *packages.Config, deps []packageHandleKey, mode source.ParseMode, experimentalKey bool) packageHandleKey {
|
func checkPackageKey(id PackageID, pghs []*parseGoHandle, m *KnownMetadata, deps []packageHandleKey, mode source.ParseMode, experimentalKey bool) packageHandleKey {
|
||||||
b := bytes.NewBuffer(nil)
|
b := bytes.NewBuffer(nil)
|
||||||
b.WriteString(string(id))
|
b.WriteString(string(id))
|
||||||
|
if m.Module != nil {
|
||||||
|
b.WriteString(m.Module.GoVersion) // go version affects type check errors.
|
||||||
|
}
|
||||||
if !experimentalKey {
|
if !experimentalKey {
|
||||||
// cfg was used to produce the other hashed inputs (package ID, parsed Go
|
// cfg was used to produce the other hashed inputs (package ID, parsed Go
|
||||||
// files, and deps). It should not otherwise affect the inputs to the type
|
// files, and deps). It should not otherwise affect the inputs to the type
|
||||||
// checker, so this experiment omits it. This should increase cache hits on
|
// checker, so this experiment omits it. This should increase cache hits on
|
||||||
// the daemon as cfg contains the environment and working directory.
|
// the daemon as cfg contains the environment and working directory.
|
||||||
b.WriteString(hashConfig(cfg))
|
b.WriteString(hashConfig(m.Config))
|
||||||
}
|
}
|
||||||
b.WriteByte(byte(mode))
|
b.WriteByte(byte(mode))
|
||||||
for _, dep := range deps {
|
for _, dep := range deps {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче