Skip to content

Commit 0a002db

Browse files
authored
Merge pull request #9206 from microsoft/coleng/1.9.8-cherry-picks
2 parents 2874fd2 + b5b1c2b commit 0a002db

File tree

6 files changed

+164
-151
lines changed

6 files changed

+164
-151
lines changed

Extension/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# C/C++ for Visual Studio Code Change Log
22

3+
## Version 1.9.8: March 20, 2022
4+
### Bug Fixes
5+
* Fix an issue with extension activation failing if `C_Cpp.intelliSenseEngine` was set to `Disabled`. [#9083](https://github.com/microsoft/vscode-cpptools/issues/9083)
6+
37
## Version 1.9.7: March 23, 2022
48
### New Features
59
* Add debugger support for Apple M1 (osx-arm64). [#7035](https://github.com/microsoft/vscode-cpptools/issues/7035)

Extension/package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "cpptools",
33
"displayName": "C/C++",
44
"description": "C/C++ IntelliSense, debugging, and code browsing.",
5-
"version": "1.9.7-main",
5+
"version": "1.9.8-main",
66
"publisher": "ms-vscode",
77
"icon": "LanguageCCPP_color_128x.png",
88
"readme": "README.md",
@@ -2755,6 +2755,8 @@
27552755
"cpp",
27562756
"cuda-cpp"
27572757
],
2758+
"_aiKeyComment": "Ignore 'Property aiKey is not allowed'. See https://github.com/microsoft/vscode/issues/76493",
2759+
"aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217",
27582760
"variables": {
27592761
"pickProcess": "extension.pickNativeProcess",
27602762
"pickRemoteProcess": "extension.pickRemoteNativeProcess"
@@ -3430,6 +3432,8 @@
34303432
"cpp",
34313433
"cuda-cpp"
34323434
],
3435+
"_aiKeyComment": "Ignore 'Property aiKey is not allowed'. See https://github.com/microsoft/vscode/issues/76493",
3436+
"aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217",
34333437
"variables": {
34343438
"pickProcess": "extension.pickNativeProcess"
34353439
},

Extension/src/Debugger/configurationProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ import * as debugUtils from './utils';
77
import * as os from 'os';
88
import * as path from 'path';
99
import * as vscode from 'vscode';
10-
import { CppBuildTask, CppBuildTaskDefinition } from '../LanguageServer/cppBuildTaskProvider';
10+
import { CppBuildTask, CppBuildTaskDefinition, cppBuildTaskProvider } from '../LanguageServer/cppBuildTaskProvider';
1111
import * as util from '../common';
1212
import * as fs from 'fs';
1313
import * as Telemetry from '../telemetry';
14-
import { cppBuildTaskProvider, configPrefix } from '../LanguageServer/extension';
1514
import * as logger from '../logger';
1615
import * as nls from 'vscode-nls';
1716
import { IConfiguration, IConfigurationSnippet, DebuggerType, DebuggerEvent, MIConfigurations, WindowsConfigurations, WSLConfigurations, PipeTransportConfigurations, TaskConfigStatus } from './configurations';
1817
import { parse } from 'comment-json';
1918
import { PlatformInformation } from '../platform';
2019
import { Environment, ParsedEnvironmentFile } from './ParsedEnvironmentFile';
20+
import { configPrefix } from '../LanguageServer/extension';
2121

2222
nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })();
2323
const localize: nls.LocalizeFunc = nls.loadMessageBundle();

