Feature request: allow per-option descriptions in snippet choice placeholders (`${1|...|}`)
@alexdima is already working on this.
Since Jun 24, 2026.
Assessment
This issue has not been assessed yet.
Description
Feature request: allow per-option descriptions in snippet choice placeholders (${1|...|})
Summary
When a snippet uses a choice placeholder (${1|a,b,c|}), the dropdown shows only the raw option values. There is no way to attach an explanatory description/label to each option. I would like each choice option to be able to carry a short description that is rendered at the end of the line, the same way a snippet's own description is shown in the IntelliSense suggestion widget when you start typing the snippet.
Current behavior
A choice option is plain text only. The grammar defines it as:
choice ::= '${' int '|' text (',' text)* '|}'
So when the choice dropdown opens, the user just sees the bare values with nothing to explain what each one means.
Example snippet:
"Admonition": {
"prefix": "adm",
"body": [
"${1|!!!,???,???+|} ${2|note,tip,warning,danger|}",
" $0"
],
"description": "Admonition block"
}
When the snippet itself is suggested, IntelliSense already shows a description at the end of the line ("Admonition"):
But when the choice placeholder dropdown opens, the options !!!, ???, ???+ have no description at all - the user cannot tell what each marker does:
Desired behavior
Allow each choice option to declare a description that the dropdown renders at the end of the line, mirroring the snippet-suggestion widget. For the example above the dropdown could read:
!!! static (always shown)
??? collapsible, starts closed
???+ collapsible, starts open
This is purely additive: existing snippets without descriptions keep working unchanged.
Possible syntax
- Inline separator per option, e.g.
${1|!!!:static (always shown),???:collapsible closed,???+:collapsible open|}(would require choosing a separator that does not clash with values). - A richer object form in the snippet JSON for choices, mapping each value to a description.
Why
Choice placeholders are often cryptic markers (here: Material/MkDocs admonition markers !!! / ??? / ???+). Descriptions would let snippet authors document each option in place, exactly like the description already shown for the snippet as a whole.
- Dominant language
- TypeScript
- Stars
- 193k
- Forks
- 42.9k
- PR merge metrics
- PR metrics pending
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from microsoft/vscode
-
testplan-item
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
new release
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
testplan-item
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
testplan-item
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
All issues in microsoft/vscode
Similar issues
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster no-stale P3
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 1/5 Under an hour Newbie friendliness 76/100
-
code-quality refactoring
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
github/gh-aw-firewall#8816 ·
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
langchain-ai/deepagents#6450 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
vercel/react-tweet#225 ·