microsoft / microsoft/vscode

NES polish: menu covers the suggestion, generic provider name, dead model picker, and other small issues

Open
#327,621 0 comments 0 reactions 1 assignee Claimed by @hediet View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.