From a5388fed60822d57dda7196ac0e5b1fb2aa70597 Mon Sep 17 00:00:00 2001 From: Thomas Droxler Date: Fri, 21 Dec 2018 14:24:03 +0100 Subject: [PATCH 1/3] Preserve errors order when publishing diagnostics The `sbt-server` was prepending a new probem and not appending. The result was a `textDocument/publishDiagnostics` notification containing a inverted list of problems compare to what was show in the sbt console. --- .../main/scala/sbt/internal/server/LanguageServerReporter.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/internal/server/LanguageServerReporter.scala b/main/src/main/scala/sbt/internal/server/LanguageServerReporter.scala index ec4137480..1f8cfd290 100644 --- a/main/src/main/scala/sbt/internal/server/LanguageServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/LanguageServerReporter.scala @@ -51,7 +51,7 @@ class LanguageServerReporter( val pos = problem.position pos.sourceFile.toOption foreach { sourceFile: File => problemsByFile.get(sourceFile) match { - case Some(xs: List[Problem]) => problemsByFile(sourceFile) = problem :: xs + case Some(xs: List[Problem]) => problemsByFile(sourceFile) = xs :+ problem case _ => problemsByFile(sourceFile) = List(problem) } } From fff6b044bc88e58dcd083eb8807dd7c7815444ff Mon Sep 17 00:00:00 2001 From: Thomas Droxler Date: Fri, 4 Jan 2019 13:27:21 +0100 Subject: [PATCH 2/3] Use `ListBuffer` instead of `List` in `LanguageServerReporter` In order to have a better data structure for appending --- .../sbt/internal/server/LanguageServerReporter.scala | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/main/src/main/scala/sbt/internal/server/LanguageServerReporter.scala b/main/src/main/scala/sbt/internal/server/LanguageServerReporter.scala index 1f8cfd290..d68e12e96 100644 --- a/main/src/main/scala/sbt/internal/server/LanguageServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/LanguageServerReporter.scala @@ -40,7 +40,7 @@ class LanguageServerReporter( ) extends ManagedLoggedReporter(maximumErrors, logger, sourcePositionMapper) { lazy val exchange = StandardMain.exchange - private[sbt] lazy val problemsByFile = new mutable.HashMap[File, List[Problem]] + private[sbt] lazy val problemsByFile = new mutable.HashMap[File, mutable.ListBuffer[Problem]] override def reset(): Unit = { super.reset() @@ -51,8 +51,8 @@ class LanguageServerReporter( val pos = problem.position pos.sourceFile.toOption foreach { sourceFile: File => problemsByFile.get(sourceFile) match { - case Some(xs: List[Problem]) => problemsByFile(sourceFile) = xs :+ problem - case _ => problemsByFile(sourceFile) = List(problem) + case Some(xs: mutable.ListBuffer[Problem]) => problemsByFile(sourceFile) = xs :+ problem + case _ => problemsByFile(sourceFile) = mutable.ListBuffer(problem) } } super.log(problem) @@ -93,7 +93,7 @@ class LanguageServerReporter( val pos = problem.position pos.sourceFile.toOption foreach { sourceFile: File => problemsByFile.get(sourceFile) match { - case Some(xs: List[Problem]) => + case Some(xs: mutable.ListBuffer[Problem]) => val ds = toDiagnostics(xs) val params = PublishDiagnosticsParams(IO.toURI(sourceFile).toString, ds) exchange.notifyEvent("textDocument/publishDiagnostics", params) @@ -102,7 +102,7 @@ class LanguageServerReporter( } } - private[sbt] def toDiagnostics(ps: List[Problem]): Vector[Diagnostic] = { + private[sbt] def toDiagnostics(ps: Seq[Problem]): Vector[Diagnostic] = { for { problem <- ps.toVector pos = problem.position From 68d0da379e87a105ebd2d8a17ea461a14d0bc67c Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 4 Jan 2019 09:55:28 -0500 Subject: [PATCH 3/3] add Mima exclusion --- build.sbt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.sbt b/build.sbt index 27398ecca..b8b9894ed 100644 --- a/build.sbt +++ b/build.sbt @@ -582,6 +582,8 @@ lazy val mainProj = (project in file("main")) mimaBinaryIssueFilters ++= Vector( // New and changed methods on KeyIndex. internal. exclude[ReversedMissingMethodProblem]("sbt.internal.KeyIndex.*"), + // internal + exclude[IncompatibleMethTypeProblem]("sbt.internal.server.LanguageServerReporter.*"), // Changed signature or removed private[sbt] methods exclude[DirectMissingMethodProblem]("sbt.Classpaths.unmanagedLibs0"),