Adding single file test

This commit is contained in:
Matt Bierner
2018-04-13 15:39:56 -07:00
parent aa0d43ea2d
commit 6044fcacc8
2 changed files with 35 additions and 18 deletions

View File

@@ -3,38 +3,41 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Disposable, SymbolInformation, TextDocument, Uri, WorkspaceSymbolProvider, workspace } from 'vscode';
import * as vscode from 'vscode';
import { disposeAll } from '../util/dispose';
import { isMarkdownFile } from '../util/file';
import MDDocumentSymbolProvider from './documentSymbolProvider';
export interface WorkspaceMarkdownDocumentProvider {
getAllMarkdownDocuments(): Thenable<Uri[]>;
getAllMarkdownDocuments(): Thenable<vscode.TextDocument[]>;
}
class VSCodeWorkspaceMarkdownDocumentProvider implements WorkspaceMarkdownDocumentProvider {
getAllMarkdownDocuments() {
return workspace.findFiles('**/*.md');
async getAllMarkdownDocuments() {
const resources = await vscode.workspace.findFiles('**/*.md');
const documents = await Promise.all(
resources.map(resource => vscode.workspace.openTextDocument(resource).then(x => x, () => undefined)));
return documents.filter(doc => doc && isMarkdownFile(doc)) as vscode.TextDocument[];
}
}
export default class MarkdownWorkspaceSymbolProvider implements WorkspaceSymbolProvider {
private _symbolCache = new Map<string, SymbolInformation[]>();
export default class MarkdownWorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvider {
private _symbolCache = new Map<string, vscode.SymbolInformation[]>();
private _symbolCachePopulated: boolean = false;
private _disposables: Disposable[] = [];
private _disposables: vscode.Disposable[] = [];
public constructor(
private _symbolProvider: MDDocumentSymbolProvider,
private _workspaceMarkdownDocumentProvider: WorkspaceMarkdownDocumentProvider = new VSCodeWorkspaceMarkdownDocumentProvider()
) { }
public async provideWorkspaceSymbols(query: string): Promise<SymbolInformation[]> {
public async provideWorkspaceSymbols(query: string): Promise<vscode.SymbolInformation[]> {
if (!this._symbolCachePopulated) {
await this.populateSymbolCache();
this._symbolCachePopulated = true;
const watcher = workspace.createFileSystemWatcher('**/*.md');
const watcher = vscode.workspace.createFileSystemWatcher('**/*.md');
this._disposables.push(watcher);
watcher.onDidChange(this.onDidChange, this, this._disposables);
}
@@ -45,12 +48,9 @@ export default class MarkdownWorkspaceSymbolProvider implements WorkspaceSymbolP
public async populateSymbolCache(): Promise<void> {
const markDownDocumentUris = await this._workspaceMarkdownDocumentProvider.getAllMarkdownDocuments();
for (const uri of markDownDocumentUris) {
const document = await workspace.openTextDocument(uri);
if (isMarkdownFile(document)) {
const symbols = await this.getSymbol(document);
this._symbolCache.set(document.fileName, symbols);
}
for (const document of markDownDocumentUris) {
const symbols = await this.getSymbol(document);
this._symbolCache.set(document.fileName, symbols);
}
}
@@ -58,12 +58,12 @@ export default class MarkdownWorkspaceSymbolProvider implements WorkspaceSymbolP
disposeAll(this._disposables);
}
private async getSymbol(document: TextDocument): Promise<SymbolInformation[]> {
private async getSymbol(document: vscode.TextDocument): Promise<vscode.SymbolInformation[]> {
return this._symbolProvider.provideDocumentSymbols(document);
}
private async onDidChange(resource: Uri) {
const document = await workspace.openTextDocument(resource);
private async onDidChange(resource: vscode.Uri) {
const document = await vscode.workspace.openTextDocument(resource);
if (isMarkdownFile(document)) {
const symbols = await this.getSymbol(document);
this._symbolCache.set(document.fileName, symbols);