diff --git a/eslint.config.js b/eslint.config.js index 7c87b5b0b1e..678a0b6e8d8 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -837,7 +837,6 @@ export default tseslint.config( 'src/vs/workbench/contrib/tasks/common/taskConfiguration.ts', 'src/vs/workbench/contrib/tasks/common/taskSystem.ts', 'src/vs/workbench/contrib/tasks/common/tasks.ts', - 'src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts', 'src/vs/workbench/contrib/terminal/browser/terminalConfigurationService.ts', 'src/vs/workbench/contrib/terminal/browser/terminalExtensions.ts', 'src/vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy.ts', @@ -846,7 +845,6 @@ export default tseslint.config( 'src/vs/workbench/contrib/terminal/browser/terminalProfileService.ts', 'src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts', 'src/vs/workbench/contrib/terminal/common/basePty.ts', - 'src/vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel.ts', 'src/vs/workbench/contrib/terminal/common/terminal.ts', 'src/vs/workbench/contrib/terminalContrib/links/browser/links.ts', 'src/vs/workbench/contrib/terminalContrib/suggest/browser/terminalSuggestAddon.ts', @@ -917,7 +915,6 @@ export default tseslint.config( 'src/vs/server/node/remoteAgentEnvironmentImpl.ts', 'src/vs/server/node/remoteExtensionHostAgentServer.ts', 'src/vs/server/node/remoteExtensionsScanner.ts', - 'src/vs/server/node/remoteTerminalChannel.ts', // Tests '**/*.test.ts', '**/*.integrationTest.ts' diff --git a/src/vs/server/node/remoteTerminalChannel.ts b/src/vs/server/node/remoteTerminalChannel.ts index 638422eb1ea..a455eba4267 100644 --- a/src/vs/server/node/remoteTerminalChannel.ts +++ b/src/vs/server/node/remoteTerminalChannel.ts @@ -90,12 +90,12 @@ export class RemoteTerminalChannel extends Disposable implements IServerChannel< private _lastReqId = 0; private readonly _pendingCommands = new Map void; - reject: (err: any) => void; + resolve: (value: unknown) => void; + reject: (err?: unknown) => void; uriTransformer: IURITransformer; }>(); - private readonly _onExecuteCommand = this._register(new Emitter<{ reqId: number; persistentProcessId: number; commandId: string; commandArgs: any[] }>()); + private readonly _onExecuteCommand = this._register(new Emitter<{ reqId: number; persistentProcessId: number; commandId: string; commandArgs: unknown[] }>()); readonly onExecuteCommand = this._onExecuteCommand.event; constructor( @@ -109,6 +109,7 @@ export class RemoteTerminalChannel extends Disposable implements IServerChannel< super(); } + // eslint-disable-next-line @typescript-eslint/no-explicit-any async call(ctx: RemoteAgentConnectionContext, command: RemoteTerminalChannelRequest, args?: any): Promise { switch (command) { case RemoteTerminalChannelRequest.RestartPtyHost: return this._ptyHostService.restartPtyHost.apply(this._ptyHostService, args); @@ -167,21 +168,21 @@ export class RemoteTerminalChannel extends Disposable implements IServerChannel< throw new Error(`IPC Command ${command} not found`); } - listen(_: any, event: RemoteTerminalChannelEvent, arg: any): Event { + listen(_: unknown, event: RemoteTerminalChannelEvent, _arg: unknown): Event { switch (event) { - case RemoteTerminalChannelEvent.OnPtyHostExitEvent: return this._ptyHostService.onPtyHostExit || Event.None; - case RemoteTerminalChannelEvent.OnPtyHostStartEvent: return this._ptyHostService.onPtyHostStart || Event.None; - case RemoteTerminalChannelEvent.OnPtyHostUnresponsiveEvent: return this._ptyHostService.onPtyHostUnresponsive || Event.None; - case RemoteTerminalChannelEvent.OnPtyHostResponsiveEvent: return this._ptyHostService.onPtyHostResponsive || Event.None; - case RemoteTerminalChannelEvent.OnPtyHostRequestResolveVariablesEvent: return this._ptyHostService.onPtyHostRequestResolveVariables || Event.None; - case RemoteTerminalChannelEvent.OnProcessDataEvent: return this._ptyHostService.onProcessData; - case RemoteTerminalChannelEvent.OnProcessReadyEvent: return this._ptyHostService.onProcessReady; - case RemoteTerminalChannelEvent.OnProcessExitEvent: return this._ptyHostService.onProcessExit; - case RemoteTerminalChannelEvent.OnProcessReplayEvent: return this._ptyHostService.onProcessReplay; - case RemoteTerminalChannelEvent.OnProcessOrphanQuestion: return this._ptyHostService.onProcessOrphanQuestion; - case RemoteTerminalChannelEvent.OnExecuteCommand: return this.onExecuteCommand; - case RemoteTerminalChannelEvent.OnDidRequestDetach: return this._ptyHostService.onDidRequestDetach || Event.None; - case RemoteTerminalChannelEvent.OnDidChangeProperty: return this._ptyHostService.onDidChangeProperty; + case RemoteTerminalChannelEvent.OnPtyHostExitEvent: return (this._ptyHostService.onPtyHostExit || Event.None) as Event; + case RemoteTerminalChannelEvent.OnPtyHostStartEvent: return (this._ptyHostService.onPtyHostStart || Event.None) as Event; + case RemoteTerminalChannelEvent.OnPtyHostUnresponsiveEvent: return (this._ptyHostService.onPtyHostUnresponsive || Event.None) as Event; + case RemoteTerminalChannelEvent.OnPtyHostResponsiveEvent: return (this._ptyHostService.onPtyHostResponsive || Event.None) as Event; + case RemoteTerminalChannelEvent.OnPtyHostRequestResolveVariablesEvent: return (this._ptyHostService.onPtyHostRequestResolveVariables || Event.None) as Event; + case RemoteTerminalChannelEvent.OnProcessDataEvent: return (this._ptyHostService.onProcessData) as Event; + case RemoteTerminalChannelEvent.OnProcessReadyEvent: return (this._ptyHostService.onProcessReady) as Event; + case RemoteTerminalChannelEvent.OnProcessExitEvent: return (this._ptyHostService.onProcessExit) as Event; + case RemoteTerminalChannelEvent.OnProcessReplayEvent: return (this._ptyHostService.onProcessReplay) as Event; + case RemoteTerminalChannelEvent.OnProcessOrphanQuestion: return (this._ptyHostService.onProcessOrphanQuestion) as Event; + case RemoteTerminalChannelEvent.OnExecuteCommand: return (this.onExecuteCommand) as Event; + case RemoteTerminalChannelEvent.OnDidRequestDetach: return (this._ptyHostService.onDidRequestDetach || Event.None) as Event; + case RemoteTerminalChannelEvent.OnDidChangeProperty: return (this._ptyHostService.onDidChangeProperty) as Event; } // @ts-expect-error Assert event is the `never` type to ensure all messages are handled @@ -263,7 +264,7 @@ export class RemoteTerminalChannel extends Disposable implements IServerChannel< const persistentProcessId = await this._ptyHostService.createProcess(shellLaunchConfig, initialCwd, args.cols, args.rows, args.unicodeVersion, env, baseEnv, args.options, args.shouldPersistTerminal, args.workspaceId, args.workspaceName); const commandsExecuter: ICommandsExecuter = { - executeCommand: (id: string, ...args: any[]): Promise => this._executeCommand(persistentProcessId, id, args, uriTransformer) + executeCommand: (id: string, ...args: unknown[]): Promise => this._executeCommand(persistentProcessId, id, args, uriTransformer) }; const cliServer = new CLIServerBase(commandsExecuter, this._logService, ipcHandlePath); this._ptyHostService.onProcessExit(e => e.id === persistentProcessId && cliServer.dispose()); @@ -274,11 +275,11 @@ export class RemoteTerminalChannel extends Disposable implements IServerChannel< }; } - private _executeCommand(persistentProcessId: number, commandId: string, commandArgs: any[], uriTransformer: IURITransformer): Promise { + private _executeCommand(persistentProcessId: number, commandId: string, commandArgs: unknown[], uriTransformer: IURITransformer): Promise { const { resolve, reject, promise } = promiseWithResolvers(); const reqId = ++this._lastReqId; - this._pendingCommands.set(reqId, { resolve, reject, uriTransformer }); + this._pendingCommands.set(reqId, { resolve: resolve as (value: unknown) => void, reject, uriTransformer }); const serializedCommandArgs = cloneAndChange(commandArgs, (obj) => { if (obj && obj.$mid === 1) { @@ -300,7 +301,7 @@ export class RemoteTerminalChannel extends Disposable implements IServerChannel< return promise; } - private _sendCommandResult(reqId: number, isError: boolean, serializedPayload: any): void { + private _sendCommandResult(reqId: number, isError: boolean, serializedPayload: unknown): void { const data = this._pendingCommands.get(reqId); if (!data) { return; diff --git a/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts b/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts index b60f4c9ca42..75c04f84230 100644 --- a/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts +++ b/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts @@ -16,7 +16,7 @@ import { Registry } from '../../../../platform/registry/common/platform.js'; import { IRemoteAuthorityResolverService } from '../../../../platform/remote/common/remoteAuthorityResolver.js'; import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js'; import { ISerializedTerminalCommand } from '../../../../platform/terminal/common/capabilities/capabilities.js'; -import { IPtyHostLatencyMeasurement, IShellLaunchConfig, IShellLaunchConfigDto, ITerminalBackend, ITerminalBackendRegistry, ITerminalChildProcess, ITerminalEnvironment, ITerminalLogService, ITerminalProcessOptions, ITerminalProfile, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, ProcessPropertyType, TerminalExtensions, TerminalIcon, TerminalSettingId, TitleEventSource } from '../../../../platform/terminal/common/terminal.js'; +import { IPtyHostLatencyMeasurement, IShellLaunchConfig, IShellLaunchConfigDto, ITerminalBackend, ITerminalBackendRegistry, ITerminalChildProcess, ITerminalEnvironment, ITerminalLogService, ITerminalProcessOptions, ITerminalProfile, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, ProcessPropertyType, TerminalExtensions, TerminalIcon, TerminalSettingId, TitleEventSource, type IProcessPropertyMap } from '../../../../platform/terminal/common/terminal.js'; import { IProcessDetails } from '../../../../platform/terminal/common/terminalProcess.js'; import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js'; import { IWorkbenchContribution } from '../../../common/contributions.js'; @@ -257,7 +257,7 @@ class RemoteTerminalBackend extends BaseTerminalBackend implements ITerminalBack ]; } - async updateProperty(id: number, property: T, value: any): Promise { + async updateProperty(id: number, property: T, value: IProcessPropertyMap[T]): Promise { await this._remoteTerminalChannel.updateProperty(id, property, value); } diff --git a/src/vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel.ts b/src/vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel.ts index c31ec299525..6d8a237de01 100644 --- a/src/vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel.ts +++ b/src/vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel.ts @@ -90,14 +90,14 @@ export class RemoteTerminalChannelClient implements IPtyHostController { get onProcessOrphanQuestion(): Event<{ id: number }> { return this._channel.listen<{ id: number }>(RemoteTerminalChannelEvent.OnProcessOrphanQuestion); } - get onExecuteCommand(): Event<{ reqId: number; persistentProcessId: number; commandId: string; commandArgs: any[] }> { - return this._channel.listen<{ reqId: number; persistentProcessId: number; commandId: string; commandArgs: any[] }>(RemoteTerminalChannelEvent.OnExecuteCommand); + get onExecuteCommand(): Event<{ reqId: number; persistentProcessId: number; commandId: string; commandArgs: unknown[] }> { + return this._channel.listen<{ reqId: number; persistentProcessId: number; commandId: string; commandArgs: unknown[] }>(RemoteTerminalChannelEvent.OnExecuteCommand); } get onDidRequestDetach(): Event<{ requestId: number; workspaceId: string; instanceId: number }> { return this._channel.listen<{ requestId: number; workspaceId: string; instanceId: number }>(RemoteTerminalChannelEvent.OnDidRequestDetach); } - get onDidChangeProperty(): Event<{ id: number; property: IProcessProperty }> { - return this._channel.listen<{ id: number; property: IProcessProperty }>(RemoteTerminalChannelEvent.OnDidChangeProperty); + get onDidChangeProperty(): Event<{ id: number; property: IProcessProperty }> { + return this._channel.listen<{ id: number; property: IProcessProperty }>(RemoteTerminalChannelEvent.OnDidChangeProperty); } constructor( @@ -246,7 +246,7 @@ export class RemoteTerminalChannelClient implements IPtyHostController { orphanQuestionReply(id: number): Promise { return this._channel.call(RemoteTerminalChannelRequest.OrphanQuestionReply, [id]); } - sendCommandResult(reqId: number, isError: boolean, payload: any): Promise { + sendCommandResult(reqId: number, isError: boolean, payload: unknown): Promise { return this._channel.call(RemoteTerminalChannelRequest.SendCommandResult, [reqId, isError, payload]); } freePortKillProcess(port: string): Promise<{ port: string; processId: string }> {