microsoft/vscode PR #320794 — Markdown notifications for private marketplace — PR #320794
microsoft/vscode · pull request #320794 ·
Transcript
PlainEnglish
Let's walk through pull request 320794 for VS Code, which enhances the Extensions viewlet to support markdown-formatted notifications and adds a new info message when a private extension marketplace is configured via enterprise policy.
PlainEnglish
This PR pursues two main goals. First, it upgrades the notification system to support markdown messages with clickable command links. Second, it surfaces a new info notification when the organization has configured a private extension marketplace. Along the way, it adds a dismissable button, improves accessibility by rendering plaintext for screen readers, and guards the show action to only appear when extensions are present.
PlainEnglish
Previously, extension notifications were plain text only, and when an enterprise configured a private marketplace via policy, users had no visibility into why their marketplace looked different. This PR changes that. Now notifications can include markdown with clickable command links, and a new info notification explicitly tells users when a private marketplace is active, with a direct link to the policy settings.
Architecture
We start by updating the notification interface. The message field now accepts either a string or an IMarkdownString, unlocking rich formatting. The dismiss callback is now optional, allowing notifications that don't need dismissal, like informational policy notices.
Architecture
Here's how we render the message. First, we generate a plaintext version for accessibility labels. Then, if the message is markdown, we render it with the markdown renderer and wire up an action handler that opens command links through the opener service. If it's plain text, we just set the text content. This keeps the rendering backward compatible while enabling rich formatting.
Architecture
The dismiss button is a new addition. It only renders when the notification has a dismiss callback. We listen for both click events and keyboard events, honoring Enter and Space keys for full accessibility. This gives users a clear way to close notifications they've acknowledged.
Architecture
Here's the private marketplace detection. We read the gallery service URL from policy configuration. If it's set, we build a markdown message with a command link that opens the policy settings. The notification uses the hash of the URL as a stable key, and the dismiss callback stores the dismissal state in user storage. This is where markdown really shines — the user can click right through to see the policy.
PlainEnglish
The outcome is a more transparent and user-friendly Extensions experience. Users connected to a private marketplace now see a clear info notification with a markdown-formatted message and a clickable link to the policy settings. All notifications now support markdown, and the dismiss button is fully keyboard accessible.
CodeQuality
Let's look at the risks. Two gotchas were found — both are in the moderate zone. The dismiss error handling gap has slightly higher likelihood, while the stale notification index issue has a bit more impact. Let's dive into each one.
CodeQuality
The dismiss button directly invokes the dismiss callback without wrapping it in Promise resolve catch, unlike the action button elsewhere in the same file. If the dismiss callback throws an error, it won't be caught and could cause an unhandled promise rejection. This is an inconsistency in error handling that's worth addressing for robustness.
CodeQuality
The dismiss callback stored in the notification closure captures computedNotifications[0] by reference. If notification priority changes after the closure is created, subsequent dismiss calls will operate on the wrong notification index without re-evaluating. This is a subtle indexing bug that could cause the wrong notification to be marked as dismissed.
PlainEnglish
That's pull request 320794. It's a focused UI enhancement that brings markdown-formatted notifications and explicit private marketplace awareness to the Extensions viewlet. Two moderate concerns were found around indexing and error handling, but the core feature set is solid and the accessibility improvements are a nice touch.
How this was made
Lenzon read microsoft/vscode at pull request #320794 and generated this walkthrough automatically. The narration above is the transcript of what it says.
Explain a pull request from your own repo
Point Lenzon at a repo or a pull request and get a narrated walkthrough like this one.
Try it