Skip to content

Commit e0ae638

Browse files
committed
Extracting common code for getMarkdownDocument
1 parent 7b69194 commit e0ae638

1 file changed

Lines changed: 21 additions & 17 deletions

File tree

extensions/markdown-language-features/src/features/workspaceSymbolProvider.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ import MDDocumentSymbolProvider from './documentSymbolProvider';
1111
import { SkinnyTextDocument } from '../tableOfContentsProvider';
1212

1313
export interface WorkspaceMarkdownDocumentProvider {
14-
getAllMarkdownDocuments(): Thenable<SkinnyTextDocument[]>;
14+
getAllMarkdownDocuments(): Thenable<Iterable<SkinnyTextDocument>>;
1515

16-
readonly onDidChangeMarkdownDocument: vscode.Event<vscode.TextDocument>;
17-
readonly onDidCreateMarkdownDocument: vscode.Event<vscode.TextDocument>;
16+
readonly onDidChangeMarkdownDocument: vscode.Event<SkinnyTextDocument>;
17+
readonly onDidCreateMarkdownDocument: vscode.Event<SkinnyTextDocument>;
1818
readonly onDidDeleteMarkdownDocument: vscode.Event<vscode.Uri>;
1919
}
2020

2121
class VSCodeWorkspaceMarkdownDocumentProvider implements WorkspaceMarkdownDocumentProvider {
2222

23-
private readonly _onDidChangeMarkdownDocumentEmitter = new vscode.EventEmitter<vscode.TextDocument>();
24-
private readonly _onDidCreateMarkdownDocumentEmitter = new vscode.EventEmitter<vscode.TextDocument>();
23+
private readonly _onDidChangeMarkdownDocumentEmitter = new vscode.EventEmitter<SkinnyTextDocument>();
24+
private readonly _onDidCreateMarkdownDocumentEmitter = new vscode.EventEmitter<SkinnyTextDocument>();
2525
private readonly _onDidDeleteMarkdownDocumentEmitter = new vscode.EventEmitter<vscode.Uri>();
2626

2727
private _watcher: vscode.FileSystemWatcher | undefined;
@@ -40,9 +40,8 @@ class VSCodeWorkspaceMarkdownDocumentProvider implements WorkspaceMarkdownDocume
4040

4141
async getAllMarkdownDocuments() {
4242
const resources = await vscode.workspace.findFiles('**/*.md', '**/node_modules/**');
43-
const documents = await Promise.all(
44-
resources.map(resource => vscode.workspace.openTextDocument(resource).then(x => x, () => undefined)));
45-
return documents.filter(doc => doc && isMarkdownFile(doc)) as vscode.TextDocument[];
43+
const docs = await Promise.all(resources.map(doc => this.getMarkdownDocument(doc)));
44+
return docs.filter(doc => !!doc) as SkinnyTextDocument[];
4645
}
4746

4847
public get onDidChangeMarkdownDocument() {
@@ -68,15 +67,15 @@ class VSCodeWorkspaceMarkdownDocumentProvider implements WorkspaceMarkdownDocume
6867
this._watcher = vscode.workspace.createFileSystemWatcher('**/*.md');
6968

7069
this._watcher.onDidChange(async resource => {
71-
const document = await vscode.workspace.openTextDocument(resource);
72-
if (isMarkdownFile(document)) {
70+
const document = await this.getMarkdownDocument(resource);
71+
if (document) {
7372
this._onDidChangeMarkdownDocumentEmitter.fire(document);
7473
}
7574
}, null, this._disposables);
7675

7776
this._watcher.onDidCreate(async resource => {
78-
const document = await vscode.workspace.openTextDocument(resource);
79-
if (isMarkdownFile(document)) {
77+
const document = await this.getMarkdownDocument(resource);
78+
if (document) {
8079
this._onDidCreateMarkdownDocumentEmitter.fire(document);
8180
}
8281
}, null, this._disposables);
@@ -91,6 +90,11 @@ class VSCodeWorkspaceMarkdownDocumentProvider implements WorkspaceMarkdownDocume
9190
}
9291
}, null, this._disposables);
9392
}
93+
94+
private async getMarkdownDocument(resource: vscode.Uri): Promise<SkinnyTextDocument | undefined> {
95+
const doc = await vscode.workspace.openTextDocument(resource);
96+
return doc && isMarkdownFile(doc) ? doc : undefined;
97+
}
9498
}
9599

96100

@@ -120,8 +124,8 @@ export default class MarkdownWorkspaceSymbolProvider implements vscode.Workspace
120124
}
121125

122126
public async populateSymbolCache(): Promise<void> {
123-
const markDownDocumentUris = await this._workspaceMarkdownDocumentProvider.getAllMarkdownDocuments();
124-
for (const document of markDownDocumentUris) {
127+
const markdownDocumentUris = await this._workspaceMarkdownDocumentProvider.getAllMarkdownDocuments();
128+
for (const document of markdownDocumentUris) {
125129
this._symbolCache.set(document.uri.fsPath, this.getSymbols(document));
126130
}
127131
}
@@ -136,11 +140,11 @@ export default class MarkdownWorkspaceSymbolProvider implements vscode.Workspace
136140
});
137141
}
138142

139-
private onDidChangeDocument(document: vscode.TextDocument) {
140-
this._symbolCache.set(document.fileName, this.getSymbols(document));
143+
private onDidChangeDocument(document: SkinnyTextDocument) {
144+
this._symbolCache.set(document.uri.fsPath, this.getSymbols(document));
141145
}
142146

143147
private onDidDeleteDocument(resource: vscode.Uri) {
144148
this._symbolCache.delete(resource.fsPath);
145149
}
146-
}
150+
}

0 commit comments

Comments
 (0)