From 7ea103acd232e8054c970927cfef29e7bfd6b1f7 Mon Sep 17 00:00:00 2001 From: Toshiyuki Takahashi Date: Mon, 28 Mar 2022 23:33:41 +0900 Subject: [PATCH] Overwrite Problem#rendered with None when source mapping occurs. This commit is to improve Twirl's error message with Scala3. https://github.com/playframework/twirl/issues/498 This pull request makes sbt ignore `Problem#rendered` passed from the compiler if source mapping is actually performed. Sbt will display the error message based on the `Position` transformed by source mapping. When the source mapping is not performed, the message in `Problem#rendered` is displayed as before. --- .../src/main/scala/sbt/internal/inc/LoggedReporter.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/zinc-compile-core/src/main/scala/sbt/internal/inc/LoggedReporter.scala b/internal/zinc-compile-core/src/main/scala/sbt/internal/inc/LoggedReporter.scala index 408923c52a..f46659aecd 100644 --- a/internal/zinc-compile-core/src/main/scala/sbt/internal/inc/LoggedReporter.scala +++ b/internal/zinc-compile-core/src/main/scala/sbt/internal/inc/LoggedReporter.scala @@ -129,12 +129,16 @@ class LoggedReporter( (problem0.category, problem0.position, problem0.message, problem0.severity, problem0.rendered) // Note: positions in reported errors can be fixed with `sourcePositionMapper`. val transformedPos: Position = sourcePositionMapper(position) + val transformed = transformedPos.sourceFile != position.sourceFile val problem = InterfaceUtil.problem( category, transformedPos, message, severity, - InterfaceUtil.jo2o(rendered) + // When the source mapping is performed, + // the information based on the `transformedPos` should be displayed + // even if the `rendered` is defined. + if (transformed) None else InterfaceUtil.jo2o(rendered) ) allProblems += problem0 severity match {