Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
6770b0a
Update changelog for 1.31.4. (#14338)
sean-mcmanus Mar 31, 2026
fa097e4
Bump @xmldom/xmldom from 0.8.11 to 0.8.12 in /Extension (#14340)
dependabot[bot] Apr 1, 2026
f309f90
Update TPN. (#14343)
sean-mcmanus Apr 2, 2026
61815d8
Update npmrc. (#14346)
sean-mcmanus Apr 2, 2026
34d375a
Prefer GPT-5-mini for Copilot Hover (#14349)
benmcmorran Apr 3, 2026
61b53bc
Update lodash. (#14350)
sean-mcmanus Apr 3, 2026
900aa75
Fix npx @vscode/vsce. (#14354)
sean-mcmanus Apr 7, 2026
8e82004
Fix cg.yml. (#14355)
sean-mcmanus Apr 8, 2026
69d4585
UCRTVersion is not required for a developer environment (#14358)
bobbrow Apr 8, 2026
bb5943c
Update instructions for installing MSVC (#14361)
bobbrow Apr 9, 2026
55ef430
Bump axios from 1.13.6 to 1.15.0 in /.github/actions (#14365)
dependabot[bot] Apr 13, 2026
7774daf
Add setting doxygen.generateOnCodeAction. (#14342)
sean-mcmanus Apr 13, 2026
291e5a3
Run without debugging (#14351)
bobbrow Apr 13, 2026
bc9a72c
Switch to GPT-4o. (#14364)
sean-mcmanus Apr 13, 2026
2db5c05
Fallback to GPT-5.4-mini and cache the model used. (#14369)
sean-mcmanus Apr 13, 2026
ddb5445
Add a script to copy language server and debugger binaries to the Ext…
bobbrow Apr 13, 2026
775fd69
Add internal silent find-all-references command (#14281)
carsonRadtke Apr 14, 2026
a6b12a8
Update changelog for 1.32.0. (#14373)
sean-mcmanus Apr 14, 2026
25b76ba
Bump follow-redirects from 1.15.11 to 1.16.0 in /.github/actions (#14…
dependabot[bot] Apr 14, 2026
7665e11
Set context flag for when C++ language server is activated (#14382)
DavidARaygoza Apr 16, 2026
1b29dbf
Update loc for walkthrough.windows.text2. (#14383)
sean-mcmanus Apr 16, 2026
ecf1231
Fix and lock the loc terms. (#14387)
sean-mcmanus Apr 16, 2026
2b8f7a2
Fix Reinstalling the Extension.md not being included. (#14390)
sean-mcmanus Apr 17, 2026
bfa165a
Update changelog for 1.32.1 (#14395)
sean-mcmanus Apr 18, 2026
f4fb331
Bump uuid from 8.3.2 to 14.0.0 in /.github/actions (#14402)
dependabot[bot] Apr 23, 2026
11f261e
Bump @xmldom/xmldom from 0.8.12 to 0.8.13 in /Extension (#14403)
dependabot[bot] Apr 23, 2026
c0bbf33
Merge branch 'main' into seanmcm/vsApr27
sean-mcmanus Apr 27, 2026
25cc9b7
clang-analyazer (#14411)
sean-mcmanus Apr 27, 2026
81b40ca
Merge branch 'main' into seanmcm/vsApr27
sean-mcmanus Apr 28, 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
4 changes: 3 additions & 1 deletion .github/actions/.npmrc
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
registry=https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/
always-auth=true
always-auth=true
# Disable postinstall scripts for supply chain security. Allowlist exceptions with npm trust: https://docs.npmjs.com/cli/v11/commands/npm-trust
ignore-scripts=true
41 changes: 24 additions & 17 deletions .github/actions/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions .github/actions/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
"@octokit/rest": "^21.1.1",
"@slack/web-api": "^6.9.1",
"applicationinsights": "^2.5.1",
"axios": "^1.13.5",
"uuid": "^8.3.2"
"axios": "^1.15.0",
"uuid": "^14.0.0"
},
"devDependencies": {
"@azure/storage-blob": "^12.13.0",
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/job-compile-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@ jobs:
# run: yarn test --scenario=MultirootDeadlockTest
# working-directory: Extension

# - name: Run E2E IntelliSense features tests
# if: ${{ inputs.platform == 'windows' }}
# run: yarn test --scenario=RunWithoutDebugging
# working-directory: Extension

# NOTE: For mac/linux run the tests with xvfb-action for UI support.
# Another way to start xvfb https://github.com/microsoft/vscode-test/blob/master/sample/azure-pipelines.yml

Expand All @@ -83,3 +88,10 @@ jobs:
# run: yarn test --scenario=MultirootDeadlockTest
# working-directory: Extension

# - name: Run E2E IntelliSense features tests (xvfb)
# if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }}
# uses: coactions/setup-xvfb@v1
# with:
# run: yarn test --scenario=RunWithoutDebugging
# working-directory: Extension

14 changes: 10 additions & 4 deletions Build/cg/cg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,14 @@ extends:
fi
retryCountOnTaskFailure: 3

- script: |
cd $(Build.SourcesDirectory)\Extension
npx @vscode/vsce@3.7.1 package --yarn -o $(Build.ArtifactStagingDirectory)\Extension\cpptools.vsix
name: ProcessRunner_12
- script: yarn install --frozen-lockfile
displayName: Install dependencies with yarn
workingDirectory: $(Build.SourcesDirectory)\Extension

- script: if not exist node_modules\@vscode\vsce-sign\bin\vsce-sign.exe (echo Missing vsce-sign.exe && exit 1)
displayName: Verify vsce-sign binary exists
workingDirectory: $(Build.SourcesDirectory)\Extension

- script: npx vsce package --yarn -o $(Build.ArtifactStagingDirectory)\Extension\cpptools.vsix
displayName: Run VSCE to package vsix
workingDirectory: $(Build.SourcesDirectory)\Extension
19 changes: 15 additions & 4 deletions Build/package/jobs_package_vsix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,24 @@ jobs:
- script: mkdir $(Build.ArtifactStagingDirectory)\vsix
displayName: Create Staging Directory

- script: |
cd $(Build.SourcesDirectory)\${{ parameters.srcDir }}
npx @vscode/vsce@3.7.1 package -o $(Build.ArtifactStagingDirectory)\vsix\${{ parameters.vsixName }}.vsix
- script: npm install --no-save --ignore-scripts=false --include=optional --force @vscode/vsce@3.7.1
displayName: Install vsce
workingDirectory: $(Build.SourcesDirectory)\${{ parameters.srcDir }}

- script: npm rebuild @vscode/vsce-sign --ignore-scripts=false
displayName: Rebuild vsce-sign binary
workingDirectory: $(Build.SourcesDirectory)\${{ parameters.srcDir }}

- script: if not exist node_modules\@vscode\vsce-sign\bin\vsce-sign.exe (echo Missing vsce-sign.exe && exit 1)
displayName: Verify vsce-sign binary exists
workingDirectory: $(Build.SourcesDirectory)\${{ parameters.srcDir }}

- script: npx vsce package -o $(Build.ArtifactStagingDirectory)\vsix\${{ parameters.vsixName }}.vsix
displayName: Run VSCE to package vsix
workingDirectory: $(Build.SourcesDirectory)\${{ parameters.srcDir }}

# sign the vsix
- script: npx @vscode/vsce@3.7.1 generate-manifest -i $(Build.ArtifactStagingDirectory)\vsix\${{ parameters.vsixName }}.vsix -o $(Build.ArtifactStagingDirectory)\vsix\${{ parameters.vsixName }}.manifest
- script: npx vsce generate-manifest -i $(Build.ArtifactStagingDirectory)\vsix\${{ parameters.vsixName }}.vsix -o $(Build.ArtifactStagingDirectory)\vsix\${{ parameters.vsixName }}.manifest
displayName: generate manifest
workingDirectory: $(Build.SourcesDirectory)\${{ parameters.srcDir }}
- script: copy $(Build.ArtifactStagingDirectory)\vsix\${{ parameters.vsixName }}.manifest $(Build.ArtifactStagingDirectory)\vsix\${{ parameters.vsixName }}.signature.p7s
Expand Down
12 changes: 10 additions & 2 deletions Build/publish/jobs_publish_vsix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,16 @@ jobs:
$aadToken = az account get-access-token --query accessToken --resource $(AzureGuid) -o tsv
Write-Host "##vso[task.setvariable variable=AAD_TOKEN;issecret=true]$aadToken"

- script: |
npx @vscode/vsce@3.7.1 publish --skip-duplicate -i $(Build.StagingDirectory)\vsix\${{ parameters.vsixName }}.vsix --manifestPath $(Build.StagingDirectory)\vsix\${{ parameters.vsixName }}.manifest --signaturePath $(Build.StagingDirectory)\vsix\${{ parameters.vsixName }}.signature.p7s
- script: npm install --no-save --ignore-scripts=false --include=optional --force @vscode/vsce@3.7.1
displayName: Install vsce

- script: npm rebuild @vscode/vsce-sign --ignore-scripts=false
displayName: Rebuild vsce-sign binary

- script: if not exist node_modules\@vscode\vsce-sign\bin\vsce-sign.exe (echo Missing vsce-sign.exe && exit 1)
displayName: Verify vsce-sign binary exists

- script: npx vsce publish --skip-duplicate -i $(Build.StagingDirectory)\vsix\${{ parameters.vsixName }}.vsix --manifestPath $(Build.StagingDirectory)\vsix\${{ parameters.vsixName }}.manifest --signaturePath $(Build.StagingDirectory)\vsix\${{ parameters.vsixName }}.signature.p7s
displayName: Publish to Marketplace
env:
VSCE_PAT: $(AAD_TOKEN)
4 changes: 3 additions & 1 deletion Extension/.npmrc
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
registry=https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/
always-auth=true
always-auth=true
# Disable postinstall scripts for supply chain security. Allowlist exceptions with npm trust: https://docs.npmjs.com/cli/v11/commands/npm-trust
ignore-scripts=true
113 changes: 113 additions & 0 deletions Extension/.scripts/copyExtensionBinaries.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
/* --------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All Rights Reserved.
* See 'LICENSE' in the project root for license information.
* ------------------------------------------------------------------------------------------ */

import { cp, readdir, rm, stat } from 'node:fs/promises';
import { homedir } from 'node:os';
import { join } from 'node:path';
import { $args, $root, green, heading, note } from './common';

const extensionPrefix = 'ms-vscode.cpptools-';
const foldersToCopy = ['bin', 'debugAdapters', 'LLVM'] as const;

type InstalledExtension = {
path: string;
version: number[];
modified: number;
};

function compareVersions(left: number[], right: number[]): number {
const maxLength: number = Math.max(left.length, right.length);
for (let i = 0; i < maxLength; i++) {
const diff: number = (left[i] ?? 0) - (right[i] ?? 0);
if (diff !== 0) {
return diff;
}
}
return 0;
}

function tryParseVersion(folderName: string): number[] | undefined {
if (!folderName.startsWith(extensionPrefix)) {
return undefined;
}

const versionText: string | undefined = folderName.substring(extensionPrefix.length).match(/^\d+\.\d+\.\d+/)?.[0];
return versionText?.split('.').map(each => Number(each));
}

async function getInstalledExtensions(root: string): Promise<InstalledExtension[]> {
try {
const entries = await readdir(root, { withFileTypes: true });
const candidates: Promise<InstalledExtension | undefined>[] = entries.map(async (entry) => {
if (!entry.isDirectory()) {
return undefined;
}

const version: number[] | undefined = tryParseVersion(entry.name);
if (!version) {
return undefined;
}

const extensionPath: string = join(root, entry.name);
for (const folder of foldersToCopy) {
const info = await stat(join(extensionPath, folder)).catch(() => undefined);
if (!info?.isDirectory()) {
return undefined;
}
}

const info = await stat(extensionPath);
return {
path: extensionPath,
version,
modified: info.mtimeMs
};
});

const found = await Promise.all(candidates);
return found.filter((entry): entry is InstalledExtension => entry !== undefined);
} catch {
return [];
}
}

async function findLatestInstalledExtension(providedPath?: string): Promise<string> {
if (providedPath) {
return providedPath;
}

const searchRoots: string[] = [
join(homedir(), '.vscode', 'extensions'),
join(homedir(), '.vscode-insiders', 'extensions'),
join(homedir(), '.vscode-server', 'extensions'),
join(homedir(), '.vscode-server-insiders', 'extensions')
];

const installed: InstalledExtension[] = (await Promise.all(searchRoots.map(each => getInstalledExtensions(each)))).flat();
if (!installed.length) {
throw new Error(`Unable to find an installed C/C++ extension under ${searchRoots.join(' or ')}.`);
}

installed.sort((left, right) => compareVersions(right.version, left.version) || right.modified - left.modified);
return installed[0].path;
}

export async function main(sourcePath = $args[0]) {
console.log(heading('Copy installed extension binaries'));

const installedExtensionPath: string = await findLatestInstalledExtension(sourcePath);
note(`Using installed extension at ${installedExtensionPath}`);

for (const folder of foldersToCopy) {
const source: string = join(installedExtensionPath, folder);
const destination: string = join($root, folder);

console.log(`Copying ${green(folder)} from ${source}`);
await rm(destination, { recursive: true, force: true });
await cp(source, destination, { recursive: true, force: true });
}

note(`Copied installed binaries into ${$root}`);
}
4 changes: 4 additions & 0 deletions Extension/.vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@
"label": "MultirootDeadlockTest ",
"value": "${workspaceFolder}/test/scenarios/MultirootDeadlockTest/assets/test.code-workspace"
},
{
"label": "RunWithoutDebugging ",
"value": "${workspaceFolder}/test/scenarios/RunWithoutDebugging/assets/"
},
{
"label": "SimpleCppProject ",
"value": "${workspaceFolder}/test/scenarios/SimpleCppProject/assets/simpleCppProject.code-workspace"
Expand Down
1 change: 0 additions & 1 deletion Extension/.vscodeignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ eslint.config.js
gulpfile.js
localized_string_ids.h
readme.developer.md
Reinstalling the Extension.md
test.tsconfig.json
translations_auto_pr.js
tsconfig.json
Expand Down
30 changes: 30 additions & 0 deletions Extension/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,35 @@
# C/C++ for Visual Studio Code Changelog

## Version 1.32.1: April 20, 2026
### Bug Fixes
* Fix an IntelliSense crash when three special-case comments are used in a template. [#14360](https://github.com/microsoft/vscode-cpptools/issues/14360)
* Fix `Reinstalling the Extension.md` not being found. [#14389](https://github.com/microsoft/vscode-cpptools/issues/14389)
* Fix the `C/C++ DevTools` extension language service tools not working after the `C/C++` extension updates via `Restart Extensions`. [#14392](https://github.com/microsoft/vscode-cpptools/issues/14392)
* Fix the clang-tidy error `Error: no checks enabled.` when checks are not otherwise set. [#14391](https://github.com/microsoft/vscode-cpptools/issues/14391)
* Update localized strings.

## Version 1.32.0: April 14, 2026
### New Feature
* Add support for run without debugging. [#1201](https://github.com/microsoft/vscode-cpptools/issues/1201)

### Enhancements
* Add a `C_Cpp.doxygen.generateOnCodeAction` setting to allow disabling of Doxygen generation code actions. [#14341](https://github.com/microsoft/vscode-cpptools/issues/14341)
* Improve wildcard matching with the debugger natvis. [MIEngine#1162](https://github.com/microsoft/MIEngine/issues/1162)
* Add support for `HideRawView` with the debugger natvis. [MIEngine#1458](https://github.com/microsoft/MIEngine/issues/1458)

### Bug Fixes
* Fix high CPU usage caused by repeated calls to `selectChatModels`. [#14168](https://github.com/microsoft/vscode-cpptools/issues/14168), [#14211](https://github.com/microsoft/vscode-cpptools/issues/14211), [#14241](https://github.com/microsoft/vscode-cpptools/issues/14241)
* Fix the MSVC developer environment not working if `UCRTVersion` isn't found, and update the walkthrough instructions for installing MSVC. [#14352](https://github.com/microsoft/vscode-cpptools/issues/14352)
* Fix Copilot hover taking too many premium requests. [#14372](https://github.com/microsoft/vscode-cpptools/issues/14372)
* Fix null pointers being expandable for variables in the debugger. [MIEngine#698](https://github.com/microsoft/MIEngine/issues/698)
* Fix recursive `{this}` evaluation with the debugger natvis. [MIEngine#1391](https://github.com/microsoft/MIEngine/issues/1391)
* Update clang-tidy and clang-format from 22.1.1 to 22.1.3 (bug fixes).
* Fix a bug with semantic colorization of operators.

## Version 1.31.4: March 31, 2026
### Bug Fix
* Debugging cpptools and cpptools-srv processes on macOS (to get call stacks) is now blocked when SIP is enabled (due to a potential security issue).

## Version 1.31.3: March 24, 2026
### Enhancements
* Add support for `program` in attach debug configurations. [#14046](https://github.com/microsoft/vscode-cpptools/issues/14046)
Expand Down
Loading
Loading