Extension/src/LanguageServer/cppBuildTaskProvider.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,6 @@ export class CppBuildTaskProvider implements TaskProvider {
9494
try {
9595
activeClient = ext.getActiveClient();
9696
} catch (errJS) {
97-
const e: Error = errJS as Error;
98-
if (!e || e.message !== ext.intelliSenseDisabledError) {
99-
console.error("Unknown error calling getActiveClient().");
100-
}
10197
return emptyTasks; // Language service features may be disabled.
10298
}
10399

@@ -347,6 +343,8 @@ export class CppBuildTaskProvider implements TaskProvider {
347343

348344
}
349345

346+
export const cppBuildTaskProvider: CppBuildTaskProvider = new CppBuildTaskProvider();
347+
350348
class CustomBuildTaskTerminal implements Pseudoterminal {
351349
private writeEmitter = new EventEmitter<string>();
352350
private closeEmitter = new EventEmitter<number>();

Extension/src/LanguageServer/extension.ts

Lines changed: 9 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,9 @@ import { Readable } from 'stream';
2525
import * as nls from 'vscode-nls';
2626
import { CppBuildTaskProvider } from './cppBuildTaskProvider';
2727
import { UpdateInsidersAccess } from '../main';
28-
import { PlatformInformation } from '../platform';
29-
import * as semver from 'semver';
3028

3129
nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })();
3230
const localize: nls.LocalizeFunc = nls.loadMessageBundle();
33-
export const cppBuildTaskProvider: CppBuildTaskProvider = new CppBuildTaskProvider();
3431
export const CppSourceStr: string = "C/C++";
3532
export const configPrefix: string = "C/C++: ";
3633

@@ -41,7 +38,6 @@ let ui: UI;
4138
const disposables: vscode.Disposable[] = [];
4239
let languageConfigurations: vscode.Disposable[] = [];
4340
let intervalTimer: NodeJS.Timer;
44-
let taskProvider: vscode.Disposable;
4541
let codeActionProvider: vscode.Disposable;
4642
export const intelliSenseDisabledError: string = "Do not activate the extension when IntelliSense is disabled.";
4743

@@ -157,129 +153,20 @@ function sendActivationTelemetry(): void {
157153
telemetry.logLanguageServerEvent("Activate", activateEvent);
158154
}
159155

