Skip to content

Commit b0a4968

Browse files
committed
Ensure that everything is instrumented where we can.
1 parent d2adad4 commit b0a4968

File tree

5 files changed

+17
-22
lines changed

5 files changed

+17
-22
lines changed

Extension/src/Debugger/extension.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { TargetLeafNode, setActiveSshTarget } from '../SSH/TargetsView/targetNod
1515
import { sshCommandToConfig } from '../SSH/sshCommandToConfig';
1616
import { getSshConfiguration, getSshConfigurationFiles, parseFailures, writeSshConfiguration } from '../SSH/sshHosts';
1717
import { pathAccessible } from '../common';
18+
import { instrument } from '../instrumentation';
1819
import { getSshChannel } from '../logger';
1920
import { AttachItemsProvider, AttachPicker, RemoteAttachPicker } from './attachToProcess';
2021
import { ConfigurationAssetProviderFactory, ConfigurationSnippetProvider, DebugConfigurationProvider, IConfigurationAssetProvider } from './configurationProvider';
@@ -46,10 +47,10 @@ export async function initialize(context: vscode.ExtensionContext): Promise<void
4647
let cppVsDebugProvider: DebugConfigurationProvider | null = null;
4748
if (os.platform() === 'win32') {
4849
cppVsDebugProvider = new DebugConfigurationProvider(assetProvider, DebuggerType.cppvsdbg);
49-
disposables.push(vscode.debug.registerDebugConfigurationProvider(DebuggerType.cppvsdbg, cppVsDebugProvider, vscode.DebugConfigurationProviderTriggerKind.Dynamic));
50+
disposables.push(vscode.debug.registerDebugConfigurationProvider(DebuggerType.cppvsdbg, instrument(cppVsDebugProvider), vscode.DebugConfigurationProviderTriggerKind.Dynamic));
5051
}
5152
const cppDebugProvider: DebugConfigurationProvider = new DebugConfigurationProvider(assetProvider, DebuggerType.cppdbg);
52-
disposables.push(vscode.debug.registerDebugConfigurationProvider(DebuggerType.cppdbg, cppDebugProvider, vscode.DebugConfigurationProviderTriggerKind.Dynamic));
53+
disposables.push(vscode.debug.registerDebugConfigurationProvider(DebuggerType.cppdbg, instrument(cppDebugProvider), vscode.DebugConfigurationProviderTriggerKind.Dynamic));
5354

5455
// Register DebugConfigurationProviders for "Run and Debug" play button.
5556
const debugProvider: DebugConfigurationProvider = new DebugConfigurationProvider(assetProvider, DebuggerType.all);
@@ -75,7 +76,7 @@ export async function initialize(context: vscode.ExtensionContext): Promise<void
7576
}];
7677

7778
// ConfigurationSnippetProvider needs to be initiallized after configurationProvider calls getConfigurationSnippets.
78-
disposables.push(vscode.languages.registerCompletionItemProvider(launchJsonDocumentSelector, new ConfigurationSnippetProvider(assetProvider)));
79+
disposables.push(vscode.languages.registerCompletionItemProvider(launchJsonDocumentSelector, instrument(new ConfigurationSnippetProvider(assetProvider))));
7980

8081
// Register Debug Adapters
8182
disposables.push(vscode.debug.registerDebugAdapterDescriptorFactory(DebuggerType.cppvsdbg, new CppvsdbgDebugAdapterDescriptorFactory(context)));
@@ -84,7 +85,7 @@ export async function initialize(context: vscode.ExtensionContext): Promise<void
8485
// SSH Targets View
8586
await initializeSshTargets();
8687
const sshTargetsProvider: SshTargetsProvider = new SshTargetsProvider();
87-
disposables.push(vscode.window.registerTreeDataProvider('CppSshTargetsView', sshTargetsProvider));
88+
disposables.push(vscode.window.registerTreeDataProvider('CppSshTargetsView', instrument(sshTargetsProvider)));
8889
disposables.push(vscode.commands.registerCommand(addSshTargetCmd, () => enableSshTargetsViewAndRun(addSshTargetImpl)));
8990
disposables.push(vscode.commands.registerCommand('C_Cpp.removeSshTarget', (node?: BaseNode) => enableSshTargetsViewAndRun(removeSshTargetImpl, node)));
9091
disposables.push(vscode.commands.registerCommand(refreshCppSshTargetsViewCmd, (node?: BaseNode) => enableSshTargetsViewAndRun((node?: BaseNode) => sshTargetsProvider.refresh(node), node)));

Extension/src/LanguageServer/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,7 @@ export interface Client {
841841
}
842842

