Plan canvas markdown renderer: language-tagged code fence not closed by a bare closing fence, breaking rest of document
- 主要语言
- Shell
- 星标
- 11.2k
- 派生
- 1.9k
- 平均合并
- 14 小时 16 分钟
- 30 天内合并 PR
- 6
描述
### Summary
In the desktop app's **Plan** canvas (the built-in markdown viewer/editor), a fenced code block that has a **language info-string on its opening fence** (e.g. ` ```csharp `) is not closed by a bare closing fence (` ``` `). The renderer treats the bare closing fence as content and leaves the code block "open," so **the entire remainder of the document renders as code** — headings (`##`), blockquotes (`>`), lists, and inline code all stop being parsed as markdown.
Per the [CommonMark spec §4.5](https://spec.commonmark.org/0.31.2/#fenced-code-blocks), a closing code fence **must not** carry an info string; a bare ` ``` ` is the *correct* way to close a ` ```csharp ` block. VS Code (and GitHub itself) render all the variations below correctly, so the file is valid — the app's renderer is non-conformant.
### Repro
Open any `.md` file in the app's **Plan** panel containing:
- Opening fence with a language tag (` ```csharp `)
- Some code lines
- A bare closing fence (` ``` `)
- Followed by a heading / blockquote / more markdown
Observed behavior by variant (same content, only the fences changed):
| Opening fence | Closing fence | App Plan renderer | VS Code |
| --- | --- | --- | --- |
| bare ` ``` ` | bare ` ``` ` | Minor glitch: a stray ` ``` ` line leaks out, but content after the block recovers | ✅ correct |
| ` ```csharp ` | bare ` ``` ` | **Broken: bare closer not matched → the block never closes and the entire rest of the document renders as code** | ✅ correct |
| 4-space indented block (no fences) | n/a | ✅ correct | ✅ correct |
### Expected
A bare ` ``` ` closing fence should close a language-tagged opening fence (` ```csharp `), matching CommonMark and VS Code. Content after the block should resume normal markdown parsing.
### Actual
The language-tagged block is only closed by an identically-tagged fence; a spec-correct bare closer is swallowed as content, breaking rendering for everything below the block.
### Workaround
- Use an indented (4-space) code block instead of a fenced one, **or**
- Omit the language info-string so both fences are bare (this still leaks a stray ` ``` ` line but at least doesn't break the rest of the doc).
### Environment
- GitHub Copilot desktop app, version 1.0.71
- OS: Windows 11
- Surface: **Plan** canvas (markdown viewer/editor), `media=text/markdown`
### Notes
Screenshots demonstrating all three variants (app vs. VS Code side-by-side) are available and can be attached to this issue.
贡献指南
调研方向
首先,在桌面应用的 Plan 面板中使用一个包含带语言标签的开放围栏、一个裸结束围栏以及其后的 Markdown 内容的 Markdown 文件复现该问题。当裸结束围栏能够结束围栏代码块,并且后续的标题、引用块、列表和行内代码都能正常渲染,且与 CommonMark 和 VS Code 一致时,修复就完成了。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- markdown
- 领域
- content, desktop
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 55/100