@@ -22,7 +22,7 @@ import Idris.Primitives
2222import Idris.Coverage
2323import Idris.Docs hiding (Doc)
2424import Idris.Completion
25−import qualified Idris.IdeSlave as IdeSlave
25+import qualified Idris.IdeMode as IdeMode
2626import Idris.Chaser
2727import Idris.Imports
2828import Idris.Colours hiding (colourise)
@@ -165,7 +165,7 @@ startServer port orig fn_in = do tid <- runIO $ forkOS (serverLoop port)
165165 cmd <- hGetLine h
166166 let isth = case idris_outputmode ist of
167167 RawOutput _ -> ist {idris_outputmode = RawOutput h}
168− IdeSlave n _ -> ist {idris_outputmode = IdeSlave n h}
168+ IdeMode n _ -> ist {idris_outputmode = IdeMode n h}
169169 (ist', fn) <- processNetCmd orig isth h fn cmd
170170 hClose h
171171 loop fn ist' sock
@@ -204,7 +204,7 @@ processNetCmd orig i h fn cmd
204204 do ist <- getIState
205205 putIState $ case idris_outputmode ist of
206206 RawOutput _ -> ist {idris_outputmode = RawOutput h}
207− IdeSlave n _ -> ist {idris_outputmode = IdeSlave n h}
207+ IdeMode n _ -> ist {idris_outputmode = IdeMode n h}
208208
209209-- | Run a command on the server on localhost
210210runClient :: PortID -> String -> IO ()
@@ -232,25 +232,25 @@ runClient port str = withSocketsDo $ do
232232 putStrLn "Unable to connect to a running Idris repl"
233233
234234
235−initIdeslaveSocket :: IO Handle
236−initIdeslaveSocket = do
235+initIdemodeSocket :: IO Handle
236+initIdemodeSocket = do
237237 (sock, port) <- listenOnLocalhostAnyPort
238238 putStrLn $ show port
239239 (h, _, _) <- accept sock
240240 hSetEncoding h utf8
241241 return h
242242
243−-- | Run the IdeSlave
243+-- | Run the IdeMode
244244ideslaveStart :: Bool -> IState -> [FilePath] -> Idris ()
245245ideslaveStart s orig mods
246− = do h <- runIO $ if s then initIdeslaveSocket else return stdout
247− setIdeSlave True h
246+ = do h <- runIO $ if s then initIdemodeSocket else return stdout
247+ setIdeMode True h
248248 i <- getIState
249249 case idris_outputmode i of
250− IdeSlave n h ->
251− do runIO $ hPutStrLn h $ IdeSlave.convSExp "protocol-version" IdeSlave.ideSlaveEpoch n
250+ IdeMode n h ->
251+ do runIO $ hPutStrLn h $ IdeMode.convSExp "protocol-version" IdeMode.ideModeEpoch n
252252 case mods of
253− a:_ -> runIdeSlaveCommand h n i "" [] (IdeSlave.LoadFile a Nothing)
253+ a:_ -> runIdeModeCommand h n i "" [] (IdeMode.LoadFile a Nothing)
254254 _ -> return ()
255255 ideslave h orig mods
256256
@@ -258,36 +258,36 @@ ideslave :: Handle -> IState -> [FilePath] -> Idris ()
258258ideslave h orig mods
259259 = do idrisCatch
260260 (do let inh = if h == stdout then stdin else h
261− len' <- runIO $ IdeSlave.getLen inh
261+ len' <- runIO $ IdeMode.getLen inh
262262 len <- case len' of
263263 Left err -> ierror err
264264 Right n -> return n
265− l <- runIO $ IdeSlave.getNChar inh len ""
266− (sexp, id) <- case IdeSlave.parseMessage l of
265+ l <- runIO $ IdeMode.getNChar inh len ""
266+ (sexp, id) <- case IdeMode.parseMessage l of
267267 Left err -> ierror err
268268 Right (sexp, id) -> return (sexp, id)
269269 i <- getIState
270− putIState $ i { idris_outputmode = (IdeSlave id h) }
270+ putIState $ i { idris_outputmode = (IdeMode id h) }
271271 idrisCatch -- to report correct id back!
272272 (do let fn = case mods of
273273 (f:_) -> f
274274 _ -> ""
275− case IdeSlave.sexpToCommand sexp of
276− Just cmd -> runIdeSlaveCommand h id orig fn mods cmd
275+ case IdeMode.sexpToCommand sexp of
276+ Just cmd -> runIdeModeCommand h id orig fn mods cmd
277277 Nothing -> iPrintError "did not understand" )
278278 (\e -> do iPrintError $ show e))
279279 (\e -> do iPrintError $ show e)
280280 ideslave h orig mods
281281
282−-- | Run IDESlave commands
283−runIdeSlaveCommand :: Handle -- ^^ The handle for communication
282+-- | Run IDEMode commands
283+runIdeModeCommand :: Handle -- ^^ The handle for communication
284284 -> Integer -- ^^ The continuation ID for the client
285285 -> IState -- ^^ The original IState
286286 -> FilePath -- ^^ The current open file
287287 -> [FilePath] -- ^^ The currently loaded modules
288− -> IdeSlave.IdeSlaveCommand -- ^^ The command to process
288+ -> IdeMode.IdeModeCommand -- ^^ The command to process
289289 -> Idris ()
290−runIdeSlaveCommand h id orig fn mods (IdeSlave.Interpret cmd) =
290+runIdeModeCommand h id orig fn mods (IdeMode.Interpret cmd) =
291291 do c <- colourise
292292 i <- getIState
293293 case parseCmd i "(input)" cmd of
@@ -297,96 +297,96 @@ runIdeSlaveCommand h id orig fn mods (IdeSlave.Interpret cmd) =
297297 (do process fn (Prove n')
298298 isetPrompt (mkPrompt mods)
299299 case idris_outputmode i of
300− IdeSlave n h -> -- signal completion of proof to ide
300+ IdeMode n h -> -- signal completion of proof to ide
301301 runIO . hPutStrLn h $
302− IdeSlave.convSExp "return"
303− (IdeSlave.SymbolAtom "ok", "")
302+ IdeMode.convSExp "return"
303+ (IdeMode.SymbolAtom "ok", "")
304304 n
305305 _ -> return ())
306306 (\e -> do ist <- getIState
307307 isetPrompt (mkPrompt mods)
308308 case idris_outputmode i of
309− IdeSlave n h ->
309+ IdeMode n h ->
310310 runIO . hPutStrLn h $
311− IdeSlave.convSExp "abandon-proof" "Abandoned" n
311+ IdeMode.convSExp "abandon-proof" "Abandoned" n
312312 _ -> return ()
313313 iRenderError $ pprintErr ist e)
314314 Success (Right cmd) -> idrisCatch
315315 (ideslaveProcess fn cmd)
316316 (\e -> getIState >>= iRenderError . flip pprintErr e)
317317 Success (Left err) -> iPrintError err
318−runIdeSlaveCommand h id orig fn mods (IdeSlave.REPLCompletions str) =
318+runIdeModeCommand h id orig fn mods (IdeMode.REPLCompletions str) =
319319 do (unused, compls) <- replCompletion (reverse str, "")
320− let good = IdeSlave.SexpList [IdeSlave.SymbolAtom "ok",
321− IdeSlave.toSExp (map replacement compls,
320+ let good = IdeMode.SexpList [IdeMode.SymbolAtom "ok",
321+ IdeMode.toSExp (map replacement compls,
322322 reverse unused)]
323− runIO . hPutStrLn h $ IdeSlave.convSExp "return" good id
324−runIdeSlaveCommand h id orig fn mods (IdeSlave.LoadFile filename toline) =
323+ runIO . hPutStrLn h $ IdeMode.convSExp "return" good id
324+runIdeModeCommand h id orig fn mods (IdeMode.LoadFile filename toline) =
325325 do i <- getIState
326326 clearErr
327327 putIState (orig { idris_options = idris_options i,
328− idris_outputmode = (IdeSlave id h) })
328+ idris_outputmode = (IdeMode id h) })
329329 mods <- loadInputs [filename] toline
330330 isetPrompt (mkPrompt mods)
331331 -- Report either success or failure
332332 i <- getIState
333333 case (errSpan i) of
334− Nothing -> let msg = maybe (IdeSlave.SexpList [IdeSlave.SymbolAtom "ok",
335− IdeSlave.SexpList []])
336− (\fc -> IdeSlave.SexpList [IdeSlave.SymbolAtom "ok",
337− IdeSlave.toSExp fc])
334+ Nothing -> let msg = maybe (IdeMode.SexpList [IdeMode.SymbolAtom "ok",
335+ IdeMode.SexpList []])
336+ (\fc -> IdeMode.SexpList [IdeMode.SymbolAtom "ok",
337+ IdeMode.toSExp fc])
338338 (idris_parsedSpan i)
339− in runIO . hPutStrLn h $ IdeSlave.convSExp "return" msg id
339+ in runIO . hPutStrLn h $ IdeMode.convSExp "return" msg id
340340 Just x -> iPrintError $ "didn't load " ++ filename
341341 ideslave h orig mods
342−runIdeSlaveCommand h id orig fn mods (IdeSlave.TypeOf name) =
342+runIdeModeCommand h id orig fn mods (IdeMode.TypeOf name) =
343343 case splitName name of
344344 Left err -> iPrintError err
345345 Right n -> process "(ideslave)"
346346 (Check (PRef (FC "(ideslave)" (0,0) (0,0)) n))
347−runIdeSlaveCommand h id orig fn mods (IdeSlave.DocsFor name) =
347+runIdeModeCommand h id orig fn mods (IdeMode.DocsFor name) =
348348 case parseConst orig name of
349349 Success c -> process "(ideslave)" (DocStr (Right c))
350350 Failure _ ->
351351 case splitName name of
352352 Left err -> iPrintError err
353353 Right n -> process "(ideslave)" (DocStr (Left n))
354−runIdeSlaveCommand h id orig fn mods (IdeSlave.CaseSplit line name) =
354+runIdeModeCommand h id orig fn mods (IdeMode.CaseSplit line name) =
355355 process fn (CaseSplitAt False line (sUN name))
356−runIdeSlaveCommand h id orig fn mods (IdeSlave.AddClause line name) =
356+runIdeModeCommand h id orig fn mods (IdeMode.AddClause line name) =
357357 process fn (AddClauseFrom False line (sUN name))
358−runIdeSlaveCommand h id orig fn mods (IdeSlave.AddProofClause line name) =
358+runIdeModeCommand h id orig fn mods (IdeMode.AddProofClause line name) =
359359 process fn (AddProofClauseFrom False line (sUN name))
360−runIdeSlaveCommand h id orig fn mods (IdeSlave.AddMissing line name) =
360+runIdeModeCommand h id orig fn mods (IdeMode.AddMissing line name) =
361361 process fn (AddMissing False line (sUN name))
362−runIdeSlaveCommand h id orig fn mods (IdeSlave.MakeWithBlock line name) =
362+runIdeModeCommand h id orig fn mods (IdeMode.MakeWithBlock line name) =
363363 process fn (MakeWith False line (sUN name))
364−runIdeSlaveCommand h id orig fn mods (IdeSlave.ProofSearch r line name hints depth) =
364+runIdeModeCommand h id orig fn mods (IdeMode.ProofSearch r line name hints depth) =
365365 doProofSearch fn False r line (sUN name) (map sUN hints) depth
366−runIdeSlaveCommand h id orig fn mods (IdeSlave.MakeLemma line name) =
366+runIdeModeCommand h id orig fn mods (IdeMode.MakeLemma line name) =
367367 case splitName name of
368368 Left err -> iPrintError err
369369 Right n -> process fn (MakeLemma False line n)
370−runIdeSlaveCommand h id orig fn mods (IdeSlave.Apropos a) =
370+runIdeModeCommand h id orig fn mods (IdeMode.Apropos a) =
371371 process fn (Apropos [] a)
372−runIdeSlaveCommand h id orig fn mods (IdeSlave.GetOpts) =
372+runIdeModeCommand h id orig fn mods (IdeMode.GetOpts) =
373373 do ist <- getIState
374374 let opts = idris_options ist
375375 let impshow = opt_showimp opts
376376 let errCtxt = opt_errContext opts
377− let options = (IdeSlave.SymbolAtom "ok",
378− [(IdeSlave.SymbolAtom "show-implicits", impshow),
379− (IdeSlave.SymbolAtom "error-context", errCtxt)])
380− runIO . hPutStrLn h $ IdeSlave.convSExp "return" options id
381−runIdeSlaveCommand h id orig fn mods (IdeSlave.SetOpt IdeSlave.ShowImpl b) =
377+ let options = (IdeMode.SymbolAtom "ok",
378+ [(IdeMode.SymbolAtom "show-implicits", impshow),
379+ (IdeMode.SymbolAtom "error-context", errCtxt)])
380+ runIO . hPutStrLn h $ IdeMode.convSExp "return" options id
381+runIdeModeCommand h id orig fn mods (IdeMode.SetOpt IdeMode.ShowImpl b) =
382382 do setImpShow b
383− let msg = (IdeSlave.SymbolAtom "ok", b)
384− runIO . hPutStrLn h $ IdeSlave.convSExp "return" msg id
385−runIdeSlaveCommand h id orig fn mods (IdeSlave.SetOpt IdeSlave.ErrContext b) =
383+ let msg = (IdeMode.SymbolAtom "ok", b)
384+ runIO . hPutStrLn h $ IdeMode.convSExp "return" msg id
385+runIdeModeCommand h id orig fn mods (IdeMode.SetOpt IdeMode.ErrContext b) =
386386 do setErrContext b
387− let msg = (IdeSlave.SymbolAtom "ok", b)
388− runIO . hPutStrLn h $ IdeSlave.convSExp "return" msg id
389−runIdeSlaveCommand h id orig fn mods (IdeSlave.Metavariables cols) =
387+ let msg = (IdeMode.SymbolAtom "ok", b)
388+ runIO . hPutStrLn h $ IdeMode.convSExp "return" msg id
389+runIdeModeCommand h id orig fn mods (IdeMode.Metavariables cols) =
390390 do ist <- getIState
391391 let mvs = reverse $ map fst (idris_metavars ist) \\ primDefs
392392 let ppo = ppOptionIst ist
@@ -403,7 +403,7 @@ runIdeSlaveCommand h id orig fn mods (IdeSlave.Metavariables cols) =
403403 render ist bnd c pc))
404404 splitMvs
405405 runIO . hPutStrLn h $
406− IdeSlave.convSExp "return" (IdeSlave.SymbolAtom "ok", mvOutput) id
406+ IdeMode.convSExp "return" (IdeMode.SymbolAtom "ok", mvOutput) id
407407 where mapPair f g xs = zip (map (f . fst) xs) (map (g . snd) xs)
408408 mapSnd f xs = zip (map fst xs) (map (f . snd) xs)
409409
@@ -447,32 +447,32 @@ runIdeSlaveCommand h id orig fn mods (IdeSlave.Metavariables cols) =
447447 let (out, spans) = render ist bnd t pt in
448448 (show n , out, spans)
449449
450−runIdeSlaveCommand h id orig fn mods (IdeSlave.WhoCalls n) =
450+runIdeModeCommand h id orig fn mods (IdeMode.WhoCalls n) =
451451 case splitName n of
452452 Left err -> iPrintError err
453453 Right n -> do calls <- whoCalls n
454454 ist <- getIState
455− let msg = (IdeSlave.SymbolAtom "ok",
455+ let msg = (IdeMode.SymbolAtom "ok",
456456 map (\ (n,ns) -> (pn ist n, map (pn ist) ns)) calls)
457− runIO . hPutStrLn h $ IdeSlave.convSExp "return" msg id
457+ runIO . hPutStrLn h $ IdeMode.convSExp "return" msg id
458458 where pn ist = displaySpans .
459459 renderPretty 0.9 1000 .
460460 fmap (fancifyAnnots ist) .
461461 prettyName True True []
462−runIdeSlaveCommand h id orig fn mods (IdeSlave.CallsWho n) =
462+runIdeModeCommand h id orig fn mods (IdeMode.CallsWho n) =
463463 case splitName n of
464464 Left err -> iPrintError err
465465 Right n -> do calls <- callsWho n
466466 ist <- getIState
467− let msg = (IdeSlave.SymbolAtom "ok",
467+ let msg = (IdeMode.SymbolAtom "ok",
468468 map (\ (n,ns) -> (pn ist n, map (pn ist) ns)) calls)
469− runIO . hPutStrLn h $ IdeSlave.convSExp "return" msg id
469+ runIO . hPutStrLn h $ IdeMode.convSExp "return" msg id
470470 where pn ist = displaySpans .
471471 renderPretty 0.9 1000 .
472472 fmap (fancifyAnnots ist) .
473473 prettyName True True []
474474
475−runIdeSlaveCommand h id orig fn modes (IdeSlave.TermNormalise bnd tm) =
475+runIdeModeCommand h id orig fn modes (IdeMode.TermNormalise bnd tm) =
476476 do ctxt <- getContext
477477 ist <- getIState
478478 let tm' = force (normaliseAll ctxt [] tm)
@@ -482,46 +482,46 @@ runIdeSlaveCommand h id orig fn modes (IdeSlave.TermNormalise bnd tm) =
482482 []
483483 (idris_infixes ist)
484484 (delab ist tm'))
485− msg = (IdeSlave.SymbolAtom "ok",
485+ msg = (IdeMode.SymbolAtom "ok",
486486 displaySpans .
487487 renderPretty 0.9 80 .
488488 fmap (fancifyAnnots ist) $ ptm)
489− runIO . hPutStrLn h $ IdeSlave.convSExp "return" msg id
490−runIdeSlaveCommand h id orig fn modes (IdeSlave.TermShowImplicits bnd tm) =
491− ideSlaveForceTermImplicits h id bnd True tm
492−runIdeSlaveCommand h id orig fn modes (IdeSlave.TermNoImplicits bnd tm) =
493− ideSlaveForceTermImplicits h id bnd False tm
494−runIdeSlaveCommand h id orig fn mods (IdeSlave.PrintDef name) =
489+ runIO . hPutStrLn h $ IdeMode.convSExp "return" msg id
490+runIdeModeCommand h id orig fn modes (IdeMode.TermShowImplicits bnd tm) =
491+ ideModeForceTermImplicits h id bnd True tm
492+runIdeModeCommand h id orig fn modes (IdeMode.TermNoImplicits bnd tm) =
493+ ideModeForceTermImplicits h id bnd False tm
494+runIdeModeCommand h id orig fn mods (IdeMode.PrintDef name) =
495495 case splitName name of
496496 Left err -> iPrintError err
497497 Right n -> process "(ideslave)" (PrintDef n)
498−runIdeSlaveCommand h id orig fn modes (IdeSlave.ErrString e) =
498+runIdeModeCommand h id orig fn modes (IdeMode.ErrString e) =
499499 do ist <- getIState
500500 let out = displayS . renderPretty 1.0 60 $ pprintErr ist e
501− msg = (IdeSlave.SymbolAtom "ok", IdeSlave.StringAtom $ out "")
502− runIO . hPutStrLn h $ IdeSlave.convSExp "return" msg id
503−runIdeSlaveCommand h id orig fn modes (IdeSlave.ErrPPrint e) =
501+ msg = (IdeMode.SymbolAtom "ok", IdeMode.StringAtom $ out "")
502+ runIO . hPutStrLn h $ IdeMode.convSExp "return" msg id
503+runIdeModeCommand h id orig fn modes (IdeMode.ErrPPrint e) =
504504 do ist <- getIState
505505 let (out, spans) =
506506 displaySpans .
507507 renderPretty 0.9 80 .
508508 fmap (fancifyAnnots ist) $ pprintErr ist e
509− msg = (IdeSlave.SymbolAtom "ok", out, spans)
510− runIO . hPutStrLn h $ IdeSlave.convSExp "return" msg id
509+ msg = (IdeMode.SymbolAtom "ok", out, spans)
510+ runIO . hPutStrLn h $ IdeMode.convSExp "return" msg id
511511
512−-- | Show a term for IDESlave with the specified implicitness
513−ideSlaveForceTermImplicits :: Handle -> Integer -> [(Name, Bool)] -> Bool -> Term -> Idris ()
514−ideSlaveForceTermImplicits h id bnd impl tm =
512+-- | Show a term for IDEMode with the specified implicitness
513+ideModeForceTermImplicits :: Handle -> Integer -> [(Name, Bool)] -> Bool -> Term -> Idris ()
514+ideModeForceTermImplicits h id bnd impl tm =
515515 do ist <- getIState
516516 let expl = annotate (AnnTerm bnd tm)
517517 (pprintPTerm ((ppOptionIst ist) { ppopt_impl = impl })
518518 bnd [] (idris_infixes ist)
519519 (delab ist tm))
520− msg = (IdeSlave.SymbolAtom "ok",
520+ msg = (IdeMode.SymbolAtom "ok",
521521 displaySpans .
522522 renderPretty 0.9 80 .
523523 fmap (fancifyAnnots ist) $ expl)
524− runIO . hPutStrLn h $ IdeSlave.convSExp "return" msg id
524+ runIO . hPutStrLn h $ IdeMode.convSExp "return" msg id
525525
526526splitName :: String -> Either String Name
527527splitName s = case reverse $ splitOn "." s of
@@ -537,6 +537,7 @@ ideslaveProcess fn Warranty = process fn Warranty
537537ideslaveProcess fn Help = process fn Help
538538ideslaveProcess fn (ChangeDirectory f) = do process fn (ChangeDirectory f)
539539 iPrintResult "changed directory to"
540+ideslaveProcess fn (ModImport f) = process fn (ModImport f)
540541ideslaveProcess fn (Eval t) = process fn (Eval t)
541542ideslaveProcess fn (NewDefn decls) = do process fn (NewDefn decls)
542543 iPrintResult "defined"
@@ -722,6 +723,10 @@ process fn Warranty = iPrintResult warranty
722723process fn (ChangeDirectory f)
723724 = do runIO $ setCurrentDirectory f
724725 return ()
726+process fn (ModImport f) = do fmod <- loadModule f
727+ case fmod of
728+ Just pr -> isetPrompt pr
729+ Nothing -> iPrintError $ "Can't find import " ++ f
725730process fn (Eval t)
726731 = withErrorReflection $ do logLvl 5 $ show t
727732 getIState >>= flip warnDisamb t
@@ -1096,8 +1101,8 @@ process fn Execute
10961101 case idris_outputmode ist of
10971102 RawOutput h -> do runIO $ rawSystem tmpn []
10981103 return ()
1099− IdeSlave n h -> runIO . hPutStrLn h $
1100− IdeSlave.convSExp "run-program" tmpn n)
1104+ IdeMode n h -> runIO . hPutStrLn h $
1105+ IdeMode.convSExp "run-program" tmpn n)
11011106 (\e -> getIState >>= iRenderError . flip pprintErr e)
11021107 where fc = fileFC "main"
11031108process fn (Compile codegen f)
@@ -1482,7 +1487,7 @@ idrisMain opts =
14821487 do let inputs = opt getFile opts
14831488 let quiet = Quiet `elem` opts
14841489 let nobanner = NoBanner `elem` opts
1485− let idesl = Ideslave `elem` opts || IdeslaveSocket `elem` opts
1490+ let idesl = Idemode `elem` opts || IdemodeSocket `elem` opts
14861491 let runrepl = not (NoREPL `elem` opts)
14871492 let verbose = runrepl || Verbose `elem` opts
14881493 let output = opt getOutput opts
@@ -1607,7 +1612,7 @@ idrisMain opts =
16071612-- clearOrigPats
16081613 startServer port orig mods
16091614 runInputT (replSettings (Just historyFile)) $ repl orig mods efile
1610− let idesock = IdeslaveSocket `elem` opts
1615+ let idesock = IdemodeSocket `elem` opts
16111616 when (idesl) $ ideslaveStart idesock orig inputs
16121617 ok <- noErrors
16131618 when (not ok) $ runIO (exitWith (ExitFailure 1))