Pick up new markdown LS version (#157843)

This commit is contained in:
Matt Bierner
2022-08-10 18:16:24 -07:00
committed by GitHub
parent f3e488a7b7
commit 38ea5c22a6
8 changed files with 118 additions and 142 deletions

View File

@@ -11,7 +11,7 @@ import { registerPasteSupport } from './languageFeatures/copyPaste';
import { registerDiagnosticSupport } from './languageFeatures/diagnostics';
import { registerDropIntoEditorSupport } from './languageFeatures/dropIntoEditor';
import { registerFindFileReferenceSupport } from './languageFeatures/fileReferences';
import { registerUpdatePathsOnRename } from './languageFeatures/updatePathsOnRename';
import { registerUpdateLinksOnRename } from './languageFeatures/updatePathsOnRename';
import { ILogger } from './logging';
import { MarkdownItEngine, MdParsingProvider } from './markdownEngine';
import { MarkdownContributionProvider } from './markdownExtensions';
@@ -63,7 +63,7 @@ function registerMarkdownLanguageFeatures(
registerDropIntoEditorSupport(selector),
registerFindFileReferenceSupport(commandManager, client),
registerPasteSupport(selector),
registerUpdatePathsOnRename(client),
registerUpdateLinksOnRename(client),
);
}

View File

@@ -19,7 +19,8 @@ const localize = nls.loadMessageBundle();
const settingNames = Object.freeze({
enabled: 'experimental.updateLinksOnFileMove.enabled',
externalFileGlobs: 'experimental.updateLinksOnFileMove.externalFileGlobs'
externalFileGlobs: 'experimental.updateLinksOnFileMove.externalFileGlobs',
enableForDirectories: 'experimental.updateLinksOnFileMove.enableForDirectories',
});
const enum UpdateLinksOnFileMoveSetting {
@@ -33,7 +34,7 @@ interface RenameAction {
readonly newUri: vscode.Uri;
}
class UpdateImportsOnFileRenameHandler extends Disposable {
class UpdateLinksOnFileRenameHandler extends Disposable {
private readonly _delayer = new Delayer(50);
private readonly _pendingRenames = new Set<RenameAction>();
@@ -44,27 +45,23 @@ class UpdateImportsOnFileRenameHandler extends Disposable {
super();
this._register(vscode.workspace.onDidRenameFiles(async (e) => {
const [{ newUri, oldUri }] = e.files; // TODO: only handles first file
for (const { newUri, oldUri } of e.files) {
const config = this.getConfiguration(newUri);
if (!await this.shouldParticipateInLinkUpdate(config, newUri)) {
continue;
}
const config = this.getConfiguration(newUri);
const setting = config.get<UpdateLinksOnFileMoveSetting>(settingNames.enabled);
if (setting === UpdateLinksOnFileMoveSetting.Never) {
return;
this._pendingRenames.add({ newUri, oldUri });
}
if (!this.shouldParticipateInLinkUpdate(config, newUri)) {
return;
if (this._pendingRenames.size) {
this._delayer.trigger(() => {
vscode.window.withProgress({
location: vscode.ProgressLocation.Window,
title: localize('renameProgress.title', "Checking for Markdown links to update")
}, () => this.flushRenames());
});
}
this._pendingRenames.add({ oldUri, newUri });
this._delayer.trigger(() => {
vscode.window.withProgress({
location: vscode.ProgressLocation.Window,
title: localize('renameProgress.title', "Checking for Markdown links to update")
}, () => this.flushRenames());
});
}));
}
@@ -110,13 +107,27 @@ class UpdateImportsOnFileRenameHandler extends Disposable {
return vscode.workspace.getConfiguration('markdown', resource);
}
private shouldParticipateInLinkUpdate(config: vscode.WorkspaceConfiguration, newUri: vscode.Uri) {
private async shouldParticipateInLinkUpdate(config: vscode.WorkspaceConfiguration, newUri: vscode.Uri): Promise<boolean> {
const setting = config.get<UpdateLinksOnFileMoveSetting>(settingNames.enabled);
if (setting === UpdateLinksOnFileMoveSetting.Never) {
return false;
}
if (looksLikeMarkdownPath(newUri)) {
return true;
}
const externalGlob = config.get<string>(settingNames.externalFileGlobs);
return !!externalGlob && picomatch.isMatch(newUri.fsPath, externalGlob);
if (!!externalGlob && picomatch.isMatch(newUri.fsPath, externalGlob)) {
return true;
}
const stat = await vscode.workspace.fs.stat(newUri);
if (stat.type === vscode.FileType.Directory) {
return config.get<boolean>(settingNames.enableForDirectories, true);
}
return false;
}
private async promptUser(newResources: readonly vscode.Uri[]): Promise<boolean> {
@@ -229,6 +240,6 @@ class UpdateImportsOnFileRenameHandler extends Disposable {
}
}
export function registerUpdatePathsOnRename(client: BaseLanguageClient) {
return new UpdateImportsOnFileRenameHandler(client);
export function registerUpdateLinksOnRename(client: BaseLanguageClient) {
return new UpdateLinksOnFileRenameHandler(client);
}