Browse Source

fix diagnostics for deleted files

Kujtim Hoxha 10 months ago
parent
commit
2941137416
2 changed files with 14 additions and 5 deletions
  1. 11 4
      internal/lsp/client.go
  2. 3 1
      internal/lsp/watcher/watcher.go

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

+ 3 - 1
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)