Skip to content

Commit 017b347

Browse files
committed
Warn dubious settings
1 parent 712d5bc commit 017b347

File tree

8 files changed

+341
-192
lines changed

8 files changed

+341
-192
lines changed

compiler/src/dotty/tools/dotc/config/CliCommand.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package config
44
import Settings.*
55
import core.Contexts.*
66
import printing.Highlighting
7+
import reporting.NoExplanation
78

89
import dotty.tools.dotc.util.chaining.*
910
import scala.PartialFunction.cond
@@ -125,7 +126,8 @@ trait CliCommand:
125126
*/
126127
def checkUsage(summary: ArgsSummary, sourcesRequired: Boolean)(using settings: ConcreteSettings)(using SettingsState, Context): Option[List[String]] =
127128
// Print all warnings encountered during arguments parsing
128-
summary.warnings.foreach(report.warning(_))
129+
for warning <- summary.warnings; message = NoExplanation(warning) do
130+
report.configurationWarning(message)
129131

130132
if summary.errors.nonEmpty then
131133
summary.errors foreach (report.error(_))

compiler/src/dotty/tools/dotc/config/Settings.scala

Lines changed: 168 additions & 133 deletions
Large diffs are not rendered by default.

compiler/src/dotty/tools/dotc/report.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ object report:
2020
private def issueWarning(warning: Warning)(using Context): Unit =
2121
ctx.reporter.report(warning)
2222

23+
def configurationWarning(msg: Message, pos: SrcPos = NoSourcePosition)(using Context): Unit =
24+
issueWarning(ConfigurationWarning(msg, pos.sourcePos))
25+
2326
def deprecationWarning(msg: Message, pos: SrcPos, origin: String = "")(using Context): Unit =
2427
issueWarning(DeprecationWarning(msg, addInlineds(pos), origin))
2528

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ object Diagnostic:
8787
extends ConditionalWarning(msg, pos), OriginWarning(origin):
8888
def enablingOption(using Context): Setting[Boolean] = ctx.settings.deprecation
8989

90+
class ConfigurationWarning(msg: Message, pos: SourcePosition) extends ConditionalWarning(msg, pos):
91+
def enablingOption(using Context): Setting[Boolean] = Setting.internal("-configuration", value = true)
92+
override def isSummarizedConditional(using Context): Boolean = false
93+
9094
class MigrationWarning(
9195
msg: Message,
9296
pos: SourcePosition

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import dotty.tools.dotc.util.NoSourcePosition
1313

1414
import java.io.{BufferedReader, PrintWriter}
1515
import scala.annotation.internal.sharable
16-
import scala.collection.mutable
16+
import scala.collection.mutable.ListBuffer
1717
import core.Decorators.{em, toMessage}
1818
import core.handleRecursive
1919

@@ -228,14 +228,13 @@ abstract class Reporter extends interfaces.ReporterResult {
228228
report(new Error("No warnings can be incurred under -Werror (or -Xfatal-warnings)", NoSourcePosition))
229229

230230
/** Summary of warnings and errors */
231-
def summary: String = {
232-
val b = new mutable.ListBuffer[String]
231+
def summary: String =
232+
val b = ListBuffer.empty[String]
233233
if (warningCount > 0)
234234
b += countString(warningCount, "warning") + " found"
235235
if (errorCount > 0)
236236
b += countString(errorCount, "error") + " found"
237237
b.mkString("\n")
238-
}
239238

240239
def summarizeUnreportedWarnings()(using Context): Unit =
241240
for (settingName, count) <- unreportedWarnings do
@@ -246,7 +245,7 @@ abstract class Reporter extends interfaces.ReporterResult {
246245
/** Print the summary of warnings and errors */
247246
def printSummary()(using Context): Unit =
248247
val s = summary
249-
if (s != "") doReport(Warning(s.toMessage, NoSourcePosition))
248+
if !s.isEmpty then doReport(Warning(s.toMessage, NoSourcePosition))
250249

251250
/** Returns a string meaning "n elements". */
252251
protected def countString(n: Int, elements: String): String = n match {

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ enum MessageFilter:
1919
import Diagnostic.*
2020
this match
2121
case Any => true
22+
case Configuration => message.isInstanceOf[ConfigurationWarning]
2223
case Deprecated => message.isInstanceOf[DeprecationWarning]
2324
case Feature => message.isInstanceOf[FeatureWarning]
2425
case Unchecked => message.isInstanceOf[UncheckedWarning]
2526
case MessageID(errorId) => message.msg.errorId == errorId
2627
case MessagePattern(pattern) =>
27-
val noHighlight = message.msg.message.replaceAll("\\e\\[[\\d;]*[^\\d;]","")
28+
val noHighlight = message.msg.message.replaceAll("\\e\\[[\\d;]*[^\\d;]", "")
2829
pattern.findFirstIn(noHighlight).nonEmpty
2930
case SourcePattern(pattern) =>
3031
val source = message.position.orElse(NoSourcePosition).source()
@@ -38,7 +39,7 @@ enum MessageFilter:
3839
case _ => false
3940
case None => false
4041

41-
case Any, Deprecated, Feature, Unchecked, None
42+
case Any, Configuration, Deprecated, Feature, Unchecked, None
4243
case MessagePattern(pattern: Regex)
4344
case MessageID(errorId: ErrorMessageID)
4445
case SourcePattern(pattern: Regex)
@@ -97,6 +98,7 @@ object WConf:
9798
catch case _: IllegalArgumentException => Left(s"unknown error message name: $conf")
9899

99100
case "cat" => conf match
101+
case "configuration" => Right(Configuration)
100102
case "deprecation" => Right(Deprecated)
101103
case "feature" => Right(Feature)
102104
case "unchecked" => Right(Unchecked)

0 commit comments

Comments
 (0)