inlineChat: remove hover renderMode experiment and InlineChatInputWidget#312133
Merged
inlineChat: remove hover renderMode experiment and InlineChatInputWidget#312133
Conversation
- Delete InlineChatSessionOverlayWidget (hover mode rendering) - Delete InlineChatInputWidget and InlineChatAffordance.showMenuAtSelection() The floating input popup is no longer needed; AskInChatAction now directly opens the chat panel and attaches the editor selection - Delete InlineChatHistoryService (only used by InlineChatInputWidget) - Delete SubmitInlineChatInputAction, HideInlineChatInputAction, QueueInChatAction - Remove RenderMode config key and CTX_HOVER_MODE context key - Remove CTX_INLINE_CHAT_INPUT_HAS_TEXT, CTX_INLINE_CHAT_INPUT_WIDGET_FOCUSED - Remove MenuId.InlineChatInput - Clean up inlineChatController: remove #renderMode observable, #runHover(), #resolveModelId(), #buildLocationData(), inputWidget accessor - Clean up inlineChatAffordance.fixture.ts: remove InlineChatOverlay fixture
Contributor
Contributor
There was a problem hiding this comment.
Pull request overview
This PR cleans up the inline chat feature by removing the deprecated hover render-mode experiment and deleting the now-unneeded floating InlineChatInputWidget path, simplifying the “Ask in Chat” flow to directly open the chat panel and attach the current editor selection.
Changes:
- Remove
inlineChat.renderModeconfiguration/contexts and delete hover-mode-specific widget code, services, CSS, and tests. - Simplify
InlineChatControllerandInlineChatAffordanceto be zone-only and remove input-widget-driven menu logic. - Rework
AskInChatActionto directly open the chat session UI and attach the editor selection (and remove related input-widget actions/menus).
Show a summary per file
| File | Description |
|---|---|
| src/vs/workbench/test/browser/componentFixtures/editor/inlineChatAffordance.fixture.ts | Removes the overlay fixture tied to the deleted input widget; keeps only affordance fixture. |
| src/vs/workbench/contrib/inlineChat/test/browser/inlineChatZoneMenus.test.ts | Updates menu expectations by removing hover-mode variants and aligning with zone-only behavior. |
| src/vs/workbench/contrib/inlineChat/test/browser/inlineChatController.test.ts | Deletes hover-only controller parity tests. |
| src/vs/workbench/contrib/inlineChat/test/browser/inlineChatAffordance.test.ts | Updates tests for affordance constructor signature after input widget removal. |
| src/vs/workbench/contrib/inlineChat/common/inlineChat.ts | Removes inlineChat.renderMode setting and related context keys. |
| src/vs/workbench/contrib/inlineChat/browser/media/inlineChatOverlayWidget.css | Deletes styling for the removed overlay/input widget UI. |
| src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.ts | Deletes the removed InlineChatInputWidget and hover overlay widget implementation. |
| src/vs/workbench/contrib/inlineChat/browser/inlineChatHistoryService.ts | Deletes history service that only supported the removed input widget. |
| src/vs/workbench/contrib/inlineChat/browser/inlineChatController.ts | Removes hover-mode execution path and input widget wiring; runs zone-only. |
| src/vs/workbench/contrib/inlineChat/browser/inlineChatAffordance.ts | Removes input-widget/menu plumbing; keeps selection-based affordance + telemetry. |
| src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts | Removes input-widget actions and rewrites “Ask in Chat” to open chat + attach selection. |
| src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.ts | Stops registering removed actions/services; keeps remaining inline chat contributions. |
| src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.ts | Removes now-dead hover-mode menu condition usage. |
| src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.ts | Removes hover-mode gating for the inline execute cancel action. |
| src/vs/platform/actions/common/actions.ts | Removes MenuId.InlineChatInput now that the input widget/menu is deleted. |
Copilot's findings
- Files reviewed: 15/15 changed files
- Comments generated: 2
alexdima
approved these changes
Apr 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Cleans up the inline chat feature by removing the
hoverrenderMode experiment (zone is the confirmed winner) and theInlineChatInputWidgetfloating popup that was only needed to support the "Ask in Chat" flow with an intermediate input step.AskInChatActionis simplified to directly open the chat panel and attach the editor selection — similar to whatQueueInChatActiondid, but without the floating input widget in between.Session Context
Key decisions from the development session:
Zone is the winner: The
inlineChat.renderModeexperiment concluded thatzoneis the preferred rendering mode. Allhoverrender path code has been removed.InlineChatInputWidget removed: The floating gutter-style input popup (
InlineChatInputWidget) was the entry point for the affordance → ask-in-chat flow. Rather than keeping it,AskInChatActionwas simplified to directly callchatWidgetService.openSession()+attachmentModel.addFile()with the current selection — no intermediate popup needed.AskInChatAction kept, QueueInChatAction removed:
AskInChatActionis kept but reimplemented to directly open the chat panel and attach the selection (the core intent).QueueInChatActionandSubmitInlineChatInputActionare deleted because they existed solely to submit/queue from the now-removed input widget.InlineChatAffordance kept (slimmed): The sparkle glyph affordance (
InlineChatAffordance+InlineChatEditorAffordance) is preserved — it still drives the selection-based sparkle and dismiss behavior. Only theshowMenuAtSelection()/ input widget driving logic was removed.InlineChatHistoryService deleted: Only used by
InlineChatInputWidget, so deleted along with it.InlineChatOverlay component fixture removed: The
renderInlineChatOverlayfixture ininlineChatAffordance.fixture.tsdemonstrated the now-deleted widget and was removed.Changes
inlineChatOverlayWidget.ts,inlineChatOverlayWidget.css,inlineChatHistoryService.ts,inlineChatController.test.ts(hover-only tests)SubmitInlineChatInputAction,HideInlineChatInputAction,QueueInChatAction,UndoSessionAction2AskInChatAction— now directly opens chat panel + attaches selectionInlineChatConfigKeys.RenderMode,CTX_HOVER_MODE,CTX_INLINE_CHAT_INPUT_HAS_TEXT,CTX_INLINE_CHAT_INPUT_WIDGET_FOCUSED,MenuId.InlineChatInputInlineChatController— removed#renderMode,#runHover(),#resolveModelId(),#buildLocationData(),inputWidgetaccessorInlineChatAffordance— removedinputWidgetparameter,#menuData,showMenuAtSelection()