content: module Commands.Repl.Options where
  
  import CommonOptions
  import Juvix.Compiler.Core.Pretty.Options qualified as Core
  import Juvix.Compiler.Core.Transformation
  
  data ReplOptions = ReplOptions
    { _replIsDev :: Bool,
      _replInputFile :: Maybe (AppPath File),
      _replShowDeBruijn :: Bool,
      _replNoPrelude :: Bool,
      _replTransformations :: [TransformationId],
      _replNoDisambiguate :: Bool,
      _replPrintValues :: Bool
    }
    deriving stock (Data)
  
  makeLenses ''ReplOptions
  
  instance CanonicalProjection ReplOptions Core.Options where
    project c =
      Core.defaultOptions
        { Core._optShowDeBruijnIndices = c ^. replShowDeBruijn
        }
  
  parseRepl :: Parser ReplOptions
  parseRepl = do
    let _replTransformations = toEvalTransformations
        _replShowDeBruijn = False
        _replNoDisambiguate = False
        _replPrintValues = True
        _replIsDev = False
    _replInputFile <- optional (parseInputFile FileExtJuvix)
    _replNoPrelude <-
      switch
        ( long "no-prelude"
            <> help "Do not load the Prelude module on launch"
        )
    pure ReplOptions {..}
  