Experiment with switching markdown extension to use native privates

Let's try this out with one extension to start
This commit is contained in:
Matt Bierner
2026-03-10 23:13:16 -07:00
parent 6597286e32
commit 7df46143a1
43 changed files with 845 additions and 690 deletions

View File

@@ -10,12 +10,16 @@ import { MarkdownPreviewManager } from '../preview/previewManager';
export class CopyImageCommand implements Command {
public readonly id = '_markdown.copyImage';
readonly #webviewManager: MarkdownPreviewManager;
public constructor(
private readonly _webviewManager: MarkdownPreviewManager,
) { }
webviewManager: MarkdownPreviewManager,
) {
this.#webviewManager = webviewManager;
}
public execute(args: { id: string; resource: string }) {
const source = vscode.Uri.parse(args.resource);
this._webviewManager.findPreview(source)?.copyImage(args.id);
this.#webviewManager.findPreview(source)?.copyImage(args.id);
}
}

View File

@@ -10,12 +10,16 @@ import { MarkdownPreviewManager } from '../preview/previewManager';
export class OpenImageCommand implements Command {
public readonly id = '_markdown.openImage';
readonly #webviewManager: MarkdownPreviewManager;
public constructor(
private readonly _webviewManager: MarkdownPreviewManager,
) { }
webviewManager: MarkdownPreviewManager,
) {
this.#webviewManager = webviewManager;
}
public execute(args: { resource: string; imageSource: string }) {
const source = vscode.Uri.parse(args.resource);
this._webviewManager.openDocumentLink(args.imageSource, source);
this.#webviewManager.openDocumentLink(args.imageSource, source);
}
}

View File

@@ -10,13 +10,19 @@ import { MarkdownPreviewManager } from '../preview/previewManager';
export class RefreshPreviewCommand implements Command {
public readonly id = 'markdown.preview.refresh';
readonly #webviewManager: MarkdownPreviewManager;
readonly #engine: MarkdownItEngine;
public constructor(
private readonly _webviewManager: MarkdownPreviewManager,
private readonly _engine: MarkdownItEngine
) { }
webviewManager: MarkdownPreviewManager,
engine: MarkdownItEngine
) {
this.#webviewManager = webviewManager;
this.#engine = engine;
}
public execute() {
this._engine.cleanCache();
this._webviewManager.refresh();
this.#engine.cleanCache();
this.#webviewManager.refresh();
}
}

View File

@@ -10,14 +10,20 @@ import { MarkdownPreviewManager } from '../preview/previewManager';
export class ReloadPlugins implements Command {
public readonly id = 'markdown.api.reloadPlugins';
readonly #webviewManager: MarkdownPreviewManager;
readonly #engine: MarkdownItEngine;
public constructor(
private readonly _webviewManager: MarkdownPreviewManager,
private readonly _engine: MarkdownItEngine,
) { }
webviewManager: MarkdownPreviewManager,
engine: MarkdownItEngine,
) {
this.#webviewManager = webviewManager;
this.#engine = engine;
}
public execute(): void {
this._engine.reloadPlugins();
this._engine.cleanCache();
this._webviewManager.refresh();
this.#engine.reloadPlugins();
this.#engine.cleanCache();
this.#webviewManager.refresh();
}
}

View File

