@@ -1,5 +1,5 @@
11
2−module Idris.REPLParser (parseCmd, help, allHelp) where
2+module Idris.REPLParser (parseCmd, help, allHelp, setOptions) where
33
44import System.FilePath ((</>))
55import System.Console.ANSI (Color(..))
@@ -32,6 +32,16 @@ parseCmd i inputname = P.runparser pCmd i inputname . trim
3232type CommandTable = [ ( [String], CmdArg, String
3333 , String -> P.IdrisParser (Either String Command) ) ]
3434
35+setOptions :: [(String, Opt)]
36+setOptions = [("errorcontext", ErrContext),
37+ ("showimplicits", ShowImpl),
38+ ("originalerrors", ShowOrigErr),
39+ ("autosolve", AutoSolve),
40+ ("nobanner", NoBanner),
41+ ("warnreach", WarnReach),
42+ ("evaltypes", EvalTypes),
43+ ("desugarnats", DesugarNats)]
44+
3545help :: [([String], CmdArg, String)]
3646help = (["<expr>"], NoArg, "Evaluate an expression") :
3747 [ (map (':' :) names, args, text) | (names, args, text, _) <- parserCommandsForHelp ]
@@ -80,7 +90,7 @@ parserCommandsForHelp =
8090 , (["dynamic"], FileArg, "Dynamically load a C library (similar to %dynamic)", cmd_dynamic)
8191 , (["dynamic"], NoArg, "List dynamically loaded C libraries", cmd_dynamic)
8292 , noArgCmd ["?", "h", "help"] Help "Display this help text"
83− , optArgCmd ["set"] SetOpt "Set an option (errorcontext, showimplicits)"
93+ , optArgCmd ["set"] SetOpt $ "Set an option (" ++ optionsList ++ ")"
8494 , optArgCmd ["unset"] UnsetOpt "Unset an option"
8595 , (["color", "colour"], ColourArg
8696 , "Turn REPL colours on or off; set a specific colour"
@@ -100,6 +110,7 @@ parserCommandsForHelp =
100110 , "Pretty prints an Idris function in either LaTeX or HTML and for a specified width."
101111 , cmd_pprint)
102112 ]
113+ where optionsList = intercalate ", " $ map fst setOptions
103114
104115parserCommands =
105116 [ noArgCmd ["u", "universes"] Universes "Display universe constraints"
@@ -253,14 +264,7 @@ optArg cmd name = do
253264
254265 where
255266 pOption :: P.IdrisParser Opt
256− pOption = do discard (P.symbol "errorcontext"); return ErrContext
257− <|> do discard (P.symbol "showimplicits"); return ShowImpl
258− <|> do discard (P.symbol "originalerrors"); return ShowOrigErr
259− <|> do discard (P.symbol "autosolve"); return AutoSolve
260− <|> do discard (P.symbol "nobanner") ; return NoBanner
261− <|> do discard (P.symbol "warnreach"); return WarnReach
262− <|> do discard (P.symbol "evaltypes"); return EvalTypes
263− <|> do discard (P.symbol "desugarnats"); return DesugarNats
267+ pOption = foldl (<|>) empty $ map (\(a, b) -> do discard (P.symbol a); return b) setOptions
264268
265269proofArg :: (Bool -> Int -> Name -> Command) -> String -> P.IdrisParser (Either String Command)
266270proofArg cmd name = do