843843
export function createClient(workspaceFolder?: vscode.WorkspaceFolder): Client {
844-
if (isInstrumentationEnabled()) {
844+
if (isInstrumentationEnabled) {
845845
instrument(vscode.languages, { name: "languages" });
846846
instrument(vscode.window, { name: "window" });
847847
instrument(vscode.workspace, { name: "workspace" });

Extension/src/LanguageServer/extension.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import * as which from 'which';
1818
import { logAndReturn } from '../Utility/Async/returns';
1919
import * as util from '../common';
2020
import { modelSelector } from '../constants';
21+
import { instrument } from '../instrumentation';
2122
import { getCrashCallStacksChannel } from '../logger';
2223
import { PlatformInformation } from '../platform';
2324
import * as telemetry from '../telemetry';
@@ -222,7 +223,7 @@ export async function activate(): Promise<void> {
222223
{ scheme: 'file', language: 'cpp' },
223224
{ scheme: 'file', language: 'cuda-cpp' }
224225
];
225-
codeActionProvider = vscode.languages.registerCodeActionsProvider(selector, {
226+
codeActionProvider = vscode.languages.registerCodeActionsProvider(selector, instrument({
226227
provideCodeActions: async (document: vscode.TextDocument, range: vscode.Range, context: vscode.CodeActionContext): Promise<vscode.CodeAction[]> => {
227228

228229
if (!await clients.ActiveClient.getVcpkgEnabled()) {
@@ -248,7 +249,7 @@ export async function activate(): Promise<void> {
248249
const actions: vscode.CodeAction[] = ports.map<vscode.CodeAction>(getVcpkgClipboardInstallAction);
249250
return actions;
250251
}
251-
});
252+
}));
252253

253254
await vscode.commands.executeCommand('setContext', 'cpptools.msvcEnvironmentFound', util.hasMsvcEnvironment());
254255

Extension/src/instrumentation.ts

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ const services = {
2727
instrument: <T extends Record<string, any>>(instance: T, _options?: { ignore?: string[]; name?: string }): T => instance,
2828
message: (_message: PerfMessage) => { },
2929
init: (_vscode: any) => { },
30-
launchSettings: undefined as Record<string, any> | undefined
3130
};
3231

3332
/** Adds instrumentation to all the members of an object when instrumentation is enabled */
@@ -41,21 +40,15 @@ export function sendInstrumentation(message: PerfMessage): void {
4140
}
4241

4342
/** verifies that the instrumentation is loaded into the global namespace */
44-
export function isInstrumentationEnabled(): boolean {
45-
return !!(global as any).instrumentation;
46-
}
43+
export const isInstrumentationEnabled = !!(global as any).instrumentation;
4744

48-
// If the instrumentation object was *actually* loaded then we can set the services from the global object.
49-
// Having this separate ensures that this module is wired up to the global object.
50-
// It's not included in the previous block because if something else loads the instrumentation code first
51-
// this is still needed so that *this* module is properly connected to the global object.
52-
if (isInstrumentationEnabled()) {
53-
// instrumentation services provided by the tool
45+
// If the instrumentation is enabled, then ensure the functions are wired up.
46+
if (isInstrumentationEnabled) {
47+
// Instrumentation services provided by the tool.
5448
services.instrument = (global as any).instrumentation.instrument;
5549
services.message = (global as any).instrumentation.message;
5650
services.init = (global as any).instrumentation.init;
5751

52+
// Passes the specific vscode object for this extension to the init routine.
5853
services.init(require('vscode'));
5954
}
60-
61-
(globalThis as any)["_vscode_"] = require('vscode');

Extension/src/main.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { CppSettings } from './LanguageServer/settings';
2323
import { logAndReturn, returns } from './Utility/Async/returns';
2424
import { CppTools1 } from './cppTools1';
2525
import { logMachineIdMappings } from './id';
26-
import { sendInstrumentation } from './instrumentation';
26+
import { instrument, sendInstrumentation } from './instrumentation';
2727
import { disposeOutputChannels, log } from './logger';
2828
import { PlatformInformation } from './platform';
2929

@@ -60,7 +60,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<CppToo
6060
}
6161
}
6262

63-
vscode.workspace.registerTextDocumentContentProvider('cpptools-schema', new SchemaProvider());
63+
vscode.workspace.registerTextDocumentContentProvider('cpptools-schema', instrument(new SchemaProvider()));
6464

6565
// Initialize the DebuggerExtension and register the related commands and providers.
6666
await DebuggerExtension.initialize(context);
@@ -133,7 +133,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<CppToo
133133
}
134134
}
135135

136-
disposables.push(vscode.tasks.registerTaskProvider(CppBuildTaskProvider.CppBuildScriptType, cppBuildTaskProvider));
136+
disposables.push(vscode.tasks.registerTaskProvider(CppBuildTaskProvider.CppBuildScriptType, instrument(cppBuildTaskProvider)));
137137

138138
vscode.tasks.onDidStartTask(event => {
139139
if (event.execution.task.definition.type === CppBuildTaskProvider.CppBuildScriptType

0 commit comments

Comments
 (0)