mirror of
https://github.com/Microsoft/vscode
synced 2024-08-28 05:19:39 +00:00
npm: enable debugging all scripts
Fixes https://github.com/microsoft/vscode/issues/104403 Fixes https://github.com/microsoft/vscode/issues/102847
This commit is contained in:
parent
e421728150
commit
85b70cc872
|
@ -166,14 +166,9 @@
|
|||
"when": "view == npm && viewItem == script",
|
||||
"group": "inline"
|
||||
},
|
||||
{
|
||||
"command": "npm.runScript",
|
||||
"when": "view == npm && viewItem == debugScript",
|
||||
"group": "inline"
|
||||
},
|
||||
{
|
||||
"command": "npm.debugScript",
|
||||
"when": "view == npm && viewItem == debugScript",
|
||||
"when": "view == npm && viewItem == script",
|
||||
"group": "inline"
|
||||
},
|
||||
{
|
||||
|
|
|
@ -3,18 +3,19 @@
|
|||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { JSONVisitor, visit } from 'jsonc-parser';
|
||||
import * as path from 'path';
|
||||
import {
|
||||
Event, EventEmitter, ExtensionContext, Task2 as Task,
|
||||
TextDocument, ThemeIcon, TreeDataProvider, TreeItem, TreeItemCollapsibleState, Uri,
|
||||
WorkspaceFolder, commands, window, workspace, tasks, Selection, TaskGroup
|
||||
commands, Event, EventEmitter, ExtensionContext,
|
||||
Selection, Task2 as Task,
|
||||
TaskGroup, tasks, TextDocument, ThemeIcon, TreeDataProvider, TreeItem, TreeItemCollapsibleState, Uri,
|
||||
window, workspace, WorkspaceFolder
|
||||
} from 'vscode';
|
||||
import { visit, JSONVisitor } from 'jsonc-parser';
|
||||
import {
|
||||
NpmTaskDefinition, getPackageJsonUriFromTask, getScripts,
|
||||
isWorkspaceFolder, getTaskName, createTask, extractDebugArgFromScript, startDebugging, isAutoDetectionEnabled
|
||||
} from './tasks';
|
||||
import * as nls from 'vscode-nls';
|
||||
import {
|
||||
createTask, getTaskName, isAutoDetectionEnabled, isWorkspaceFolder, NpmTaskDefinition,
|
||||
startDebugging
|
||||
} from './tasks';
|
||||
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
|
@ -90,9 +91,6 @@ class NpmScript extends TreeItem {
|
|||
}
|
||||
};
|
||||
this.contextValue = 'script';
|
||||
if (task.group && task.group === TaskGroup.Rebuild) {
|
||||
this.contextValue = 'debugScript';
|
||||
}
|
||||
this.package = packageJson;
|
||||
this.task = task;
|
||||
this.command = commandList[command];
|
||||
|
@ -139,27 +137,8 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
|
|||
tasks.executeTask(script.task);
|
||||
}
|
||||
|
||||
private extractDebugArg(scripts: any, task: Task): [string, number] | undefined {
|
||||
return extractDebugArgFromScript(scripts[task.name]);
|
||||
}
|
||||
|
||||
private async debugScript(script: NpmScript) {
|
||||
let task = script.task;
|
||||
let uri = getPackageJsonUriFromTask(task);
|
||||
let scripts = await getScripts(uri!);
|
||||
|
||||
let debugArg = this.extractDebugArg(scripts, task);
|
||||
if (!debugArg) {
|
||||
let message = localize('noDebugOptions', 'Could not launch "{0}" for debugging because the scripts lacks a node debug option, e.g. "--inspect-brk".', task.name);
|
||||
let learnMore = localize('learnMore', 'Learn More');
|
||||
let ok = localize('ok', 'OK');
|
||||
let result = await window.showErrorMessage(message, { modal: true }, ok, learnMore);
|
||||
if (result === learnMore) {
|
||||
commands.executeCommand('vscode.open', Uri.parse('https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_launch-configuration-support-for-npm-and-other-tools'));
|
||||
}
|
||||
return;
|
||||
}
|
||||
startDebugging(task.name, debugArg[0], debugArg[1], script.getFolder());
|
||||
startDebugging(script.task.name, script.getFolder());
|
||||
}
|
||||
|
||||
private findScript(document: TextDocument, script?: NpmScript): number {
|
||||
|
|
|
@ -8,7 +8,7 @@ import {
|
|||
workspace, tasks, Range, HoverProvider, Hover, Position, MarkdownString, Uri
|
||||
} from 'vscode';
|
||||
import {
|
||||
createTask, startDebugging, findAllScriptRanges, extractDebugArgFromScript
|
||||
createTask, startDebugging, findAllScriptRanges
|
||||
} from './tasks';
|
||||
import * as nls from 'vscode-nls';
|
||||
|
||||
|
@ -54,11 +54,7 @@ export class NpmScriptHoverProvider implements HoverProvider {
|
|||
let contents: MarkdownString = new MarkdownString();
|
||||
contents.isTrusted = true;
|
||||
contents.appendMarkdown(this.createRunScriptMarkdown(key, document.uri));
|
||||
|
||||
let debugArgs = extractDebugArgFromScript(value[2]);
|
||||
if (debugArgs) {
|
||||
contents.appendMarkdown(this.createDebugScriptMarkdown(key, document.uri, debugArgs[0], debugArgs[1]));
|
||||
}
|
||||
contents.appendMarkdown(this.createDebugScriptMarkdown(key, document.uri));
|
||||
hover = new Hover(contents);
|
||||
}
|
||||
});
|
||||
|
@ -78,12 +74,10 @@ export class NpmScriptHoverProvider implements HoverProvider {
|
|||
);
|
||||
}
|
||||
|
||||
private createDebugScriptMarkdown(script: string, documentUri: Uri, protocol: string, port: number): string {
|
||||
let args = {
|
||||
private createDebugScriptMarkdown(script: string, documentUri: Uri): string {
|
||||
const args = {
|
||||
documentUri: documentUri,
|
||||
script: script,
|
||||
protocol: protocol,
|
||||
port: port
|
||||
};
|
||||
return this.createMarkdownLink(
|
||||
localize('debugScript', 'Debug Script'),
|
||||
|
@ -116,11 +110,9 @@ export class NpmScriptHoverProvider implements HoverProvider {
|
|||
public debugScriptFromHover(args: any) {
|
||||
let script = args.script;
|
||||
let documentUri = args.documentUri;
|
||||
let protocol = args.protocol;
|
||||
let port = args.port;
|
||||
let folder = workspace.getWorkspaceFolder(documentUri);
|
||||
if (folder) {
|
||||
startDebugging(script, protocol, port, folder);
|
||||
startDebugging(script, folder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -249,6 +249,8 @@ async function provideNpmScriptsForFolder(packageJsonUri: Uri): Promise<Task[]>
|
|||
if (prePostScripts.has(each)) {
|
||||
task.group = TaskGroup.Clean; // hack: use Clean group to tag pre/post scripts
|
||||
}
|
||||
|
||||
// todo@connor4312: all scripts are now debuggable, what is a 'debug script'?
|
||||
if (isDebugScript(scripts![each])) {
|
||||
task.group = TaskGroup.Rebuild; // hack: use Rebuild group to tag debug scripts
|
||||
}
|
||||
|
@ -355,44 +357,16 @@ export function runScript(script: string, document: TextDocument) {
|
|||
}
|
||||
}
|
||||
|
||||
export function extractDebugArgFromScript(scriptValue: string): [string, number] | undefined {
|
||||
// matches --debug, --debug=1234, --debug-brk, debug-brk=1234, --inspect,
|
||||
// --inspect=1234, --inspect-brk, --inspect-brk=1234,
|
||||
// --inspect=localhost:1245, --inspect=127.0.0.1:1234, --inspect=[aa:1:0:0:0]:1234, --inspect=:1234
|
||||
let match = scriptValue.match(/--(inspect|debug)(-brk)?(=((\[[0-9a-fA-F:]*\]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z0-9\.]*):)?(\d+))?/);
|
||||
|
||||
if (match) {
|
||||
if (match[6]) {
|
||||
return [match[1], parseInt(match[6])];
|
||||
}
|
||||
if (match[1] === 'inspect') {
|
||||
return [match[1], 9229];
|
||||
}
|
||||
if (match[1] === 'debug') {
|
||||
return [match[1], 5858];
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function startDebugging(scriptName: string, protocol: string, port: number, folder: WorkspaceFolder) {
|
||||
let p = 'inspector';
|
||||
if (protocol === 'debug') {
|
||||
p = 'legacy';
|
||||
}
|
||||
|
||||
let packageManager = getPackageManager(folder);
|
||||
export function startDebugging(scriptName: string, folder: WorkspaceFolder) {
|
||||
const config: DebugConfiguration = {
|
||||
type: 'node',
|
||||
type: 'pwa-node',
|
||||
request: 'launch',
|
||||
name: `Debug ${scriptName}`,
|
||||
runtimeExecutable: packageManager,
|
||||
runtimeExecutable: getPackageManager(folder),
|
||||
runtimeArgs: [
|
||||
'run',
|
||||
scriptName,
|
||||
],
|
||||
port: port,
|
||||
protocol: p
|
||||
};
|
||||
|
||||
if (folder) {
|
||||
|
|
Loading…
Reference in a new issue