Provide command to get package manager

Fixes #109071
This commit is contained in:
Alex Ross 2020-10-21 15:27:18 +02:00
parent 55bd429f31
commit 0b148e83db
4 changed files with 24 additions and 10 deletions

View file

@ -95,6 +95,10 @@
{
"command": "npm.runScriptFromFolder",
"title": "%command.runScriptFromFolder%"
},
{
"command": "npm.packageManager",
"title": "%command.packageManager"
}
],
"menus": {
@ -126,6 +130,10 @@
{
"command": "npm.runScriptFromFolder",
"when": "false"
},
{
"command": "npm.packageManager",
"when": "false"
}
],
"editor/context": [

View file

@ -19,5 +19,6 @@
"command.openScript": "Open",
"command.runInstall": "Run Install",
"command.runSelectedScript": "Run Script",
"command.runScriptFromFolder": "Run NPM Script in Folder..."
"command.runScriptFromFolder": "Run NPM Script in Folder...",
"command.packageManager": "Get Configured Package Manager"
}

View file

@ -8,7 +8,7 @@ import * as vscode from 'vscode';
import { addJSONProviders } from './features/jsonContributions';
import { runSelectedScript, selectAndRunScriptFromFolder } from './commands';
import { NpmScriptsTreeDataProvider } from './npmView';
import { invalidateTasksCache, NpmTaskProvider } from './tasks';
import { getPackageManager, invalidateTasksCache, NpmTaskProvider } from './tasks';
import { invalidateHoverScriptsCache, NpmScriptHoverProvider } from './scriptHover';
let treeDataProvider: NpmScriptsTreeDataProvider | undefined;
@ -56,7 +56,12 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
context.subscriptions.push(vscode.commands.registerCommand('npm.refresh', () => {
invalidateScriptCaches();
}));
context.subscriptions.push(vscode.commands.registerCommand('npm.packageManager', (args) => {
if (args instanceof vscode.Uri) {
return getPackageManager(args, true);
}
return '';
}));
}
function canRunNpmInCurrentWorkspace() {

View file

@ -108,15 +108,15 @@ export function isWorkspaceFolder(value: any): value is WorkspaceFolder {
return value && typeof value !== 'number';
}
export async function getPackageManager(folder: WorkspaceFolder): Promise<string> {
let packageManagerName = workspace.getConfiguration('npm', folder.uri).get<string>('packageManager', 'npm');
export async function getPackageManager(folder: Uri, silent: boolean = false): Promise<string> {
let packageManagerName = workspace.getConfiguration('npm', folder).get<string>('packageManager', 'npm');
if (packageManagerName === 'auto') {
const { name, multiplePMDetected } = await findPreferredPM(folder.uri.fsPath);
const { name, multiplePMDetected } = await findPreferredPM(folder.fsPath);
packageManagerName = name;
if (multiplePMDetected) {
const multiplePMWarning = localize('npm.multiplePMWarning', 'Found multiple lockfiles for {0}. Using {1} as the preferred package manager.', folder.uri.fsPath, packageManagerName);
if (multiplePMDetected && !silent) {
const multiplePMWarning = localize('npm.multiplePMWarning', 'Found multiple lockfiles for {0}. Using {1} as the preferred package manager.', folder.fsPath, packageManagerName);
window.showWarningMessage(multiplePMWarning);
}
}
@ -291,7 +291,7 @@ export async function createTask(script: NpmTaskDefinition | string, cmd: string
kind = script;
}
const packageManager = await getPackageManager(folder);
const packageManager = await getPackageManager(folder.uri);
async function getCommandLine(cmd: string): Promise<string> {
if (workspace.getConfiguration('npm', folder.uri).get<boolean>('runSilent')) {
return `${packageManager} --silent ${cmd}`;
@ -378,7 +378,7 @@ export async function startDebugging(scriptName: string, cwd: string, folder: Wo
request: 'launch',
name: `Debug ${scriptName}`,
cwd,
runtimeExecutable: await getPackageManager(folder),
runtimeExecutable: await getPackageManager(folder.uri),
runtimeArgs: [
'run',
scriptName,