module HsDev.Tools.Tabs (
recalcNotesTabs
) where
import Control.Lens
import Data.Map (Map)
import qualified Data.Map as M
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import System.Directory.Paths
import HsDev.Symbols.Location
import HsDev.Tools.Types
import HsDev.Util
recalcNotesTabs :: Map Path Text -> [Note a] -> IO [Note a]
recalcNotesTabs srcs notes = do
ctsMap <- fmap M.fromList $ mapM loadFileContents files
let
recalc' n = fromMaybe n $ do
fname <- preview (noteSource . moduleFile) n
cts' <- M.lookup fname ctsMap
return $ recalcTabs cts' 8 n
return $ map recalc' notes
where
files = ordNub $ notes ^.. each . noteSource . moduleFile
loadFileContents f = do
cts <- maybe (readFileUtf8 $ view path f) return $ M.lookup f srcs
return (f, cts)