Skip to content

Commit

Permalink
Merge pull request #588 from smarter/followup
Browse files Browse the repository at this point in the history
Follow-up to the fields added in #580, and add Problem#rendered
  • Loading branch information
smarter authored Aug 30, 2018
2 parents a022a4f + ebe5c2a commit 335878c
Show file tree
Hide file tree
Showing 9 changed files with 62 additions and 36 deletions.
7 changes: 6 additions & 1 deletion build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -199,10 +199,15 @@ lazy val zincPersist = (project in internalPath / "zinc-persist")
import com.typesafe.tools.mima.core._
import com.typesafe.tools.mima.core.ProblemFilters._
Seq(
// Added {start,end}{Offset,Line,Column}
// Added Position#{start,end}{Offset,Line,Column}
exclude[DirectMissingMethodProblem]("sbt.internal.inc.schema.Position.apply"),
exclude[DirectMissingMethodProblem]("sbt.internal.inc.schema.Position.copy"),
exclude[DirectMissingMethodProblem]("sbt.internal.inc.schema.Position.this"),

// Added Problem#reported
exclude[DirectMissingMethodProblem]("sbt.internal.inc.schema.Problem.apply"),
exclude[DirectMissingMethodProblem]("sbt.internal.inc.schema.Problem.copy"),
exclude[DirectMissingMethodProblem]("sbt.internal.inc.schema.Problem.this"),
)
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,20 @@ class FilteredReporter(
* registered as problems so that users of `problems()` receive them.
*/
override def log(problem: Problem): Unit = {
val (category, position, message, severity) =
(problem.category, problem.position, problem.message, problem.severity)
import sbt.util.InterfaceUtil

val (category, position, message, severity, rendered) =
(problem.category,
problem.position,
problem.message,
problem.severity,
InterfaceUtil.jo2o(problem.rendered))
val dontShow = isFiltered(position, message, severity)
if (!dontShow) super.log(problem)
else {
// Even if we don't display, we do want to register the problem
import sbt.util.InterfaceUtil
val transformedPos: Position = positionMapper(position)
val problem = InterfaceUtil.problem(category, transformedPos, message, severity)
val problem = InterfaceUtil.problem(category, transformedPos, message, severity, rendered)
allProblems += problem
()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ import scala.collection.mutable
import LoggedReporter._
import sbt.internal.util.ManagedLogger
import sbt.internal.util.codec._
import sbt.util.InterfaceUtil.jo2o
import Severity.{ Error, Warn, Info => SInfo }

object LoggedReporter {
final class PositionKey(pos: Position) {
import sbt.util.InterfaceUtil.jo2o
def offset = pos.offset
def sourceFile = pos.sourceFile

Expand Down Expand Up @@ -121,11 +121,15 @@ class LoggedReporter(

override def log(problem0: Problem): Unit = {
import sbt.util.InterfaceUtil
val (category, position, message, severity) =
(problem0.category, problem0.position, problem0.message, problem0.severity)
val (category, position, message, severity, rendered) =
(problem0.category,
problem0.position,
problem0.message,
problem0.severity,
jo2o(problem0.rendered))
// Note: positions in reported errors can be fixed with `sourcePositionMapper`.
val transformedPos: Position = sourcePositionMapper(position)
val problem = InterfaceUtil.problem(category, transformedPos, message, severity)
val problem = InterfaceUtil.problem(category, transformedPos, message, severity, rendered)
allProblems += problem
severity match {
case Warn | Error =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,22 @@ import sbt.util.InterfaceUtil.jo2o
trait ProblemStringFormats {
implicit lazy val ProblemStringFormat: ShowLines[Problem] = new ShowLines[Problem] {
def showLines(p: Problem): Seq[String] =
p match {
case p if !p.position.sourcePath.isPresent && !p.position.line.isPresent =>
Vector(p.message)
case _ =>
val pos = p.position
val sourcePrefix = jo2o(pos.sourcePath).getOrElse("")
val columnNumber = jo2o(pos.pointer).fold(1)(_.toInt + 1)
val lineNumberString = jo2o(pos.line).fold(":")(":" + _ + ":" + columnNumber + ":") + " "
val line1 = sourcePrefix + lineNumberString + p.message
val lineContent = pos.lineContent
if (!lineContent.isEmpty) {
Vector(line1, lineContent) ++
(for { space <- jo2o(pos.pointerSpace) } yield
(space + "^")).toVector // pointer to the column position of the error/warning
} else Vector(line1)
if (p.rendered.isPresent)
Vector(p.rendered.get)
else if (!p.position.sourcePath.isPresent && !p.position.line.isPresent)
Vector(p.message)
else {
val pos = p.position
val sourcePrefix = jo2o(pos.sourcePath).getOrElse("")
val columnNumber = jo2o(pos.pointer).fold(1)(_.toInt + 1)
val lineNumberString = jo2o(pos.line).fold(":")(":" + _ + ":" + columnNumber + ":") + " "
val line1 = sourcePrefix + lineNumberString + p.message
val lineContent = pos.lineContent
if (!lineContent.isEmpty) {
Vector(line1, lineContent) ++
(for { space <- jo2o(pos.pointerSpace) } yield
(space + "^")).toVector // pointer to the column position of the error/warning
} else Vector(line1)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ final class DiagnosticsReporter(reporter: Reporter) extends DiagnosticListener[J
val msg = d.getMessage(null)
val pos: xsbti.Position = PositionImpl(d)
if (severity == Severity.Error) errorEncountered = true
reporter.log(problem("", pos, msg, severity))
reporter.log(problem("", pos, msg, severity, rendered = None))
}
}

Expand Down
1 change: 1 addition & 0 deletions internal/zinc-persist/src/main/protobuf/schema.proto
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ message Problem {
Severity severity = 2;
string message = 3;
Position position = 4;
string rendered = 5;
}

message SourceInfo {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import sbt.internal.inc.binary.converters.ProtobufDefaults.{ Classes, ReadersCon
import sbt.internal.util.Relation
import xsbti.api._

import ProtobufDefaults.{ MissingString, MissingInt }

final class ProtobufReaders(mapper: ReadMapper) {
def fromPathString(path: String): File = {
java.nio.file.Paths.get(path).toFile
Expand Down Expand Up @@ -115,11 +117,6 @@ final class ProtobufReaders(mapper: ReadMapper) {
}

def fromPosition(position: schema.Position): Position = {
import ProtobufDefaults.{ MissingString, MissingInt }
def fromString(value: String): Option[String] =
if (value == MissingString) None else Some(value)
def fromInt(value: Int): Option[Integer] =
if (value == MissingInt) None else Some(value)
InterfaceUtil.position(
line0 = fromInt(position.line),
content = position.lineContent,
Expand All @@ -146,14 +143,21 @@ final class ProtobufReaders(mapper: ReadMapper) {
}
}

private def fromString(value: String): Option[String] =
if (value == MissingString) None else Some(value)

private def fromInt(value: Int): Option[Integer] =
if (value == MissingInt) None else Some(value)

def fromProblem(problem: schema.Problem): Problem = {
val category = problem.category
val message = problem.message
val severity = fromSeverity(problem.severity)
val position = problem.position
.map(fromPosition)
.getOrElse(ReadersFeedback.ExpectedPositionInProblem.!!)
InterfaceUtil.problem(category, position, message, severity)
val rendered = fromString(problem.rendered)
InterfaceUtil.problem(category, position, message, severity, rendered)
}

def fromSourceInfo(sourceInfo: schema.SourceInfo): SourceInfo = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,23 @@ class TextAnalysisFormat(val mappers: ReadWriteMappers)
}
private implicit val companionsFomrat: Format[Companions] = CompanionsFormat
private implicit def problemFormat: Format[Problem] =
asProduct4(problem)(p => (p.category, p.position, p.message, p.severity))
asProduct5(problem)(p => (p.category, p.position, p.message, p.severity, jo2o(p.rendered)))
private implicit def positionFormat: Format[Position] =
asProduct7(position)(
asProduct13(position)(
p =>
(jo2o(p.line),
p.lineContent,
jo2o(p.offset),
jo2o(p.pointer),
jo2o(p.pointerSpace),
jo2o(p.sourcePath),
jo2o(p.sourceFile)))
jo2o(p.sourceFile),
jo2o(p.startOffset),
jo2o(p.endOffset),
jo2o(p.startLine),
jo2o(p.startColumn),
jo2o(p.endLine),
jo2o(p.endColumn)))
private implicit val severityFormat: Format[Severity] =
wrap[Severity, Byte](_.ordinal.toByte, b => Severity.values.apply(b.toInt))
private implicit val integerFormat: Format[Integer] =
Expand Down
4 changes: 2 additions & 2 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ object Dependencies {
val scala213 = "2.13.0-M2"

private val ioVersion = "1.2.0"
private val utilVersion = "1.2.1"
private val utilVersion = "1.2.2"
private val lmVersion = "1.2.0"

private val sbtIO = "org.scala-sbt" %% "io" % ioVersion
Expand Down Expand Up @@ -76,7 +76,7 @@ object Dependencies {
val scalaCompiler = Def.setting { "org.scala-lang" % "scala-compiler" % scalaVersion.value }

val parserCombinator = "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.5"
val sbinary = "org.scala-sbt" %% "sbinary" % "0.4.4"
val sbinary = "org.scala-sbt" %% "sbinary" % "0.5.0"
val scalaCheck = "org.scalacheck" %% "scalacheck" % "1.14.0"
val scalatest = "org.scalatest" %% "scalatest" % "3.0.5"
val junit = "junit" % "junit" % "4.11"
Expand Down

0 comments on commit 335878c

Please sign in to comment.