Skip to content

Fix how we check extension mode #3992

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 7 additions & 3 deletions src/features/ExternalApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,10 @@ NOTE: At some point, we should release a helper npm package that wraps the API a
export class ExternalApiFeature extends LanguageClientConsumer implements IPowerShellExtensionClient {
private static readonly registeredExternalExtension: Map<string, IExternalExtension> = new Map<string, IExternalExtension>();

constructor(private sessionManager: SessionManager, private log: Logger) {
constructor(
private extensionContext: vscode.ExtensionContext,
private sessionManager: SessionManager,
private log: Logger) {
super();
}

Expand Down Expand Up @@ -67,8 +70,9 @@ export class ExternalApiFeature extends LanguageClientConsumer implements IPower
throw new Error(`No extension installed with id '${id}'. You must use a valid extension id.`);
}

// If we're in development mode, we allow these to be used for testing purposes.
if (!this.sessionManager.InDevelopmentMode && (id === "ms-vscode.PowerShell" || id === "ms-vscode.PowerShell-Preview")) {
// These are only allowed to be used in our unit tests.
if ((id === "ms-vscode.powershell" || id === "ms-vscode.powershell-preview")
&& !(this.extensionContext.extensionMode === vscode.ExtensionMode.Test)) {
throw new Error("You can't use the PowerShell extension's id in this registration.");
}

Expand Down
3 changes: 2 additions & 1 deletion src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ export function activate(context: vscode.ExtensionContext): IPowerShellExtension

sessionManager =
new SessionManager(
context,
logger,
documentSelector,
PackageJSON.displayName,
Expand All @@ -145,7 +146,7 @@ export function activate(context: vscode.ExtensionContext): IPowerShellExtension
new SpecifyScriptArgsFeature(context),
]

const externalApi = new ExternalApiFeature(sessionManager, logger);
const externalApi = new ExternalApiFeature(context, sessionManager, logger);

// Features and command registrations that require language client
languageClientConsumers = [
Expand Down
9 changes: 4 additions & 5 deletions src/session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,8 @@ export class SessionManager implements Middleware {
// Initialized by the start() method, since this requires settings
private powershellExeFinder: PowerShellExeFinder;

public readonly InDevelopmentMode = vscode.ExtensionMode.Development;

constructor(
private extensionContext: vscode.ExtensionContext,
private log: Logger,
private documentSelector: DocumentSelector,
hostName: string,
Expand Down Expand Up @@ -167,7 +166,7 @@ export class SessionManager implements Middleware {

this.bundledModulesPath = path.resolve(__dirname, this.sessionSettings.bundledModulesPath);

if (this.InDevelopmentMode) {
if (this.extensionContext.extensionMode === vscode.ExtensionMode.Development) {
const devBundledModulesPath =
path.resolve(
__dirname,
Expand Down Expand Up @@ -571,7 +570,7 @@ export class SessionManager implements Middleware {
// This enables handling Semantic Highlighting messages in PowerShell Editor Services
this.languageServerClient.registerProposedFeatures();

if (!this.InDevelopmentMode) {
if (this.extensionContext.extensionMode === vscode.ExtensionMode.Production) {
this.languageServerClient.onTelemetry((event) => {
const eventName: string = event.eventName ? event.eventName : "PSESEvent";
const data: any = event.data ? event.data : event
Expand All @@ -588,7 +587,7 @@ export class SessionManager implements Middleware {
this.versionDetails = versionDetails;
this.started = true;

if (!this.InDevelopmentMode) {
if (this.extensionContext.extensionMode === vscode.ExtensionMode.Production) {
this.telemetryReporter.sendTelemetryEvent("powershellVersionCheck",
{ powershellVersion: versionDetails.version });
}
Expand Down