@@ -44,10 +44,14 @@ object Settings {
44
44
case class ArgsSummary (
45
45
sstate : SettingsState ,
46
46
arguments : List [String ],
47
- errors : List [String ]) {
47
+ errors : List [String ],
48
+ warnings : List [String ]) {
48
49
49
50
def fail (msg : String ) =
50
- ArgsSummary (sstate, arguments, errors :+ msg)
51
+ ArgsSummary (sstate, arguments.tail, errors :+ msg, warnings)
52
+
53
+ def warn (msg : String ) =
54
+ ArgsSummary (sstate, arguments.tail, errors, warnings :+ msg)
51
55
}
52
56
53
57
case class Setting [T : ClassTag ] private [Settings ] (
@@ -106,11 +110,11 @@ object Settings {
106
110
}
107
111
108
112
def tryToSet (state : ArgsSummary ): ArgsSummary = {
109
- val ArgsSummary (sstate, arg :: args, errors) = state
113
+ val ArgsSummary (sstate, arg :: args, errors, warnings ) = state
110
114
def update (value : Any , args : List [String ]) =
111
- ArgsSummary (updateIn(sstate, value), args, errors)
115
+ ArgsSummary (updateIn(sstate, value), args, errors, warnings )
112
116
def fail (msg : String , args : List [String ]) =
113
- ArgsSummary (sstate, args, errors :+ msg)
117
+ ArgsSummary (sstate, args, errors :+ msg, warnings )
114
118
def missingArg =
115
119
fail(s " missing argument for option $name" , args)
116
120
def doSet (argRest : String ) = ((implicitly[ClassTag [T ]], args): @ unchecked) match {
@@ -206,7 +210,7 @@ object Settings {
206
210
* to get their arguments.
207
211
*/
208
212
protected def processArguments (state : ArgsSummary , processAll : Boolean , skipped : List [String ]): ArgsSummary = {
209
- def stateWithArgs (args : List [String ]) = ArgsSummary (state.sstate, args, state.errors)
213
+ def stateWithArgs (args : List [String ]) = ArgsSummary (state.sstate, args, state.errors, state.warnings )
210
214
state.arguments match {
211
215
case Nil =>
212
216
checkDependencies(stateWithArgs(skipped))
@@ -219,7 +223,7 @@ object Settings {
219
223
if (state1 ne state) processArguments(state1, processAll, skipped)
220
224
else loop(settings1)
221
225
case Nil =>
222
- state.fail (s " bad option: ' $x' " )
226
+ processArguments( state.warn (s " bad option ' $x' was ignored " ), processAll, skipped )
223
227
}
224
228
loop(allSettings.toList)
225
229
case arg :: args =>
@@ -229,7 +233,7 @@ object Settings {
229
233
}
230
234
231
235
def processArguments (arguments : List [String ], processAll : Boolean )(implicit ctx : Context ): ArgsSummary =
232
- processArguments(ArgsSummary (ctx.sstate, arguments, Nil ), processAll, Nil )
236
+ processArguments(ArgsSummary (ctx.sstate, arguments, Nil , Nil ), processAll, Nil )
233
237
234
238
def publish [T ](settingf : Int => Setting [T ]): Setting [T ] = {
235
239
val setting = settingf(_allSettings.length)
0 commit comments