module Fixme.Todo
  ( getTodos
  , formatTodo
  ) where
import Protolude
import qualified Data.Text as Text
import Fixme.Comment (Comment, Located, commentText, filename, startLine, locatedValue)
type Todo = Located Text
todoText :: Todo -> Text
todoText = locatedValue
getTodos :: Comment -> [Todo]
getTodos comment =
  if any (`Text.isInfixOf` (toS (commentText comment))) defaultTags then
    [toS <$> comment] else []
formatTodo :: Todo -> Text
formatTodo todo =
  fn <> ":" <> lineNum <> ":\n" <> indentedComment
  where
    fn = maybe "<unknown>" identity (filename todo)
    lineNum = show (startLine todo)
    indentedComment = Text.unlines (map ("  " <>) (Text.lines (todoText todo)))
defaultTags :: [Text]
defaultTags = [ "XXX"
              , "TODO"
              , "FIXME"
              ]