Skip to content

Commit 84a0c6b

Browse files
committed
Render file names for messages without span
1 parent 1447c91 commit 84a0c6b

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed

compiler/src/dotty/tools/dotc/reporting/MessageRendering.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import core.Decorators._
99
import printing.Highlighting.{Blue, Red, Yellow}
1010
import printing.SyntaxHighlighting
1111
import Diagnostic._
12-
import util.SourcePosition
12+
import util.{ SourcePosition, NoSourcePosition }
1313
import util.Chars.{ LF, CR, FF, SU }
1414
import scala.annotation.switch
1515

@@ -112,9 +112,9 @@ trait MessageRendering {
112112
* @return separator containing error location and kind
113113
*/
114114
def posStr(pos: SourcePosition, diagnosticLevel: String, message: Message)(using Context): String =
115-
if (pos.exists) hl(diagnosticLevel)({
115+
if (pos.source != NoSourcePosition.source) hl(diagnosticLevel)({
116116
val pos1 = pos.nonInlined
117-
val file =
117+
val file = if !pos.exists then pos1.source.file.toString else
118118
s"${pos1.source.file.toString}:${pos1.line + 1}:${pos1.column}"
119119
val errId =
120120
if (message.errorId ne ErrorMessageID.NoExplanationID) {

scala3doc/src/dotty/dokka/DocContext.scala

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,20 @@ import org.jetbrains.dokka._
44
import org.jetbrains.dokka.DokkaSourceSetImpl
55
import org.jetbrains.dokka.plugability.DokkaContext
66
import java.io.File
7+
import java.nio.file.Files
8+
import java.nio.file.Path
9+
import java.nio.file.Paths
10+
711
import collection.JavaConverters._
812
import dotty.dokka.site.StaticSiteContext
913
import dotty.tools.dotc.core.Contexts._
14+
import dotty.tools.io.VirtualFile
15+
import dotty.tools.dotc.util.SourceFile
16+
import dotty.tools.dotc.util.SourcePosition
17+
import dotty.tools.dotc.util.Spans
1018
import java.io.ByteArrayOutputStream
1119
import java.io.PrintStream
20+
import scala.io.Codec
1221

1322
type CompilerContext = dotty.tools.dotc.core.Contexts.Context
1423

@@ -20,12 +29,25 @@ given docContextFromDokka(using dokkaContext: DokkaContext) as DocContext =
2029

2130
val report = dotty.tools.dotc.report
2231

32+
def relativePath(p: Path)(using Context): Path =
33+
val root = Paths.get("").toAbsolutePath()
34+
val absPath = p.toAbsolutePath
35+
println(Seq(p, absPath, absPath.startsWith(root), root.relativize(absPath)))
36+
if absPath.startsWith(root) then root.relativize(p.toAbsolutePath()) else p
37+
38+
2339
def throwableToString(t: Throwable)(using CompilerContext): String =
24-
if ctx.settings.verbose.value then
25-
val os = new ByteArrayOutputStream
26-
t.printStackTrace(new PrintStream(os))
27-
os.toString()
28-
else s"${t.getClass.getName}: ${t.getMessage}"
40+
val os = new ByteArrayOutputStream
41+
t.printStackTrace(new PrintStream(os))
42+
val stLinkes = os.toString().linesIterator
43+
if ctx.settings.verbose.value then stLinkes.mkString("\n")
44+
else stLinkes.take(5).mkString("\n")
45+
46+
private def sourcePostionFor(f: File)(using CompilerContext) =
47+
val relPath = relativePath(f.toPath)
48+
val virtualFile = new VirtualFile(relPath.toString, relPath.toString)
49+
val sourceFile = new SourceFile(virtualFile, Codec.UTF8)
50+
SourcePosition(sourceFile, Spans.NoSpan)
2951

3052
// TODO (https://github.com/lampepfl/scala3doc/issues/238): provide proper error handling
3153
private def createMessage(
@@ -38,13 +60,13 @@ private def createMessage(
3860

3961
extension (r: report.type):
4062
def error(m: String, f: File, e: Throwable | Null = null)(using CompilerContext): Unit =
41-
r.error(createMessage(m, f, e))
63+
r.error(createMessage(m, f, e), sourcePostionFor(f))
4264

4365
def warn(m: String, f: File, e: Throwable)(using CompilerContext): Unit =
44-
r.warning(createMessage(m, f, e))
66+
r.warning(createMessage(m, f, e), sourcePostionFor(f))
4567

4668
def warn(m: String, f: File)(using CompilerContext): Unit =
47-
r.warning(createMessage(m, f, null))
69+
r.warning(createMessage(m, f, null), sourcePostionFor(f))
4870

4971

5072
case class DocContext(args: Scala3doc.Args, compilerContext: CompilerContext)

0 commit comments

Comments
 (0)