mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-22 17:48:56 +01:00
Adding single file test
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user