Use Inline Suggestions naming (#272447)

* Use Inline Suggestions naming

* revert sound change
This commit is contained in:
Benjamin Christopher Simmonds
2025-10-21 16:06:35 +02:00
committed by GitHub
parent 1e756bc17d
commit d875d4501f
11 changed files with 29 additions and 69 deletions

View File

@@ -54,7 +54,7 @@ Many of the core components and extensions to VS Code live in their own reposito
## Bundled Extensions ## Bundled Extensions
VS Code includes a set of built-in extensions located in the [extensions](extensions) folder, including grammars and snippets for many languages. Extensions that provide rich language support (code completion, Go to Definition) for a language have the suffix `language-features`. For example, the `json` extension provides coloring for `JSON` and the `json-language-features` extension provides rich language support for `JSON`. VS Code includes a set of built-in extensions located in the [extensions](extensions) folder, including grammars and snippets for many languages. Extensions that provide rich language support (inline suggestions, Go to Definition) for a language have the suffix `language-features`. For example, the `json` extension provides coloring for `JSON` and the `json-language-features` extension provides rich language support for `JSON`.
## Development Container ## Development Container

View File

@@ -17,7 +17,7 @@ The JSON language server supports requests on documents of language id `json` an
The server implements the following capabilities of the language server protocol: The server implements the following capabilities of the language server protocol:
- [Code completion](https://microsoft.github.io/language-server-protocol/specification#textDocument_completion) for JSON properties and values based on the document's [JSON schema](http://json-schema.org/) or based on existing properties and values used at other places in the document. JSON schemas are configured through the server configuration options. - [Inline Suggestion](https://microsoft.github.io/language-server-protocol/specification#textDocument_completion) for JSON properties and values based on the document's [JSON schema](http://json-schema.org/) or based on existing properties and values used at other places in the document. JSON schemas are configured through the server configuration options.
- [Hover](https://microsoft.github.io/language-server-protocol/specification#textDocument_hover) for values based on descriptions in the document's [JSON schema](http://json-schema.org/). - [Hover](https://microsoft.github.io/language-server-protocol/specification#textDocument_hover) for values based on descriptions in the document's [JSON schema](http://json-schema.org/).
- [Document Symbols](https://microsoft.github.io/language-server-protocol/specification#textDocument_documentSymbol) for quick navigation to properties in the document. - [Document Symbols](https://microsoft.github.io/language-server-protocol/specification#textDocument_documentSymbol) for quick navigation to properties in the document.
- [Document Colors](https://microsoft.github.io/language-server-protocol/specification#textDocument_documentColor) for showing color decorators on values representing colors and [Color Presentation](https://microsoft.github.io/language-server-protocol/specification#textDocument_colorPresentation) for color presentation information to support color pickers. The location of colors is defined by the document's [JSON schema](http://json-schema.org/). All values marked with `"format": "color-hex"` (VSCode specific, non-standard JSON Schema extension) are considered color values. The supported color formats are `#rgb[a]` and `#rrggbb[aa]`. - [Document Colors](https://microsoft.github.io/language-server-protocol/specification#textDocument_documentColor) for showing color decorators on values representing colors and [Color Presentation](https://microsoft.github.io/language-server-protocol/specification#textDocument_colorPresentation) for color presentation information to support color pickers. The location of colors is defined by the document's [JSON schema](http://json-schema.org/). All values marked with `"format": "color-hex"` (VSCode specific, non-standard JSON Schema extension) are considered color values. The supported color formats are `#rgb[a]` and `#rrggbb[aa]`.
@@ -37,7 +37,7 @@ The JSON language server expects the client to only send requests and notificati
The JSON language server has the following dependencies on the client's capabilities: The JSON language server has the following dependencies on the client's capabilities:
- Code completion requires that the client capability has *snippetSupport*. If not supported by the client, the server will not offer the completion capability. - Inline suggestion requires that the client capability has *snippetSupport*. If not supported by the client, the server will not offer the completion capability.
- Formatting support requires the client to support *dynamicRegistration* for *rangeFormatting*. If not supported by the client, the server will not offer the format capability. - Formatting support requires the client to support *dynamicRegistration* for *rangeFormatting*. If not supported by the client, the server will not offer the format capability.
## Configuration ## Configuration

View File

@@ -222,7 +222,7 @@ export class SnoozeInlineCompletion extends Action2 {
]; ];
const picked = await quickInputService.pick(items, { const picked = await quickInputService.pick(items, {
placeHolder: localize('snooze.placeholder', "Select snooze duration for Code completions and NES"), placeHolder: localize('snooze.placeholder', "Select snooze duration for Inline Suggestions"),
activeItem: items.find(item => item.value === lastSelectedDuration), activeItem: items.find(item => item.value === lastSelectedDuration),
}); });

View File

@@ -24,7 +24,7 @@ export namespace AccessibilityHelpNLS {
export const tabFocusModeOnMsg = nls.localize("tabFocusModeOnMsg", "Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior{0}.", '<keybinding:editor.action.toggleTabFocusMode>'); export const tabFocusModeOnMsg = nls.localize("tabFocusModeOnMsg", "Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior{0}.", '<keybinding:editor.action.toggleTabFocusMode>');
export const tabFocusModeOffMsg = nls.localize("tabFocusModeOffMsg", "Pressing Tab in the current editor will insert the tab character. Toggle this behavior{0}.", '<keybinding:editor.action.toggleTabFocusMode>'); export const tabFocusModeOffMsg = nls.localize("tabFocusModeOffMsg", "Pressing Tab in the current editor will insert the tab character. Toggle this behavior{0}.", '<keybinding:editor.action.toggleTabFocusMode>');
export const stickScroll = nls.localize("stickScrollKb", "Focus Sticky Scroll{0} to focus the currently nested scopes.", '<keybinding:editor.action.focusStickyDebugConsole>'); export const stickScroll = nls.localize("stickScrollKb", "Focus Sticky Scroll{0} to focus the currently nested scopes.", '<keybinding:editor.action.focusStickyDebugConsole>');
export const suggestActions = nls.localize("suggestActionsKb", "Trigger the suggest widget{0} to show possible code completions.", '<keybinding:editor.action.triggerSuggest>'); export const suggestActions = nls.localize("suggestActionsKb", "Trigger the suggest widget{0} to show possible inline suggestions.", '<keybinding:editor.action.triggerSuggest>');
export const acceptSuggestAction = nls.localize("acceptSuggestAction", "Accept suggestion{0} to accept the currently selected suggestion.", '<keybinding:acceptSelectedSuggestion>'); export const acceptSuggestAction = nls.localize("acceptSuggestAction", "Accept suggestion{0} to accept the currently selected suggestion.", '<keybinding:acceptSelectedSuggestion>');
export const toggleSuggestionFocus = nls.localize("toggleSuggestionFocus", "Toggle focus between the suggest widget and the editor{0} and toggle details focus with{1} to learn more about the suggestion.", '<keybinding:focusSuggestion>', '<keybinding:toggleSuggestionFocus>'); export const toggleSuggestionFocus = nls.localize("toggleSuggestionFocus", "Toggle focus between the suggest widget and the editor{0} and toggle details focus with{1} to learn more about the suggestion.", '<keybinding:focusSuggestion>', '<keybinding:toggleSuggestionFocus>');
export const codeFolding = nls.localize("codeFolding", "Use code folding to collapse blocks of code and focus on the code you're interested in via the Toggle Folding Command{0}.", '<keybinding:editor.toggleFold>'); export const codeFolding = nls.localize("codeFolding", "Use code folding to collapse blocks of code and focus on the code you're interested in via the Toggle Folding Command{0}.", '<keybinding:editor.toggleFold>');

View File

@@ -13,9 +13,8 @@ import { IClipboardService } from '../../../../../platform/clipboard/common/clip
import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js';
import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js'; import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js';
import { KeybindingsRegistry, KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js'; import { KeybindingsRegistry, KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js';
import { INotificationService, Severity } from '../../../../../platform/notification/common/notification.js';
import { ICodeEditor } from '../../../../browser/editorBrowser.js'; import { ICodeEditor } from '../../../../browser/editorBrowser.js';
import { EditorAction, EditorCommand, ServicesAccessor } from '../../../../browser/editorExtensions.js'; import { EditorAction, ServicesAccessor } from '../../../../browser/editorExtensions.js';
import { EditorContextKeys } from '../../../../common/editorContextKeys.js'; import { EditorContextKeys } from '../../../../common/editorContextKeys.js';
import { Context as SuggestContext } from '../../../suggest/browser/suggest.js'; import { Context as SuggestContext } from '../../../suggest/browser/suggest.js';
import { hideInlineCompletionId, inlineSuggestCommitId, jumpToNextInlineEditId, showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId, toggleShowCollapsedId } from './commandIds.js'; import { hideInlineCompletionId, inlineSuggestCommitId, jumpToNextInlineEditId, showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId, toggleShowCollapsedId } from './commandIds.js';
@@ -81,43 +80,6 @@ export class TriggerInlineSuggestionAction extends EditorAction {
} }
} }
export class ExplicitTriggerInlineEditAction extends EditorAction {
constructor() {
super({
id: 'editor.action.inlineSuggest.triggerInlineEditExplicit',
label: nls.localize2('action.inlineSuggest.trigger.explicitInlineEdit', "Trigger Next Edit Suggestion"),
precondition: EditorContextKeys.writable,
});
}
public async run(accessor: ServicesAccessor, editor: ICodeEditor): Promise<void> {
const notificationService = accessor.get(INotificationService);
const controller = InlineCompletionsController.get(editor);
await controller?.model.get()?.triggerExplicitly(undefined, true);
if (!controller?.model.get()?.inlineEditAvailable.get()) {
notificationService.notify({
severity: Severity.Info,
message: nls.localize('noInlineEditAvailable', "No inline edit is available.")
});
}
}
}
export class TriggerInlineEditAction extends EditorCommand {
constructor() {
super({
id: 'editor.action.inlineSuggest.triggerInlineEdit',
precondition: EditorContextKeys.writable,
});
}
public override async runEditorCommand(accessor: ServicesAccessor, editor: ICodeEditor, args: { triggerKind?: 'automatic' | 'explicit' }): Promise<void> {
const controller = InlineCompletionsController.get(editor);
await controller?.model.get()?.trigger(undefined, { onlyFetchInlineEdits: true });
}
}
export class AcceptNextWordOfInlineCompletion extends EditorAction { export class AcceptNextWordOfInlineCompletion extends EditorAction {
constructor() { constructor() {
super({ super({

View File

@@ -6,9 +6,9 @@
import { AccessibleViewRegistry } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js'; import { AccessibleViewRegistry } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js';
import { registerAction2 } from '../../../../platform/actions/common/actions.js'; import { registerAction2 } from '../../../../platform/actions/common/actions.js';
import { wrapInHotClass1 } from '../../../../platform/observable/common/wrapInHotClass.js'; import { wrapInHotClass1 } from '../../../../platform/observable/common/wrapInHotClass.js';
import { EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution } from '../../../browser/editorExtensions.js'; import { EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from '../../../browser/editorExtensions.js';
import { HoverParticipantRegistry } from '../../hover/browser/hoverTypes.js'; import { HoverParticipantRegistry } from '../../hover/browser/hoverTypes.js';
import { AcceptInlineCompletion, AcceptNextLineOfInlineCompletion, AcceptNextWordOfInlineCompletion, DevExtractReproSample, HideInlineCompletion, JumpToNextInlineEdit, ShowNextInlineSuggestionAction, ShowPreviousInlineSuggestionAction, ToggleAlwaysShowInlineSuggestionToolbar, ExplicitTriggerInlineEditAction, TriggerInlineSuggestionAction, TriggerInlineEditAction, ToggleInlineCompletionShowCollapsed } from './controller/commands.js'; import { AcceptInlineCompletion, AcceptNextLineOfInlineCompletion, AcceptNextWordOfInlineCompletion, DevExtractReproSample, HideInlineCompletion, JumpToNextInlineEdit, ShowNextInlineSuggestionAction, ShowPreviousInlineSuggestionAction, ToggleAlwaysShowInlineSuggestionToolbar, TriggerInlineSuggestionAction, ToggleInlineCompletionShowCollapsed } from './controller/commands.js';
import { InlineCompletionsController } from './controller/inlineCompletionsController.js'; import { InlineCompletionsController } from './controller/inlineCompletionsController.js';
import { InlineCompletionsHoverParticipant } from './hintsWidget/hoverParticipant.js'; import { InlineCompletionsHoverParticipant } from './hintsWidget/hoverParticipant.js';
import { InlineCompletionsAccessibleView } from './inlineCompletionsAccessibleView.js'; import { InlineCompletionsAccessibleView } from './inlineCompletionsAccessibleView.js';
@@ -17,8 +17,6 @@ import { CancelSnoozeInlineCompletion, SnoozeInlineCompletion } from '../../../b
registerEditorContribution(InlineCompletionsController.ID, wrapInHotClass1(InlineCompletionsController.hot), EditorContributionInstantiation.Eventually); registerEditorContribution(InlineCompletionsController.ID, wrapInHotClass1(InlineCompletionsController.hot), EditorContributionInstantiation.Eventually);
registerEditorAction(TriggerInlineSuggestionAction); registerEditorAction(TriggerInlineSuggestionAction);
registerEditorAction(ExplicitTriggerInlineEditAction);
registerEditorCommand(new TriggerInlineEditAction());
registerEditorAction(ShowNextInlineSuggestionAction); registerEditorAction(ShowNextInlineSuggestionAction);
registerEditorAction(ShowPreviousInlineSuggestionAction); registerEditorAction(ShowPreviousInlineSuggestionAction);
registerEditorAction(AcceptNextWordOfInlineCompletion); registerEditorAction(AcceptNextWordOfInlineCompletion);

View File

@@ -1462,7 +1462,7 @@ export function registerChatActions() {
constructor() { constructor() {
super({ super({
id: 'workbench.action.chat.configureCodeCompletions', id: 'workbench.action.chat.configureCodeCompletions',
title: localize2('configureCompletions', "Configure Code Completions..."), title: localize2('configureCompletions', "Configure Inline Suggestions..."),
precondition: ContextKeyExpr.and( precondition: ContextKeyExpr.and(
ChatContextKeys.Setup.installed, ChatContextKeys.Setup.installed,
ChatContextKeys.Setup.disabled.negate(), ChatContextKeys.Setup.disabled.negate(),
@@ -1501,11 +1501,11 @@ export function registerChatActions() {
const chatQuotaExceeded = chatEntitlementService.quotas.chat?.percentRemaining === 0; const chatQuotaExceeded = chatEntitlementService.quotas.chat?.percentRemaining === 0;
const completionsQuotaExceeded = chatEntitlementService.quotas.completions?.percentRemaining === 0; const completionsQuotaExceeded = chatEntitlementService.quotas.completions?.percentRemaining === 0;
if (chatQuotaExceeded && !completionsQuotaExceeded) { if (chatQuotaExceeded && !completionsQuotaExceeded) {
message = localize('chatQuotaExceeded', "You've reached your monthly chat messages quota. You still have free code completions available."); message = localize('chatQuotaExceeded', "You've reached your monthly chat messages quota. You still have free inline suggestions available.");
} else if (completionsQuotaExceeded && !chatQuotaExceeded) { } else if (completionsQuotaExceeded && !chatQuotaExceeded) {
message = localize('completionsQuotaExceeded', "You've reached your monthly code completions quota. You still have free chat messages available."); message = localize('completionsQuotaExceeded', "You've reached your monthly inline suggestions quota. You still have free chat messages available.");
} else { } else {
message = localize('chatAndCompletionsQuotaExceeded', "You've reached your monthly chat messages and code completions quota."); message = localize('chatAndCompletionsQuotaExceeded', "You've reached your monthly chat messages and inline suggestions quota.");
} }
if (chatEntitlementService.quotas.resetDate) { if (chatEntitlementService.quotas.resetDate) {
@@ -1515,7 +1515,7 @@ export function registerChatActions() {
} }
const free = chatEntitlementService.entitlement === ChatEntitlement.Free; const free = chatEntitlementService.entitlement === ChatEntitlement.Free;
const upgradeToPro = free ? localize('upgradeToPro', "Upgrade to GitHub Copilot Pro (your first 30 days are free) for:\n- Unlimited code completions\n- Unlimited chat messages\n- Access to premium models") : undefined; const upgradeToPro = free ? localize('upgradeToPro', "Upgrade to GitHub Copilot Pro (your first 30 days are free) for:\n- Unlimited inline suggestions\n- Unlimited chat messages\n- Access to premium models") : undefined;
await dialogService.prompt({ await dialogService.prompt({
type: 'none', type: 'none',

View File

@@ -694,7 +694,7 @@ configurationRegistry.registerConfiguration({
}, },
'chat.disableAIFeatures': { 'chat.disableAIFeatures': {
type: 'boolean', type: 'boolean',
description: nls.localize('chat.disableAIFeatures', "Disable and hide built-in AI features provided by GitHub Copilot, including chat, code completions and next edit suggestions."), description: nls.localize('chat.disableAIFeatures', "Disable and hide built-in AI features provided by GitHub Copilot, including chat and inline suggestions."),
default: false, default: false,
scope: ConfigurationScope.WINDOW scope: ConfigurationScope.WINDOW
}, },

View File

@@ -236,7 +236,7 @@ export class ChatStatusBarEntry extends Disposable implements IWorkbenchContribu
if (chatQuotaExceeded && !completionsQuotaExceeded) { if (chatQuotaExceeded && !completionsQuotaExceeded) {
quotaWarning = localize('chatQuotaExceededStatus', "Chat quota reached"); quotaWarning = localize('chatQuotaExceededStatus', "Chat quota reached");
} else if (completionsQuotaExceeded && !chatQuotaExceeded) { } else if (completionsQuotaExceeded && !chatQuotaExceeded) {
quotaWarning = localize('completionsQuotaExceededStatus', "Completions quota reached"); quotaWarning = localize('completionsQuotaExceededStatus', "Inline suggestions quota reached");
} else { } else {
quotaWarning = localize('chatAndCompletionsQuotaExceededStatus', "Quota reached"); quotaWarning = localize('chatAndCompletionsQuotaExceededStatus', "Quota reached");
} }
@@ -249,13 +249,13 @@ export class ChatStatusBarEntry extends Disposable implements IWorkbenchContribu
// Completions Disabled // Completions Disabled
else if (this.editorService.activeTextEditorLanguageId && !isCompletionsEnabled(this.configurationService, this.editorService.activeTextEditorLanguageId)) { else if (this.editorService.activeTextEditorLanguageId && !isCompletionsEnabled(this.configurationService, this.editorService.activeTextEditorLanguageId)) {
text = '$(copilot-unavailable)'; text = '$(copilot-unavailable)';
ariaLabel = localize('completionsDisabledStatus', "Code completions disabled"); ariaLabel = localize('completionsDisabledStatus', "Inline suggestions disabled");
} }
// Completions Snoozed // Completions Snoozed
else if (this.completionsService.isSnoozing()) { else if (this.completionsService.isSnoozing()) {
text = '$(copilot-snooze)'; text = '$(copilot-snooze)';
ariaLabel = localize('completionsSnoozedStatus', "Code completions snoozed"); ariaLabel = localize('completionsSnoozedStatus', "Inline suggestions snoozed");
} }
} }
@@ -392,7 +392,7 @@ class ChatStatusDashboard extends Disposable {
run: () => this.runCommandAndClose(() => this.openerService.open(URI.parse(defaultChat.manageSettingsUrl))), run: () => this.runCommandAndClose(() => this.openerService.open(URI.parse(defaultChat.manageSettingsUrl))),
})); }));
const completionsQuotaIndicator = completionsQuota && (completionsQuota.total > 0 || completionsQuota.unlimited) ? this.createQuotaIndicator(this.element, disposables, completionsQuota, localize('completionsLabel', "Code completions"), false) : undefined; const completionsQuotaIndicator = completionsQuota && (completionsQuota.total > 0 || completionsQuota.unlimited) ? this.createQuotaIndicator(this.element, disposables, completionsQuota, localize('completionsLabel', "Inline Suggestions"), false) : undefined;
const chatQuotaIndicator = chatQuota && (chatQuota.total > 0 || chatQuota.unlimited) ? this.createQuotaIndicator(this.element, disposables, chatQuota, localize('chatsLabel', "Chat messages"), false) : undefined; const chatQuotaIndicator = chatQuota && (chatQuota.total > 0 || chatQuota.unlimited) ? this.createQuotaIndicator(this.element, disposables, chatQuota, localize('chatsLabel', "Chat messages"), false) : undefined;
const premiumChatQuotaIndicator = premiumChatQuota && (premiumChatQuota.total > 0 || premiumChatQuota.unlimited) ? this.createQuotaIndicator(this.element, disposables, premiumChatQuota, localize('premiumChatsLabel', "Premium requests"), true) : undefined; const premiumChatQuotaIndicator = premiumChatQuota && (premiumChatQuota.total > 0 || premiumChatQuota.unlimited) ? this.createQuotaIndicator(this.element, disposables, premiumChatQuota, localize('premiumChatsLabel', "Premium requests"), true) : undefined;
@@ -429,7 +429,7 @@ class ChatStatusDashboard extends Disposable {
else if (this.chatEntitlementService.anonymous && this.chatEntitlementService.sentiment.installed) { else if (this.chatEntitlementService.anonymous && this.chatEntitlementService.sentiment.installed) {
addSeparator(localize('anonymousTitle', "Copilot Usage")); addSeparator(localize('anonymousTitle', "Copilot Usage"));
this.createQuotaIndicator(this.element, disposables, localize('quotaLimited', "Limited"), localize('completionsLabel', "Code completions"), false); this.createQuotaIndicator(this.element, disposables, localize('quotaLimited', "Limited"), localize('completionsLabel', "Inline Suggestions"), false);
this.createQuotaIndicator(this.element, disposables, localize('quotaLimited', "Limited"), localize('chatsLabel', "Chat messages"), false); this.createQuotaIndicator(this.element, disposables, localize('quotaLimited', "Limited"), localize('chatsLabel', "Chat messages"), false);
} }
@@ -493,7 +493,7 @@ class ChatStatusDashboard extends Disposable {
// Settings // Settings
{ {
const chatSentiment = this.chatEntitlementService.sentiment; const chatSentiment = this.chatEntitlementService.sentiment;
addSeparator(localize('codeCompletions', "Code Completions"), chatSentiment.installed && !chatSentiment.disabled && !chatSentiment.untrusted ? toAction({ addSeparator(localize('inlineSuggestions', "Inline Suggestions"), chatSentiment.installed && !chatSentiment.disabled && !chatSentiment.untrusted ? toAction({
id: 'workbench.action.openChatSettings', id: 'workbench.action.openChatSettings',
label: localize('settingsLabel', "Settings"), label: localize('settingsLabel', "Settings"),
tooltip: localize('settingsTooltip', "Open Settings"), tooltip: localize('settingsTooltip', "Open Settings"),
@@ -699,14 +699,14 @@ class ChatStatusDashboard extends Disposable {
const modeId = this.editorService.activeTextEditorLanguageId; const modeId = this.editorService.activeTextEditorLanguageId;
const settings = container.appendChild($('div.settings')); const settings = container.appendChild($('div.settings'));
// --- Code completions // --- Inline Suggestions
{ {
const globalSetting = append(settings, $('div.setting')); const globalSetting = append(settings, $('div.setting'));
this.createCodeCompletionsSetting(globalSetting, localize('settings.codeCompletions.allFiles', "All files"), '*', disposables); this.createInlineSuggestionsSetting(globalSetting, localize('settings.codeCompletions.allFiles', "All files"), '*', disposables);
if (modeId) { if (modeId) {
const languageSetting = append(settings, $('div.setting')); const languageSetting = append(settings, $('div.setting'));
this.createCodeCompletionsSetting(languageSetting, localize('settings.codeCompletions.language', "{0}", this.languageService.getLanguageName(modeId) ?? modeId), modeId, disposables); this.createInlineSuggestionsSetting(languageSetting, localize('settings.codeCompletions.language', "{0}", this.languageService.getLanguageName(modeId) ?? modeId), modeId, disposables);
} }
} }
@@ -756,7 +756,7 @@ class ChatStatusDashboard extends Disposable {
return checkbox; return checkbox;
} }
private createCodeCompletionsSetting(container: HTMLElement, label: string, modeId: string | undefined, disposables: DisposableStore): void { private createInlineSuggestionsSetting(container: HTMLElement, label: string, modeId: string | undefined, disposables: DisposableStore): void {
this.createSetting(container, [defaultChat.completionsEnablementSetting], label, this.getCompletionsSettingAccessor(modeId), disposables); this.createSetting(container, [defaultChat.completionsEnablementSetting], label, this.getCompletionsSettingAccessor(modeId), disposables);
} }
@@ -846,10 +846,10 @@ class ChatStatusDashboard extends Disposable {
const timeLeftMs = this.inlineCompletionsService.snoozeTimeLeft; const timeLeftMs = this.inlineCompletionsService.snoozeTimeLeft;
if (!isEnabled || timeLeftMs <= 0) { if (!isEnabled || timeLeftMs <= 0) {
timerDisplay.textContent = localize('completions.snooze5minutesTitle', "Hide completions for 5 min"); timerDisplay.textContent = localize('completions.snooze5minutesTitle', "Hide suggestions for 5 min");
timerDisplay.title = ''; timerDisplay.title = '';
button.label = label; button.label = label;
button.setTitle(localize('completions.snooze5minutes', "Hide completions and NES for 5 min")); button.setTitle(localize('completions.snooze5minutes', "Hide inline suggestions for 5 min"));
return true; return true;
} }
@@ -858,7 +858,7 @@ class ChatStatusDashboard extends Disposable {
const seconds = timeLeftSeconds % 60; const seconds = timeLeftSeconds % 60;
timerDisplay.textContent = `${minutes}:${seconds < 10 ? '0' : ''}${seconds} ${localize('completions.remainingTime', "remaining")}`; timerDisplay.textContent = `${minutes}:${seconds < 10 ? '0' : ''}${seconds} ${localize('completions.remainingTime', "remaining")}`;
timerDisplay.title = localize('completions.snoozeTimeDescription', "Completions are hidden for the remaining duration"); timerDisplay.title = localize('completions.snoozeTimeDescription', "Inline suggestions are hidden for the remaining duration");
button.label = localize('completions.plus5min', "+5 min"); button.label = localize('completions.plus5min', "+5 min");
button.setTitle(localize('completions.snoozeAdditional5minutes', "Snooze additional 5 min")); button.setTitle(localize('completions.snoozeAdditional5minutes', "Snooze additional 5 min"));
toolbar.push([cancelAction], { icon: true, label: false }); toolbar.push([cancelAction], { icon: true, label: false });

View File

@@ -328,7 +328,7 @@ export const walkthroughs: GettingStartedWalkthroughContent = [
{ {
id: 'findLanguageExtensionsWeb', id: 'findLanguageExtensionsWeb',
title: localize('gettingStarted.findLanguageExts.title', "Rich support for all your languages"), title: localize('gettingStarted.findLanguageExts.title', "Rich support for all your languages"),
description: localize('gettingStarted.findLanguageExts.description.interpolated', "Code smarter with syntax highlighting, code completion, linting and debugging. While many languages are built-in, many more can be added as extensions.\n{0}", Button(localize('browseLangExts', "Browse Language Extensions"), 'command:workbench.extensions.action.showLanguageExtensions')), description: localize('gettingStarted.findLanguageExts.description.interpolated', "Code smarter with syntax highlighting, inline suggestions, linting and debugging. While many languages are built-in, many more can be added as extensions.\n{0}", Button(localize('browseLangExts', "Browse Language Extensions"), 'command:workbench.extensions.action.showLanguageExtensions')),
when: 'workspacePlatform != \'webworker\'', when: 'workspacePlatform != \'webworker\'',
media: { media: {
type: 'svg', altText: 'Language extensions', path: 'languages.svg' type: 'svg', altText: 'Language extensions', path: 'languages.svg'

View File

@@ -472,7 +472,7 @@ type EntitlementClassification = {
sku: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The SKU of the chat entitlement' }; sku: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The SKU of the chat entitlement' };
quotaChat: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The number of chat requests available to the user' }; quotaChat: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The number of chat requests available to the user' };
quotaPremiumChat: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The number of premium chat requests available to the user' }; quotaPremiumChat: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The number of premium chat requests available to the user' };
quotaCompletions: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The number of code completions available to the user' }; quotaCompletions: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The number of inline suggestions available to the user' };
quotaResetDate: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The date the quota will reset' }; quotaResetDate: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The date the quota will reset' };
owner: 'bpasero'; owner: 'bpasero';
comment: 'Reporting chat entitlements'; comment: 'Reporting chat entitlements';