Skip to content

Commit cd44b14

Browse files
committed
feat: watch all matching files #94
1 parent de17ade commit cd44b14

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

src/extension.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,6 @@ export async function activate(context: vscode.ExtensionContext) {
8181
DocumentCache.clear(event);
8282
}),
8383
vscode.workspace.onDidSaveTextDocument(textDocument => {
84-
const workspaceFolder = vscode.workspace.getWorkspaceFolder(textDocument.uri);
85-
86-
if (workspaceFolder) {
87-
IndexRunner.indexFile(workspaceFolder, textDocument.uri);
88-
}
89-
9084
DocumentCache.clear(textDocument);
9185
})
9286
);

src/indexer/IndexManager.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Progress, Uri, workspace, WorkspaceFolder } from 'vscode';
1+
import { FileSystemWatcher, Progress, Uri, workspace, WorkspaceFolder } from 'vscode';
22
import { Indexer } from './Indexer';
33
import Common from 'util/Common';
44
import { 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

235257
export default new IndexManager();

0 commit comments

Comments
 (0)