fourmolu-0.4.0.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 GHC.Parser.Annotation
import GHC.Parser.Lexer
import GHC.Types.SrcLoc
-- | Ormolu-specific representation of GHC annotations.
newtype Anns = Anns (Map RealSrcSpan [AnnKeywordId])
deriving (Eq)
-- | Empty 'Anns'.
emptyAnns :: Anns
emptyAnns = Anns M.empty
-- | Create 'Anns' from 'PState'.
mkAnns ::
PState ->
Anns
mkAnns pstate =
Anns $
M.fromListWith (++) (f <$> annotations pstate)
where
f ((rspn, kid), _) = (rspn, [kid])
-- | Lookup 'AnnKeywordId's corresponding to a given 'SrcSpan'.
lookupAnns ::
-- | Span to lookup with
SrcSpan ->
-- | Collection of annotations
Anns ->
[AnnKeywordId]
lookupAnns (RealSrcSpan rspn _) (Anns m) = M.findWithDefault [] rspn m
lookupAnns (UnhelpfulSpan _) _ = []