Skip to content

Commit

Permalink
Improvement: adds details to github issue
Browse files Browse the repository at this point in the history
  • Loading branch information
kasiaMarek committed Feb 14, 2023
1 parent 6952110 commit 1f6654b
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package scala.meta.internal.metals

import java.net.URLEncoder

import scala.util.Properties

import scala.meta.internal.bsp.BspResolvedResult
import scala.meta.internal.bsp.BspSession
import scala.meta.internal.bsp.ResolvedBloop
import scala.meta.internal.bsp.ResolvedBspOne
import scala.meta.internal.bsp.ResolvedMultiple
import scala.meta.internal.bsp.ResolvedNone
import scala.meta.internal.builds.BuildTools

import org.eclipse.lsp4j.ClientInfo

class GithubNewIssueUrlCreator(
tables: Tables,
buildTargets: BuildTargets,
currentBuildServer: () => Option[BspSession],
calculateNewBuildServer: () => BspResolvedResult,
clientInfo: ClientInfo,
buildTools: BuildTools,
) {

def buildUrl(): String = {
val scalaVersions =
buildTargets.allScala.map(_.scalaVersion).toSet.mkString("; ")
val clientVersion =
Option(clientInfo.getVersion()).map(v => s" v$v").getOrElse("")
val body =
s"""|<!--
| Describe the bug ...
|
| Reproduction steps
| 1. Go to ...
| 2. Click on ...
| 3. Scroll down to ...
| 4. See error
|-->
|
|### Expected behaviour:
|
|<!-- A clear and concise description of what you expected to happen. -->
|
|**Operating system:**
|${Properties.osName}
|
|**Java version:**
|${Properties.javaVersion}
|
|**Editor/extension:**
|${clientInfo.getName()}$clientVersion
|
|**Metals version:**
|${BuildInfo.metalsVersion}
|
|### Extra context or search terms:
|<!--
| - Any other context about the problem
| - Search terms to help others discover this
|-->
|
|### Workspace information:
|
| - **Scala versions:** $scalaVersions$selectedBuildTool$selectedBuildServer
| - **All build tools in workspace:** ${buildTools.all.mkString("; ")}
|""".stripMargin
s"https://github.com/scalameta/metals/issues/new?body=${URLEncoder.encode(body)}"
}

private def selectedBuildTool(): String = {
tables.buildTool
.selectedBuildTool()
.map { value =>
s"""|
| - **Build tool:** ${value}""".stripMargin
}
.getOrElse("")
}

private def selectedBuildServer(): String = {
val buildServer = currentBuildServer()
.map(s => s"${s.main.name} v${s.main.version}")
.getOrElse {
calculateNewBuildServer() match {
case ResolvedBloop => "Disconnected: Bloop"
case ResolvedBspOne(details) => s"Disconnected: ${details.getName()}"
case ResolvedMultiple(_, details) =>
s"Disconnected: Multiple Found ${details.map(_.getName()).mkString("; ")}"
case ResolvedNone => s"Disconnected: None Found"
}
}

s"""|
| - **Build server:** $buildServer""".stripMargin
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,15 @@ class MetalsLspService(
maybeJdkVersion,
)

private val githubNewIssueUrlCreator = new GithubNewIssueUrlCreator(
tables,
buildTargets,
() => bspSession,
() => bspConnector.resolve(),
initializeParams.getClientInfo(),
buildTools,
)

private val fileDecoderProvider: FileDecoderProvider =
new FileDecoderProvider(
workspace,
Expand Down Expand Up @@ -1871,6 +1880,10 @@ class MetalsLspService(
else Future.successful(())
}
} yield ()).asJavaObject
case ServerCommands.OpenIssue() =>
Future
.successful(Urls.openBrowser(githubNewIssueUrlCreator.buildUrl()))
.asJavaObject
case OpenBrowserCommand(url) =>
Future.successful(Urls.openBrowser(url)).asJavaObject
case ServerCommands.CascadeCompile() =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -590,10 +590,16 @@ object ServerCommands {
"Open the Metals logs to troubleshoot issues.",
)

val OpenIssue = new OpenBrowserCommand(
"https://github.com/scalameta/metals/issues/new/choose",
"Open issue on GitHub",
"Open the Metals repository on GitHub to ask a question, report a bug or request a new feature.",
val OpenIssue = new Command(
"open-new-github-issue",
"Open an issue on GitHub",
"Open the Metals repository on GitHub to ask a question or report a bug.",
)

val OpenFeatureRequest = new OpenBrowserCommand(
"https://github.com/scalameta/metals-feature-requests/issues/new?template=feature-request.yml",
"Open a feature request",
"Open the Metals repository on GitHub to open a feature request.",
)

val MetalsGithub = new OpenBrowserCommand(
Expand Down Expand Up @@ -700,6 +706,8 @@ object ServerCommands {
SuperMethodHierarchy,
StartScalaCliServer,
StopScalaCliServer,
OpenIssue,
OpenFeatureRequest,
)

val allIds: Set[String] = all.map(_.id).toSet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ class MetalsTreeViewProvider(
echoCommand(ServerCommands.ReadBloopDocumentation, "book"),
echoCommand(ServerCommands.ChatOnDiscord, "discord"),
echoCommand(ServerCommands.OpenIssue, "issue-opened"),
echoCommand(ServerCommands.OpenFeatureRequest, "github"),
echoCommand(ServerCommands.MetalsGithub, "github"),
echoCommand(ServerCommands.BloopGithub, "github"),
echoCommand(ServerCommands.ScalametaTwitter, "twitter"),
Expand Down

0 comments on commit 1f6654b

Please sign in to comment.