diff --git a/client/src/extension.ts b/client/src/extension.ts index 7db4fc9..c1c6d68 100755 --- a/client/src/extension.ts +++ b/client/src/extension.ts @@ -81,8 +81,9 @@ async function startLanguageServer( } export async function activate(context: ExtensionContext): Promise { - log(CLIENT_PREFIX, 'Initializing PHPStan extension'); + log(context, CLIENT_PREFIX, 'Initializing PHPStan extension'); createOutputChannel(); + const client = await startLanguageServer(context); const statusBar = new StatusBar(context, client); const watcher = new DocumentManager(client); @@ -91,14 +92,14 @@ export async function activate(context: ExtensionContext): Promise { const zombieKiller = new ZombieKiller(client, context); registerListeners(context, client, errorManager, proManager); - registerEditorConfigurationListener(client); + registerEditorConfigurationListener(context, client); registerLogMessager(context, client); context.subscriptions.push( statusBar, watcher, errorManager, proManager, - zombieKiller + zombieKiller, ); let wasReady = false; @@ -108,13 +109,13 @@ export async function activate(context: ExtensionContext): Promise { if (ready) { if (!wasReady) { // First time it's ready, start watching - log(SERVER_PREFIX, 'Language server started'); + log(context, SERVER_PREFIX, 'Language server started'); void watcher.watch(); } else { // Language server was already alive but then died // and restarted. Clear local state that depends // on language server. - log(SERVER_PREFIX, 'Language server restarted...'); + log(context, SERVER_PREFIX, 'Language server restarted...'); statusBar.clearAllRunning(); } wasReady = true; @@ -126,7 +127,7 @@ export async function activate(context: ExtensionContext): Promise { }); }) ); - log(CLIENT_PREFIX, 'Initializing done'); + log(context, CLIENT_PREFIX, 'Initializing done'); void (async () => { if ( @@ -148,7 +149,7 @@ export async function activate(context: ExtensionContext): Promise { } })(); - log(CLIENT_PREFIX, 'Showing one-time messages (if needed)'); + log(context, CLIENT_PREFIX, 'Showing one-time messages (if needed)'); const installationConfig = await getInstallationConfig(context); const version = (context.extension.packageJSON as { version: string }) .version; diff --git a/client/src/lib/dev.ts b/client/src/lib/dev.ts index 3d5cd5a..8f92e36 100644 --- a/client/src/lib/dev.ts +++ b/client/src/lib/dev.ts @@ -1,6 +1,4 @@ -declare const _DEBUG: boolean | undefined; declare const _INSPECT_BRK: boolean | undefined; -export const DEBUG = typeof _DEBUG === 'undefined' ? false : _DEBUG; export const INSPECT_BRK = typeof _INSPECT_BRK === 'undefined' ? false : _INSPECT_BRK; diff --git a/client/src/lib/editorConfig.ts b/client/src/lib/editorConfig.ts index 082fbf5..09fd09f 100644 --- a/client/src/lib/editorConfig.ts +++ b/client/src/lib/editorConfig.ts @@ -5,6 +5,7 @@ import type { LanguageClient } from 'vscode-languageclient/node'; import type { ConfigSettings } from '../../../shared/config'; import { watcherNotification } from './notificationChannels'; import { config } from '../../../shared/commands/defs'; +import type { ExtensionContext } from 'vscode'; import { window, workspace } from 'vscode'; import { CLIENT_PREFIX, log } from './log'; @@ -19,6 +20,7 @@ export function getEditorConfiguration(): TypedWorkspaceConfiguration = new Set(); -export function showErrorOnce(message: string, ...extra: string[]): void { - log(ERROR_PREFIX, message, ...extra); +export function showErrorOnce( + context: ExtensionContext, + message: string, + ...extra: string[] +): void { + log(context, ERROR_PREFIX, message, ...extra); if (shownWarnings.has(message)) { return; } @@ -18,7 +22,7 @@ interface ErrorOption { } export function showError(message: string, options?: ErrorOption[]): void { - void vscode.window + void window .showErrorMessage(message, ...(options || []).map((o) => o.title)) .then((choice) => { if (!options || !choice) { diff --git a/client/src/lib/log.ts b/client/src/lib/log.ts index 5e8540f..72191e3 100644 --- a/client/src/lib/log.ts +++ b/client/src/lib/log.ts @@ -1,8 +1,7 @@ import type { LanguageClient } from 'vscode-languageclient/node'; import type { ExtensionContext, OutputChannel } from 'vscode'; import { logNotification } from './notificationChannels'; -import { window } from 'vscode'; -import { DEBUG } from './dev'; +import { ExtensionMode, window } from 'vscode'; let channel: OutputChannel | null; @@ -16,7 +15,7 @@ export function registerLogMessager( ): void { context.subscriptions.push( client.onNotification(logNotification, ({ data }) => { - log(...(data as [Prefix, ...string[]])); + log(context, ...(data as [Prefix, ...string[]])); }) ); } @@ -25,9 +24,13 @@ type Prefix = string & { __isPrefix: true; }; -export function log(prefix: Prefix, ...data: string[]): void { +export function log( + context: ExtensionContext, + prefix: Prefix, + ...data: string[] +): void { data = [`[${new Date().toLocaleString()}]`, prefix, ...data]; - if (DEBUG) { + if (context.extensionMode === ExtensionMode.Development) { console.log(data.join(' ')); } if (channel) { diff --git a/client/src/notificationReceivers/statusBar.ts b/client/src/notificationReceivers/statusBar.ts index 18bd4f8..6089907 100644 --- a/client/src/notificationReceivers/statusBar.ts +++ b/client/src/notificationReceivers/statusBar.ts @@ -25,12 +25,13 @@ export class StatusBar implements Disposable { private _hideTimeout: NodeJS.Timer | undefined; public constructor( - context: vscode.ExtensionContext, + private readonly _context: vscode.ExtensionContext, client: LanguageClient ) { - context.subscriptions.push( + this._context.subscriptions.push( client.onNotification(statusBarNotification, (params) => { log( + this._context, STATUS_BAR_PREFIX, "notification:'", JSON.stringify(params) @@ -82,7 +83,7 @@ export class StatusBar implements Disposable { } private _showStatusBar(): void { - log(STATUS_BAR_PREFIX, 'Showing status bar'); + log(this._context, STATUS_BAR_PREFIX, 'Showing status bar'); if (!getEditorConfiguration().get('phpstan.enableStatusBar')) { return; } @@ -111,6 +112,7 @@ export class StatusBar implements Disposable { result: OperationStatus ): void { log( + this._context, STATUS_BAR_PREFIX, 'Hiding status bar, last operation result =', result diff --git a/client/src/notificationReceivers/zombieKiller.ts b/client/src/notificationReceivers/zombieKiller.ts index 9727090..f729fd7 100644 --- a/client/src/notificationReceivers/zombieKiller.ts +++ b/client/src/notificationReceivers/zombieKiller.ts @@ -29,6 +29,7 @@ export class ZombieKiller implements Disposable { processNotification, ({ pid, children, timeout }) => { log( + this._context, PROCESS_SPAWNER_PREFIX, 'Spawning process', String(pid),