0 | module Idris.REPL.Opts
2 | import Compiler.Common
7 | import Libraries.Data.List.Extra
8 | import Libraries.Data.Tap
14 | namespace VerbosityLvl
26 | = IDEMode Integer File File |
34 | record REPLOpts where
35 | constructor MkREPLOpts
39 | mainfile : Maybe String
40 | literateStyle : Maybe LiterateStyle
43 | errorLine : Maybe Int
44 | idemode : OutputMode
45 | currentElabSource : String
46 | psResult : Maybe (Name, Core (Search RawImp))
47 | gdResult : Maybe (Int, Core (Search (FC, List ImpClause)))
48 | evalResultName : Maybe Name
51 | extraCodegens : List (String, Codegen)
52 | consoleWidth : Maybe Nat
54 | synHighlightOn : Bool
56 | litStyle : Maybe String -> Maybe LiterateStyle
57 | litStyle = join . map isLitFile
61 | defaultOpts : Maybe String -> OutputMode -> List (String, Codegen) -> REPLOpts
62 | defaultOpts fname outmode cgs
65 | , evalMode = NormaliseAll
66 | , evalTiming = False
68 | , literateStyle = litStyle fname
71 | , errorLine = Nothing
73 | , currentElabSource = ""
74 | , psResult = Nothing
75 | , gdResult = Nothing
76 | , evalResultName = Nothing
77 | , extraCodegens = cgs
78 | , consoleWidth = Nothing
80 | , synHighlightOn = True
83 | litStyle : Maybe String -> Maybe LiterateStyle
84 | litStyle Nothing = Nothing
85 | litStyle (Just fn) = isLitFile fn
88 | data ROpts : Type where
91 | withROpts : {auto o : Ref ROpts REPLOpts} -> Core a -> Core a
92 | withROpts = wrapRef ROpts (\_ => pure ())
95 | setOutput : {auto o : Ref ROpts REPLOpts} ->
96 | OutputMode -> Core ()
97 | setOutput m = update ROpts { idemode := m }
100 | getOutput : {auto o : Ref ROpts REPLOpts} -> Core OutputMode
101 | getOutput = idemode <$> get ROpts
104 | setMainFile : {auto o : Ref ROpts REPLOpts} ->
105 | Maybe String -> Core ()
106 | setMainFile src = update ROpts { mainfile := src,
107 | literateStyle := litStyle src }
111 | resetProofState : {auto o : Ref ROpts REPLOpts} -> Core ()
112 | resetProofState = update ROpts { psResult := Nothing,
113 | gdResult := Nothing }
116 | setSource : {auto o : Ref ROpts REPLOpts} ->
118 | setSource src = update ROpts { source := src }
121 | getSource : {auto o : Ref ROpts REPLOpts} ->
123 | getSource = source <$> get ROpts
126 | getSourceLine : {auto o : Ref ROpts REPLOpts} ->
127 | Int -> Core (Maybe String)
129 | = do src <- getSource
130 | pure $
elemAt (lines src) (integerToNat (cast (l-1)))
133 | getLitStyle : {auto o : Ref ROpts REPLOpts} ->
134 | Core (Maybe LiterateStyle)
135 | getLitStyle = literateStyle <$> get ROpts
138 | setCurrentElabSource : {auto o : Ref ROpts REPLOpts} ->
140 | setCurrentElabSource src = update ROpts { currentElabSource := src }
143 | getCurrentElabSource : {auto o : Ref ROpts REPLOpts} ->
145 | getCurrentElabSource = currentElabSource <$> get ROpts
147 | addCodegen : {auto o : Ref ROpts REPLOpts} ->
148 | String -> Codegen -> Core ()
149 | addCodegen s cg = update ROpts { extraCodegens $= ((s,cg)::) }
152 | getCodegen : {auto o : Ref ROpts REPLOpts} ->
153 | String -> Core (Maybe Codegen)
154 | getCodegen s = lookup s . extraCodegens <$> get ROpts
157 | getConsoleWidth : {auto o : Ref ROpts REPLOpts} -> Core (Maybe Nat)
158 | getConsoleWidth = consoleWidth <$> get ROpts
161 | setConsoleWidth : {auto o : Ref ROpts REPLOpts} -> Maybe Nat -> Core ()
162 | setConsoleWidth n = update ROpts { consoleWidth := n }
165 | getColor : {auto o : Ref ROpts REPLOpts} -> Core Bool
166 | getColor = color <$> get ROpts
169 | setColor : {auto o : Ref ROpts REPLOpts} -> Bool -> Core ()
170 | setColor b = update ROpts { color := b }
173 | getSynHighlightOn : {auto o : Ref ROpts REPLOpts} -> Core Bool
174 | getSynHighlightOn = synHighlightOn <$> get ROpts
177 | setSynHighlightOn : {auto o : Ref ROpts REPLOpts} -> Bool -> Core ()
178 | setSynHighlightOn b = update ROpts { synHighlightOn := b }
181 | getEvalTiming : {auto o : Ref ROpts REPLOpts} -> Core Bool
182 | getEvalTiming = evalTiming <$> get ROpts
185 | setEvalTiming : {auto o : Ref ROpts REPLOpts} -> Bool -> Core ()
186 | setEvalTiming b = update ROpts { evalTiming := b }