{-# LANGUAGE OverloadedStrings #-}
module Language.Cimple.Diagnostics (Diagnostics, warn) where

import           Control.Monad.State.Lazy (State)
import qualified Control.Monad.State.Lazy as State
import           Data.Text                (Text)
import qualified Data.Text                as Text
import           Language.Cimple.Lexer    (Lexeme (..), lexemeLine)

type Diagnostics a = State [Text] a

warn :: FilePath -> Lexeme Text -> Text -> Diagnostics ()
warn file l w = do
    diags <- State.get
    State.put $ diag : diags
  where
    diag = Text.pack file <> ":" <> Text.pack (show (lexemeLine l)) <> ": " <> w