summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorKujtim Hoxha <[email protected]>2025-04-28 19:37:42 +0200
committerKujtim Hoxha <[email protected]>2025-04-28 19:37:42 +0200
commit294113741641cb7f6fe5c9aa114328b5bf8814ec (patch)
treeaf63e160a9606953bd886cdc5bd78d9ce2e98c80
parentb3c0285db3dd5d5140481bf5118812e8dbc89795 (diff)
downloadopencode-294113741641cb7f6fe5c9aa114328b5bf8814ec.tar.gz
opencode-294113741641cb7f6fe5c9aa114328b5bf8814ec.zip
fix diagnostics for deleted files
-rw-r--r--internal/lsp/client.go15
-rw-r--r--internal/lsp/watcher/watcher.go4
2 files changed, 14 insertions, 5 deletions
diff --git a/internal/lsp/client.go b/internal/lsp/client.go
index 5caf20e82..d115b2404 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 69d341212..fd7e04837 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)