diff --git a/internal/lsp/client.go b/internal/lsp/client.go index 5caf20e82722d77797798c2e5b530f9fc91d90d8..d115b2404b798a7e69f378799eb9b01725ebed7c 100644 --- a/internal/lsp/client.go +++ b/internal/lsp/client.go @@ -389,7 +389,7 @@ func (c *Client) openKeyConfigFiles(ctx context.Context) { filepath.Join(workDir, "package.json"), filepath.Join(workDir, "jsconfig.json"), } - + // Also find and open a few TypeScript files to help the server initialize c.openTypeScriptFiles(ctx, workDir) case ServerTypeGo: @@ -547,12 +547,12 @@ func (c *Client) openTypeScriptFiles(ctx context.Context, workDir string) { // shouldSkipDir returns true if the directory should be skipped during file search func shouldSkipDir(path string) bool { dirName := filepath.Base(path) - + // Skip hidden directories if strings.HasPrefix(dirName, ".") { return true } - + // Skip common directories that won't contain relevant source files skipDirs := map[string]bool{ "node_modules": true, @@ -562,7 +562,7 @@ func shouldSkipDir(path string) bool { "vendor": true, "target": true, } - + return skipDirs[dirName] } @@ -776,3 +776,10 @@ func (c *Client) GetDiagnosticsForFile(ctx context.Context, filepath string) ([] return diagnostics, nil } + +// ClearDiagnosticsForURI removes diagnostics for a specific URI from the cache +func (c *Client) ClearDiagnosticsForURI(uri protocol.DocumentUri) { + c.diagnosticsMu.Lock() + defer c.diagnosticsMu.Unlock() + delete(c.diagnostics, uri) +} diff --git a/internal/lsp/watcher/watcher.go b/internal/lsp/watcher/watcher.go index 69d341212624b43aeb27562b20e9beabcc498d1e..fd7e04837185edafe2372c0f926ec55f8ec95001 100644 --- a/internal/lsp/watcher/watcher.go +++ b/internal/lsp/watcher/watcher.go @@ -643,7 +643,9 @@ func (w *WorkspaceWatcher) debounceHandleFileEvent(ctx context.Context, uri stri func (w *WorkspaceWatcher) handleFileEvent(ctx context.Context, uri string, changeType protocol.FileChangeType) { // If the file is open and it's a change event, use didChange notification filePath := uri[7:] // Remove "file://" prefix - if changeType == protocol.FileChangeType(protocol.Changed) && w.client.IsFileOpen(filePath) { + if changeType == protocol.FileChangeType(protocol.Deleted) { + w.client.ClearDiagnosticsForURI(protocol.DocumentUri(uri)) + } else if changeType == protocol.FileChangeType(protocol.Changed) && w.client.IsFileOpen(filePath) { err := w.client.NotifyChange(ctx, filePath) if err != nil { logging.Error("Error notifying change", "error", err)