160-
async function checkVsixCompatibility(): Promise<void> {
161-
const ignoreMismatchedCompatibleVsix: PersistentState<boolean> = new PersistentState<boolean>("CPP." + util.packageJson.version + ".ignoreMismatchedCompatibleVsix", false);
162-
let resetIgnoreMismatchedCompatibleVsix: boolean = true;
163-
164-
// Check to ensure the correct platform-specific VSIX was installed.
165-
const vsixManifestPath: string = path.join(util.extensionPath, ".vsixmanifest");
166-
// Skip the check if the file does not exist, such as when debugging cpptools.
167-
if (await util.checkFileExists(vsixManifestPath)) {
168-
const content: string = await util.readFileText(vsixManifestPath);
169-
const matches: RegExpMatchArray | null = content.match(/TargetPlatform="(?<platform>[^"]*)"/);
170-
if (matches && matches.length > 0 && matches.groups) {
171-
const vsixTargetPlatform: string = matches.groups['platform'];
172-
const platformInfo: PlatformInformation = await PlatformInformation.GetPlatformInformation();
173-
let isPlatformCompatible: boolean = true;
174-
let isPlatformMatching: boolean = true;
175-
switch (vsixTargetPlatform) {
176-
case "win32-x64":
177-
isPlatformMatching = platformInfo.platform === "win32" && platformInfo.architecture === "x64";
178-
// x64 binaries can also be run on arm64 Windows 11.
179-
isPlatformCompatible = platformInfo.platform === "win32" && (platformInfo.architecture === "x64" || (platformInfo.architecture === "arm64" && semver.gte(os.release(), "10.0.22000")));
180-
break;
181-
case "win32-ia32":
182-
isPlatformMatching = platformInfo.platform === "win32" && platformInfo.architecture === "x86";
183-
// x86 binaries can also be run on x64 and arm64 Windows.
184-
isPlatformCompatible = platformInfo.platform === "win32" && (platformInfo.architecture === "x86" || platformInfo.architecture === "x64" || platformInfo.architecture === "arm64");
185-
break;
186-
case "win32-arm64":
187-
isPlatformMatching = platformInfo.platform === "win32" && platformInfo.architecture === "arm64";
188-
isPlatformCompatible = isPlatformMatching;
189-
break;
190-
case "linux-x64":
191-
isPlatformMatching = platformInfo.platform === "linux" && platformInfo.architecture === "x64" && platformInfo.distribution?.name !== "alpine";
192-
isPlatformCompatible = isPlatformMatching;
193-
break;
194-
case "linux-arm64":
195-
isPlatformMatching = platformInfo.platform === "linux" && platformInfo.architecture === "arm64" && platformInfo.distribution?.name !== "alpine";
196-
isPlatformCompatible = isPlatformMatching;
197-
break;
198-
case "linux-armhf":
199-
isPlatformMatching = platformInfo.platform === "linux" && platformInfo.architecture === "arm" && platformInfo.distribution?.name !== "alpine";
200-
// armhf binaries can also be run on aarch64 linux.
201-
isPlatformCompatible = platformInfo.platform === "linux" && (platformInfo.architecture === "arm" || platformInfo.architecture === "arm64") && platformInfo.distribution?.name !== "alpine";
202-
break;
203-
case "alpine-x64":
204-
isPlatformMatching = platformInfo.platform === "linux" && platformInfo.architecture === "x64" && platformInfo.distribution?.name === "alpine";
205-
isPlatformCompatible = isPlatformMatching;
206-
break;
207-
case "alpine-arm64":
208-
isPlatformMatching = platformInfo.platform === "linux" && platformInfo.architecture === "arm64" && platformInfo.distribution?.name === "alpine";
209-
isPlatformCompatible = isPlatformMatching;
210-
break;
211-
case "darwin-x64":
212-
isPlatformMatching = platformInfo.platform === "darwin" && platformInfo.architecture === "x64";
213-
isPlatformCompatible = isPlatformMatching;
214-
break;
215-
case "darwin-arm64":
216-
isPlatformMatching = platformInfo.platform === "darwin" && platformInfo.architecture === "arm64";
217-
// x64 binaries can also be run on arm64 macOS.
218-
isPlatformCompatible = platformInfo.platform === "darwin" && (platformInfo.architecture === "x64" || platformInfo.architecture === "arm64");
219-
break;
220-
default:
221-
console.log("Unrecognized TargetPlatform in .vsixmanifest");
222-
break;
223-
}
224-
const moreInfoButton: string = localize("more.info.button", "More Info");
225-
const ignoreButton: string = localize("ignore.button", "Ignore");
226-
let promise: Thenable<string | undefined> | undefined;
227-
if (!isPlatformCompatible) {
228-
promise = vscode.window.showErrorMessage(localize("vsix.platform.incompatible", "The C/C++ extension installed does not match your system.", vsixTargetPlatform), moreInfoButton);
229-
} else if (!isPlatformMatching) {
230-
if (!ignoreMismatchedCompatibleVsix.Value) {
231-
resetIgnoreMismatchedCompatibleVsix = false;
232-
promise = vscode.window.showWarningMessage(localize("vsix.platform.mismatching", "The C/C++ extension installed is compatible with but does not match your system.", vsixTargetPlatform), moreInfoButton, ignoreButton);
233-
}
234-
}
235-
if (promise) {
236-
promise.then(async (value) => {
237-
if (value === moreInfoButton) {
238-
await vscode.commands.executeCommand("markdown.showPreview", vscode.Uri.file(util.getLocalizedHtmlPath("Reinstalling the Extension.md")));
239-
} else if (value === ignoreButton) {
240-
ignoreMismatchedCompatibleVsix.Value = true;
241-
}
242-
});
243-
}
244-
} else {
245-
console.log("Unable to find TargetPlatform in .vsixmanifest");
246-
}
247-
}
248-
if (resetIgnoreMismatchedCompatibleVsix) {
249-
ignoreMismatchedCompatibleVsix.Value = false;
250-
}
251-
}
252-
253156
/**
254157
* activate: set up the extension for language services
255158
*/
256159
export async function activate(): Promise<void> {
257160

258-
await checkVsixCompatibility();
259-
260-
if (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) {
261-
for (let i: number = 0; i < vscode.workspace.workspaceFolders.length; ++i) {
262-
const config: string = path.join(vscode.workspace.workspaceFolders[i].uri.fsPath, ".vscode/c_cpp_properties.json");
263-
if (await util.checkFileExists(config)) {
264-
const doc: vscode.TextDocument = await vscode.workspace.openTextDocument(config);
265-
vscode.languages.setTextDocumentLanguage(doc, "jsonc");
266-
}
267-
}
268-
}
269-
270-
if (new CppSettings((vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) ? vscode.workspace.workspaceFolders[0]?.uri : undefined).intelliSenseEngine === "Disabled") {
271-
throw new Error(intelliSenseDisabledError);
272-
} else {
273-
console.log("activating extension");
274-
sendActivationTelemetry();
275-
const checkForConflictingExtensions: PersistentState<boolean> = new PersistentState<boolean>("CPP." + util.packageJson.version + ".checkForConflictingExtensions", true);
276-
if (checkForConflictingExtensions.Value) {
277-
checkForConflictingExtensions.Value = false;
278-
const clangCommandAdapterActive: boolean = vscode.extensions.all.some((extension: vscode.Extension<any>, index: number, array: Readonly<vscode.Extension<any>[]>): boolean =>
279-
extension.isActive && extension.id === "mitaki28.vscode-clang");
280-
if (clangCommandAdapterActive) {
281-
telemetry.logLanguageServerEvent("conflictingExtension");
282-
}
161+
console.log("activating extension");
162+
sendActivationTelemetry();
163+
const checkForConflictingExtensions: PersistentState<boolean> = new PersistentState<boolean>("CPP." + util.packageJson.version + ".checkForConflictingExtensions", true);
164+
if (checkForConflictingExtensions.Value) {
165+
checkForConflictingExtensions.Value = false;
166+
const clangCommandAdapterActive: boolean = vscode.extensions.all.some((extension: vscode.Extension<any>, index: number, array: Readonly<vscode.Extension<any>[]>): boolean =>
167+
extension.isActive && extension.id === "mitaki28.vscode-clang");
168+
if (clangCommandAdapterActive) {
169+
telemetry.logLanguageServerEvent("conflictingExtension");
283170
}
284171
}
285172

@@ -311,21 +198,14 @@ export async function activate(): Promise<void> {
311198

312199
registerCommands();
313200

314-
taskProvider = vscode.tasks.registerTaskProvider(CppBuildTaskProvider.CppBuildScriptType, cppBuildTaskProvider);
315-
316201
vscode.tasks.onDidStartTask(event => {
317202
getActiveClient().PauseCodeAnalysis();
318-
if (event.execution.task.definition.type === CppBuildTaskProvider.CppBuildScriptType
319-
|| event.execution.task.name.startsWith(configPrefix)) {
320-
telemetry.logLanguageServerEvent('buildTaskStarted');
321-
}
322203
});
323204

324205
vscode.tasks.onDidEndTask(event => {
325206
getActiveClient().ResumeCodeAnalysis();
326207
if (event.execution.task.definition.type === CppBuildTaskProvider.CppBuildScriptType
327208
|| event.execution.task.name.startsWith(configPrefix)) {
328-
telemetry.logLanguageServerEvent('buildTaskFinished');
329209
if (event.execution.task.scope !== vscode.TaskScope.Global && event.execution.task.scope !== vscode.TaskScope.Workspace) {
330210
const folder: vscode.WorkspaceFolder | undefined = event.execution.task.scope;
331211
if (folder) {
@@ -1032,9 +912,6 @@ export function deactivate(): Thenable<void> {
1032912
disposables.forEach(d => d.dispose());
1033913
languageConfigurations.forEach(d => d.dispose());
1034914
ui.dispose();
1035-
if (taskProvider) {
1036-
taskProvider.dispose();
1037-
}
1038915
if (codeActionProvider) {
1039916
codeActionProvider.dispose();
1040917
}

0 commit comments

Comments
 (0)