@@ -10,6 +10,16 @@ import type { LanguageClientManager } from "./languageClientManager";
10
10
import { type WorkspaceTracker , getProjectDir } from "./project" ;
11
11
import { reporter } from "./telemetry" ;
12
12
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
+
13
23
export function configureTestController (
14
24
context : vscode . ExtensionContext ,
15
25
languageClientManager : LanguageClientManager ,
@@ -350,6 +360,9 @@ export function configureTestController(
350
360
351
361
await Promise . all (
352
362
outerMostWorkspaceFolders . map ( async ( workspaceFolder ) => {
363
+ if ( workspaceWatchers . has ( workspaceFolder . uri . toString ( ) ) ) {
364
+ return workspaceWatchers . get ( workspaceFolder . uri . toString ( ) ) ;
365
+ }
353
366
const projectDir = getProjectDir ( workspaceFolder ) ;
354
367
console . log (
355
368
"ElixirLS: registering watcher in" ,
@@ -361,6 +374,8 @@ export function configureTestController(
361
374
const pattern = new vscode . RelativePattern ( projectDir , "**/*_test.exs" ) ;
362
375
const watcher = vscode . workspace . createFileSystemWatcher ( pattern ) ;
363
376
377
+ workspaceWatchers . set ( workspaceFolder . uri . toString ( ) , watcher ) ;
378
+
364
379
context . subscriptions . push ( watcher ) ;
365
380
366
381
// When files are created, make sure there's a corresponding "file" node in the tree
0 commit comments