1- import { Progress , Uri , workspace , WorkspaceFolder } from 'vscode' ;
1+ import { FileSystemWatcher , Progress , Uri , workspace , WorkspaceFolder } from 'vscode' ;
22import { Indexer } from './Indexer' ;
33import Common from 'util/Common' ;
44import { minimatch } from 'minimatch' ;
@@ -45,6 +45,7 @@ class IndexManager {
4545
4646 protected indexers : IndexerInstance [ ] = [ ] ;
4747 protected indexStorage : IndexStorage ;
48+ protected fileWatchers : Record < IndexerKey , FileSystemWatcher > = { } ;
4849
4950 public constructor ( ) {
5051 this . indexers = [
@@ -57,6 +58,10 @@ class IndexManager {
5758 new CronIndexer ( ) ,
5859 ] ;
5960 this . indexStorage = new IndexStorage ( ) ;
61+
62+ if ( Common . getActiveWorkspaceFolder ( ) ) {
63+ this . watchFiles ( Common . getActiveWorkspaceFolder ( ) ! ) ;
64+ }
6065 }
6166
6267 public getIndexers ( ) : IndexerInstance [ ] {
@@ -230,6 +235,23 @@ class IndexManager {
230235 protected shouldIndex ( workspaceFolder : WorkspaceFolder , index : IndexerInstance ) : boolean {
231236 return ! this . indexStorage . hasIndex ( workspaceFolder , index . getId ( ) ) ;
232237 }
238+
239+ protected watchFiles ( workspaceFolder : WorkspaceFolder ) {
240+ for ( const indexer of this . indexers ) {
241+ const pattern = indexer . getPattern ( workspaceFolder . uri ) ;
242+ const patternString = typeof pattern === 'string' ? pattern : pattern . pattern ;
243+
244+ if ( this . fileWatchers [ indexer . getId ( ) ] ) {
245+ this . fileWatchers [ indexer . getId ( ) ] . dispose ( ) ;
246+ }
247+
248+ this . fileWatchers [ indexer . getId ( ) ] = workspace . createFileSystemWatcher ( patternString ) ;
249+
250+ this . fileWatchers [ indexer . getId ( ) ] . onDidChange ( file => {
251+ this . indexFileInner ( workspaceFolder , file , indexer ) ;
252+ } ) ;
253+ }
254+ }
233255}
234256
235257export default new IndexManager ( ) ;
0 commit comments