diff --git a/src/features/GenerateBugReport.ts b/src/features/GenerateBugReport.ts index 5d0049428c..bcf957883b 100644 --- a/src/features/GenerateBugReport.ts +++ b/src/features/GenerateBugReport.ts @@ -1,27 +1,11 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import os = require("os"); import vscode = require("vscode"); import child_process = require("child_process"); import { SessionManager } from "../session"; -const queryStringPrefix = "?"; - -const project = "https://github.com/PowerShell/vscode-powershell"; -const issuesUrl = `${project}/issues/new`; - -const extensions = - vscode.extensions.all.filter((element) => element.packageJSON.isBuiltin === false) - .sort((leftSide, rightSide): number => { - if (leftSide.packageJSON.name.toLowerCase() < rightSide.packageJSON.name.toLowerCase()) { - return -1; - } - if (leftSide.packageJSON.name.toLowerCase() > rightSide.packageJSON.name.toLowerCase()) { - return 1; - } - return 0; - }); +const issuesUrl = "https://github.com/PowerShell/vscode-powershell/issues/new?"; export class GenerateBugReportFeature implements vscode.Disposable { @@ -29,48 +13,15 @@ export class GenerateBugReportFeature implements vscode.Disposable { constructor(private sessionManager: SessionManager) { this.command = vscode.commands.registerCommand("PowerShell.GenerateBugReport", async () => { - - const body = `Issue Description -===== - -I am experiencing a problem with... - -Attached Logs -===== - -Follow the instructions in the [README](https://github.com/PowerShell/vscode-powershell/blob/main/docs/troubleshooting.md) about -capturing and sending logs. - -Environment Information -===== - -Visual Studio Code ------ - -| Name | Version | -| --- | --- | -| Operating System | ${os.type()} ${os.arch()} ${os.release()} | -| VSCode | ${vscode.version}| -| PowerShell Extension Version | ${sessionManager.HostVersion} | - -PowerShell Information ------ - -${this.getRuntimeInfo()} - -Visual Studio Code Extensions ------ - -
Visual Studio Code Extensions(Click to Expand) - -${this.generateExtensionTable(extensions)} -
- -`; - - const encodedBody = encodeURIComponent(body); - const fullUrl = `${issuesUrl}${queryStringPrefix}body=${encodedBody}`; - await vscode.commands.executeCommand("vscode.open", vscode.Uri.parse(fullUrl)); + const params = [ + "labels=Issue-Bug", + "template=bug-report.yml", + "powershell-version=" + this.getRuntimeInfo(), + "vscode-version=" + vscode.version + "\n" + process.arch, + "extension-version=" + sessionManager.Publisher + "." + sessionManager.HostName + "@" + sessionManager.HostVersion, + ]; + const url = vscode.Uri.parse(issuesUrl + encodeURIComponent(params.join("&"))); + await vscode.env.openExternal(url); }); } @@ -78,46 +29,15 @@ ${this.generateExtensionTable(extensions)} this.command.dispose(); } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - private generateExtensionTable(installedExtensions: vscode.Extension[]): string { - if (!installedExtensions.length) { - return "none"; - } - - const tableHeader = "|Extension|Author|Version|\n|---|---|---|"; - const table = installedExtensions.map((e) => { - if (e.packageJSON.isBuiltin === false) { - return `|${e.packageJSON.name}|${e.packageJSON.publisher}|${e.packageJSON.version}|`; - } - return undefined; - }).join("\n"); - - const extensionTable = ` -${tableHeader}\n${table}; -`; - // 2000 chars is browsers de-facto limit for URLs, 400 chars are allowed for other string parts of the issue URL - // http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers - // if (encodeURIComponent(extensionTable).length > 1600) { - // return 'the listing length exceeds browsers\' URL characters limit'; - // } - - return extensionTable; - } - - private getRuntimeInfo(): string | undefined { + private getRuntimeInfo(): string { if (this.sessionManager.PowerShellExeDetails === undefined) { - return; + return "Session's PowerShell details are unknown!"; } const powerShellExePath = this.sessionManager.PowerShellExeDetails.exePath; - const powerShellArgs = [ - "-NoProfile", - "-Command", - "$PSVersionString = \"|Name|Value|\n\"; $PSVersionString += \"|---|---|\n\"; $PSVersionTable.keys | " + - "ForEach-Object { $PSVersionString += \"|$_|$($PSVersionTable.Item($_))|\n\" }; $PSVersionString", - ]; - + const powerShellArgs = [ "-NoProfile", "-Command", "$PSVersionTable | Out-String" ]; const child = child_process.spawnSync(powerShellExePath, powerShellArgs); - return child.stdout.toString().replace(";", ","); + // Replace semicolons as they'll cause the URI component to truncate + return child.stdout.toString().trim().replace(";", ","); } } diff --git a/src/main.ts b/src/main.ts index 7b977427ed..99a998a3ce 100644 --- a/src/main.ts +++ b/src/main.ts @@ -135,8 +135,10 @@ export async function activate(context: vscode.ExtensionContext): Promise