diff --git a/src/ui/configuration/nodeDebugConfigurationProvider.ts b/src/ui/configuration/nodeDebugConfigurationProvider.ts index 7c3f0149c..d803380d9 100644 --- a/src/ui/configuration/nodeDebugConfigurationProvider.ts +++ b/src/ui/configuration/nodeDebugConfigurationProvider.ts @@ -2,13 +2,12 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -import * as nls from 'vscode-nls'; -import * as vscode from 'vscode'; -import * as path from 'path'; import { injectable } from 'inversify'; +import * as path from 'path'; +import * as vscode from 'vscode'; +import * as nls from 'vscode-nls'; import { DebugType } from '../../common/contributionUtils'; -import { createLaunchConfigFromContext } from './nodeDebugConfigurationResolver'; -import { BaseConfigurationProvider } from './baseConfigurationProvider'; +import { flatten } from '../../common/objUtils'; import { AnyNodeConfiguration, AnyResolvingConfiguration, @@ -18,8 +17,9 @@ import { ResolvingTerminalConfiguration, } from '../../configuration'; import { findScripts } from '../debugNpmScript'; -import { flatten } from '../../common/objUtils'; -import { getRunScriptCommand } from '../getRunScriptCommand'; +import { getPackageManager } from '../getRunScriptCommand'; +import { BaseConfigurationProvider } from './baseConfigurationProvider'; +import { createLaunchConfigFromContext } from './nodeDebugConfigurationResolver'; const localize = nls.loadMessageBundle(); @@ -97,12 +97,13 @@ export class NodeDynamicDebugConfigurationProvider extends BaseConfigurationProv return [openTerminal]; } + const packageManager = await getPackageManager(folder); return scripts .map(script => ({ type: DebugType.Terminal, name: localize('node.launch.script', 'Run Script: {0}', script.name), request: 'launch', - command: getRunScriptCommand(script.name, folder), + command: `${packageManager} run ${script.name}`, cwd: script.directory, })) .concat(openTerminal); diff --git a/src/ui/debugNpmScript.ts b/src/ui/debugNpmScript.ts index c642ca6e0..b80f5a9c3 100644 --- a/src/ui/debugNpmScript.ts +++ b/src/ui/debugNpmScript.ts @@ -3,12 +3,12 @@ *--------------------------------------------------------*/ import * as fs from 'fs'; -import * as vscode from 'vscode'; import * as path from 'path'; +import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; -import { runCommand, Commands } from '../common/contributionUtils'; -import { getRunScriptCommand } from './getRunScriptCommand'; +import { Commands, runCommand } from '../common/contributionUtils'; import { readfile } from '../common/fsUtils'; +import { getRunScriptCommand } from './getRunScriptCommand'; const localize = nls.loadMessageBundle(); @@ -40,18 +40,18 @@ export async function debugNpmScript(inFolder?: string) { description: script.command, })); - quickPick.onDidAccept(() => { + quickPick.onDidAccept(async () => { const { script } = quickPick.selectedItems[0]; const workspaceFolder = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(script.directory)); + quickPick.dispose(); + runCommand( vscode.commands, Commands.CreateDebuggerTerminal, - getRunScriptCommand(script.name, workspaceFolder), + await getRunScriptCommand(script.name, workspaceFolder), workspaceFolder, { cwd: script.directory }, ); - - quickPick.dispose(); }); quickPick.show(); diff --git a/src/ui/getRunScriptCommand.ts b/src/ui/getRunScriptCommand.ts index ef69cd296..6b3d6da86 100644 --- a/src/ui/getRunScriptCommand.ts +++ b/src/ui/getRunScriptCommand.ts @@ -2,16 +2,21 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -import { workspace, WorkspaceFolder } from 'vscode'; +import { commands, WorkspaceFolder } from 'vscode'; /** * Gets the package manager the user configured in the folder. */ -const getPackageManager = (folder: WorkspaceFolder | undefined) => - workspace.getConfiguration('npm', folder?.uri).get('packageManager', 'npm'); +export const getPackageManager = async (folder: WorkspaceFolder | undefined) => { + try { + return await commands.executeCommand('npm.packageManager', folder?.uri); + } catch { + return 'npm'; + } +}; /** * Gets a command to run a script */ -export const getRunScriptCommand = (name: string, folder?: WorkspaceFolder) => - `${getPackageManager(folder)} run ${name}`; +export const getRunScriptCommand = async (name: string, folder?: WorkspaceFolder) => + `${await getPackageManager(folder)} run ${name}`; diff --git a/src/ui/npmScriptLens.ts b/src/ui/npmScriptLens.ts index ee8b451ee..9223b3e4a 100644 --- a/src/ui/npmScriptLens.ts +++ b/src/ui/npmScriptLens.ts @@ -2,24 +2,23 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ +import { JSONVisitor, visit } from 'jsonc-parser'; +import * as path from 'path'; import { - TextDocument, CodeLens, CodeLensProvider, - Range, - workspace, - languages, + EventEmitter, ExtensionContext, - ProviderResult, + languages, Position, - EventEmitter, + Range, + TextDocument, + workspace, } from 'vscode'; -import * as path from 'path'; -import { readConfig, Configuration, asCommand, Commands } from '../common/contributionUtils'; -import { JSONVisitor, visit } from 'jsonc-parser'; -import { IDisposable } from '../common/disposable'; -import { getRunScriptCommand } from './getRunScriptCommand'; import * as nls from 'vscode-nls'; +import { asCommand, Commands, Configuration, readConfig } from '../common/contributionUtils'; +import { IDisposable } from '../common/disposable'; +import { getPackageManager } from './getRunScriptCommand'; const localize = nls.loadMessageBundle(); @@ -53,7 +52,7 @@ export class NpmScriptLenProvider implements CodeLensProvider, IDisposable { /** * @inheritdoc */ - public provideCodeLenses(document: TextDocument): ProviderResult { + public async provideCodeLenses(document: TextDocument): Promise { if (this.lensLocation === 'never') { return []; } @@ -80,6 +79,7 @@ export class NpmScriptLenProvider implements CodeLensProvider, IDisposable { if (this.lensLocation === 'all') { const workspaceFolder = workspace.getWorkspaceFolder(document.uri); + const packageManager = await getPackageManager(workspaceFolder); return tokens.scripts.map( ({ name, position }) => new CodeLens( @@ -87,7 +87,7 @@ export class NpmScriptLenProvider implements CodeLensProvider, IDisposable { asCommand({ title, command: Commands.CreateDebuggerTerminal, - arguments: [getRunScriptCommand(name, workspaceFolder), workspaceFolder, { cwd }], + arguments: [`${packageManager} run ${name}`, workspaceFolder, { cwd }], }), ), );