Skip to content

Commit 6998a33

Browse files
committed
Support activating the extension with limited support in untrusted workspaces
1 parent 6e2f074 commit 6998a33

File tree

7 files changed

+35
-7
lines changed

7 files changed

+35
-7
lines changed

l10n/bundle.l10n.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
{
2+
"Reload Window": "Reload Window",
3+
"Workspace trust has changed. Would you like to reload the window to activate the C# extension?": "Workspace trust has changed. Would you like to reload the window to activate the C# extension?",
24
"How to setup Remote Debugging": "How to setup Remote Debugging",
35
"The C# extension for Visual Studio Code is incompatible on {0} {1} with the VS Code Remote Extensions. To see avaliable workarounds, click on '{2}'.": "The C# extension for Visual Studio Code is incompatible on {0} {1} with the VS Code Remote Extensions. To see avaliable workarounds, click on '{2}'.",
46
"The C# extension for Visual Studio Code is incompatible on {0} {1}.": "The C# extension for Visual Studio Code is incompatible on {0} {1}.",
@@ -146,7 +148,6 @@
146148
"OmniSharp requires a complete install of Mono (including MSBuild) to provide language services when `omnisharp.useModernNet` is disabled in Settings. Please install the latest Mono and restart.": "OmniSharp requires a complete install of Mono (including MSBuild) to provide language services when `omnisharp.useModernNet` is disabled in Settings. Please install the latest Mono and restart.",
147149
"Download Mono": "Download Mono",
148150
"Open settings": "Open settings",
149-
"Reload Window": "Reload Window",
150151
"dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change": "dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change",
151152
"C# configuration has changed. Would you like to relaunch the Language Server with your changes?": "C# configuration has changed. Would you like to relaunch the Language Server with your changes?",
152153
"Restart Language Server": "Restart Language Server",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"capabilities": {
3434
"virtualWorkspaces": false,
3535
"untrustedWorkspaces": {
36-
"supported": false
36+
"supported": "limited"
3737
}
3838
},
3939
"extensionKind": [

src/activateOmniSharp.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export function activateOmniSharp(
5858
const coreClrDebugPromise = getCoreClrDebugPromise(omnisharpLangServicePromise);
5959

6060
const exports: OmnisharpExtensionExports = {
61+
isLimitedActivation: false,
6162
initializationFinished: async () => {
6263
const langService = await omnisharpLangServicePromise;
6364
await langService!.server.waitForInitialize();

src/activateRoslyn.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export function activateRoslyn(
8787

8888
const languageServerExport = new RoslynLanguageServerExport(roslynLanguageServerStartedPromise);
8989
const exports: CSharpExtensionExports = {
90+
isLimitedActivation: false,
9091
initializationFinished: async () => {
9192
await coreClrDebugPromise;
9293
await razorLanguageServerStartedPromise;

src/csharpExtensionExports.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ import { GlobalBrokeredServiceContainer } from '@microsoft/servicehub-framework'
1111
import { PartialResultParams, ProtocolRequestType, RequestType } from 'vscode-languageclient/node';
1212
import { LanguageServerEvents } from './lsptoolshost/server/languageServerEvents';
1313

14+
export interface LimitedExtensionExports {
15+
isLimitedActivation: true;
16+
}
17+
1418
export interface OmnisharpExtensionExports {
19+
isLimitedActivation: false;
1520
initializationFinished: () => Promise<void>;
1621
getAdvisor: () => Promise<Advisor>;
1722
getTestManager: () => Promise<TestManager>;
@@ -20,6 +25,7 @@ export interface OmnisharpExtensionExports {
2025
}
2126

2227
export interface CSharpExtensionExports {
28+
isLimitedActivation: false;
2329
initializationFinished: () => Promise<void>;
2430
logDirectory: string;
2531
profferBrokeredServices: (container: GlobalBrokeredServiceContainer) => void;

src/main.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,19 @@ import IInstallDependencies from './packageManager/IInstallDependencies';
2121
import { installRuntimeDependencies } from './installRuntimeDependencies';
2222
import { isValidDownload } from './packageManager/isValidDownload';
2323
import { MigrateOptions } from './shared/migrateOptions';
24-
import { CSharpExtensionExports, OmnisharpExtensionExports } from './csharpExtensionExports';
24+
import { CSharpExtensionExports, LimitedExtensionExports, OmnisharpExtensionExports } from './csharpExtensionExports';
2525
import { getCSharpDevKit } from './utils/getCSharpDevKit';
2626
import { commonOptions, omnisharpOptions } from './shared/options';
2727
import { TelemetryEventNames } from './shared/telemetryEventNames';
2828
import { checkDotNetRuntimeExtensionVersion } from './checkDotNetRuntimeExtensionVersion';
2929
import { checkIsSupportedPlatform } from './checkSupportedPlatform';
3030
import { activateOmniSharp } from './activateOmniSharp';
3131
import { activateRoslyn } from './activateRoslyn';
32+
import { CommandOption, showInformationMessage } from './shared/observers/utils/showMessage';
3233

3334
export async function activate(
3435
context: vscode.ExtensionContext
35-
): Promise<CSharpExtensionExports | OmnisharpExtensionExports | null> {
36+
): Promise<CSharpExtensionExports | OmnisharpExtensionExports | LimitedExtensionExports | null> {
3637
// Start measuring the activation time
3738
const startActivation = process.hrtime();
3839

@@ -110,8 +111,25 @@ export async function activate(
110111
return coreClrDebugPromise;
111112
};
112113

113-
let exports: CSharpExtensionExports | OmnisharpExtensionExports;
114-
if (!useOmnisharpServer) {
114+
let activationEvent = TelemetryEventNames.CSharpActivated;
115+
let exports: CSharpExtensionExports | OmnisharpExtensionExports | LimitedExtensionExports;
116+
if (vscode.workspace.isTrusted !== true) {
117+
activationEvent = TelemetryEventNames.CSharpLimitedActivation;
118+
exports = { isLimitedActivation: true };
119+
csharpChannel.trace('C# Extension activated in limited mode due to workspace trust not being granted.');
120+
context.subscriptions.push(
121+
vscode.workspace.onDidGrantWorkspaceTrust(() => {
122+
const reloadTitle: CommandOption = {
123+
title: vscode.l10n.t('Reload Window'),
124+
command: 'workbench.action.reloadWindow',
125+
};
126+
const message = vscode.l10n.t(
127+
'Workspace trust has changed. Would you like to reload the window to activate the C# extension?'
128+
);
129+
showInformationMessage(vscode, message, reloadTitle);
130+
})
131+
);
132+
} else if (!useOmnisharpServer) {
115133
exports = activateRoslyn(
116134
context,
117135
platformInfo,
@@ -142,7 +160,7 @@ export async function activate(
142160
serverKind: useOmnisharpServer ? 'OmniSharp' : 'Roslyn',
143161
timeTaken: timeTakenStr,
144162
};
145-
reporter.sendTelemetryEvent(TelemetryEventNames.CSharpActivated, activationProperties);
163+
reporter.sendTelemetryEvent(activationEvent, activationProperties);
146164

147165
return exports;
148166
}

src/shared/telemetryEventNames.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
export enum TelemetryEventNames {
1010
// Common extension events
1111
CSharpActivated = 'CSharpActivated',
12+
CSharpLimitedActivation = 'CSharpLimitedActivation',
1213

1314
// Events related to the roslyn language server.
1415

0 commit comments

Comments
 (0)