summaryrefslogtreecommitdiff
path: root/compiler/GHC/Rename/Doc.hs
blob: 006bc2689ba7a947489f1cfb7f7de2eafa1bcbc1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
module GHC.Rename.Doc ( rnHsDoc, rnLHsDoc, rnLDocDecl, rnDocDecl ) where

import GHC.Prelude

import GHC.Tc.Types
import GHC.Hs
import GHC.Types.Name.Reader
import GHC.Types.Name
import GHC.Types.SrcLoc
import GHC.Tc.Utils.Monad (getGblEnv)
import GHC.Rename.Env

rnLHsDoc :: LHsDoc GhcPs -> RnM (LHsDoc GhcRn)
rnLHsDoc = traverse rnHsDoc

rnLDocDecl :: LDocDecl GhcPs -> RnM (LDocDecl GhcRn)
rnLDocDecl = traverse rnDocDecl

rnDocDecl :: DocDecl GhcPs -> RnM (DocDecl GhcRn)
rnDocDecl (DocCommentNext doc) = do
  doc' <- rnLHsDoc doc
  pure $ (DocCommentNext doc')
rnDocDecl (DocCommentPrev doc) = do
  doc' <- rnLHsDoc doc
  pure $ (DocCommentPrev doc')
rnDocDecl (DocCommentNamed n doc) = do
  doc' <- rnLHsDoc doc
  pure $ (DocCommentNamed n doc')
rnDocDecl (DocGroup i doc) = do
  doc' <- rnLHsDoc doc
  pure $ (DocGroup i doc')

rnHsDoc :: WithHsDocIdentifiers a GhcPs -> RnM (WithHsDocIdentifiers a GhcRn)
rnHsDoc (WithHsDocIdentifiers s ids) = do
  gre <- tcg_rdr_env <$> getGblEnv
  pure (WithHsDocIdentifiers s (rnHsDocIdentifiers gre ids))

rnHsDocIdentifiers :: GlobalRdrEnv
                   -> [Located RdrName]
                   -> [Located Name]
rnHsDocIdentifiers gre_env ns = concat
  [ map (L l . greName) (lookupGRE_RdrName (IncludeFields WantNormal) gre_env c)
  | L l rdr_name <- ns
  , c <- dataTcOccs rdr_name
  ]