NES polish: menu covers the suggestion, generic provider name, dead model picker, and other small issues
- Dominant language
- TypeScript
- Stars
- 193k
- Forks
- 42.4k
- PR merge metrics
- PR metrics pending
Description
Smaller items found during a hands-on review of Next Edit Suggestions. Grouping them rather than filing six near-trivial issues — happy to split if preferred.
- VS Code Version: 1.132.0 (built from source, `3ddd267c500`)
- Copilot Chat Extension Version: 0.60.0
- OS Version: macOS 26.5.2
### 1. The gutter menu covers the suggestion it describes
Hovering the gutter indicator opens the menu directly on top of the inline diff, hiding the proposed change. You are asked to **Go To / Accept** something you can't see, and moving the mouse to read it dismisses the menu. Worth positioning the menu clear of the suggestion's rendered range.
### 2. Menu header says "Inline Suggestion" rather than naming the provider
`InlineSuggestionGutterMenuData.fromInlineSuggestion` falls back to a generic label:
```ts
suggestion.source.provider.displayName ?? localize('inlineSuggestion', "Inline Suggestion")
```
The Copilot NES provider doesn't set `displayName`, so the menu shows "Inline Suggestion" — inconsistent with "Next Edit Suggestions", which is the name used throughout settings and docs.
### 3. Dead model-picker code in the gutter menu
`gutterIndicatorMenu.ts`:
```ts
const showModelEnabled = false;
const modelOptions = showModelEnabled ? this._data.modelInfo?.models.map(...) : [];
```
Hard-disabled by a local constant, which makes the `modelInfo` / `setModelId` plumbing on `InlineSuggestionGutterMenuData` unreachable. Either wire it to a real flag or remove it.
### 4. Duplicated copyright header
`gutterIndicatorMenu.ts` starts with the Microsoft copyright header twice (lines 1–8).
### 5. `allowCodeShifting` has an `enum` but no `enumDescriptions`
`editor.inlineSuggest.edits.allowCodeShifting` offers `always` / `horizontal` / `never` with no per-value explanation, so the Settings UI shows bare values. Its neighbour `editor.inlineSuggest.edits.renderSideBySide` does provide `enumDescriptions`.
### 6. Two NES settings are missing the `nextEditSuggestions` tag
The menu's **Settings** entry opens `@tag:nextEditSuggestions`. `github.copilot.nextEditSuggestions.preferredModel` and `github.copilot.nextEditSuggestions.eagerness` don't carry that tag (unlike `.enabled`, `.extendedRange`, `.fixes`, `.allowWhitespaceOnlyChanges`), so they don't show up when a user follows that entry.
### 7. `getBoundingClientRect()` on every editor mouse move
`gutterIndicatorView.ts` recomputes the icon's rect inside `onMouseMove` for the whole editor, forcing a synchronous layout on every mouse-move event while a suggestion is showing:
```ts
this._register(this._editorObs.editor.onMouseMove((e: IEditorMouseEvent) => {
const state = this._state.get();
if (state === undefined) { return; }
const el = this._iconRef.element;
const rect = el.getBoundingClientRect();
...
```
Could be cached and invalidated on layout/scroll instead.
### 8. Snooze command id duplicated as a string literal
`gutterIndicatorMenu.ts` hardcodes `'editor.action.inlineSuggest.snooze'`, while the same id lives as a non-exported `const snoozeInlineSuggestId` in `src/vs/editor/browser/services/inlineCompletionsService.ts`. The other menu entries import their ids from `controller/commandIds.ts`.
Contributor guide
Assessment
This issue has not been assessed yet.