{-# LANGUAGE NamedFieldPuns #-} module HieDb.Dump where import qualified Compat.HieDebug as HieDebug import qualified Compat.HieTypes as HieTypes import qualified Data.Map.Strict as Map import qualified Data.Text as T import qualified Data.Text.Encoding as T import Compat.HieTypes (HieFile (..)) import Control.Monad.IO.Class (MonadIO, liftIO) import Data.Text (Text) import HieDb.Compat import HieDb.Types (NameCacheMonad) import HieDb.Utils (withHieFile) {-| Pretty print Hie AST stored in given .hie file -} dump :: (NameCacheMonad m, MonadIO m) => DynFlags -> FilePath -- ^ Path to .hie file -> m () dump dynFlags hieFilePath = do withHieFile hieFilePath $ \HieFile{ hie_asts } -> do let (_, astRoot) = Map.findMin $ HieTypes.getAsts hie_asts liftIO $ putStrLn $ showSDoc dynFlags $ HieDebug.ppHie astRoot {-| Get lines of original source code from given .hie file -} sourceCode :: (NameCacheMonad m, MonadIO m) => FilePath -> m [Text] sourceCode hieFilePath = withHieFile hieFilePath $ \HieFile {hie_hs_src} -> return $ T.lines $ T.decodeUtf8 hie_hs_src