mirror of
https://github.com/anoma/juvix.git
synced 2024-12-14 08:27:03 +03:00
9e7a8a98d4
* Remove ParserParams ParserParams is only used to record the root of the project, which is used to prefix source file paths. However source file paths are always absolute so this is not required. * Add GetAbsPath to Files effect The Files effect is not responsible for resolving a relative module path into an absolute path on disk. This will allow us to resolve relative module paths to alternative paths, for example to point to the standard library on disk. * Files effect getAbsPath returns paths within the registered standard library This means that the standard library can exist on disk at a different location to the Juvix project. A command line flag --stdlib-path can be specified to point to a standard library, otherwise the embedded standard library is written to disk at $PROJ_DIR/.juvix-build/stdlib and this is used instead. * Recreate stdlib dir only when juvix version changes * Add UpdateStdlib to the Files effect * Add comment for stdlibOrFile * Remove spurious import
115 lines
3.0 KiB
Haskell
115 lines
3.0 KiB
Haskell
module GlobalOptions
|
|
( module GlobalOptions,
|
|
)
|
|
where
|
|
|
|
import Juvix.Compiler.Abstract.Pretty.Options qualified as Abstract
|
|
import Juvix.Compiler.Internal.Pretty.Options qualified as Internal
|
|
import Juvix.Data.Error.GenericError qualified as E
|
|
import Juvix.Prelude
|
|
import Options.Applicative hiding (hidden)
|
|
|
|
data GlobalOptions = GlobalOptions
|
|
{ _globalNoColors :: Bool,
|
|
_globalShowNameIds :: Bool,
|
|
_globalOnlyErrors :: Bool,
|
|
_globalNoApe :: Bool,
|
|
_globalStdin :: Bool,
|
|
_globalNoTermination :: Bool,
|
|
_globalNoPositivity :: Bool,
|
|
_globalNoStdlib :: Bool,
|
|
_globalStdlibPath :: Maybe FilePath
|
|
}
|
|
deriving stock (Eq, Show, Data)
|
|
|
|
makeLenses ''GlobalOptions
|
|
|
|
instance CanonicalProjection GlobalOptions Internal.Options where
|
|
project g =
|
|
Internal.Options
|
|
{ Internal._optShowNameIds = g ^. globalShowNameIds
|
|
}
|
|
|
|
instance CanonicalProjection GlobalOptions Abstract.Options where
|
|
project g =
|
|
Abstract.defaultOptions
|
|
{ Abstract._optShowNameIds = g ^. globalShowNameIds
|
|
}
|
|
|
|
instance CanonicalProjection GlobalOptions E.GenericOptions where
|
|
project GlobalOptions {..} =
|
|
E.GenericOptions
|
|
{ E._showNameIds = _globalShowNameIds,
|
|
E._genericNoApe = _globalNoApe
|
|
}
|
|
|
|
defaultGlobalOptions :: GlobalOptions
|
|
defaultGlobalOptions =
|
|
GlobalOptions
|
|
{ _globalNoColors = False,
|
|
_globalShowNameIds = False,
|
|
_globalOnlyErrors = False,
|
|
_globalNoApe = False,
|
|
_globalNoTermination = False,
|
|
_globalStdin = False,
|
|
_globalNoPositivity = False,
|
|
_globalNoStdlib = False,
|
|
_globalStdlibPath = Nothing
|
|
}
|
|
|
|
-- | Get a parser for global flags which can be hidden or not depending on
|
|
-- the input boolean
|
|
parseGlobalFlags :: Parser GlobalOptions
|
|
parseGlobalFlags = do
|
|
_globalNoColors <-
|
|
switch
|
|
( long "no-colors"
|
|
<> help "Disable ANSI formatting"
|
|
)
|
|
_globalShowNameIds <-
|
|
switch
|
|
( long "show-name-ids"
|
|
<> help "Show the unique number of each identifier when pretty printing"
|
|
)
|
|
_globalNoApe <-
|
|
switch
|
|
( long "no-format"
|
|
<> help "disable the new pretty printing algorithm"
|
|
)
|
|
_globalStdin <-
|
|
switch
|
|
( long "stdin"
|
|
<> help "Read from Stdin"
|
|
)
|
|
_globalOnlyErrors <-
|
|
switch
|
|
( long "only-errors"
|
|
<> help "Only print errors in a uniform format (used by juvix-mode)"
|
|
)
|
|
_globalNoTermination <-
|
|
switch
|
|
( long "no-termination"
|
|
<> help "Disable termination checking"
|
|
)
|
|
_globalNoPositivity <-
|
|
switch
|
|
( long "no-positivity"
|
|
<> help "Disable positivity checking for inductive types"
|
|
)
|
|
_globalNoStdlib <-
|
|
switch
|
|
( long "no-stdlib"
|
|
<> help "Do not use the standard library"
|
|
)
|
|
_globalStdlibPath <-
|
|
optional
|
|
( strOption
|
|
( long "stdlib-path"
|
|
<> metavar "PATH"
|
|
<> help "Specify path to the standard library"
|
|
<> action "directory"
|
|
)
|
|
)
|
|
|
|
return GlobalOptions {..}
|