mirror of
https://github.com/Microsoft/vscode
synced 2024-09-13 21:55:38 +00:00
Switch to using watcher
This commit is contained in:
parent
34adcb749a
commit
62078256fb
|
@ -3,7 +3,8 @@
|
||||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import { workspace, WorkspaceSymbolProvider, SymbolInformation, TextDocument, Disposable } from 'vscode';
|
import { Disposable, SymbolInformation, TextDocument, Uri, WorkspaceSymbolProvider, workspace } from 'vscode';
|
||||||
|
import { disposeAll } from '../util/dispose';
|
||||||
import { isMarkdownFile } from '../util/file';
|
import { isMarkdownFile } from '../util/file';
|
||||||
import MDDocumentSymbolProvider from './documentSymbolProvider';
|
import MDDocumentSymbolProvider from './documentSymbolProvider';
|
||||||
|
|
||||||
|
@ -11,18 +12,21 @@ export default class MarkdownWorkspaceSymbolProvider implements WorkspaceSymbolP
|
||||||
private symbolProvider: MDDocumentSymbolProvider;
|
private symbolProvider: MDDocumentSymbolProvider;
|
||||||
private symbolCache = new Map<string, SymbolInformation[]>();
|
private symbolCache = new Map<string, SymbolInformation[]>();
|
||||||
private symbolCachePopulated: boolean;
|
private symbolCachePopulated: boolean;
|
||||||
private deRegisterOnSaveEvent: Disposable;
|
private disposables: Disposable[] = [];
|
||||||
|
|
||||||
public constructor(symbolProvider: MDDocumentSymbolProvider) {
|
public constructor(symbolProvider: MDDocumentSymbolProvider) {
|
||||||
this.symbolProvider = symbolProvider;
|
this.symbolProvider = symbolProvider;
|
||||||
this.symbolCachePopulated = false;
|
this.symbolCachePopulated = false;
|
||||||
this.deRegisterOnSaveEvent = this.registerOnSaveEvent();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async provideWorkspaceSymbols(query: string): Promise<SymbolInformation[]> {
|
public async provideWorkspaceSymbols(query: string): Promise<SymbolInformation[]> {
|
||||||
if (!this.symbolCachePopulated) {
|
if (!this.symbolCachePopulated) {
|
||||||
await this.populateSymbolCache();
|
await this.populateSymbolCache();
|
||||||
this.symbolCachePopulated = true;
|
this.symbolCachePopulated = true;
|
||||||
|
|
||||||
|
const watcher = workspace.createFileSystemWatcher('**/*.md');
|
||||||
|
this.disposables.push(watcher);
|
||||||
|
watcher.onDidChange(this.onDidChange, this, this.disposables);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Array.prototype.concat.apply([], Array.from(this.symbolCache.values())
|
return Array.prototype.concat.apply([], Array.from(this.symbolCache.values())
|
||||||
|
@ -41,20 +45,18 @@ export default class MarkdownWorkspaceSymbolProvider implements WorkspaceSymbolP
|
||||||
}
|
}
|
||||||
|
|
||||||
public dispose(): void {
|
public dispose(): void {
|
||||||
this.deRegisterOnSaveEvent.dispose();
|
disposeAll(this.disposables);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async getSymbol(document: TextDocument): Promise<SymbolInformation[]> {
|
private async getSymbol(document: TextDocument): Promise<SymbolInformation[]> {
|
||||||
return this.symbolProvider.provideDocumentSymbols(document);
|
return this.symbolProvider.provideDocumentSymbols(document);
|
||||||
}
|
}
|
||||||
|
|
||||||
private registerOnSaveEvent(): Disposable {
|
private async onDidChange(resource: Uri) {
|
||||||
return workspace.onDidSaveTextDocument(async document => {
|
const document = await workspace.openTextDocument(resource);
|
||||||
if (isMarkdownFile(document)) {
|
if (isMarkdownFile(document)) {
|
||||||
const symbols = await this.getSymbol(document);
|
const symbols = await this.getSymbol(document);
|
||||||
this.symbolCache.set(document.fileName, symbols);
|
this.symbolCache.set(document.fileName, symbols);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue