honor the package manager when launching for debugging

This commit is contained in:
Erich Gamma 2018-03-31 12:48:53 +02:00
parent 2b73118942
commit 2599d9526b
3 changed files with 20 additions and 8 deletions

View file

@ -14,7 +14,7 @@ const localize = nls.loadMessageBundle();
import { addJSONProviders } from './features/jsonContributions';
import { NpmScriptsTreeDataProvider } from './npmView';
import { NpmTaskDefinition, getScripts } from './tasks';
import { NpmTaskDefinition, getScripts, getPackageManager } from './tasks';
type AutoDetect = 'on' | 'off';
let taskProvider: vscode.Disposable | undefined;
@ -168,7 +168,7 @@ function createTask(script: string, cmd: string, folder: vscode.WorkspaceFolder,
}
function getCommandLine(folder: vscode.WorkspaceFolder, cmd: string): string {
let packageManager = vscode.workspace.getConfiguration('npm', folder.uri).get<string>('packageManager', 'npm');
let packageManager = getPackageManager(folder);
if (vscode.workspace.getConfiguration('npm', folder.uri).get<boolean>('runSilent')) {
return `${packageManager} --silent ${cmd}`;
}

View file

@ -10,15 +10,17 @@ import {
TextDocument, ThemeIcon, TreeDataProvider, TreeItem, TreeItemCollapsibleState, Uri,
WorkspaceFolder, commands, debug, window, workspace
} from 'vscode';
import { NpmTaskDefinition, getPackageJsonUriFromTask, getScripts, isWorkspaceFolder } from './tasks';
import { NpmTaskDefinition, getPackageJsonUriFromTask, getScripts, isWorkspaceFolder, getPackageManager } from './tasks';
class Folder extends TreeItem {
packages: PackageJSON[] = [];
workspaceFolder: WorkspaceFolder;
constructor(folder: WorkspaceFolder) {
super(folder.name, TreeItemCollapsibleState.Collapsed);
super(folder.name, TreeItemCollapsibleState.Expanded);
this.contextValue = 'folder';
this.resourceUri = folder.uri;
this.workspaceFolder = folder;
this.iconPath = ThemeIcon.Folder;
}
@ -42,7 +44,7 @@ class PackageJSON extends TreeItem {
}
constructor(folder: Folder, relativePath: string) {
super(PackageJSON.getLabel(folder.label!, relativePath), TreeItemCollapsibleState.Collapsed);
super(PackageJSON.getLabel(folder.label!, relativePath), TreeItemCollapsibleState.Expanded);
this.folder = folder;
this.path = relativePath;
this.contextValue = 'packageJSON';
@ -74,6 +76,10 @@ class NpmScript extends TreeItem {
arguments: [this]
};
}
getFolder(): WorkspaceFolder {
return this.package.folder.workspaceFolder;
}
}
export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
@ -140,14 +146,16 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
// debugArgs = ['--', '--nolazy', `--inspect-brk=${port}`];
// }
if (!port) {
window.showErrorMessage(`Could not launch for debugging, the script does not define --inspect-brk=port.`);
window.showErrorMessage(`Could not launch for debugging, the script needs to include the node debug options: --inspect-brk=port.`);
return;
}
let packageManager = getPackageManager(script.getFolder());
const config: DebugConfiguration = {
type: 'node',
request: 'launch',
name: `Debug ${task.name}`,
runtimeExecutable: 'npm',
runtimeExecutable: packageManager,
runtimeArgs: [
'run-script',
task.name,

View file

@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import { TaskDefinition, Task, WorkspaceFolder, Uri } from 'vscode';
import { TaskDefinition, Task, WorkspaceFolder, Uri, workspace } from 'vscode';
import * as path from 'path';
import * as fs from 'fs';
@ -17,6 +17,10 @@ export function isWorkspaceFolder(value: any): value is WorkspaceFolder {
return value && typeof value !== 'number';
}
export function getPackageManager(folder: WorkspaceFolder): string {
return workspace.getConfiguration('npm', folder.uri).get<string>('packageManager', 'npm');
}
export function getPackageJsonUriFromTask(task: Task): Uri | null {
if (isWorkspaceFolder(task.scope)) {
if (task.definition.path) {