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 -- | Some tools counts tab as 8 symbols and return such file positions; convert them (consider tab = one symbol) 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)