@@ -10,11 +10,15 @@ import { ITextDocument } from '../types/textDocument';
export class RenderDocument implements Command {
public readonly id = 'markdown.api.render';
readonly #engine: MarkdownItEngine;
public constructor(
private readonly _engine: MarkdownItEngine
) { }
engine: MarkdownItEngine
) {
this.#engine = engine;
}
public async execute(document: ITextDocument | string): Promise<string> {
return (await (this._engine.render(document))).html;
return (await (this.#engine.render(document))).html;
}
}

View File

@@ -53,14 +53,20 @@ async function showPreview(
export class ShowPreviewCommand implements Command {
public readonly id = 'markdown.showPreview';
readonly #webviewManager: MarkdownPreviewManager;
readonly #telemetryReporter: TelemetryReporter;
public constructor(
private readonly _webviewManager: MarkdownPreviewManager,
private readonly _telemetryReporter: TelemetryReporter
) { }
webviewManager: MarkdownPreviewManager,
telemetryReporter: TelemetryReporter
) {
this.#webviewManager = webviewManager;
this.#telemetryReporter = telemetryReporter;
}
public execute(mainUri?: vscode.Uri, allUris?: vscode.Uri[], previewSettings?: DynamicPreviewSettings) {
for (const uri of Array.isArray(allUris) ? allUris : [mainUri]) {
showPreview(this._webviewManager, this._telemetryReporter, uri, {
showPreview(this.#webviewManager, this.#telemetryReporter, uri, {
sideBySide: false,
locked: previewSettings?.locked
});
@@ -71,13 +77,19 @@ export class ShowPreviewCommand implements Command {
export class ShowPreviewToSideCommand implements Command {
public readonly id = 'markdown.showPreviewToSide';
readonly #webviewManager: MarkdownPreviewManager;
readonly #telemetryReporter: TelemetryReporter;
public constructor(
private readonly _webviewManager: MarkdownPreviewManager,
private readonly _telemetryReporter: TelemetryReporter
) { }
webviewManager: MarkdownPreviewManager,
telemetryReporter: TelemetryReporter
) {
this.#webviewManager = webviewManager;
this.#telemetryReporter = telemetryReporter;
}
public execute(uri?: vscode.Uri, previewSettings?: DynamicPreviewSettings) {
showPreview(this._webviewManager, this._telemetryReporter, uri, {
showPreview(this.#webviewManager, this.#telemetryReporter, uri, {
sideBySide: true,
locked: previewSettings?.locked
});
@@ -88,13 +100,19 @@ export class ShowPreviewToSideCommand implements Command {
export class ShowLockedPreviewToSideCommand implements Command {
public readonly id = 'markdown.showLockedPreviewToSide';
readonly #webviewManager: MarkdownPreviewManager;
readonly #telemetryReporter: TelemetryReporter;
public constructor(
private readonly _webviewManager: MarkdownPreviewManager,
private readonly _telemetryReporter: TelemetryReporter
) { }
webviewManager: MarkdownPreviewManager,
telemetryReporter: TelemetryReporter
) {
this.#webviewManager = webviewManager;
this.#telemetryReporter = telemetryReporter;
}
public execute(uri?: vscode.Uri) {
showPreview(this._webviewManager, this._telemetryReporter, uri, {
showPreview(this.#webviewManager, this.#telemetryReporter, uri, {
sideBySide: true,
locked: true
});

View File

@@ -12,19 +12,25 @@ import { isMarkdownFile } from '../util/file';
export class ShowPreviewSecuritySelectorCommand implements Command {
public readonly id = 'markdown.showPreviewSecuritySelector';
readonly #previewSecuritySelector: PreviewSecuritySelector;
readonly #previewManager: MarkdownPreviewManager;
public constructor(
private readonly _previewSecuritySelector: PreviewSecuritySelector,
private readonly _previewManager: MarkdownPreviewManager
) { }
previewSecuritySelector: PreviewSecuritySelector,
previewManager: MarkdownPreviewManager
) {
this.#previewSecuritySelector = previewSecuritySelector;
this.#previewManager = previewManager;
}
public execute(resource: string | undefined) {
if (this._previewManager.activePreviewResource) {
this._previewSecuritySelector.showSecuritySelectorForResource(this._previewManager.activePreviewResource);
if (this.#previewManager.activePreviewResource) {
this.#previewSecuritySelector.showSecuritySelectorForResource(this.#previewManager.activePreviewResource);
} else if (resource) {
const source = vscode.Uri.parse(resource);
this._previewSecuritySelector.showSecuritySelectorForResource(source.query ? vscode.Uri.parse(source.query) : source);
this.#previewSecuritySelector.showSecuritySelectorForResource(source.query ? vscode.Uri.parse(source.query) : source);
} else if (vscode.window.activeTextEditor && isMarkdownFile(vscode.window.activeTextEditor.document)) {
this._previewSecuritySelector.showSecuritySelectorForResource(vscode.window.activeTextEditor.document.uri);
this.#previewSecuritySelector.showSecuritySelectorForResource(vscode.window.activeTextEditor.document.uri);
}
}
}

View File

@@ -10,12 +10,16 @@ import { MarkdownPreviewManager } from '../preview/previewManager';
export class ShowSourceCommand implements Command {
public readonly id = 'markdown.showSource';
readonly #previewManager: MarkdownPreviewManager;
public constructor(
private readonly _previewManager: MarkdownPreviewManager
) { }
previewManager: MarkdownPreviewManager
) {
this.#previewManager = previewManager;
}
public execute() {
const { activePreviewResource, activePreviewResourceColumn } = this._previewManager;
const { activePreviewResource, activePreviewResourceColumn } = this.#previewManager;
if (activePreviewResource && activePreviewResourceColumn) {
return vscode.workspace.openTextDocument(activePreviewResource).then(document => {
return vscode.window.showTextDocument(document, activePreviewResourceColumn);

View File

@@ -9,11 +9,15 @@ import { MarkdownPreviewManager } from '../preview/previewManager';
export class ToggleLockCommand implements Command {
public readonly id = 'markdown.preview.toggleLock';
readonly #previewManager: MarkdownPreviewManager;
public constructor(
private readonly _previewManager: MarkdownPreviewManager
) { }
previewManager: MarkdownPreviewManager
) {
this.#previewManager = previewManager;
}
public execute() {
this._previewManager.toggleLock();
this.#previewManager.toggleLock();
}
}