module Bug.Formatting
where

import Prelude
import Language.Haskell.TH (Loc(..))


loc :: Loc -> String
loc (Loc filename package module_ (startLine, startColumn) (endLine, endColumn)) =
  builder ""
  where
    builder =
      showString package .
      showChar ':' .
      showString module_ .
      showChar ':' .
      position
      where
        position =
          case startLine == endLine of
            True ->
              shows startLine .
              showChar ':' .
              columns
              where
                columns =
                  if endColumn - startColumn > 1
                    then shows startColumn . showChar '-' . shows endColumn
                    else shows startColumn
            False ->
              lineAndColumn startLine startColumn .
              showChar '-' .
              lineAndColumn endLine endColumn
              where
                lineAndColumn line column =
                  showChar '(' .
                  shows line .
                  showChar ':' .
                  shows column .
                  showChar ')'

prefixNullable :: String -> String -> String
prefixNullable to what =
  if null what
    then to
    else showString to . showString ": " . showString what $ ""