Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
e44773c
Show installation progress in update status bar entry on Windows (#29…
dmitrivMS Feb 12, 2026
56069ab
Add compact layout support for Activity Bar with adjustable dimensions
mrleemurray Feb 12, 2026
783fa8d
fixed view container locations for pane composite part service (#294859)
sandy081 Feb 12, 2026
5f6c0fa
Engineering - move Alpine CLI jobs into the Alpine stage (#294852)
lszomoru Feb 12, 2026
32ae76d
Refactor icon mask size to use CSS variable for activity bar
mrleemurray Feb 12, 2026
806a3a5
Update distro
isidorn Feb 12, 2026
3a8ad66
Refactor transpileFile function to remove unused parameter and update…
jrieken Feb 12, 2026
5bb327d
Color contrast ratio of tree view description text is 4.381:1 which i…
alexr00 Feb 12, 2026
5e43400
Add unit tests for ActivitybarPart dimensions and configuration changes
mrleemurray Feb 12, 2026
d39f3da
Update keybinding test to use dynamic UUID for command ID
mrleemurray Feb 12, 2026
b13dc5e
Remove backdrop-filter from minimap in dark theme for improved perfor…
mrleemurray Feb 12, 2026
b75669b
Apply suggestion from @Copilot
mrleemurray Feb 12, 2026
e4608e2
Fix git rm of codicon.ttf (#294882)
alexr00 Feb 12, 2026
c4d9d33
Merge pull request #294881 from microsoft/mrleemurray/psychological-p…
mrleemurray Feb 12, 2026
a948014
add name to default account (#294878)
sandy081 Feb 12, 2026
deacb3a
Merge pull request #294897 from microsoft/mrleemurray/planned-emerald…
mrleemurray Feb 12, 2026
6924a14
editors - also open MCP server back in editor and not modal (#294904)
bpasero Feb 12, 2026
855722a
Startup perf regression due to top level import of `http` (fix #29485…
bpasero Feb 12, 2026
261a959
fix account name (#294913)
sandy081 Feb 12, 2026
06583e2
Merge pull request #294874 from microsoft/isidor/update-distro
isidorn Feb 12, 2026
b5b4ab1
Avoid download pop ups and include downlaoaded content in extraction …
dmitrivMS Feb 12, 2026
ba54343
Git - store repository root in the cache along with the workspace fol…
lszomoru Feb 12, 2026
53cdd09
Ask @vscode should never open Ask mode, only agent (#294060)
pierceboggan Feb 12, 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
78 changes: 78 additions & 0 deletions .eslint-plugin-local/code-no-http-import.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import { TSESTree } from '@typescript-eslint/typescript-estree';
import * as eslint from 'eslint';
import { normalize } from 'path';
import minimatch from 'minimatch';
import { createImportRuleListener } from './utils.ts';

const restrictedModules = new Set(['http', 'https']);

const REPO_ROOT = normalize(`${import.meta.dirname}/..`);

export default new class implements eslint.Rule.RuleModule {

readonly meta: eslint.Rule.RuleMetaData = {
messages: {
notAllowed: 'Importing \'{{module}}\' is only allowed as a type import (`import type ...`) to prevent startup performance regressions as these modules are slow to load. Use dynamic `import(\'{{module}}\')` for runtime access.'
},
schema: {
type: 'array',
items: {
type: 'object',
properties: {
target: {
type: 'string',
description: 'A glob pattern for files to check'
}
},
additionalProperties: false,
required: ['target']
}
}
};

create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
const targets = (context.options as { target: string }[]).map(o => o.target);
if (targets.length > 0) {
const relativeFilename = normalize(context.getFilename()).substring(REPO_ROOT.length + 1).replace(/\\/g, '/');
const matched = targets.some(pattern => minimatch(relativeFilename, pattern));
if (!matched) {
return {}; // file is not covered by any target pattern
}
}

return createImportRuleListener((node, path) => {
if (!restrictedModules.has(path)) {
return;
}

const parent = node.parent;
if (!parent) {
return;
}

// Allow: import type { ... } from 'http'
// Allow: import type * as http from 'http'
if (parent.type === TSESTree.AST_NODE_TYPES.ImportDeclaration && parent.importKind === 'type') {
return;
}

// Allow: export type { ... } from 'http'
if ('exportKind' in parent && parent.exportKind === 'type') {
return;
}

context.report({
loc: parent.loc,
messageId: 'notAllowed',
data: {
module: path
}
});
});
}
};
2 changes: 1 addition & 1 deletion build/azure-pipelines/alpine/product-build-alpine-cli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ parameters:

jobs:
- job: AlpineCLI_${{ parameters.VSCODE_ARCH }}
displayName: Alpine (${{ upper(parameters.VSCODE_ARCH) }})
displayName: Alpine CLI (${{ upper(parameters.VSCODE_ARCH) }})
timeoutInMinutes: 60
pool:
name: 1es-ubuntu-22.04-x64
Expand Down
1 change: 0 additions & 1 deletion build/azure-pipelines/common/publish.ts
Original file line number Diff line number Diff line change
Expand Up @@ -974,7 +974,6 @@ async function main() {

if (
e('VSCODE_BUILD_STAGE_LINUX') === 'True' ||
e('VSCODE_BUILD_STAGE_ALPINE') === 'True' ||
e('VSCODE_BUILD_STAGE_MACOS') === 'True' ||
e('VSCODE_BUILD_STAGE_WINDOWS') === 'True'
) {
Expand Down
30 changes: 12 additions & 18 deletions build/azure-pipelines/product-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ extends:
jobs:
- template: build/azure-pipelines/product-validation-checks.yml@self

- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- stage: CompileCLI
dependsOn: []
jobs:
Expand Down Expand Up @@ -244,18 +244,6 @@ extends:
VSCODE_ARCH: armhf
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}

- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE, true)) }}:
- template: build/azure-pipelines/alpine/product-build-alpine-cli.yml@self
parameters:
VSCODE_ARCH: x64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}

- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true)) }}:
- template: build/azure-pipelines/alpine/product-build-alpine-cli.yml@self
parameters:
VSCODE_ARCH: arm64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}

- ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:
- template: build/azure-pipelines/darwin/product-build-darwin-cli.yml@self
parameters:
Expand Down Expand Up @@ -313,7 +301,7 @@ extends:
- stage: Windows
dependsOn:
- Compile
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- CompileCLI
pool:
name: 1es-windows-2022-x64
Expand Down Expand Up @@ -363,7 +351,7 @@ extends:
- stage: Linux
dependsOn:
- Compile
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- CompileCLI
pool:
name: 1es-ubuntu-22.04-x64
Expand Down Expand Up @@ -418,23 +406,29 @@ extends:
- stage: Alpine
dependsOn:
- Compile
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- CompileCLI
jobs:
- ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}:
- template: build/azure-pipelines/alpine/product-build-alpine.yml@self
parameters:
VSCODE_ARCH: x64
- template: build/azure-pipelines/alpine/product-build-alpine-cli.yml@self
parameters:
VSCODE_ARCH: x64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}:
- template: build/azure-pipelines/alpine/product-build-alpine.yml@self
parameters:
VSCODE_ARCH: arm64
- template: build/azure-pipelines/alpine/product-build-alpine-cli.yml@self
parameters:
VSCODE_ARCH: arm64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}

- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_MACOS'], true)) }}:
- stage: macOS
dependsOn:
- Compile
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- CompileCLI
pool:
name: AcesShared
Expand Down
3 changes: 3 additions & 0 deletions build/lib/stylelint/vscode-known-variables.json
Original file line number Diff line number Diff line change
Expand Up @@ -903,6 +903,9 @@
"--vscode-window-inactiveBorder"
],
"others": [
"--activity-bar-action-height",
"--activity-bar-icon-size",
"--activity-bar-width",
"--editor-font-size",
"--background-dark",
"--background-light",
Expand Down
8 changes: 4 additions & 4 deletions build/next/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -699,11 +699,11 @@ const transformOptions: esbuild.TransformOptions = {
}),
};

