| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package cache |
| |
| import ( |
| "crypto/sha1" |
| "fmt" |
| "go/token" |
| |
| "golang.org/x/tools/internal/lsp/source" |
| "golang.org/x/tools/internal/lsp/xlog" |
| "golang.org/x/tools/internal/span" |
| ) |
| |
| func New() source.Cache { |
| return &cache{ |
| fset: token.NewFileSet(), |
| } |
| } |
| |
| type cache struct { |
| nativeFileSystem |
| |
| fset *token.FileSet |
| } |
| |
| func (c *cache) NewSession(log xlog.Logger) source.Session { |
| return &session{ |
| cache: c, |
| log: log, |
| overlays: make(map[span.URI]*source.FileContent), |
| filesWatchMap: NewWatchMap(), |
| } |
| } |
| |
| func (c *cache) FileSet() *token.FileSet { |
| return c.fset |
| } |
| |
| func hashContents(contents []byte) string { |
| // TODO: consider whether sha1 is the best choice here |
| // This hash is used for internal identity detection only |
| return fmt.Sprintf("%x", sha1.Sum(contents)) |
| } |