Skip to content

Commit 6021176

Browse files
committed
Reporter fix. Message levels
1 parent 50cdf55 commit 6021176

File tree

4 files changed

+36
-7
lines changed

4 files changed

+36
-7
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class StoreReporter(outer: Reporter = Reporter.NoReporter) extends Reporter {
3737
if (infos != null) try infos.toList finally infos = null
3838
else Nil
3939

40-
override def pendingMessages(using Context): List[Diagnostic] = infos.toList
40+
override def pendingMessages(using Context): List[Diagnostic] = if (infos != null) infos.toList else Nil
4141

4242
override def errorsReported: Boolean = hasErrors || (outer != null && outer.errorsReported)
4343
}

scaladoc/src/dotty/tools/scaladoc/snippets/SnippetCompilationResult.scala

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@ package snippets
33

44
import dotty.tools.io.{ AbstractFile }
55

6-
case class SnippetCompilerMessage(line: Int, column: Int, sourceLine: String, message: String)
6+
case class SnippetCompilerMessage(line: Int, column: Int, sourceLine: String, message: String, level: MessageLevel)
77

88
case class SnippetCompilationResult(result: Option[AbstractFile], messages: Seq[SnippetCompilerMessage]):
9-
def getSummary: String = messages.map(m => s"At ${m.line}:${m.column}:\n${m.sourceLine}Compiler: ${m.message}").mkString("\n")
9+
def getSummary: String = messages.map(m => s"At ${m.line}:${m.column}:\n${m.sourceLine}${m.level.text}: ${m.message}").mkString("\n")
10+
11+
12+
enum MessageLevel(val text: String):
13+
case Info extends MessageLevel("Info")
14+
case Warning extends MessageLevel("Warning")
15+
case Error extends MessageLevel("Error")
16+

scaladoc/src/dotty/tools/scaladoc/snippets/SnippetCompiler.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import dotty.tools.dotc.{ Compiler, Run }
1616
import dotty.tools.io.{AbstractFile, VirtualDirectory}
1717
import dotty.tools.repl.AbstractFileClassLoader
1818
import dotty.tools.dotc.util.SourceFile
19+
import dotty.tools.dotc.interfaces.Diagnostic._
1920

2021
class SnippetCompiler(
2122
classpath: String = System.getProperty("java.class.path"), //Probably needs to be done better
@@ -47,8 +48,11 @@ class SnippetCompiler(
4748
case diagnostic if diagnostic.position.isPresent =>
4849
val pos = diagnostic.position.get
4950
val msg = nullableMessage(diagnostic.message)
50-
SnippetCompilerMessage(pos.line, pos.column, pos.lineContent, msg)
51-
case d => SnippetCompilerMessage(-1, -1, "", nullableMessage(d.message))
51+
val level = MessageLevel.fromOrdinal(diagnostic.level)
52+
SnippetCompilerMessage(pos.line, pos.column, pos.lineContent, msg, level)
53+
case d =>
54+
val level = MessageLevel.fromOrdinal(d.level)
55+
SnippetCompilerMessage(-1, -1, "", nullableMessage(d.message), level)
5256
}
5357
errorMessages
5458
}
@@ -64,8 +68,7 @@ class SnippetCompiler(
6468
.setReporter(new StoreReporter)
6569
val run = newRun(using context)
6670
run.compileFromStrings(snippets)
67-
//Currently no warnings because of reporter implementation
68-
val messages = createReportMessage(context.reporter.allErrors)
71+
val messages = createReportMessage(context.reporter.pendingMessages(using context))
6972
val targetIfSuccessful = Option.when(!context.reporter.hasErrors)(target)
7073
SnippetCompilationResult(targetIfSuccessful, messages)
7174
}

scaladoc/test/dotty/tools/scaladoc/snippets/SnippetCompilerTest.scala

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@ class SnippetCompilerTest {
2929

3030
def assertFailedCompilation(str: List[String]): Unit = assertFailedCompilation(runTest(str))
3131

32+
def assertMessageLevelPresent(str: String, level: MessageLevel): Unit = assertMessageLevelPresent(runTest(str), level)
33+
34+
def assertMessageLevelPresent(res: SnippetCompilationResult, level: MessageLevel): Unit = res match {
35+
case r @ SnippetCompilationResult(_, messages) => assertTrue(
36+
s"Expected message with level: ${level.text}. Got result ${r.getSummary}",
37+
messages.exists(_.level == level)
38+
)
39+
}
40+
3241

3342
@Test
3443
def snippetCompilerTest: Unit = {
@@ -43,8 +52,18 @@ class SnippetCompilerTest {
4352
|class A:
4453
| val b: String
4554
|""".stripMargin
55+
val warningSnippet = s"""
56+
|package asd
57+
|class A:
58+
| val a: Int = try {
59+
| 5
60+
| }
61+
|""".stripMargin
4662
assertSuccessfulCompilation(simpleCorrectSnippet)
4763
assertFailedCompilation(simpleIncorrectSnippet)
4864
assertFailedCompilation(List(simpleCorrectSnippet, simpleCorrectSnippet))
65+
assertMessageLevelPresent(simpleIncorrectSnippet, MessageLevel.Error)
66+
assertMessageLevelPresent(warningSnippet, MessageLevel.Warning)
67+
//No test for Info
4968
}
5069
}

0 commit comments

Comments
 (0)