diff --git a/src/vs/platform/diagnostics/node/diagnosticsService.ts b/src/vs/platform/diagnostics/node/diagnosticsService.ts index 1628e5f6de8..81b53140b5e 100644 --- a/src/vs/platform/diagnostics/node/diagnosticsService.ts +++ b/src/vs/platform/diagnostics/node/diagnosticsService.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as osLib from 'os'; import { Iterable } from 'vs/base/common/iterator'; +import { Promises } from 'vs/base/common/async'; import { getNodeType, parse, ParseError } from 'vs/base/common/json'; import { Schemas } from 'vs/base/common/network'; import { basename, join } from 'vs/base/common/path'; @@ -11,7 +12,7 @@ import { isLinux, isWindows } from 'vs/base/common/platform'; import { ProcessItem } from 'vs/base/common/processes'; import { URI } from 'vs/base/common/uri'; import { virtualMachineHint } from 'vs/base/node/id'; -import { IDirent, Promises } from 'vs/base/node/pfs'; +import { IDirent, Promises as pfs } from 'vs/base/node/pfs'; import { listProcesses } from 'vs/base/node/ps'; import { IDiagnosticsService, IMachineInfo, IRemoteDiagnosticError, IRemoteDiagnosticInfo, isRemoteDiagnosticError, IWorkspaceInformation, PerformanceInfo, SystemInfo, WorkspaceStatItem, WorkspaceStats } from 'vs/platform/diagnostics/common/diagnostics'; import { ByteSize } from 'vs/platform/files/common/files'; @@ -66,11 +67,10 @@ export async function collectWorkspaceStats(folder: string, filter: string[]): P function collect(root: string, dir: string, filter: string[], token: { count: number, maxReached: boolean }): Promise { const relativePath = dir.substring(root.length + 1); - // eslint-disable-next-line no-async-promise-executor - return new Promise(async resolve => { + return Promises.withAsyncBody(async resolve => { let files: IDirent[]; try { - files = await Promises.readdir(dir, { withFileTypes: true }); + files = await pfs.readdir(dir, { withFileTypes: true }); } catch (error) { // Ignore folders that can't be read resolve(); @@ -173,7 +173,7 @@ export async function collectLaunchConfigs(folder: string): Promise(); const launchConfig = join(folder, '.vscode', 'launch.json'); - const contents = await Promises.readFile(launchConfig); + const contents = await pfs.readFile(launchConfig); const errors: ParseError[] = []; const json = parse(contents.toString(), errors); diff --git a/src/vs/platform/terminal/node/ptyService.ts b/src/vs/platform/terminal/node/ptyService.ts index ac77ba36576..7ed3965ff04 100644 --- a/src/vs/platform/terminal/node/ptyService.ts +++ b/src/vs/platform/terminal/node/ptyService.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { execFile } from 'child_process'; -import { AutoOpenBarrier, ProcessTimeRunOnceScheduler, Queue } from 'vs/base/common/async'; +import { AutoOpenBarrier, ProcessTimeRunOnceScheduler, Promises, Queue } from 'vs/base/common/async'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; import { IProcessEnvironment, isWindows, OperatingSystem, OS } from 'vs/base/common/platform'; @@ -104,8 +104,7 @@ export class PtyService extends Disposable implements IPtyService { const promises: Promise[] = []; for (const [persistentProcessId, persistentProcess] of this._ptys.entries()) { if (ids.indexOf(persistentProcessId) !== -1) { - // eslint-disable-next-line no-async-promise-executor - promises.push(new Promise(async r => { + promises.push(Promises.withAsyncBody(async r => { r({ id: persistentProcessId, shellLaunchConfig: persistentProcess.shellLaunchConfig, diff --git a/src/vs/platform/terminal/node/windowsShellHelper.ts b/src/vs/platform/terminal/node/windowsShellHelper.ts index 67955bac526..ba0c2ac4346 100644 --- a/src/vs/platform/terminal/node/windowsShellHelper.ts +++ b/src/vs/platform/terminal/node/windowsShellHelper.ts @@ -120,7 +120,7 @@ export class WindowsShellHelper extends Disposable implements IWindowsShellHelpe /** * Returns the innermost shell executable running in the terminal */ - getShellName(): Promise { + async getShellName(): Promise { if (this._isDisposed) { return Promise.resolve(''); } @@ -128,11 +128,10 @@ export class WindowsShellHelper extends Disposable implements IWindowsShellHelpe if (this._currentRequest) { return this._currentRequest; } - // eslint-disable-next-line no-async-promise-executor - this._currentRequest = new Promise(async resolve => { - if (!windowsProcessTree) { - windowsProcessTree = await import('windows-process-tree'); - } + if (!windowsProcessTree) { + windowsProcessTree = await import('windows-process-tree'); + } + this._currentRequest = new Promise(resolve => { windowsProcessTree.getProcessTree(this._rootProcessId, (tree) => { const name = this.traverseTree(tree); this._currentRequest = undefined; diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 404d9153723..68c5acf3c18 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -21,6 +21,7 @@ import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteA import { withNullAsUndefined } from 'vs/base/common/types'; import { OperatingSystem, OS } from 'vs/base/common/platform'; import { TerminalEditorLocationOptions } from 'vscode'; +import { Promises } from 'vs/base/common/async'; @extHostNamedCustomer(MainContext.MainThreadTerminalService) export class MainThreadTerminalService implements MainThreadTerminalServiceShape { @@ -141,7 +142,8 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape useShellEnvironment: launchConfig.useShellEnvironment, }; // eslint-disable-next-line no-async-promise-executor - const terminal = new Promise(async r => { + + const terminal = Promises.withAsyncBody(async r => { const terminal = await this._terminalService.createTerminal({ config: shellLaunchConfig, location: await this._deserializeParentTerminal(launchConfig.location) diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index 77c61336870..0309ac1ff3b 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -22,6 +22,7 @@ import { ICreateContributedTerminalProfileOptions, IProcessReadyEvent, IShellLau import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering'; import { ThemeColor } from 'vs/platform/theme/common/themeService'; import { withNullAsUndefined } from 'vs/base/common/types'; +import { Promises } from 'vs/base/common/async'; export interface IExtHostTerminalService extends ExtHostTerminalServiceShape, IDisposable { @@ -716,8 +717,7 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I const promises: vscode.ProviderResult<{ provider: vscode.TerminalLinkProvider, links: vscode.TerminalLink[] }>[] = []; for (const provider of this._linkProviders) { - // eslint-disable-next-line no-async-promise-executor - promises.push(new Promise(async r => { + promises.push(Promises.withAsyncBody(async r => { cancellationSource.token.onCancellationRequested(() => r({ provider, links: [] })); const links = (await provider.provideTerminalLinks(context, cancellationSource.token)) || []; if (!cancellationSource.token.isCancellationRequested) { diff --git a/src/vs/workbench/contrib/debug/node/terminals.ts b/src/vs/workbench/contrib/debug/node/terminals.ts index ed1014fbb9d..261ab9d79cf 100644 --- a/src/vs/workbench/contrib/debug/node/terminals.ts +++ b/src/vs/workbench/contrib/debug/node/terminals.ts @@ -48,15 +48,13 @@ export function runInExternalTerminal(args: DebugProtocol.RunInTerminalRequestAr return externalTerminalService.runInTerminal(args.title!, args.cwd, args.args, args.env || {}, config.external || {}); } -export function hasChildProcesses(processId: number | undefined): Promise { +export async function hasChildProcesses(processId: number | undefined): Promise { if (processId) { // if shell has at least one child process, assume that shell is busy if (platform.isWindows) { - // eslint-disable-next-line no-async-promise-executor - return new Promise(async (resolve) => { - // See #123296 - const windowsProcessTree = await import('windows-process-tree'); + const windowsProcessTree = await import('windows-process-tree'); + return new Promise(resolve => { windowsProcessTree.getProcessTree(processId, (processTree) => { resolve(processTree.children.length > 0); }); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 68e940b346e..0689d26940d 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -49,7 +49,7 @@ import { IEnvironmentVariableInfo } from 'vs/workbench/contrib/terminal/common/e import { IProcessDataEvent, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError, TerminalShellType, TerminalSettingId, TitleEventSource, TerminalIcon, TerminalSettingPrefix, ITerminalProfileObject, TerminalLocation, ProcessPropertyType, ProcessCapability, IProcessPropertyMap } from 'vs/platform/terminal/common/terminal'; import { IProductService } from 'vs/platform/product/common/productService'; import { formatMessageForTerminal } from 'vs/workbench/contrib/terminal/common/terminalStrings'; -import { AutoOpenBarrier } from 'vs/base/common/async'; +import { AutoOpenBarrier, Promises } from 'vs/base/common/async'; import { Codicon, iconRegistry } from 'vs/base/common/codicons'; import { ITerminalStatusList, TerminalStatus, TerminalStatusList } from 'vs/workbench/contrib/terminal/browser/terminalStatusList'; import { IQuickInputService, IQuickPickItem, IQuickPickSeparator } from 'vs/platform/quickinput/common/quickInput'; @@ -596,8 +596,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { if (xtermConstructor) { return xtermConstructor; } - // eslint-disable-next-line no-async-promise-executor - xtermConstructor = new Promise(async (resolve) => { + xtermConstructor = Promises.withAsyncBody(async (resolve) => { const Terminal = await this._terminalInstanceService.getXtermConstructor(); // Localize strings Terminal.strings.promptLabel = nls.localize('terminal.integrated.a11yPromptLabel', 'Terminal input');