Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
8efd494
Allow contributed configurations to define additional "search terms"
mjbvz Feb 10, 2026
b3c0c09
searchTerms -> keywords
mjbvz Feb 10, 2026
11bbecd
Move hook execution to extension (#294215)
roblourens Feb 10, 2026
ea12208
set expiration time for data (#294240)
sandy081 Feb 10, 2026
5075f3e
Tweak tips (#294248)
meganrogge Feb 10, 2026
ae0ebc9
Merge pull request #294221 from microsoft/dev/mjbvz/vivacious-parrotfish
mjbvz Feb 10, 2026
f7f99ed
Store sessionResource as view state instead of id
mjbvz Feb 10, 2026
c177d56
experiment background agent display name (#294218)
rebornix Feb 10, 2026
b20cd36
Merge pull request #294253 from mjbvz/dev/mjbvz/worldwide-rat
mjbvz Feb 10, 2026
c78a202
Fix selection of string literals when clicking around quotes (#294120)
dmitrivMS Feb 10, 2026
0493189
Start adopting unified js/ts config for code lenses
mjbvz Feb 11, 2026
90c1e41
Add chatSessions `isReadOnly` (#294255)
joshspicer Feb 11, 2026
e2fdcd4
Merge pull request #294264 from mjbvz/dev/mjbvz/long-meerkat
mjbvz Feb 11, 2026
9dbaef0
Add optimized way to update a single chat session item
mjbvz Feb 11, 2026
c4909f8
fix: chat settings feature filter regression (#294265)
rzhao271 Feb 11, 2026
ce62dd2
Update hook timeout format (#294266)
pwang347 Feb 11, 2026
52d2540
fix alt buffer opening (#294251)
meganrogge Feb 11, 2026
9df6329
Merge pull request #294270 from mjbvz/dev/mjbvz/classical-silkworm
mjbvz Feb 11, 2026
720ab15
honor when clause for chatSession contibution in agent sessions filte…
joshspicer Feb 11, 2026
8e9f58e
Add 'view as tree' to chat edited files list (#294284)
roblourens Feb 11, 2026
4efca97
Improve rendered `li` elements in chat markdown (#294268)
daviddossett Feb 11, 2026
46b0829
Use font-weight 600 for bold in rendered markdown (#294274)
daviddossett Feb 11, 2026
50a1635
Apply consistent border-radius to tables, code blocks, and code block…
daviddossett Feb 11, 2026
272ea03
Set textPreformat.background in dark 2026 theme (#294303)
daviddossett Feb 11, 2026
cc808c1
Mention "agent" in chat.tools.edits.autoApprove setting (#294327)
roblourens Feb 11, 2026
a97da02
Add /debug (#294346)
roblourens Feb 11, 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
1 change: 1 addition & 0 deletions extensions/theme-2026/themes/2026-dark.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"textCodeBlock.background": "#242526",
"textLink.foreground": "#48A0C7",
"textLink.activeForeground": "#53A5CA",
"textPreformat.background": "#262626",
"textPreformat.foreground": "#888888",
"textSeparator.foreground": "#2a2a2aFF",
"button.background": "#3994BCF2",
Expand Down
83 changes: 70 additions & 13 deletions extensions/typescript-language-features/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -173,55 +173,112 @@
"description": "%typescript.enablePromptUseWorkspaceTsdk%",
"scope": "window"
},
"typescript.experimental.useTsgo": {
"type": "boolean",
"default": false,
"markdownDescription": "%typescript.useTsgo%",
"scope": "window",
"tags": [
"experimental"
]
},
"js/ts.referencesCodeLens.enabled": {
"type": "boolean",
"default": false,
"description": "%configuration.referencesCodeLens.enabled%",
"scope": "language-overridable",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.referencesCodeLens.enabled": {
"type": "boolean",
"default": false,
"description": "%javascript.referencesCodeLens.enabled%",
"description": "%configuration.referencesCodeLens.enabled%",
"markdownDeprecationMessage": "%configuration.referencesCodeLens.enabled.unifiedDeprecationMessage%",
"scope": "window"
},
"javascript.referencesCodeLens.showOnAllFunctions": {
"typescript.referencesCodeLens.enabled": {
"type": "boolean",
"default": false,
"description": "%javascript.referencesCodeLens.showOnAllFunctions%",
"description": "%configuration.referencesCodeLens.enabled%",
"markdownDeprecationMessage": "%configuration.referencesCodeLens.enabled.unifiedDeprecationMessage%",
"scope": "window"
},
"typescript.referencesCodeLens.enabled": {
"js/ts.referencesCodeLens.showOnAllFunctions": {
"type": "boolean",
"default": false,
"description": "%typescript.referencesCodeLens.enabled%",
"description": "%configuration.referencesCodeLens.showOnAllFunctions%",
"scope": "language-overridable",
"tags": [
"JavaScript",
"TypeScript"
]
},
"javascript.referencesCodeLens.showOnAllFunctions": {
"type": "boolean",
"default": false,
"description": "%configuration.referencesCodeLens.showOnAllFunctions%",
"markdownDeprecationMessage": "%configuration.referencesCodeLens.showOnAllFunctions.unifiedDeprecationMessage%",
"scope": "window"
},
"typescript.referencesCodeLens.showOnAllFunctions": {
"type": "boolean",
"default": false,
"description": "%typescript.referencesCodeLens.showOnAllFunctions%",
"description": "%configuration.referencesCodeLens.showOnAllFunctions%",
"markdownDeprecationMessage": "%configuration.referencesCodeLens.showOnAllFunctions.unifiedDeprecationMessage%",
"scope": "window"
},
"js/ts.implementationsCodeLens.enabled": {
"type": "boolean",
"default": false,
"description": "%configuration.implementationsCodeLens.enabled%",
"scope": "language-overridable",
"tags": [
"JavaScript",
"TypeScript"
]
},
"typescript.implementationsCodeLens.enabled": {
"type": "boolean",
"default": false,
"description": "%typescript.implementationsCodeLens.enabled%",
"description": "%configuration.implementationsCodeLens.enabled%",
"markdownDeprecationMessage": "%configuration.implementationsCodeLens.enabled.unifiedDeprecationMessage%",
"scope": "window"
},
"typescript.experimental.useTsgo": {
"js/ts.implementationsCodeLens.showOnInterfaceMethods": {
"type": "boolean",
"default": false,
"markdownDescription": "%typescript.useTsgo%",
"scope": "window",
"description": "%configuration.implementationsCodeLens.showOnInterfaceMethods%",
"scope": "language-overridable",
"tags": [
"experimental"
"JavaScript",
"TypeScript"
]
},
"typescript.implementationsCodeLens.showOnInterfaceMethods": {
"type": "boolean",
"default": false,
"description": "%typescript.implementationsCodeLens.showOnInterfaceMethods%",
"description": "%configuration.implementationsCodeLens.showOnInterfaceMethods%",
"markdownDeprecationMessage": "%configuration.implementationsCodeLens.showOnInterfaceMethods.unifiedDeprecationMessage%",
"scope": "window"
},
"js/ts.implementationsCodeLens.showOnAllClassMethods": {
"type": "boolean",
"default": false,
"description": "%configuration.implementationsCodeLens.showOnAllClassMethods%",
"scope": "language-overridable",
"tags": [
"JavaScript",
"TypeScript"
]
},
"typescript.implementationsCodeLens.showOnAllClassMethods": {
"type": "boolean",
"default": false,
"description": "%typescript.implementationsCodeLens.showOnAllClassMethods%",
"description": "%configuration.implementationsCodeLens.showOnAllClassMethods%",
"markdownDeprecationMessage": "%configuration.implementationsCodeLens.showOnAllClassMethods.unifiedDeprecationMessage%",
"scope": "window"
},
"typescript.reportStyleChecksAsWarnings": {
Expand Down
17 changes: 10 additions & 7 deletions extensions/typescript-language-features/package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,16 @@
"javascript.validate.enable": "Enable/disable JavaScript validation.",
"javascript.goToProjectConfig.title": "Go to Project Configuration (jsconfig / tsconfig)",
"typescript.goToProjectConfig.title": "Go to Project Configuration (tsconfig)",
"javascript.referencesCodeLens.enabled": "Enable/disable references CodeLens in JavaScript files.",
"javascript.referencesCodeLens.showOnAllFunctions": "Enable/disable references CodeLens on all functions in JavaScript files.",
"typescript.referencesCodeLens.enabled": "Enable/disable references CodeLens in TypeScript files.",
"typescript.referencesCodeLens.showOnAllFunctions": "Enable/disable references CodeLens on all functions in TypeScript files.",
"typescript.implementationsCodeLens.enabled": "Enable/disable implementations CodeLens. This CodeLens shows the implementers of an interface.",
"typescript.implementationsCodeLens.showOnInterfaceMethods": "Enable/disable implementations CodeLens on interface methods.",
"typescript.implementationsCodeLens.showOnAllClassMethods": "Enable/disable showing implementations CodeLens above all class methods instead of only on abstract methods.",
"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.",
"configuration.referencesCodeLens.enabled.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.referencesCodeLens.enabled#` instead.",
"configuration.referencesCodeLens.showOnAllFunctions": "Enable/disable the references CodeLens on all functions in JavaScript and TypeScript files.",
"configuration.referencesCodeLens.showOnAllFunctions.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.referencesCodeLens.showOnAllFunctions#` instead.",
"configuration.implementationsCodeLens.enabled": "Enable/disable implementations CodeLens in TypeScript files. This CodeLens shows the implementers of a TypeScript interface.",
"configuration.implementationsCodeLens.enabled.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.implementationsCodeLens.enabled#` instead.",
"configuration.implementationsCodeLens.showOnInterfaceMethods": "Enable/disable implementations CodeLens on TypeScript interface methods.",
"configuration.implementationsCodeLens.showOnInterfaceMethods.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.implementationsCodeLens.showOnInterfaceMethods#` instead.",
"configuration.implementationsCodeLens.showOnAllClassMethods": "Enable/disable showing implementations CodeLens above all TypeScript class methods instead of only on abstract methods.",
"configuration.implementationsCodeLens.showOnAllClassMethods.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.implementationsCodeLens.showOnAllClassMethods#` instead.",
"typescript.openTsServerLog.title": "Open TS Server log",
"typescript.restartTsServer": "Restart TS Server",
"typescript.selectTypeScriptVersion.title": "Select TypeScript Version...",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,16 @@ import type * as Proto from '../../tsServer/protocol/protocol';
import * as PConst from '../../tsServer/protocol/protocol.const';
import * as typeConverters from '../../typeConverters';
import { ClientCapability, ITypeScriptServiceClient } from '../../typescriptService';
import { conditionalRegistration, requireGlobalConfiguration, requireSomeCapability } from '../util/dependentRegistration';
import { readUnifiedConfig, unifiedConfigSection } from '../../utils/configuration';
import { conditionalRegistration, requireHasModifiedUnifiedConfig, requireSomeCapability } from '../util/dependentRegistration';
import { ReferencesCodeLens, TypeScriptBaseCodeLensProvider, getSymbolRange } from './baseCodeLensProvider';
import { ExecutionTarget } from '../../tsServer/server';

const Config = Object.freeze({
enabled: 'implementationsCodeLens.enabled',
showOnInterfaceMethods: 'implementationsCodeLens.showOnInterfaceMethods',
showOnAllClassMethods: 'implementationsCodeLens.showOnAllClassMethods',
});

export default class TypeScriptImplementationsCodeLensProvider extends TypeScriptBaseCodeLensProvider {
public constructor(
Expand All @@ -25,14 +31,30 @@ export default class TypeScriptImplementationsCodeLensProvider extends TypeScrip
super(client, _cachedResponse);
this._register(
vscode.workspace.onDidChangeConfiguration(evt => {
if (evt.affectsConfiguration(`${language.id}.implementationsCodeLens.showOnInterfaceMethods`) ||
evt.affectsConfiguration(`${language.id}.implementationsCodeLens.showOnAllClassMethods`)) {
if (
evt.affectsConfiguration(`${unifiedConfigSection}.${Config.enabled}`) ||
evt.affectsConfiguration(`${language.id}.${Config.enabled}`) ||
evt.affectsConfiguration(`${unifiedConfigSection}.${Config.showOnInterfaceMethods}`) ||
evt.affectsConfiguration(`${language.id}.${Config.showOnInterfaceMethods}`) ||
evt.affectsConfiguration(`${unifiedConfigSection}.${Config.showOnAllClassMethods}`) ||
evt.affectsConfiguration(`${language.id}.${Config.showOnAllClassMethods}`)
) {
this.changeEmitter.fire();
}
})
);
}


override async provideCodeLenses(document: vscode.TextDocument, token: vscode.CancellationToken): Promise<ReferencesCodeLens[]> {
const enabled = readUnifiedConfig<boolean>(Config.enabled, false, { scope: document, fallbackSection: this.language.id });
if (!enabled) {
return [];
}

return super.provideCodeLenses(document, token);
}

public async resolveCodeLens(
codeLens: ReferencesCodeLens,
token: vscode.CancellationToken,
Expand Down Expand Up @@ -88,8 +110,6 @@ export default class TypeScriptImplementationsCodeLensProvider extends TypeScrip
item: Proto.NavigationTree,
parent: Proto.NavigationTree | undefined
): vscode.Range | undefined {
const cfg = vscode.workspace.getConfiguration(this.language.id);

// Always show on interfaces
if (item.kind === PConst.Kind.interface) {
return getSymbolRange(document, item);
Expand All @@ -111,7 +131,7 @@ export default class TypeScriptImplementationsCodeLensProvider extends TypeScrip
if (
item.kind === PConst.Kind.method &&
parent?.kind === PConst.Kind.interface &&
cfg.get<boolean>('implementationsCodeLens.showOnInterfaceMethods', false)
readUnifiedConfig<boolean>('implementationsCodeLens.showOnInterfaceMethods', false, { scope: document, fallbackSection: this.language.id })
) {
return getSymbolRange(document, item);
}
Expand All @@ -121,7 +141,7 @@ export default class TypeScriptImplementationsCodeLensProvider extends TypeScrip
if (
item.kind === PConst.Kind.method &&
parent?.kind === PConst.Kind.class &&
cfg.get<boolean>('implementationsCodeLens.showOnAllClassMethods', false)
readUnifiedConfig<boolean>('implementationsCodeLens.showOnAllClassMethods', false, { scope: document, fallbackSection: this.language.id })
) {
// But not private ones as these can never be overridden
if (/\bprivate\b/.test(item.kindModifiers ?? '')) {
Expand All @@ -141,7 +161,7 @@ export function register(
cachedResponse: CachedResponse<Proto.NavTreeResponse>,
) {
return conditionalRegistration([
requireGlobalConfiguration(language.id, 'implementationsCodeLens.enabled'),
requireHasModifiedUnifiedConfig(Config.enabled, language.id),
requireSomeCapability(client, ClientCapability.Semantic),
], () => {
return vscode.languages.registerCodeLensProvider(selector.semantic,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,14 @@ import * as PConst from '../../tsServer/protocol/protocol.const';
import { ExecutionTarget } from '../../tsServer/server';
import * as typeConverters from '../../typeConverters';
import { ClientCapability, ITypeScriptServiceClient } from '../../typescriptService';
import { conditionalRegistration, requireGlobalConfiguration, requireSomeCapability } from '../util/dependentRegistration';
import { readUnifiedConfig, unifiedConfigSection } from '../../utils/configuration';
import { conditionalRegistration, requireHasModifiedUnifiedConfig, requireSomeCapability } from '../util/dependentRegistration';
import { ReferencesCodeLens, TypeScriptBaseCodeLensProvider, getSymbolRange } from './baseCodeLensProvider';

const Config = Object.freeze({
enabled: 'referencesCodeLens.enabled',
showOnAllFunctions: 'referencesCodeLens.showOnAllFunctions',
});

export class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLensProvider {
public constructor(
Expand All @@ -25,13 +30,27 @@ export class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLens
super(client, _cachedResponse);
this._register(
vscode.workspace.onDidChangeConfiguration(evt => {
if (evt.affectsConfiguration(`${language.id}.referencesCodeLens.showOnAllFunctions`)) {
if (
evt.affectsConfiguration(`${unifiedConfigSection}.${Config.enabled}`) ||
evt.affectsConfiguration(`${language.id}.${Config.enabled}`) ||
evt.affectsConfiguration(`${unifiedConfigSection}.${Config.showOnAllFunctions}`) ||
evt.affectsConfiguration(`${language.id}.${Config.showOnAllFunctions}`)
) {
this.changeEmitter.fire();
}
})
);
}

override async provideCodeLenses(document: vscode.TextDocument, token: vscode.CancellationToken): Promise<ReferencesCodeLens[]> {
const enabled = readUnifiedConfig<boolean>(Config.enabled, false, { scope: document, fallbackSection: this.language.id });
if (!enabled) {
return [];
}

return super.provideCodeLenses(document, token);
}

public async resolveCodeLens(codeLens: ReferencesCodeLens, token: vscode.CancellationToken): Promise<vscode.CodeLens> {
const args = typeConverters.Position.toFileLocationRequestArgs(codeLens.file, codeLens.range.start);
const response = await this.client.execute('references', args, token, {
Expand Down Expand Up @@ -76,7 +95,7 @@ export class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLens

switch (item.kind) {
case PConst.Kind.function: {
const showOnAllFunctions = vscode.workspace.getConfiguration(this.language.id).get<boolean>('referencesCodeLens.showOnAllFunctions');
const showOnAllFunctions = readUnifiedConfig<boolean>(Config.showOnAllFunctions, false, { scope: document, fallbackSection: this.language.id });
if (showOnAllFunctions && item.nameSpan) {
return getSymbolRange(document, item);
}
Expand Down Expand Up @@ -137,7 +156,7 @@ export function register(
cachedResponse: CachedResponse<Proto.NavTreeResponse>,
) {
return conditionalRegistration([
requireGlobalConfiguration(language.id, 'referencesCodeLens.enabled'),
requireHasModifiedUnifiedConfig(Config.enabled, language.id),
requireSomeCapability(client, ClientCapability.Semantic),
], () => {
return vscode.languages.registerCodeLensProvider(selector.semantic,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import * as vscode from 'vscode';
import { API } from '../../tsServer/api';
import { ClientCapability, ITypeScriptServiceClient } from '../../typescriptService';
import { hasModifiedUnifiedConfig } from '../../utils/configuration';
import { Disposable } from '../../utils/dispose';

export class Condition extends Disposable {
Expand Down Expand Up @@ -102,6 +103,21 @@ export function requireGlobalConfiguration(
);
}

/**
* Requires that a configuration value has been modified from its default value in either the global or workspace scope
*
* Does not check the value, only that it has been modified from the default.
*/
export function requireHasModifiedUnifiedConfig(
configValue: string,
fallbackSection: string,
) {
return new Condition(
() => hasModifiedUnifiedConfig(configValue, { fallbackSection }),
vscode.workspace.onDidChangeConfiguration
);
}

export function requireSomeCapability(
client: ITypeScriptServiceClient,
...capabilities: readonly ClientCapability[]
Expand Down
Loading
Loading