@@ -10,6 +10,16 @@ import type { LanguageClientManager } from "./languageClientManager";
1010import { type WorkspaceTracker , getProjectDir } from "./project" ;
1111import { reporter } from "./telemetry" ;
1212
13+ const workspaceWatchers = new Map < string , vscode . FileSystemWatcher > ( ) ;
14+
15+ export function handleWorkspaceFolderRemoved ( folder : vscode . WorkspaceFolder ) {
16+ const watcher = workspaceWatchers . get ( folder . uri . toString ( ) ) ;
17+ if ( watcher ) {
18+ watcher . dispose ( ) ;
19+ workspaceWatchers . delete ( folder . uri . toString ( ) ) ;
20+ }
21+ }
22+
1323export function configureTestController (
1424 context : vscode . ExtensionContext ,
1525 languageClientManager : LanguageClientManager ,
@@ -350,6 +360,9 @@ export function configureTestController(
350360
351361 await Promise . all (
352362 outerMostWorkspaceFolders . map ( async ( workspaceFolder ) => {
363+ if ( workspaceWatchers . has ( workspaceFolder . uri . toString ( ) ) ) {
364+ return workspaceWatchers . get ( workspaceFolder . uri . toString ( ) ) ;
365+ }
353366 const projectDir = getProjectDir ( workspaceFolder ) ;
354367 console . log (
355368 "ElixirLS: registering watcher in" ,
@@ -361,6 +374,8 @@ export function configureTestController(
361374 const pattern = new vscode . RelativePattern ( projectDir , "**/*_test.exs" ) ;
362375 const watcher = vscode . workspace . createFileSystemWatcher ( pattern ) ;
363376
377+ workspaceWatchers . set ( workspaceFolder . uri . toString ( ) , watcher ) ;
378+
364379 context . subscriptions . push ( watcher ) ;
365380
366381 // When files are created, make sure there's a corresponding "file" node in the tree
0 commit comments