50 lines
1.2 KiB
Idris
50 lines
1.2 KiB
Idris
|
module Error
|
||
|
|
||
|
import Quox.Pretty
|
||
|
import Quox.Parser
|
||
|
import Quox.Untyped.Erase
|
||
|
import Quox.Untyped.Scheme
|
||
|
import Options
|
||
|
import Output
|
||
|
|
||
|
import System.File
|
||
|
|
||
|
|
||
|
public export
|
||
|
data Error =
|
||
|
ParseError String Parser.Error
|
||
|
| FromParserError FromParser.Error
|
||
|
| EraseError Erase.Error
|
||
|
| WriteError FilePath FileError
|
||
|
| NoMain
|
||
|
| MultipleMains (List Scheme.Id)
|
||
|
|
||
|
%hide FromParser.Error
|
||
|
%hide Erase.Error
|
||
|
%hide Lexer.Error
|
||
|
%hide Parser.Error
|
||
|
|
||
|
|
||
|
export
|
||
|
loadError : Loc -> FilePath -> FileError -> Error
|
||
|
loadError loc file err = FromParserError $ LoadError loc file err
|
||
|
|
||
|
export
|
||
|
prettyError : {opts : LayoutOpts} -> Error -> Eff Pretty (Doc opts)
|
||
|
prettyError (ParseError file e) = prettyParseError file e
|
||
|
prettyError (FromParserError e) = FromParser.prettyError True e
|
||
|
prettyError (EraseError e) = Erase.prettyError True e
|
||
|
prettyError NoMain = pure "no #[main] function given"
|
||
|
prettyError (MultipleMains xs) =
|
||
|
pure $ sep ["multiple #[main] functions given:",
|
||
|
separateLoose "," !(traverse prettyId xs)]
|
||
|
prettyError (WriteError file e) = pure $
|
||
|
hangSingle 2 (text "couldn't write file \{file}:") (pshow e)
|
||
|
|
||
|
export
|
||
|
dieError : Options -> Error -> IO a
|
||
|
dieError opts e =
|
||
|
die (Opts opts.width) $
|
||
|
runPretty ({outFile := Console} opts) Console $
|
||
|
prettyError e
|