@@ -45,7 +45,7 @@ class IndexManager {
4545
4646 protected indexers : IndexerInstance [ ] = [ ] ;
4747 protected indexStorage : IndexStorage ;
48- protected fileWatchers : Record < IndexerKey , FileSystemWatcher > = { } ;
48+ protected fileWatchers : Record < string , Record < IndexerKey , FileSystemWatcher > > = { } ;
4949
5050 public constructor ( ) {
5151 this . indexers = [
@@ -58,10 +58,6 @@ class IndexManager {
5858 new CronIndexer ( ) ,
5959 ] ;
6060 this . indexStorage = new IndexStorage ( ) ;
61-
62- if ( Common . getActiveWorkspaceFolder ( ) ) {
63- this . watchFiles ( Common . getActiveWorkspaceFolder ( ) ! ) ;
64- }
6561 }
6662
6763 public getIndexers ( ) : IndexerInstance [ ] {
@@ -232,23 +228,57 @@ class IndexManager {
232228 clear ( [ indexer . getId ( ) ] ) ;
233229 }
234230
231+ protected async removeFileFromIndex (
232+ workspaceFolder : WorkspaceFolder ,
233+ file : Uri ,
234+ indexer : Indexer
235+ ) {
236+ const indexData = this . getIndexStorageData ( indexer . getId ( ) ) || new Map ( ) ;
237+ indexData . delete ( file . fsPath ) ;
238+ this . indexStorage . set ( workspaceFolder , indexer . getId ( ) , indexData ) ;
239+ await this . indexStorage . saveIndex ( workspaceFolder , indexer . getId ( ) , indexer . getVersion ( ) ) ;
240+ }
241+
235242 protected shouldIndex ( workspaceFolder : WorkspaceFolder , index : IndexerInstance ) : boolean {
236243 return ! this . indexStorage . hasIndex ( workspaceFolder , index . getId ( ) ) ;
237244 }
238245
239- protected watchFiles ( workspaceFolder : WorkspaceFolder ) {
246+ public watchFiles ( workspaceFolder : WorkspaceFolder ) {
247+ Logger . logWithTime ( 'Watching files for workspace' , workspaceFolder . uri . fsPath ) ;
248+
249+ if ( ! this . fileWatchers [ workspaceFolder . uri . fsPath ] ) {
250+ this . fileWatchers [ workspaceFolder . uri . fsPath ] = { } ;
251+ }
252+
240253 for ( const indexer of this . indexers ) {
241254 const pattern = indexer . getPattern ( workspaceFolder . uri ) ;
242255 const patternString = typeof pattern === 'string' ? pattern : pattern . pattern ;
243256
244- if ( this . fileWatchers [ indexer . getId ( ) ] ) {
245- this . fileWatchers [ indexer . getId ( ) ] . dispose ( ) ;
257+ let watcher : FileSystemWatcher | undefined =
258+ this . fileWatchers [ workspaceFolder . uri . fsPath ] [ indexer . getId ( ) ] ;
259+
260+ if ( watcher ) {
261+ watcher . dispose ( ) ;
246262 }
247263
248- this . fileWatchers [ indexer . getId ( ) ] = workspace . createFileSystemWatcher ( patternString ) ;
264+ watcher = workspace . createFileSystemWatcher ( patternString , false , false , false ) ;
265+
266+ watcher . onDidChange ( file => {
267+ this . indexFileInner ( workspaceFolder , file , indexer ) ;
268+
269+ Logger . logWithTime ( 'File changed' , file . fsPath ) ;
270+ } ) ;
249271
250- this . fileWatchers [ indexer . getId ( ) ] . onDidChange ( file => {
272+ watcher . onDidCreate ( file => {
251273 this . indexFileInner ( workspaceFolder , file , indexer ) ;
274+
275+ Logger . logWithTime ( 'File created' , file . fsPath ) ;
276+ } ) ;
277+
278+ watcher . onDidDelete ( file => {
279+ this . removeFileFromIndex ( workspaceFolder , file , indexer ) ;
280+
281+ Logger . logWithTime ( 'File deleted' , file . fsPath ) ;
252282 } ) ;
253283 }
254284 }
0 commit comments