Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
a98ee7a
terminal: support tab title templates for extension terminals
rebornix Feb 19, 2026
1b8971b
terminal: omit undefined tabTitle from profile quick pick
rebornix Feb 19, 2026
3b7ab1f
wip
connor4312 Feb 19, 2026
fc1c549
wip
connor4312 Feb 20, 2026
0dce1fc
Make isUntitled as deprecated
mjbvz Feb 20, 2026
3705b42
agent: add preliminary plugin support
connor4312 Feb 20, 2026
cfd0d61
Try cleaning up api around acquiring/loading/creating sessions
mjbvz Feb 20, 2026
74e79e6
Update src/vs/workbench/contrib/chat/common/chatService/chatServiceIm…
mjbvz Feb 20, 2026
7467749
refactor: rename terminal title properties to titleTemplate for consi…
rebornix Feb 20, 2026
1643bda
proposed api check.
rebornix Feb 20, 2026
10033f8
Merge branch 'main' into rebornix/practical-dingo
rebornix Feb 20, 2026
95a14d7
Fix welcome sessions list scrolling and archived session flicker (#29…
daviddossett Feb 20, 2026
f54a681
address commits
connor4312 Feb 20, 2026
4f8f636
ensure chat tip actions trigger chat setup (#296536)
meganrogge Feb 20, 2026
b21a3cc
GitService - add barrier for setting the delegate (#296631)
lszomoru Feb 20, 2026
797e1c8
add kb to navigate to next/previous question (#296633)
meganrogge Feb 20, 2026
53a9e01
remove creating session in beginning (#296638)
sandy081 Feb 20, 2026
175a5fd
Show attachments toolbar for implicit context in Ask mode and selecti…
daviddossett Feb 20, 2026
7a05c7f
Merge pull request #296628 from mjbvz/dev/mjbvz/nuclear-dingo
mjbvz Feb 20, 2026
91b2ea7
Model picker search input styling and separator improvements (#296645)
daviddossett Feb 20, 2026
bf1992d
Fix claude agents not showing up in local chat dropdown (#296647)
pwang347 Feb 21, 2026
127ba17
Merge pull request #296617 from microsoft/connor4312/cp-plugins-1
connor4312 Feb 21, 2026
23a013a
Better grouping of js/ts settings
mjbvz Feb 21, 2026
cf4d605
Fix missing `%`
mjbvz Feb 21, 2026
cca45c8
Remove checkmarks from chat-used-context-label, add hover chevron (#2…
daviddossett Feb 21, 2026
4968804
Allow returning a title in the Content Provider (#296659)
TylerLeonhardt Feb 21, 2026
dda93cf
Merge pull request #296664 from mjbvz/dev/mjbvz/environmental-sparrow
mjbvz Feb 21, 2026
42bb5a8
Merge pull request #296582 from mjbvz/dev/mjbvz/graceful-tick
mjbvz Feb 21, 2026
51e07b8
bump the distro (#296672)
TylerLeonhardt Feb 21, 2026
655ce6f
Adopt unified js/ts setting for diagnostic settings
mjbvz Feb 21, 2026
851ed34
Fix ref
mjbvz Feb 21, 2026
2a0ce90
Update extensions/typescript-language-features/src/tsServer/bufferSyn…
mjbvz Feb 21, 2026
78fba4c
Merge pull request #296677 from mjbvz/dev/mjbvz/rainy-grouse
mjbvz Feb 21, 2026
eeda773
terminal: support tab title templates for extension terminals (#296404)
rebornix Feb 21, 2026
405897e
customizations editor (#296680)
joshspicer Feb 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,678 changes: 1,361 additions & 1,317 deletions extensions/typescript-language-features/package.json

Large diffs are not rendered by default.

16 changes: 11 additions & 5 deletions extensions/typescript-language-features/package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@
"workspaceTrust": "The extension requires workspace trust when the workspace version is used because it executes code specified by the workspace.",
"virtualWorkspaces": "In virtual workspaces, resolving and finding references across files is not supported.",
"reloadProjects.title": "Reload Project",
"configuration.typescript": "TypeScript",
"configuration.preferences": "Preferences",
"configuration.codeLens": "CodeLens",
"configuration.format": "Formatting",
"configuration.suggest": "Suggestions",
"configuration.languageFeatures": "Language Features",
"configuration.implicitProjectConfig": "Implicit Project Config",
"configuration.inlayHints": "Inlay Hints",
"configuration.server": "TS Server",
"configuration.preferences": "Preferences",
"configuration.serverAdvanced": "TS Server Advanced Settings",
"configuration.suggest": "Suggestions",
"configuration.validation": "Validation",
"configuration.suggest.completeFunctionCalls": "Complete functions with their parameter signature.",
"configuration.suggest.completeFunctionCalls.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.suggest.completeFunctionCalls#` instead.",
"configuration.suggest.includeAutomaticOptionalChainCompletions": "Enable/disable showing completions on potentially undefined values that insert an optional chain call. Requires strict null checks to be enabled.",
Expand All @@ -26,6 +29,9 @@
"typescript.tsserver.pluginPaths.item": "Either an absolute or relative path. Relative path will be resolved against workspace folder(s).",
"typescript.tsserver.trace": "Enables tracing of messages sent to the TS server. This trace can be used to diagnose TS Server issues. The trace may contain file paths, source code, and other potentially sensitive information from your project.",
"typescript.validate.enable": "Enable/disable TypeScript validation.",
"javascript.validate.enable": "Enable/disable JavaScript validation.",
"configuration.validate.enable": "Enable/disable JavaScript and TypeScript validation.",
"configuration.validate.enable.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.validate.enabled#` instead.",
"typescript.format.enable": "Enable/disable default TypeScript formatter.",
"javascript.format.enable": "Enable/disable default JavaScript formatter.",
"format.insertSpaceAfterCommaDelimiter": "Defines space handling after a comma delimiter.",
Expand Down Expand Up @@ -69,7 +75,6 @@
"configuration.format.placeOpenBraceOnNewLineForControlBlocks.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.placeOpenBraceOnNewLineForControlBlocks#` instead.",
"configuration.format.semicolons.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.semicolons#` instead.",
"configuration.format.indentSwitchCase.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.format.indentSwitchCase#` instead.",
"javascript.validate.enable": "Enable/disable JavaScript validation.",
"javascript.goToProjectConfig.title": "Go to Project Configuration (jsconfig / tsconfig)",
"typescript.goToProjectConfig.title": "Go to Project Configuration (tsconfig)",
"configuration.referencesCodeLens.enabled": "Enable/disable references CodeLens in JavaScript and TypeScript files. This CodeLens shows the number of references for classes and exported functions and allows you to peek or navigate to them.",
Expand All @@ -86,6 +91,7 @@
"typescript.restartTsServer": "Restart TS Server",
"typescript.selectTypeScriptVersion.title": "Select TypeScript Version...",
"typescript.reportStyleChecksAsWarnings": "Report style checks as warnings.",
"configuration.reportStyleChecksAsWarnings.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.reportStyleChecksAsWarnings#` instead.",
"typescript.npm": "Specifies the path to the npm executable used for [Automatic Type Acquisition](https://code.visualstudio.com/docs/nodejs/working-with-javascript#_typings-and-automatic-type-acquisition).",
"typescript.check.npmIsInstalled": "Check if npm is installed for [Automatic Type Acquisition](https://code.visualstudio.com/docs/nodejs/working-with-javascript#_typings-and-automatic-type-acquisition).",
"configuration.suggest.names": "Enable/disable including unique names from the file in JavaScript suggestions. Note that name suggestions are always disabled in JavaScript code that is semantically checked using `@ts-check` or `checkJs`.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ import { readUnifiedConfig } from './utils/configuration';
import { isWeb, isWebAndHasSharedArrayBuffers, supportsReadableByteStreams } from './utils/platform';


const validateSetting = 'validate.enable';
const suggestionSetting = 'suggestionActions.enabled';

export default class LanguageProvider extends Disposable {

constructor(
Expand Down Expand Up @@ -95,9 +92,9 @@ export default class LanguageProvider extends Disposable {
}

private configurationChanged(): void {
const config = vscode.workspace.getConfiguration(this.id, null);
this.updateValidate(config.get(validateSetting, true));
this.updateSuggestionDiagnostics(readUnifiedConfig<boolean>(suggestionSetting, true, { scope: null, fallbackSection: this.id }));
const scope: vscode.ConfigurationScope = { languageId: this.description.languageIds[0] };
this.updateValidate(readUnifiedConfig<boolean>('validate.enabled', true, { scope, fallbackSection: this.id, fallbackSubSectionNameOverride: 'validate.enable' }));
this.updateSuggestionDiagnostics(readUnifiedConfig<boolean>('suggestionActions.enabled', true, { scope, fallbackSection: this.id }));
}

public handlesUri(resource: vscode.Uri): boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import * as typeConverters from '../typeConverters';
import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService';
import { inMemoryResourcePrefix } from '../typescriptServiceClient';
import { coalesce } from '../utils/arrays';
import { readUnifiedConfig, unifiedConfigSection } from '../utils/configuration';
import { Delayer, setImmediate } from '../utils/async';
import { nulToken } from '../utils/cancellation';
import { Disposable } from '../utils/dispose';
Expand Down Expand Up @@ -161,7 +162,7 @@ class SyncedBuffer {
private state = BufferState.Initial;

constructor(
private readonly document: vscode.TextDocument,
public readonly document: vscode.TextDocument,
public readonly filepath: string,
private readonly client: ITypeScriptServiceClient,
private readonly synchronizer: BufferSynchronizer,
Expand Down Expand Up @@ -462,9 +463,6 @@ export default class BufferSyncSupport extends Disposable {

private readonly client: ITypeScriptServiceClient;

private _validateJavaScript = true;
private _validateTypeScript = true;

private readonly modeIds: Set<string>;
private readonly syncedBuffers: SyncedBufferMap;
private readonly pendingDiagnostics: PendingDiagnostics;
Expand Down Expand Up @@ -513,8 +511,14 @@ export default class BufferSyncSupport extends Disposable {
}
}));

this.updateConfiguration();
vscode.workspace.onDidChangeConfiguration(this.updateConfiguration, this, this._disposables);
this._register(vscode.workspace.onDidChangeConfiguration((e) => {
if (e.affectsConfiguration(`${unifiedConfigSection}.validate.enabled`)
|| e.affectsConfiguration('typescript.validate.enable')
|| e.affectsConfiguration('javascript.validate.enable')
) {
this.requestAllDiagnostics();
}
}));
}

private readonly _onDelete = this._register(new vscode.EventEmitter<vscode.Uri>());
Expand Down Expand Up @@ -756,14 +760,6 @@ export default class BufferSyncSupport extends Disposable {
this.pendingDiagnostics.clear();
}

private updateConfiguration() {
const jsConfig = vscode.workspace.getConfiguration('javascript', null);
const tsConfig = vscode.workspace.getConfiguration('typescript', null);

this._validateJavaScript = jsConfig.get<boolean>('validate.enable', true);
this._validateTypeScript = tsConfig.get<boolean>('validate.enable', true);
}

private shouldValidate(buffer: SyncedBuffer): boolean {
if (fileSchemes.isOfScheme(buffer.resource, fileSchemes.chatCodeBlock)) {
return false;
Expand All @@ -773,15 +769,9 @@ export default class BufferSyncSupport extends Disposable {
return false;
}

switch (buffer.languageId) {
case languageModeIds.javascript:
case languageModeIds.javascriptreact:
return this._validateJavaScript;

case languageModeIds.typescript:
case languageModeIds.typescriptreact:
default:
return this._validateTypeScript;
}
const fallbackSection = (buffer.languageId === languageModeIds.javascript || buffer.languageId === languageModeIds.javascriptreact)
? 'javascript'
: 'typescript';
return readUnifiedConfig<boolean>('validate.enabled', true, { scope: buffer.document, fallbackSection, fallbackSubSectionNameOverride: 'validate.enable' });
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { ServiceConfigurationProvider } from './configuration/configuration';
import { DiagnosticLanguage, LanguageDescription } from './configuration/languageDescription';
import { IExperimentationTelemetryReporter } from './experimentTelemetryReporter';
import { DiagnosticKind } from './languageFeatures/diagnostics';
import { readUnifiedConfig } from './utils/configuration';
import FileConfigurationManager from './languageFeatures/fileConfigurationManager';
import LanguageProvider from './languageProvider';
import { LogLevelMonitor } from './logging/logLevelMonitor';
Expand Down Expand Up @@ -193,9 +194,7 @@ export default class TypeScriptServiceClientHost extends Disposable {
}

private configurationChanged(): void {
const typescriptConfig = vscode.workspace.getConfiguration('typescript');

this.reportStyleCheckAsWarnings = typescriptConfig.get('reportStyleChecksAsWarnings', true);
this.reportStyleCheckAsWarnings = readUnifiedConfig<boolean>('reportStyleChecksAsWarnings', true, { scope: null, fallbackSection: 'typescript' });
}

private async findLanguage(resource: vscode.Uri): Promise<LanguageProvider | undefined> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import * as vscode from 'vscode';

export type UnifiedConfigurationScope = vscode.TextDocument | null | undefined;
export type UnifiedConfigurationScope = vscode.ConfigurationScope | null | undefined;

export const unifiedConfigSection = 'js/ts';

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "code-oss-dev",
"version": "1.110.0",
"distro": "bd187e4508a244500eb533c56e5cccb6801a699c",
"distro": "9d472fb245bfdeb5eca66384d5bf6a9881fe4965",
"author": {
"name": "Microsoft Corporation"
},
Expand Down
36 changes: 17 additions & 19 deletions src/vs/platform/actionWidget/browser/actionList.ts
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,13 @@ export interface IActionListOptions {
* Minimum width for the action list.
*/
readonly minWidth?: number;



/**
* When true and filtering is enabled, focuses the filter input when the list opens.
*/
readonly focusFilterOnOpen?: boolean;
}

export class ActionList<T> extends Disposable {
Expand Down Expand Up @@ -553,6 +560,9 @@ export class ActionList<T> extends Disposable {
if (isFiltering) {
continue;
}
if (item.section && this._collapsedSections.has(item.section)) {
continue;
}
visible.push(item);
continue;
}
Expand Down Expand Up @@ -637,14 +647,7 @@ export class ActionList<T> extends Disposable {
return this._filterContainer;
}

/**
* Returns the resolved filter placement based on the dropdown direction.
* When shown above the anchor, filter is at the bottom (closest to anchor);
* when shown below, filter is at the top.
*/
get filterPlacement(): 'top' | 'bottom' {
return this._showAbove ? 'bottom' : 'top';
}


get filterInput(): HTMLInputElement | undefined {
return this._filterInput;
Expand All @@ -655,6 +658,10 @@ export class ActionList<T> extends Disposable {
}

focus(): void {
if (this._filterInput && this._options?.focusFilterOnOpen) {
this._filterInput.focus();
return;
}
this._list.domFocus();
this._focusCheckedOrFirst();
}
Expand Down Expand Up @@ -835,18 +842,9 @@ export class ActionList<T> extends Disposable {
this._list.layout(listHeight, this._cachedMaxWidth);
this.domNode.style.height = `${listHeight}px`;

// Place filter container on the correct side based on dropdown direction.
// When shown above, filter goes below the list (closest to anchor).
// When shown below, filter goes above the list (closest to anchor).
// Place filter container on the preferred side.
if (this._filterContainer && this._filterContainer.parentElement) {
const parent = this._filterContainer.parentElement;
if (this._showAbove) {
// Move filter after the list
parent.appendChild(this._filterContainer);
} else {
// Move filter before the list
parent.insertBefore(this._filterContainer, this.domNode);
}
this._filterContainer.parentElement.insertBefore(this._filterContainer, this.domNode);
}

return this._cachedMaxWidth;
Expand Down
3 changes: 1 addition & 2 deletions src/vs/platform/actionWidget/browser/actionWidget.css
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@

/* Filter input */
.action-widget .action-list-filter {
padding: 4px;
padding: 2px 2px 4px 2px
}

.action-widget .action-list-filter:first-child {
Expand All @@ -259,7 +259,6 @@
border-radius: 3px;
background-color: var(--vscode-input-background);
color: var(--vscode-input-foreground);
font-size: 12px;
outline: none;
}

Expand Down
43 changes: 33 additions & 10 deletions src/vs/platform/actionWidget/browser/actionWidgetDropdown.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ export class ActionWidgetDropdown extends BaseDropdown {
return;
}

let actionBarActions = this._options.actionBarActions ?? this._options.actionBarActionProvider?.getActions() ?? [];
const actionBarActions = this._options.actionBarActions ?? this._options.actionBarActionProvider?.getActions() ?? [];
const actions = this._options.actions ?? this._options.actionProvider?.getActions() ?? [];

// Track the currently selected option before opening
Expand Down Expand Up @@ -159,9 +159,13 @@ export class ActionWidgetDropdown extends BaseDropdown {
const previouslyFocusedElement = getActiveElement();


const auxiliaryActionIds = new Set(actionBarActions.map(action => action.id));

const actionWidgetDelegate: IActionListDelegate<IActionWidgetDropdownAction> = {
onSelect: (action, preview) => {
selectedOption = action;
if (!auxiliaryActionIds.has(action.id)) {
selectedOption = action;
}
this.actionWidgetService.hide();
action.run();
},
Expand All @@ -173,13 +177,30 @@ export class ActionWidgetDropdown extends BaseDropdown {
}
};

actionBarActions = actionBarActions.map(action => ({
...action,
run: async (...args: unknown[]) => {
this.actionWidgetService.hide();
return action.run(...args);
if (actionBarActions.length) {
if (actionWidgetItems.length) {
actionWidgetItems.push({
label: '',
kind: ActionListItemKind.Separator,
canPreview: false,
disabled: false,
hideIcon: false,
});
}

for (const action of actionBarActions) {
actionWidgetItems.push({
item: action,
tooltip: action.tooltip,
kind: ActionListItemKind.Action,
canPreview: false,
group: { title: '', icon: ThemeIcon.fromId(Codicon.blank.id) },
disabled: !action.enabled,
hideIcon: false,
label: action.label,
});
}
}));
}

const accessibilityProvider: Partial<IListAccessibilityProvider<IActionListItem<IActionWidgetDropdownAction>>> = {
isChecked(element) {
Expand All @@ -188,7 +209,9 @@ export class ActionWidgetDropdown extends BaseDropdown {
getRole: (e) => {
switch (e.kind) {
case ActionListItemKind.Action:
return 'menuitemcheckbox';
// Auxiliary actions are not checkable options, so use 'menuitem' to
// avoid screen readers announcing them as unchecked checkboxes.
return e.item && auxiliaryActionIds.has(e.item.id) ? 'menuitem' : 'menuitemcheckbox';
case ActionListItemKind.Separator:
return 'separator';
default:
Expand All @@ -205,7 +228,7 @@ export class ActionWidgetDropdown extends BaseDropdown {
actionWidgetDelegate,
this._options.getAnchor?.() ?? this.element,
undefined,
actionBarActions,
[],
accessibilityProvider,
this._options.listOptions
);
Expand Down
3 changes: 3 additions & 0 deletions src/vs/platform/extensions/common/extensionsApiProposals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,9 @@ const _allApiProposals = {
terminalShellEnv: {
proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.terminalShellEnv.d.ts',
},
terminalTitle: {
proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.terminalTitle.d.ts',
},
testObserver: {
proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.testObserver.d.ts',
},
Expand Down
Loading
Loading