RequireOrder: do not collect unrecognised options after a non-opt
authorSimon Marlow <simonmar@microsoft.com>
Wed, 26 Apr 2006 12:11:10 +0000 (12:11 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Wed, 26 Apr 2006 12:11:10 +0000 (12:11 +0000)
The documentation for RequireOrder says "no option processing after
first non-option", so it doesn't seem right that we should process the
rest of the arguments to collect the unrecognised ones.  Presumably
the client wants to know about the unrecognised options up to the
first non-option, and will be using a different option parser for the
rest of the command line.

eg. before:

Prelude System.Console.GetOpt> getOpt' RequireOrder [] ["bar","--foo"]
([],["bar","--foo"],["--foo"],[])

after:

Prelude System.Console.GetOpt> getOpt' RequireOrder [] ["bar","--foo"]
([],["bar","--foo"],[],[])

System/Console/GetOpt.hs

index fa9f9b2..c1463c0 100644 (file)
@@ -161,7 +161,7 @@ getOpt' _        _        []         =  ([],[],[],[])
 getOpt' ordering optDescr (arg:args) = procNextOpt opt ordering
    where procNextOpt (Opt o)      _                 = (o:os,xs,us,es)
          procNextOpt (UnreqOpt u) _                 = (os,xs,u:us,es)
-         procNextOpt (NonOpt x)   RequireOrder      = ([],x:rest,us,[])
+         procNextOpt (NonOpt x)   RequireOrder      = ([],x:rest,[],[])
          procNextOpt (NonOpt x)   Permute           = (os,x:xs,us,es)
          procNextOpt (NonOpt x)   (ReturnInOrder f) = (f x :os, xs,us,es)
          procNextOpt EndOfOpts    RequireOrder      = ([],rest,[],[])