async function transpileFile(srcPath: string, destPath: string, relativePath: string): Promise<void> {
async function transpileFile(srcPath: string, destPath: string): Promise<void> {
const source = await fs.promises.readFile(srcPath, 'utf-8');
const result = await esbuild.transform(source, {
...transformOptions,
sourcefile: relativePath,
sourcefile: srcPath,
});

await fs.promises.mkdir(path.dirname(destPath), { recursive: true });
Expand All @@ -728,7 +728,7 @@ async function transpile(outDir: string, excludeTests: boolean): Promise<void> {
await Promise.all(files.map(file => {
const srcPath = path.join(REPO_ROOT, SRC_DIR, file);
const destPath = path.join(REPO_ROOT, outDir, file.replace(/\.ts$/, '.js'));
return transpileFile(srcPath, destPath, file);
return transpileFile(srcPath, destPath);
}));
}

Expand Down Expand Up @@ -996,7 +996,7 @@ async function watch(): Promise<void> {
await Promise.all(tsFiles.map(srcPath => {
const relativePath = path.relative(path.join(REPO_ROOT, SRC_DIR), srcPath);
const destPath = path.join(REPO_ROOT, outDir, relativePath.replace(/\.ts$/, '.js'));
return transpileFile(srcPath, destPath, relativePath);
return transpileFile(srcPath, destPath);
}));
}

Expand Down
31 changes: 31 additions & 0 deletions build/win32/code.iss
Original file line number Diff line number Diff line change
Expand Up @@ -1365,6 +1365,36 @@ end;

// Updates

function GetUpdateProgressFilePath(): String;
begin
Result := ExpandConstant('{param:progress}');
end;

var
LastReportedProgressPct: Integer;

procedure CurInstallProgressChanged(CurProgress, MaxProgress: Integer);
var
ProgressFilePath: String;
ProgressContent: String;
CurrentPct: Integer;
begin
if IsBackgroundUpdate() then begin
ProgressFilePath := GetUpdateProgressFilePath();
if ProgressFilePath <> '' then begin
if MaxProgress > 0 then
CurrentPct := (CurProgress * 100) div MaxProgress
else
CurrentPct := 0;
if CurrentPct <> LastReportedProgressPct then begin
LastReportedProgressPct := CurrentPct;
ProgressContent := IntToStr(CurProgress) + ',' + IntToStr(MaxProgress);
SaveStringToFile(ProgressFilePath, ProgressContent, False);
end;
end;
end;
end;

var
ShouldRestartTunnelService: Boolean;

Expand Down Expand Up @@ -1658,6 +1688,7 @@ begin
begin
SaveStringToFile(ExpandConstant('{app}\updating_version'), '{#Commit}', False);
CreateMutex('{#AppMutex}-ready');
DeleteFile(GetUpdateProgressFilePath());

Log('Checking whether application is still running...');
while (CheckForMutexes('{#AppMutex}')) do
Expand Down
1 change: 1 addition & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ export default tseslint.config(
'local/code-no-localized-model-description': 'warn',
'local/code-policy-localization-key-match': 'warn',
'local/code-no-localization-template-literals': 'error',
'local/code-no-http-import': ['warn', { target: 'src/vs/**' }],
'local/code-no-deep-import-of-internal': ['error', { '.*Internal': true, 'searchExtTypesInternal': false }],
'local/code-layering': [
'warn',
Expand Down
18 changes: 9 additions & 9 deletions extensions/git/src/repositoryCache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { Remote, RepositoryAccessDetails } from './api/git';
import { isDescendant } from './util';

export interface RepositoryCacheInfo {
repositoryPath: string; // path of the local repository clone
workspacePath: string; // path of the workspace folder or workspace file
lastTouchedTime?: number; // timestamp when the repository was last touched
}
Expand All @@ -18,8 +19,8 @@ function isRepositoryCacheInfo(obj: unknown): obj is RepositoryCacheInfo {
return false;
}
const rec = obj as Record<string, unknown>;
return typeof rec.workspacePath === 'string' &&
(rec.lastOpenedTime === undefined || typeof rec.lastOpenedTime === 'number');
return typeof rec.workspacePath === 'string' && typeof rec.repositoryPath === 'string' &&
(rec.lastTouchedTime === undefined || typeof rec.lastTouchedTime === 'number');
}

export class RepositoryCache {
Expand Down Expand Up @@ -47,18 +48,18 @@ export class RepositoryCache {
this._recentRepositories = new Map<string, number>();

for (const [_, inner] of this.lru) {
for (const [repositoryPath, repositoryDetails] of inner) {
if (!repositoryDetails.lastTouchedTime) {
for (const [, repositoryDetails] of inner) {
if (!repositoryDetails.repositoryPath || !repositoryDetails.lastTouchedTime) {
continue;
}

// Check whether the repository exists with a more recent access time
const repositoryLastAccessTime = this._recentRepositories.get(repositoryPath);
const repositoryLastAccessTime = this._recentRepositories.get(repositoryDetails.repositoryPath);
if (repositoryLastAccessTime && repositoryDetails.lastTouchedTime <= repositoryLastAccessTime) {
continue;
}

this._recentRepositories.set(repositoryPath, repositoryDetails.lastTouchedTime);
this._recentRepositories.set(repositoryDetails.repositoryPath, repositoryDetails.lastTouchedTime);
}
}
}
Expand Down Expand Up @@ -99,6 +100,7 @@ export class RepositoryCache {
}

foldersLru.set(folderPathOrWorkspaceFile, {
repositoryPath: rootPath,
workspacePath: folderPathOrWorkspaceFile,
lastTouchedTime: Date.now()
}); // touch entry
Expand All @@ -110,7 +112,7 @@ export class RepositoryCache {
// If the current workspace is a workspace file, use that. Otherwise, find the workspace folder that contains the rootUri
let folderPathOrWorkspaceFile: string | undefined;
try {
if (this._workspaceFile) {
if (this._workspaceFile && this._workspaceFile.scheme === 'file') {
folderPathOrWorkspaceFile = this._workspaceFile.fsPath;
} else if (this._workspaceFolders && this._workspaceFolders.length) {
const sorted = [...this._workspaceFolders].sort((a, b) => b.uri.fsPath.length - a.uri.fsPath.length);
Expand All @@ -126,7 +128,6 @@ export class RepositoryCache {
} catch {
return;
}

}

update(addedRemotes: Remote[], removedRemotes: Remote[], rootPath: string): void {
Expand Down Expand Up @@ -203,7 +204,6 @@ export class RepositoryCache {
this.lru.set(repo, inner);
}
}

} catch {
this._logger.warn('[CachedRepositories][load] Failed to load cached repositories from global state.');
}
Expand Down
4 changes: 0 additions & 4 deletions extensions/theme-2026/themes/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -559,10 +559,6 @@
}

/* Minimap */
.monaco-workbench .monaco-editor .minimap {
backdrop-filter: var(--backdrop-blur-lg) !important;
-webkit-backdrop-filter: var(--backdrop-blur-lg) !important;
}

.monaco-workbench .monaco-editor .minimap canvas {
opacity: 0.85;
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": "cdc946932deac5be9ae3710cf6d33ae8c45afe88",
"distro": "27cdb9e676748a9750bb217592c993ff5076ee6c",
"author": {
"name": "Microsoft Corporation"
},
Expand Down
Binary file removed src/vs/base/browser/ui/codicons/codicon/codicon.ttf
Binary file not shown.
1 change: 1 addition & 0 deletions src/vs/base/common/defaultAccount.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ export interface IDefaultAccountAuthenticationProvider {

export interface IDefaultAccount {
readonly authenticationProvider: IDefaultAccountAuthenticationProvider;
readonly accountName: string;
readonly sessionId: string;
readonly enterprise: boolean;
readonly entitlementsData?: IEntitlementsData | null;
Expand Down
3 changes: 2 additions & 1 deletion src/vs/base/parts/request/test/electron-main/request.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import * as http from 'http';
import type * as http from 'http';
import { AddressInfo } from 'net';
import assert from 'assert';
import { CancellationToken, CancellationTokenSource } from '../../../../common/cancellation.js';
Expand All @@ -19,6 +19,7 @@ suite('Request', () => {
let server: http.Server;

setup(async () => {
const http = await import('http');
port = await new Promise<number>((resolvePort, rejectPort) => {
server = http.createServer((req, res) => {
if (req.url === '/noreply') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/

import { BrowserWindow } from 'electron';
import { Server } from 'http';
import type { Server } from 'http';
import { Socket } from 'net';
import { VSBuffer } from '../../../base/common/buffer.js';
import { DisposableStore, toDisposable } from '../../../base/common/lifecycle.js';
Expand Down
Loading
Loading