packages feed

descript-lang-0.2.0.0: src/Descript/BasicInj/Write/Diagnose.hs

-- | Generates diagnostics (errors, warnings, and useful information)
-- for Descript code.
module Descript.BasicInj.Write.Diagnose
  ( diagnose
  ) where

import Descript.BasicInj.Process.Reduce
import Descript.BasicInj.Process.Validate
import Descript.BasicInj.Data
import Descript.Misc
import Data.Semigroup

-- | Generates diagnostics for source.
diagnose :: (Ord an, Semigroup an)
         => DirtyDepd Source an
         -> [Diagnostic an]
diagnose ddsrc
  = case validate ddsrc of
         Failure probs -> map DiagProblem probs
         Success dsrc -> diagnoseValid dsrc

diagnoseValid :: Depd Source an -> [Diagnostic an]
diagnoseValid (Depd extra src)
  = case src of
         SourceModule _ -> []
         SourceProgram prog -> [interpretDiag $ Depd extra prog]

interpretDiag :: Depd Program an -> Diagnostic an
interpretDiag dprog
  = DiagEval (getAnn $ dquery dprog) (pprint $ interpret_ dprog)