From feeefd10376419c7ab4d6d3b648edced991c7889 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 25 May 2018 11:16:37 -0700 Subject: [PATCH] Inject slugifier into markdown engine --- .../markdown-language-features/src/extension.ts | 3 ++- .../src/markdownEngine.ts | 11 ++++++----- .../src/test/engine.ts | 16 +++++++++------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/extensions/markdown-language-features/src/extension.ts b/extensions/markdown-language-features/src/extension.ts index 5312e4109bb..875b5d69f8a 100644 --- a/extensions/markdown-language-features/src/extension.ts +++ b/extensions/markdown-language-features/src/extension.ts @@ -17,6 +17,7 @@ import { MarkdownEngine } from './markdownEngine'; import { getMarkdownExtensionContributions } from './markdownExtensions'; import { ExtensionContentSecurityPolicyArbiter, PreviewSecuritySelector } from './security'; import { loadDefaultTelemetryReporter } from './telemetryReporter'; +import { stripSlugifier } from './slugify'; export function activate(context: vscode.ExtensionContext) { @@ -26,7 +27,7 @@ export function activate(context: vscode.ExtensionContext) { const contributions = getMarkdownExtensionContributions(); const cspArbiter = new ExtensionContentSecurityPolicyArbiter(context.globalState, context.workspaceState); - const engine = new MarkdownEngine(contributions); + const engine = new MarkdownEngine(contributions, stripSlugifier); const logger = new Logger(); const selector: vscode.DocumentSelector = [ diff --git a/extensions/markdown-language-features/src/markdownEngine.ts b/extensions/markdown-language-features/src/markdownEngine.ts index 6d78b575dab..7522eb8b782 100644 --- a/extensions/markdown-language-features/src/markdownEngine.ts +++ b/extensions/markdown-language-features/src/markdownEngine.ts @@ -7,7 +7,7 @@ import { MarkdownIt, Token } from 'markdown-it'; import * as path from 'path'; import * as vscode from 'vscode'; import { MarkdownContributions } from './markdownExtensions'; -import { stripSlugifier } from './slugify'; +import { Slugifier } from './slugify'; const FrontMatterRegex = /^---\s*[^]*?(-{3}|\.{3})\s*/; @@ -19,7 +19,8 @@ export class MarkdownEngine { private currentDocument?: vscode.Uri; public constructor( - private readonly extensionPreviewResourceProvider: MarkdownContributions + private readonly extensionPreviewResourceProvider: MarkdownContributions, + private readonly slugifier: Slugifier, ) { } private usePlugin(factory: (md: any) => any): void { @@ -49,7 +50,7 @@ export class MarkdownEngine { return `
${this.md!.utils.escapeHtml(str)}
`; } }).use(mdnh, { - slugify: (header: string) => stripSlugifier.fromHeading(header).value + slugify: (header: string) => this.slugifier.fromHeading(header).value }); for (const plugin of this.extensionPreviewResourceProvider.markdownItPlugins) { @@ -145,13 +146,13 @@ export class MarkdownEngine { if (fragment) { uri = uri.with({ - fragment: stripSlugifier.fromHeading(fragment).value + fragment: this.slugifier.fromHeading(fragment).value }); } return normalizeLink(uri.with({ scheme: 'vscode-resource' }).toString(true)); } else if (!uri.scheme && !uri.path && uri.fragment) { return normalizeLink(uri.with({ - fragment: stripSlugifier.fromHeading(uri.fragment).value + fragment: this.slugifier.fromHeading(uri.fragment).value }).toString(true)); } } catch (e) { diff --git a/extensions/markdown-language-features/src/test/engine.ts b/extensions/markdown-language-features/src/test/engine.ts index a7a30a89ce0..fbd2322cc38 100644 --- a/extensions/markdown-language-features/src/test/engine.ts +++ b/extensions/markdown-language-features/src/test/engine.ts @@ -6,13 +6,15 @@ import * as vscode from 'vscode'; import { MarkdownEngine } from '../markdownEngine'; import { MarkdownContributions } from '../markdownExtensions'; +import { stripSlugifier } from '../slugify'; + +const emptyContributions = new class implements MarkdownContributions { + readonly previewScripts: vscode.Uri[] = []; + readonly previewStyles: vscode.Uri[] = []; + readonly previewResourceRoots: vscode.Uri[] = []; + readonly markdownItPlugins: Promise<(md: any) => any>[] = []; +}; export function createNewMarkdownEngine(): MarkdownEngine { - return new MarkdownEngine(new class implements MarkdownContributions { - readonly previewScripts: vscode.Uri[] = []; - readonly previewStyles: vscode.Uri[] = []; - readonly previewResourceRoots: vscode.Uri[] = []; - readonly markdownItPlugins: Promise<(md: any) => any>[] = []; - }); + return new MarkdownEngine(emptyContributions, stripSlugifier); } -