From d81d32b9408cd50f2d99c4ea7b3fdbcbed5bec00 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 11 Jan 2024 17:23:13 -0800 Subject: [PATCH] Re-render markdown preview when linkify setting changes (#200599) --- .../src/markdownEngine.ts | 9 +++++---- .../src/preview/previewConfig.ts | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/extensions/markdown-language-features/src/markdownEngine.ts b/extensions/markdown-language-features/src/markdownEngine.ts index 8d67bf6f9c0..0ef05452e4f 100644 --- a/extensions/markdown-language-features/src/markdownEngine.ts +++ b/extensions/markdown-language-features/src/markdownEngine.ts @@ -8,6 +8,7 @@ import type Token = require('markdown-it/lib/token'); import * as vscode from 'vscode'; import { ILogger } from './logging'; import { MarkdownContributionProvider } from './markdownExtensions'; +import { MarkdownPreviewConfiguration } from './preview/previewConfig'; import { Slugifier } from './slugify'; import { ITextDocument } from './types/textDocument'; import { WebviewResourceProvider } from './util/resources'; @@ -237,11 +238,11 @@ export class MarkdownItEngine implements IMdParser { } private _getConfig(resource?: vscode.Uri): MarkdownItConfig { - const config = vscode.workspace.getConfiguration('markdown', resource ?? null); + const config = MarkdownPreviewConfiguration.getForResource(resource ?? null); return { - breaks: config.get('preview.breaks', false), - linkify: config.get('preview.linkify', true), - typographer: config.get('preview.typographer', false) + breaks: config.previewLineBreaks, + linkify: config.previewLinkify, + typographer: config.previewTypographer, }; } diff --git a/extensions/markdown-language-features/src/preview/previewConfig.ts b/extensions/markdown-language-features/src/preview/previewConfig.ts index 22191ba8945..01c9a66c32c 100644 --- a/extensions/markdown-language-features/src/preview/previewConfig.ts +++ b/extensions/markdown-language-features/src/preview/previewConfig.ts @@ -7,13 +7,17 @@ import * as vscode from 'vscode'; import { equals } from '../util/arrays'; export class MarkdownPreviewConfiguration { - public static getForResource(resource: vscode.Uri) { + public static getForResource(resource: vscode.Uri | null) { return new MarkdownPreviewConfiguration(resource); } public readonly scrollBeyondLastLine: boolean; public readonly wordWrap: boolean; - public readonly lineBreaks: boolean; + + public readonly previewLineBreaks: boolean; + public readonly previewLinkify: boolean; + public readonly previewTypographer: boolean; + public readonly doubleClickToSwitchToEditor: boolean; public readonly scrollEditorWithPreview: boolean; public readonly scrollPreviewWithEditor: boolean; @@ -24,7 +28,7 @@ export class MarkdownPreviewConfiguration { public readonly fontFamily: string | undefined; public readonly styles: readonly string[]; - private constructor(resource: vscode.Uri) { + private constructor(resource: vscode.Uri | null) { const editorConfig = vscode.workspace.getConfiguration('editor', resource); const markdownConfig = vscode.workspace.getConfiguration('markdown', resource); const markdownEditorConfig = vscode.workspace.getConfiguration('[markdown]', resource); @@ -38,7 +42,11 @@ export class MarkdownPreviewConfiguration { this.scrollPreviewWithEditor = !!markdownConfig.get('preview.scrollPreviewWithEditor', true); this.scrollEditorWithPreview = !!markdownConfig.get('preview.scrollEditorWithPreview', true); - this.lineBreaks = !!markdownConfig.get('preview.breaks', false); + + this.previewLineBreaks = !!markdownConfig.get('preview.breaks', false); + this.previewLinkify = !!markdownConfig.get('preview.linkify', true); + this.previewTypographer = !!markdownConfig.get('preview.typographer', false); + this.doubleClickToSwitchToEditor = !!markdownConfig.get('preview.doubleClickToSwitchToEditor', true); this.markEditorSelection = !!markdownConfig.get('preview.markEditorSelection', true); @@ -61,7 +69,7 @@ export class MarkdownPreviewConfiguration { return equals(this.styles, otherConfig.styles); } - [key: string]: any; + readonly [key: string]: any; } export class MarkdownPreviewConfigurationManager {