ormolu-0.0.1.0: src/Ormolu/Parser/Anns.hs
-- | Ormolu-specific representation of GHC annotations.
module Ormolu.Parser.Anns
( Anns (..),
emptyAnns,
mkAnns,
lookupAnns,
)
where
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as M
import Data.Maybe (mapMaybe)
import qualified GHC
import qualified Lexer as GHC
import SrcLoc
-- | Ormolu-specific representation of GHC annotations.
newtype Anns = Anns (Map RealSrcSpan [GHC.AnnKeywordId])
deriving (Eq)
-- | Empty 'Anns'.
emptyAnns :: Anns
emptyAnns = Anns M.empty
-- | Create 'Anns' from 'GHC.PState'.
mkAnns ::
GHC.PState ->
Anns
mkAnns pstate =
Anns $
M.fromListWith (++) (mapMaybe f (GHC.annotations pstate))
where
f ((spn, kid), _) =
case spn of
RealSrcSpan rspn -> Just (rspn, [kid])
UnhelpfulSpan _ -> Nothing
-- | Lookup 'GHC.AnnKeywordId's corresponding to a given 'SrcSpan'.
lookupAnns ::
-- | Span to lookup with
SrcSpan ->
-- | Collection of annotations
Anns ->
[GHC.AnnKeywordId]
lookupAnns (RealSrcSpan rspn) (Anns m) = M.findWithDefault [] rspn m
lookupAnns (UnhelpfulSpan _) _ = []