@@ -106,14 +106,15 @@ object Settings:
106106 preferPrevious : Boolean = false ,
107107 propertyClass : Option [Class [? ]] = None ,
108108 deprecation : Option [Deprecation ] = None ,
109+ deprecatedAliases : List [(String , Deprecation )] = Nil ,
109110 // kept only for -Xkind-projector option compatibility
110111 legacyArgs : Boolean = false ,
111112 // accept legacy choices (for example, valid in Scala 2 but no longer supported)
112113 legacyChoices : Option [Seq [? ]] = None )(private [Settings ] val idx : Int )(using ct : ClassTag [T ]):
113114
114- val alternatives = aliases.map(_.stripSuffix(" *" ))
115115 validateSettingString(prefix.getOrElse(name))
116- alternatives.foreach(validateSettingString)
116+ aliases.foreach(validateSettingString)
117+ deprecatedAliases.foreach((alias, _) => validateSettingString(alias))
117118 assert(name.startsWith(s " - ${category.prefixLetter}" ), s " Setting $name does not start with category - $category" )
118119 assert(legacyArgs || ! choices.exists(_.contains(" " )), s " Empty string is not supported as a choice for setting $name" )
119120 validateSettingTag(ct)
@@ -122,7 +123,7 @@ object Settings:
122123 // Example: -opt Main.scala would be interpreted as -opt:Main.scala, and the source file would be ignored.
123124 assert(! (ct == ListTag && ignoreInvalidArgs), s " Ignoring invalid args is not supported for multivalue settings: $name" )
124125
125- val allFullNames : List [String ] = s " $name" :: s " - $name" :: alternatives
126+ val allFullNames : List [String ] = s " $name" :: s " - $name" :: aliases ::: deprecatedAliases.map(_._1)
126127
127128 def valueIn (state : SettingsState ): T = state.value(idx).asInstanceOf [T ]
128129
@@ -143,13 +144,18 @@ object Settings:
143144 case Some (xs) => xs.mkString(" , " )
144145 case None => " "
145146
146- // Updates the state from the next arg if this setting is applicable.
147+ /** Updates the state from the next arg if this setting is applicable. */
147148 def tryToSet (state0 : ArgsSummary ): ArgsSummary =
148- val ArgsSummary (sstate, arg :: args, _, _) = state0 : @ unchecked
149- def state (using ArgsSummary ) = summon[ArgsSummary ]
150- def changed = sstate.wasChanged(idx)
149+ inline def state (using ArgsSummary ) = summon[ArgsSummary ]
150+ inline def sstate (using ArgsSummary ) = state.sstate
151+ inline def changed (using ArgsSummary ) = sstate.wasChanged(idx)
152+ val arg :: args = state0.arguments: @ unchecked // there must be an arg
151153
152154 /** Updates the value in state.
155+ *
156+ * If this option is deprecated, add a warning.
157+ * If the option is `replacedBy` another option, instead of applying the value,
158+ * add the reconstructed arg to be applied subsequently.
153159 *
154160 * @param value will be evaluated at most once for side effects
155161 * @param altArg alt string to apply with alt setting if this setting is deprecated
@@ -289,15 +295,10 @@ object Settings:
289295
290296 def checkDeprecatedAlias ()(using ArgsSummary ) =
291297 val name = arg.takeWhile(_ != ':' )
292- val found =
293- for
294- alt <- alternatives.find(_ == name)
295- altx = alt + " *"
296- _ <- aliases.find(_ == altx)
297- yield
298- alt
299- found.map: alt =>
300- state.warn(s " Option $alt is a deprecated alias: use ${this .name}" , args)
298+ val found = deprecatedAliases.find((alt, _) => alt == name)
299+ found.map: (alt, dep) =>
300+ val msg = if dep.msg.nonEmpty then dep.msg else s " use ${this .name} instead "
301+ state.warn(s " Option $alt is a deprecated alias: $msg" , args)
301302 .getOrElse(state)
302303
303304 if matches then
@@ -359,6 +360,7 @@ object Settings:
359360 )
360361
361362 object Deprecation :
363+ def apply (): Deprecation = Deprecation (msg = " " , replacedBy = None )
362364 def renamed (replacement : String ) = Some (Deprecation (s " Use $replacement instead. " , Some (replacement)))
363365 def removed (removedVersion : Option [String ] = None ) =
364366 val msg = removedVersion.map(" in " + _).getOrElse(" ." )
@@ -435,38 +437,38 @@ object Settings:
435437 assert(! name.startsWith(" -" ), s " Setting $name cannot start with - " )
436438 " -" + name
437439
438- def BooleanSetting (category : SettingCategory , name : String , descr : String , initialValue : Boolean = false , aliases : List [String ] = Nil , preferPrevious : Boolean = false , deprecation : Option [Deprecation ] = None , ignoreInvalidArgs : Boolean = false ): Setting [Boolean ] =
439- publish(Setting (category, prependName(name), descr, initialValue, aliases = aliases, preferPrevious = preferPrevious, deprecation = deprecation, ignoreInvalidArgs = ignoreInvalidArgs))
440+ def BooleanSetting (category : SettingCategory , name : String , descr : String , initialValue : Boolean = false , aliases : List [String ] = Nil , preferPrevious : Boolean = false , deprecation : Option [Deprecation ] = None , ignoreInvalidArgs : Boolean = false , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [Boolean ] =
441+ publish(Setting (category, prependName(name), descr, initialValue, aliases = aliases, preferPrevious = preferPrevious, deprecation = deprecation, ignoreInvalidArgs = ignoreInvalidArgs, deprecatedAliases = deprecatedAliases ))
440442
441- def StringSetting (category : SettingCategory , name : String , helpArg : String , descr : String , default : String , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None , depends : SettingDependencies = Nil ): Setting [String ] =
442- publish(Setting (category, prependName(name), descr, default, helpArg, aliases = aliases, deprecation = deprecation, depends = depends))
443+ def StringSetting (category : SettingCategory , name : String , helpArg : String , descr : String , default : String , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None , depends : SettingDependencies = Nil , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [String ] =
444+ publish(Setting (category, prependName(name), descr, default, helpArg, aliases = aliases, deprecation = deprecation, depends = depends, deprecatedAliases = deprecatedAliases ))
443445
444- def ChoiceSetting (category : SettingCategory , name : String , helpArg : String , descr : String , choices : List [String ], default : String , aliases : List [String ] = Nil , legacyArgs : Boolean = false , deprecation : Option [Deprecation ] = None ): Setting [String ] =
445- publish(Setting (category, prependName(name), descr, default, helpArg, Some (choices), aliases = aliases, legacyArgs = legacyArgs, deprecation = deprecation))
446+ def ChoiceSetting (category : SettingCategory , name : String , helpArg : String , descr : String , choices : List [String ], default : String , aliases : List [String ] = Nil , legacyArgs : Boolean = false , deprecation : Option [Deprecation ] = None , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [String ] =
447+ publish(Setting (category, prependName(name), descr, default, helpArg, Some (choices), aliases = aliases, legacyArgs = legacyArgs, deprecation = deprecation, deprecatedAliases = deprecatedAliases ))
446448
447- 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 ]] =
448- publish(Setting (category, prependName(name), descr, default, helpArg, Some (choices), legacyChoices = Some (legacyChoices), aliases = aliases, deprecation = deprecation))
449+ 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 , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [List [String ]] =
450+ publish(Setting (category, prependName(name), descr, default, helpArg, Some (choices), legacyChoices = Some (legacyChoices), aliases = aliases, deprecation = deprecation, deprecatedAliases = deprecatedAliases ))
449451
450- 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 ]]] =
451- publish(Setting (category, prependName(name), descr, default, helpArg, Some (choices), legacyChoices = Some (legacyChoices), aliases = aliases, deprecation = deprecation))
452+ 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 , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [List [ChoiceWithHelp [String ]]] =
453+ publish(Setting (category, prependName(name), descr, default, helpArg, Some (choices), legacyChoices = Some (legacyChoices), aliases = aliases, deprecation = deprecation, deprecatedAliases = deprecatedAliases ))
452454
453- def IntSetting (category : SettingCategory , name : String , descr : String , default : Int , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None ): Setting [Int ] =
454- publish(Setting (category, prependName(name), descr, default, aliases = aliases, deprecation = deprecation))
455+ def IntSetting (category : SettingCategory , name : String , descr : String , default : Int , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [Int ] =
456+ publish(Setting (category, prependName(name), descr, default, aliases = aliases, deprecation = deprecation, deprecatedAliases = deprecatedAliases ))
455457
456458 def IntChoiceSetting (category : SettingCategory , name : String , descr : String , choices : Seq [Int ], default : Int , deprecation : Option [Deprecation ] = None ): Setting [Int ] =
457459 publish(Setting (category, prependName(name), descr, default, choices = Some (choices), deprecation = deprecation))
458460
459- def MultiStringSetting (category : SettingCategory , name : String , helpArg : String , descr : String , default : List [String ] = Nil , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None ): Setting [List [String ]] =
460- publish(Setting (category, prependName(name), descr, default, helpArg, aliases = aliases, deprecation = deprecation))
461+ def MultiStringSetting (category : SettingCategory , name : String , helpArg : String , descr : String , default : List [String ] = Nil , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [List [String ]] =
462+ publish(Setting (category, prependName(name), descr, default, helpArg, aliases = aliases, deprecation = deprecation, deprecatedAliases = deprecatedAliases ))
461463
462- def OutputSetting (category : SettingCategory , name : String , helpArg : String , descr : String , default : AbstractFile , aliases : List [String ] = Nil , preferPrevious : Boolean = false , deprecation : Option [Deprecation ] = None ): Setting [AbstractFile ] =
463- publish(Setting (category, prependName(name), descr, default, helpArg, aliases = aliases, preferPrevious = preferPrevious, deprecation = deprecation))
464+ def OutputSetting (category : SettingCategory , name : String , helpArg : String , descr : String , default : AbstractFile , aliases : List [String ] = Nil , preferPrevious : Boolean = false , deprecation : Option [Deprecation ] = None , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [AbstractFile ] =
465+ publish(Setting (category, prependName(name), descr, default, helpArg, aliases = aliases, preferPrevious = preferPrevious, deprecation = deprecation, deprecatedAliases = deprecatedAliases ))
464466
465- def PathSetting (category : SettingCategory , name : String , descr : String , default : String , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None ): Setting [String ] =
466- publish(Setting (category, prependName(name), descr, default, aliases = aliases, deprecation = deprecation))
467+ def PathSetting (category : SettingCategory , name : String , descr : String , default : String , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [String ] =
468+ publish(Setting (category, prependName(name), descr, default, aliases = aliases, deprecation = deprecation, deprecatedAliases = deprecatedAliases ))
467469
468- def PhasesSetting (category : SettingCategory , name : String , descr : String , default : String = " " , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None , depends : SettingDependencies = Nil ): Setting [List [String ]] =
469- publish(Setting (category, prependName(name), descr, if (default.isEmpty) Nil else List (default), aliases = aliases, deprecation = deprecation, depends = depends))
470+ def PhasesSetting (category : SettingCategory , name : String , descr : String , default : String = " " , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None , depends : SettingDependencies = Nil , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [List [String ]] =
471+ publish(Setting (category, prependName(name), descr, if (default.isEmpty) Nil else List (default), aliases = aliases, deprecation = deprecation, depends = depends, deprecatedAliases = deprecatedAliases ))
470472
471473 def PrefixSetting (category : SettingCategory , name0 : String , descr : String , deprecation : Option [Deprecation ] = None ): Setting [List [String ]] =
472474 val name = prependName(name0)
@@ -476,8 +478,8 @@ object Settings:
476478 def VersionSetting (category : SettingCategory , name : String , descr : String , default : ScalaVersion = NoScalaVersion , legacyArgs : Boolean = false , deprecation : Option [Deprecation ] = None ): Setting [ScalaVersion ] =
477479 publish(Setting (category, prependName(name), descr, default, legacyArgs = legacyArgs, deprecation = deprecation))
478480
479- def OptionSetting [T : ClassTag ](category : SettingCategory , name : String , descr : String , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None ): Setting [Option [T ]] =
480- publish(Setting (category, prependName(name), descr, None , propertyClass = Some (summon[ClassTag [T ]].runtimeClass), aliases = aliases, deprecation = deprecation))
481+ def OptionSetting [T : ClassTag ](category : SettingCategory , name : String , descr : String , aliases : List [String ] = Nil , deprecation : Option [Deprecation ] = None , deprecatedAliases : List [( String , Deprecation )] = Nil ): Setting [Option [T ]] =
482+ publish(Setting (category, prependName(name), descr, None , propertyClass = Some (summon[ClassTag [T ]].runtimeClass), aliases = aliases, deprecation = deprecation, deprecatedAliases = deprecatedAliases ))
481483
482484 end SettingGroup
483485end Settings
0 commit comments