-- | The data type of compiler options
module Language.PureScript.Options where

import Prelude
import Data.Set qualified as S
import Data.Map (Map)
import Data.Map qualified as Map

-- | The data type of compiler options
data Options = Options
  { Options -> Bool
optionsVerboseErrors :: Bool
  -- ^ Verbose error message
  , Options -> Bool
optionsNoComments :: Bool
  -- ^ Remove the comments from the generated js
  , Options -> Set CodegenTarget
optionsCodegenTargets :: S.Set CodegenTarget
  -- ^ Codegen targets (JS, CoreFn, etc.)
  } deriving Int -> Options -> ShowS
[Options] -> ShowS
Options -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Options] -> ShowS
$cshowList :: [Options] -> ShowS
show :: Options -> String
$cshow :: Options -> String
showsPrec :: Int -> Options -> ShowS
$cshowsPrec :: Int -> Options -> ShowS
Show

-- Default make options
defaultOptions :: Options
defaultOptions :: Options
defaultOptions = Bool -> Bool -> Set CodegenTarget -> Options
Options Bool
False Bool
False (forall a. a -> Set a
S.singleton CodegenTarget
JS)

data CodegenTarget = JS | JSSourceMap | CoreFn | Docs
  deriving (CodegenTarget -> CodegenTarget -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CodegenTarget -> CodegenTarget -> Bool
$c/= :: CodegenTarget -> CodegenTarget -> Bool
== :: CodegenTarget -> CodegenTarget -> Bool
$c== :: CodegenTarget -> CodegenTarget -> Bool
Eq, Eq CodegenTarget
CodegenTarget -> CodegenTarget -> Bool
CodegenTarget -> CodegenTarget -> Ordering
CodegenTarget -> CodegenTarget -> CodegenTarget
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: CodegenTarget -> CodegenTarget -> CodegenTarget
$cmin :: CodegenTarget -> CodegenTarget -> CodegenTarget
max :: CodegenTarget -> CodegenTarget -> CodegenTarget
$cmax :: CodegenTarget -> CodegenTarget -> CodegenTarget
>= :: CodegenTarget -> CodegenTarget -> Bool
$c>= :: CodegenTarget -> CodegenTarget -> Bool
> :: CodegenTarget -> CodegenTarget -> Bool
$c> :: CodegenTarget -> CodegenTarget -> Bool
<= :: CodegenTarget -> CodegenTarget -> Bool
$c<= :: CodegenTarget -> CodegenTarget -> Bool
< :: CodegenTarget -> CodegenTarget -> Bool
$c< :: CodegenTarget -> CodegenTarget -> Bool
compare :: CodegenTarget -> CodegenTarget -> Ordering
$ccompare :: CodegenTarget -> CodegenTarget -> Ordering
Ord, Int -> CodegenTarget -> ShowS
[CodegenTarget] -> ShowS
CodegenTarget -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CodegenTarget] -> ShowS
$cshowList :: [CodegenTarget] -> ShowS
show :: CodegenTarget -> String
$cshow :: CodegenTarget -> String
showsPrec :: Int -> CodegenTarget -> ShowS
$cshowsPrec :: Int -> CodegenTarget -> ShowS
Show)

codegenTargets :: Map String CodegenTarget
codegenTargets :: Map String CodegenTarget
codegenTargets = forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
  [ (String
"js", CodegenTarget
JS)
  , (String
"sourcemaps", CodegenTarget
JSSourceMap)
  , (String
"corefn", CodegenTarget
CoreFn)
  , (String
"docs", CodegenTarget
Docs)
  ]