mirror of
https://github.com/haskell-nix/hnix.git
synced 2024-09-20 03:08:45 +03:00
Add a new --values option for selectively displaying value provenance
This commit is contained in:
parent
5f4a4096cf
commit
defc5ed66d
@ -89,6 +89,8 @@ main = do
|
||||
<=< fromNix
|
||||
| normalize opts =
|
||||
liftIO . print . prettyNixValue <=< normalForm
|
||||
| values opts =
|
||||
liftIO . print <=< renderNValueProv
|
||||
| otherwise =
|
||||
liftIO . print <=< renderNValue
|
||||
|
||||
|
@ -12,6 +12,7 @@ data Options = Options
|
||||
{ verbose :: Verbosity
|
||||
, tracing :: Bool
|
||||
, thunks :: Bool
|
||||
, values :: Bool
|
||||
, reduce :: Maybe FilePath
|
||||
, reduceSets :: Bool
|
||||
, reduceLists :: Bool
|
||||
@ -43,6 +44,7 @@ defaultOptions = Options
|
||||
{ verbose = ErrorsOnly
|
||||
, tracing = False
|
||||
, thunks = False
|
||||
, values = False
|
||||
, reduce = Nothing
|
||||
, reduceSets = False
|
||||
, reduceLists = False
|
||||
@ -109,6 +111,9 @@ nixOptions = Options
|
||||
<*> switch
|
||||
( long "thunks"
|
||||
<> help "Enable reporting of thunk tracing as well as regular evaluation")
|
||||
<*> switch
|
||||
( long "values"
|
||||
<> help "Enable reporting of value provenance in error messages")
|
||||
<*> optional (strOption
|
||||
( long "reduce"
|
||||
<> help "When done evaluating, output the evaluated part of the expression to FILE"))
|
||||
|
@ -260,7 +260,10 @@ renderNValueF :: MonadVar m => NValueF m (NThunk m) -> m Doc
|
||||
renderNValueF = fmap prettyNixValue . removeEffectsM
|
||||
|
||||
renderNValue :: MonadVar m => NValue m -> m Doc
|
||||
renderNValue = \case
|
||||
renderNValue (NValue _ v) = renderNValueF v
|
||||
|
||||
renderNValueProv :: MonadVar m => NValue m -> m Doc
|
||||
renderNValueProv = \case
|
||||
NValue [] v -> renderNValueF v
|
||||
NValue ps v -> do
|
||||
v' <- renderNValueF v
|
||||
|
@ -137,10 +137,16 @@ renderValueFrame level = pure . (:[]) . \case
|
||||
|
||||
renderExecFrame :: (MonadReader e m, Has e Options, MonadVar m, MonadFile m)
|
||||
=> NixLevel -> ExecFrame m -> m [Doc]
|
||||
renderExecFrame _level = fmap (:[]) . \case
|
||||
Assertion v ->
|
||||
-- jww (2018-04-24): Render values nicely based on the verbosity.
|
||||
(text "Assertion failed:" </>) <$> renderNValue v
|
||||
renderExecFrame _level f = do
|
||||
opts :: Options <- asks (view hasLens)
|
||||
(:[]) <$> case f of
|
||||
Assertion v
|
||||
| values opts ->
|
||||
-- jww (2018-04-24): Render value provenance differently
|
||||
-- based on the verbosity.
|
||||
(text "Assertion failed:" </>) <$> renderNValueProv v
|
||||
| otherwise ->
|
||||
pure $ text "Assertion failed"
|
||||
|
||||
renderThunkLoop :: (MonadReader e m, Has e Options, MonadFile m)
|
||||
=> NixLevel -> ThunkLoop -> m [Doc]
|
||||
|
Loading…
Reference in New Issue
Block a user