| package lsp |
| |
| import ( |
| "fmt" |
| "sync" |
| |
| "golang.org/x/tools/internal/lsp/protocol" |
| ) |
| |
| type view struct { |
| activeFilesMu sync.Mutex |
| activeFiles map[protocol.DocumentURI]string |
| } |
| |
| func newView() *view { |
| return &view{ |
| activeFiles: make(map[protocol.DocumentURI]string), |
| } |
| } |
| |
| func (v *view) cacheActiveFile(uri protocol.DocumentURI, text string) { |
| v.activeFilesMu.Lock() |
| v.activeFiles[uri] = text |
| v.activeFilesMu.Unlock() |
| } |
| |
| func (v *view) readActiveFile(uri protocol.DocumentURI) (string, error) { |
| v.activeFilesMu.Lock() |
| defer v.activeFilesMu.Unlock() |
| |
| content, ok := v.activeFiles[uri] |
| if !ok { |
| return "", fmt.Errorf("file not found: %s", uri) |
| } |
| return content, nil |
| } |
| |
| func (v *view) clearActiveFile(uri protocol.DocumentURI) { |
| v.activeFilesMu.Lock() |
| delete(v.activeFiles, uri) |
| v.activeFilesMu.Unlock() |
| } |