packages feed

token-search-0.1.0.0: app/Main.hs

module Main where

import Control.Monad.IO.Class (MonadIO, liftIO)
import qualified Data.Aeson as A
import qualified Data.ByteString.Lazy as BS
import qualified Data.List as L
import qualified Data.Text as T
import System.Process (readProcess)
import qualified TokenSearch

main :: MonadIO m => m ()
main = do
    tokens <- calculateTokens
    results <-
        TokenSearch.calculateResults tokens =<< TokenSearch.calculateFileNames
    liftIO $ BS.putStr $ A.encode results

calculateTokens :: MonadIO m => m [T.Text]
calculateTokens =
    tokensFromTags . T.pack <$> liftIO (readProcess "cat" [".git/tags"] [])

tokensFromTags :: T.Text -> [T.Text]
tokensFromTags = L.nub . tokenLocations
  where
    tokenLocations = map (head . T.splitOn "\t") . T.lines