module Issue.Group ( groupArg, groupIssuesByTag, ) where import Data.Map (Map) import Data.Map qualified as M import Data.Text qualified as T import Issue (Issue (..)) import Issue.Tag qualified as I import Options.Applicative qualified as O groupArg :: O.Parser (Maybe T.Text) groupArg = O.optional ( O.option (O.maybeReader (parse . T.pack)) ( O.long "group" <> O.metavar "TAG" <> O.help "Group selected issues." ) ) where parse s | "@" `T.isPrefixOf` s = Just (T.drop 1 s) | otherwise = Nothing groupIssuesByTag :: T.Text -> [Issue] -> Map T.Text [Issue] groupIssuesByTag tagKey issues = foldl ( \collected issue -> foldl (flip $ M.alter (Just . maybe [issue] (issue :))) collected (I.tagValuesOf tagKey (issue.tags ++ issue.internalTags)) ) M.empty issues