Skip to content

Commit 8167d0d

Browse files
committed
Warn dubious settings
1 parent 3bea2f3 commit 8167d0d

File tree

10 files changed

+344
-197
lines changed

10 files changed

+344
-197
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 & 137 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: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,12 @@ object Diagnostic:
8989
extends ConditionalWarning(msg, pos), OriginWarning(origin):
9090
def enablingOption(using Context): Setting[Boolean] = ctx.settings.deprecation
9191

92+
class ConfigurationWarning(msg: Message, pos: SourcePosition) extends ConditionalWarning(msg, pos):
93+
def enablingOption(using Context): Setting[Boolean] = ConfigurationWarning.setting
94+
override def isSummarizedConditional(using Context): Boolean = false
95+
object ConfigurationWarning:
96+
private val setting = Setting.internal("-configuration", value = true)
97+
9298
class MigrationWarning(
9399
msg: Message,
94100
pos: SourcePosition

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ trait MessageRendering {
216216
case _: UncheckedWarning => ("unchecked", "")
217217
case w: DeprecationWarning => ("deprecation", w.origin)
218218
case _: FeatureWarning => ("feature", "")
219+
case _: ConfigurationWarning => ("configuration", "")
219220
case _ => ("", "")
220221
var entitled = false
221222
def addHelp(what: String)(value: String): Unit =

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

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

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

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

237237
/** Summary of warnings and errors */
238-
def summary: String = {
239-
val b = new mutable.ListBuffer[String]
238+
def summary: String =
239+
val b = ListBuffer.empty[String]
240240
if (warningCount > 0)
241241
b += countString(warningCount, "warning") + " found"
242242
if (errorCount > 0)
243243
b += countString(errorCount, "error") + " found"
244244
b.mkString("\n")
245-
}
246245

247246
def summarizeUnreportedWarnings()(using Context): Unit =
248247
for (settingName, count) <- unreportedWarnings do
@@ -253,7 +252,7 @@ abstract class Reporter extends interfaces.ReporterResult {
253252
/** Print the summary of warnings and errors */
254253
def printSummary()(using Context): Unit =
255254
val s = summary
256-
if (s != "") doReport(Warning(s.toMessage, NoSourcePosition))
255+
if !s.isEmpty then doReport(Warning(s.toMessage, NoSourcePosition))
257256

258257
/** Returns a string meaning "n elements". */
259258
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()
@@ -39,7 +40,7 @@ enum MessageFilter:
3940
case _ => false
4041
case None => false
4142

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

100101
case "cat" => conf match
102+
case "configuration" => Right(Configuration)
101103
case "deprecation" => Right(Deprecated)
102104
case "feature" => Right(Feature)
103105
case "unchecked" => Right(Unchecked)

0 commit comments

Comments
 (0)