fix diagnostics for deleted files

Kujtim Hoxha created

Change summary

internal/lsp/client.go          | 15 +++++++++++----
internal/lsp/watcher/watcher.go |  4 +++-
2 files changed, 14 insertions(+), 5 deletions(-)

Detailed changes

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)
+}

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)