3Description : Compiler options for Idris.
6Maintainer : The Idris Community.
8{-# LANGUAGE DeriveDataTypeable, DeriveFunctor, DeriveGeneric, PatternGuards #-}
10module Idris.Options (Codegen(..), ConsoleWidth(..), HowMuchDocs(..), IRFormat(..),
11 LanguageExt(..), LogCat(..), Opt(..), Optimisation(..),
12 OutputFmt(..), REPLPort(..), codegenCats, elabCats, getBC,
13 getClient, getCodegen, getCodegenArgs, getColour, getConsoleWidth,
14 getEvalExpr, getExecScript, getFile, getIBCSubDir, getImportDir,
15 getLanguageExt, getOptLevel, getOptimisation, getOutput,
16 getOutputTy, getPkg, getPkgCheck, getPkgClean, getPkgDir,
17 getPkgIndex, getPkgMkDoc, getPkgREPL, getPkgTest, getPort,
18 getSourceDir, loggingCatsStr, opt, parserCats, strLogCat) where
21import GHC.Generics (Generic)
22import IRTS.CodegenCommon (OutputType)
23import Network.Socket (PortNumber)
25data Opt = Filename String
42 | NoBuiltins -- only for the really primitive stuff!
60 | Port REPLPort -- ^ REPL TCP port
69 | PkgDocBuild String -- IdrisDoc
70 | PkgDocInstall String
81 | Extension LanguageExt
82 | InterpretScript String
88 | RemoveOpt Optimisation
91 | AutoWidth -- ^ Automatically adjust terminal width
92 | AutoSolve -- ^ Automatically issue "solve" tactic in old-style interactive prover
93 | UseConsoleWidth ConsoleWidth
96 | NoOldTacticDeprecationWarnings -- ^ Don't show deprecation warnings for old-style tactics
97 | AllowCapitalizedPatternVariables -- ^ Allow pattern variables to be capitalized
98 deriving (Show, Eq, Generic)
101data REPLPort = DontListen | ListenPort PortNumber
102 deriving (Eq, Generic, Show)
105data Codegen = Via IRFormat String
107 deriving (Show, Eq, Generic)
110data LanguageExt = TypeProviders | ErrorReflection | UniquenessTypes
111 | DSLNotation | ElabReflection | FCReflection
113 deriving (Show, Eq, Read, Ord, Generic)
115data IRFormat = IBCFormat | JSONFormat deriving (Show, Eq, Generic)
118-- | How wide is the console?
119data ConsoleWidth = InfinitelyWide -- ^ Have pretty-printer assume that lines should not be broken
120 | ColsWide Int -- ^ Manually specified - must be positive
121 | AutomaticWidth -- ^ Attempt to determine width, or 80 otherwise
122 deriving (Show, Eq, Generic)
124data HowMuchDocs = FullDocs | OverviewDocs
126data OutputFmt = HTMLOutput | LaTeXOutput
128data Optimisation = PETransform | GeneralisedNatHack -- ^ partial eval and associated transforms
129 deriving (Show, Eq, Generic)
131-- | Recognised logging categories for the Idris compiler.
133-- @TODO add in sub categories.
140 deriving (Show, Eq, Ord, Generic)
142strLogCat :: LogCat -> String
143strLogCat IParse = "parser"
144strLogCat IElab = "elab"
145strLogCat ICodeGen = "codegen"
146strLogCat IErasure = "erasure"
147strLogCat ICoverage = "coverage"
148strLogCat IIBC = "ibc"
150codegenCats :: [LogCat]
151codegenCats = [ICodeGen]
153parserCats :: [LogCat]
159loggingCatsStr :: String
160loggingCatsStr = unlines
163 , (strLogCat ICodeGen)
164 , (strLogCat IErasure)
165 , (strLogCat ICoverage)
169getFile :: Opt -> Maybe String
170getFile (Filename s) = Just s
173getBC :: Opt -> Maybe String
174getBC (BCAsm s) = Just s
177getOutput :: Opt -> Maybe String
178getOutput (Output s) = Just s
181getIBCSubDir :: Opt -> Maybe String
182getIBCSubDir (IBCSubDir s) = Just s
183getIBCSubDir _ = Nothing
185getImportDir :: Opt -> Maybe String
186getImportDir (ImportDir s) = Just s
187getImportDir _ = Nothing
189getSourceDir :: Opt -> Maybe String
190getSourceDir (SourceDir s) = Just s
191getSourceDir _ = Nothing
193getPkgDir :: Opt -> Maybe String
194getPkgDir (Pkg s) = Just s
197getPkg :: Opt -> Maybe (Bool, String)
198getPkg (PkgBuild s) = Just (False, s)
199getPkg (PkgInstall s) = Just (True, s)
202getPkgClean :: Opt -> Maybe String
203getPkgClean (PkgClean s) = Just s
204getPkgClean _ = Nothing
206getPkgREPL :: Opt -> Maybe String
207getPkgREPL (PkgREPL s) = Just s
208getPkgREPL _ = Nothing
210getPkgCheck :: Opt -> Maybe String
211getPkgCheck (PkgCheck s) = Just s
212getPkgCheck _ = Nothing
214-- | Returns None if given an Opt which is not PkgMkDoc
215-- Otherwise returns Just x, where x is the contents of PkgMkDoc
216getPkgMkDoc :: Opt -- ^ Opt to extract
217 -> Maybe (Bool, String) -- ^ Result
218getPkgMkDoc (PkgDocBuild str) = Just (False,str)
219getPkgMkDoc (PkgDocInstall str) = Just (True,str)
220getPkgMkDoc _ = Nothing
222getPkgTest :: Opt -- ^ the option to extract
223 -> Maybe String -- ^ the package file to test
224getPkgTest (PkgTest f) = Just f
225getPkgTest _ = Nothing
227getCodegen :: Opt -> Maybe Codegen
228getCodegen (UseCodegen x) = Just x
229getCodegen _ = Nothing
231getCodegenArgs :: Opt -> Maybe String
232getCodegenArgs (CodegenArgs args) = Just args
233getCodegenArgs _ = Nothing
235getConsoleWidth :: Opt -> Maybe ConsoleWidth
236getConsoleWidth (UseConsoleWidth x) = Just x
237getConsoleWidth _ = Nothing
239getExecScript :: Opt -> Maybe String
240getExecScript (InterpretScript expr) = Just expr
241getExecScript _ = Nothing
243getPkgIndex :: Opt -> Maybe FilePath
244getPkgIndex (PkgIndex file) = Just file
245getPkgIndex _ = Nothing
247getEvalExpr :: Opt -> Maybe String
248getEvalExpr (EvalExpr expr) = Just expr
249getEvalExpr _ = Nothing
251getOutputTy :: Opt -> Maybe OutputType
252getOutputTy (OutputTy t) = Just t
253getOutputTy _ = Nothing
255getLanguageExt :: Opt -> Maybe LanguageExt
256getLanguageExt (Extension e) = Just e
257getLanguageExt _ = Nothing
259getTriple :: Opt -> Maybe String
260getTriple (TargetTriple x) = Just x
263getCPU :: Opt -> Maybe String
264getCPU (TargetCPU x) = Just x
267getOptLevel :: Opt -> Maybe Int
268getOptLevel (OptLevel x) = Just x
269getOptLevel _ = Nothing
271getOptimisation :: Opt -> Maybe (Bool,Optimisation)
272getOptimisation (AddOpt p) = Just (True, p)
273getOptimisation (RemoveOpt p) = Just (False, p)
274getOptimisation _ = Nothing
276getColour :: Opt -> Maybe Bool
277getColour (ColourREPL b) = Just b
280getClient :: Opt -> Maybe String
281getClient (Client x) = Just x
284-- Get the first valid port
285getPort :: [Opt] -> Maybe REPLPort
287getPort (Port p : _ ) = Just p
288getPort (_ : xs) = getPort xs
290opt :: (Opt -> Maybe a) -> [Opt] -> [a]
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list