Skip to content

Commit 85b01a7

Browse files
committed
Multivalue with default means colon is required
1 parent c119fac commit 85b01a7

File tree

4 files changed

+6
-14
lines changed

4 files changed

+6
-14
lines changed

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ trait CommonScalaSettings:
113113
val explainTypes: Setting[Boolean] = BooleanSetting(RootSetting, "explain-types", "Explain type errors in more detail (deprecated, use -explain instead).", aliases = List("--explain-types", "-explaintypes"))
114114
val explainCyclic: Setting[Boolean] = BooleanSetting(RootSetting, "explain-cyclic", "Explain cyclic reference errors in more detail.", aliases = List("--explain-cyclic"))
115115
val unchecked: Setting[Boolean] = BooleanSetting(RootSetting, "unchecked", "Enable additional warnings where generated code depends on assumptions.", initialValue = true, aliases = List("--unchecked"))
116-
val language: Setting[List[ChoiceWithHelp[String]]] = MultiChoiceHelpSetting(RootSetting, "language", "feature", "Enable one or more language features.", choices = ScalaSettingsProperties.supportedLanguageFeatures, legacyChoices = ScalaSettingsProperties.legacyLanguageFeatures, default = Nil, aliases = List("--language"))
116+
val language: Setting[List[ChoiceWithHelp[String]]] = MultiChoiceHelpSetting(RootSetting, "language", "feature", "Enable one or more language features.", choices = ScalaSettingsProperties.supportedLanguageFeatures, legacyChoices = ScalaSettingsProperties.legacyLanguageFeatures, aliases = List("--language"))
117117
val experimental: Setting[Boolean] = BooleanSetting(RootSetting, "experimental", "Annotate all top-level definitions with @experimental. This enables the use of experimental features anywhere in the project.")
118118
val preview: Setting[Boolean] = BooleanSetting(RootSetting, "preview", "Enable the use of preview features anywhere in the project.")
119119

@@ -190,7 +190,6 @@ private sealed trait WarningSettings:
190190
),
191191
ChoiceWithHelp("unsafe-warn-patvars", "Deprecated alias for `patvars`"),
192192
),
193-
default = Nil
194193
)
195194
object WunusedHas:
196195
def isChoiceSet(s: String)(using Context) = Wunused.value.pipe(us => us.contains(s))
@@ -224,7 +223,6 @@ private sealed trait WarningSettings:
224223
WarningSetting,
225224
"Wconf",
226225
"patterns",
227-
default = List(),
228226
descr =
229227
raw"""Configure compiler warnings.
230228
|Syntax: -Wconf:<filters>:<action>,<filters>:<action>,...
@@ -286,7 +284,6 @@ private sealed trait WarningSettings:
286284
ChoiceWithHelp("private-shadow", "Warn if a private field or class parameter shadows a superclass field"),
287285
ChoiceWithHelp("type-parameter-shadow", "Warn when a type parameter shadows a type already in the scope"),
288286
),
289-
default = Nil
290287
)
291288

292289
object WshadowHas:

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,6 @@ object Settings:
122122

123123
def isMultivalue: Boolean = classTag[T] == ListTag
124124

125-
def acceptsNoArg: Boolean = classTag[T] == BooleanTag || classTag[T] == OptionTag || choices.exists(_.contains(""))
126-
127125
def legalChoices: String =
128126
choices match
129127
case Some(xs) if xs.isEmpty => ""
@@ -246,10 +244,11 @@ object Settings:
246244
update(Some(propertyClass.get.getConstructor().newInstance()), "", args)
247245
case ct =>
248246
val argInArgRest = !argRest.isEmpty || legacyArgs
249-
inline def argAfterParam = !argInArgRest && args.nonEmpty && (ct == IntTag || !args.head.startsWith("-"))
247+
inline def argAfterParam = args.nonEmpty && (ct == IntTag || !args.head.startsWith("-"))
248+
inline def isMultivalueWithDefault = isMultivalue && !isEmptyDefault
250249
if argInArgRest then
251250
doSetArg(argRest, args)
252-
else if argAfterParam then
251+
else if argAfterParam && !isMultivalueWithDefault then
253252
doSetArg(args.head, args.tail)
254253
else if isEmptyDefault then
255254
missingArg
@@ -418,7 +417,7 @@ object Settings:
418417
def MultiChoiceSetting(category: SettingCategory, name: String, helpArg: String, descr: String, choices: List[String], default: List[String] = Nil, legacyChoices: List[String] = Nil, aliases: List[String] = Nil, deprecation: Option[Deprecation] = None): Setting[List[String]] =
419418
publish(Setting(category, prependName(name), descr, default, helpArg, Some(choices), legacyChoices = Some(legacyChoices), aliases = aliases, deprecation = deprecation))
420419

421-
def MultiChoiceHelpSetting(category: SettingCategory, name: String, helpArg: String, descr: String, choices: List[ChoiceWithHelp[String]], default: List[ChoiceWithHelp[String]], legacyChoices: List[String] = Nil, aliases: List[String] = Nil, deprecation: Option[Deprecation] = None): Setting[List[ChoiceWithHelp[String]]] =
420+
def MultiChoiceHelpSetting(category: SettingCategory, name: String, helpArg: String, descr: String, choices: List[ChoiceWithHelp[String]], default: List[ChoiceWithHelp[String]] = Nil, legacyChoices: List[String] = Nil, aliases: List[String] = Nil, deprecation: Option[Deprecation] = None): Setting[List[ChoiceWithHelp[String]]] =
422421
publish(Setting(category, prependName(name), descr, default, helpArg, Some(choices), legacyChoices = Some(legacyChoices), aliases = aliases, deprecation = deprecation))
423422

424423
def IntSetting(category: SettingCategory, name: String, descr: String, default: Int, aliases: List[String] = Nil, deprecation: Option[Deprecation] = None): Setting[Int] =

compiler/test/dotty/tools/dotc/SettingsTests.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ class SettingsTests:
280280
val multiStringSetting = MultiStringSetting(RootSetting, "multiStringSetting", "multiStringSetting", "", List("a", "b"), List())
281281
val outputSetting = OutputSetting(RootSetting, "outputSetting", "outputSetting", "", new PlainDirectory(Directory(".")))
282282
val pathSetting = PathSetting(RootSetting, "pathSetting", "pathSetting", ".")
283-
val phasesSetting = PhasesSetting(RootSetting, "phasesSetting", "phasesSetting", "all")
283+
val phasesSetting = PhasesSetting(RootSetting, "phasesSetting", "phasesSetting")
284284
val versionSetting= VersionSetting(RootSetting, "versionSetting", "versionSetting")
285285

286286
import Settings.*

compiler/test/dotty/tools/dotc/config/ScalaSettingsTests.scala

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -315,10 +315,6 @@ class ScalaSettingsTests:
315315
val summary = process("-Vphases:foo,bar,baz" :: Nil)
316316
assertTrue(summary.errors.isEmpty && summary.warnings.isEmpty)
317317
assertEquals(List("foo","bar","baz"), settings.Vphases.valueIn(summary.sstate))
318-
locally:
319-
val summary = process(List("-Vphases","foo","-Vphases","bar","-Vphases","baz"))
320-
assertTrue(summary.errors.isEmpty && summary.warnings.isEmpty)
321-
assertEquals(List("foo","bar","baz"), settings.Vphases.valueIn(summary.sstate))
322318
locally:
323319
val summary = process(List("-Vphases","--","foo"))
324320
assertTrue(summary.errors.isEmpty && summary.warnings.isEmpty)

0 commit comments

Comments
 (0)