From b0e6d962340752137dac53d067c4038d19e89006 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Tue, 22 Sep 2026 09:59:24 +0530 Subject: [PATCH] feat(editor): enable GFM syntax for Markdown mode --- src/cm/supportedModes.ts | 8 ++++++++ tests/unit/modelist.test.js | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/cm/supportedModes.ts b/src/cm/supportedModes.ts index 31a34ff1d..959386be9 100644 --- a/src/cm/supportedModes.ts +++ b/src/cm/supportedModes.ts @@ -72,6 +72,14 @@ function createLanguageLoader(name: string, lang: LanguageDescription) { return javascript({ jsx: true }); }; + case "markdown": + return async () => { + const { markdown, markdownLanguage } = await import( + "@codemirror/lang-markdown" + ); + return markdown({ base: markdownLanguage }); + }; + case "html": return async () => { const { html } = await import("@codemirror/lang-html"); diff --git a/tests/unit/modelist.test.js b/tests/unit/modelist.test.js index beab91278..30fece635 100644 --- a/tests/unit/modelist.test.js +++ b/tests/unit/modelist.test.js @@ -147,6 +147,30 @@ function registerTestMode(name, extensions, options) { } describe("getModeForPath", () => { + it("loads Markdown with extended GFM syntax", async () => { + const markdownMode = getModeForPath("README.md"); + const loadMarkdown = markdownMode.getExtension(); + expect(loadMarkdown).toEqual(expect.any(Function)); + + const support = await loadMarkdown(); + const tree = support.language.parser.parse( + [ + "~~Strikethrough~~", + "", + "- [x] Completed task", + "", + "| Column 1 | Column 2 |", + "|----------|----------|", + "| A | B |", + ].join("\n"), + ); + const syntax = tree.toString(); + + expect(syntax).toContain("Strikethrough"); + expect(syntax).toContain("TaskMarker"); + expect(syntax).toContain("Table"); + }); + it("matches the previous sort-and-scan result for built-in modes", () => { const paths = collectParityPaths(); expect(paths.length).toBeGreaterThan(100);