module Unused.Aliases ( groupedTermsAndAliases , termsAndAliases ) where import qualified Data.List as L import Data.Text (Text) import qualified Data.Text as T import Unused.ResultsClassifier.Types import Unused.Types (SearchTerm(..), TermMatch, tmTerm) import Unused.Util (groupBy) groupedTermsAndAliases :: [TermMatch] -> [[TermMatch]] groupedTermsAndAliases = map snd . groupBy tmTerm termsAndAliases :: [TermAlias] -> [String] -> [SearchTerm] termsAndAliases [] = map OriginalTerm termsAndAliases as = L.nub . concatMap ((as >>=) . generateSearchTerms . T.pack) generateSearchTerms :: Text -> TermAlias -> [SearchTerm] generateSearchTerms term TermAlias {taFrom = from, taTransform = transform} = toTermWithAlias $ parsePatternForMatch (T.pack from) term where toTermWithAlias (Right (Just match)) = [OriginalTerm unpackedTerm, AliasTerm unpackedTerm (aliasedResult match)] toTermWithAlias _ = [OriginalTerm unpackedTerm] unpackedTerm = T.unpack term aliasedResult = T.unpack . transform parsePatternForMatch :: Text -> Text -> Either Text (Maybe Text) parsePatternForMatch aliasPattern term = findMatch $ T.splitOn wildcard aliasPattern where findMatch [prefix, suffix] = Right $ T.stripSuffix suffix =<< T.stripPrefix prefix term findMatch _ = Left $ T.pack $ "There was a problem with the pattern: " ++ show aliasPattern wildcard :: Text wildcard = "*"