Pick up newest markdown language service (#159619)

This brings support for code actions and source actions, along with some bug fixes

Also fixes `getAllMarkdownDocuments` to prefer open documents instead of those on disk
This commit is contained in:
Matt Bierner
2022-08-31 00:20:41 -07:00
committed by GitHub
parent 57fbc50857
commit 21337aed3f
5 changed files with 82 additions and 21 deletions

View File

@@ -10,7 +10,6 @@ import { ContainingDocumentContext, FileWatcherOptions, IFileSystemWatcher } fro
import { URI } from 'vscode-uri';
import { LsConfiguration } from './config';
import * as protocol from './protocol';
import { coalesce } from './util/arrays';
import { isMarkdownFile, looksLikeMarkdownPath } from './util/file';
import { Limiter } from './util/limiter';
import { ResourceMap } from './util/resourceMap';
@@ -133,29 +132,35 @@ export class VsCodeClientWorkspace implements md.IWorkspaceWithWatching {
}
async getAllMarkdownDocuments(): Promise<Iterable<md.ITextDocument>> {
// Add opened files (such as untitled files)
const openTextDocumentResults = this.documents.all()
.filter(doc => this.isRelevantMarkdownDocument(doc));
const allDocs = new ResourceMap<md.ITextDocument>();
for (const doc of openTextDocumentResults) {
allDocs.set(URI.parse(doc.uri), doc);
}
// And then add files on disk
const maxConcurrent = 20;
const foundFiles = new ResourceMap<void>();
const limiter = new Limiter<md.ITextDocument | undefined>(maxConcurrent);
// Add files on disk
const resources = await this.connection.sendRequest(protocol.findMarkdownFilesInWorkspace, {});
const onDiskResults = await Promise.all(resources.map(strResource => {
await Promise.all(resources.map(strResource => {
return limiter.queue(async () => {
const resource = URI.parse(strResource);
if (allDocs.has(resource)) {
return;
}
const doc = await this.openMarkdownDocument(resource);
if (doc) {
foundFiles.set(resource);
allDocs.set(resource, doc);
}
return doc;
});
}));
// Add opened files (such as untitled files)
const openTextDocumentResults = await Promise.all(this.documents.all()
.filter(doc => !foundFiles.has(URI.parse(doc.uri)) && this.isRelevantMarkdownDocument(doc)));
return coalesce([...onDiskResults, ...openTextDocumentResults]);
return allDocs.values();
}
hasMarkdownDocument(resource: URI): boolean {