1- {-# LANGUAGE CPP #-}
21module Haskell.Ide.Engine.ArtifactMap where
32
43import Data.Maybe
@@ -42,48 +41,26 @@ genLocMap tm = names
4241 renamed = fromJust $ GHC. tm_renamed_source tm
4342
4443
45- #if __GLASGOW_HASKELL__ > 710
4644 names = IM. union names2 $ SYB. everything IM. union (IM. empty `SYB.mkQ` hsRecFieldT) typechecked
47- #else
48- names = names2
49- #endif
5045 names2 = SYB. everything IM. union (IM. empty
51- #if __GLASGOW_HASKELL__ > 710
5246 `SYB.mkQ` fieldOcc
5347 `SYB.extQ` hsRecFieldN
5448 `SYB.extQ` checker) renamed
55- #else
56- `SYB.mkQ` checker) renamed
57- #endif
5849
5950 checker (GHC. L (GHC. RealSrcSpan r) x) = IM. singleton (rspToInt r) x
6051 checker _ = IM. empty
6152
62- #if __GLASGOW_HASKELL__ >= 806
6353 fieldOcc :: GHC. FieldOcc GhcRn -> LocMap
64- fieldOcc (GHC. FieldOcc n (GHC. L (GHC. RealSrcSpan r) _)) = IM. singleton (rspToInt r) n
54+ fieldOcc (FieldOccCompat n (GHC. L (GHC. RealSrcSpan r) _)) = IM. singleton (rspToInt r) n
6555 fieldOcc _ = IM. empty
6656
6757 hsRecFieldN :: GHC. LHsExpr GhcRn -> LocMap
68- hsRecFieldN (GHC. L _ (GHC. HsRecFld _ ( GHC. Unambiguous n (GHC. L (GHC. RealSrcSpan r) _)) )) = IM. singleton (rspToInt r) n
58+ hsRecFieldN (GHC. L _ (HsRecFldCompat ( UnambiguousCompat n (GHC. L (GHC. RealSrcSpan r) _)) )) = IM. singleton (rspToInt r) n
6959 hsRecFieldN _ = IM. empty
7060
7161 hsRecFieldT :: GHC. LHsExpr GhcTc -> LocMap
72- hsRecFieldT (GHC. L _ (GHC. HsRecFld _ ( GHC. Ambiguous n (GHC. L (GHC. RealSrcSpan r) _)) )) = IM. singleton (rspToInt r) (Var. varName n)
62+ hsRecFieldT (GHC. L _ (HsRecFldCompat ( AmbiguousCompat n (GHC. L (GHC. RealSrcSpan r) _)) )) = IM. singleton (rspToInt r) (Var. varName n)
7363 hsRecFieldT _ = IM. empty
74- #elif __GLASGOW_HASKELL__ > 710
75- fieldOcc :: GHC. FieldOcc GhcRn -> LocMap
76- fieldOcc (GHC. FieldOcc (GHC. L (GHC. RealSrcSpan r) _) n) = IM. singleton (rspToInt r) n
77- fieldOcc _ = IM. empty
78-
79- hsRecFieldN :: GHC. LHsExpr GhcRn -> LocMap
80- hsRecFieldN (GHC. L _ (GHC. HsRecFld (GHC. Unambiguous (GHC. L (GHC. RealSrcSpan r) _) n) )) = IM. singleton (rspToInt r) n
81- hsRecFieldN _ = IM. empty
82-
83- hsRecFieldT :: GHC. LHsExpr GhcTc -> LocMap
84- hsRecFieldT (GHC. L _ (GHC. HsRecFld (GHC. Ambiguous (GHC. L (GHC. RealSrcSpan r) _) n) )) = IM. singleton (rspToInt r) (Var. varName n)
85- hsRecFieldT _ = IM. empty
86- #endif
8764
8865-- | Generates a ModuleMap of imported and exported modules names,
8966-- and the locations that they were imported/exported at.
@@ -92,11 +69,7 @@ genImportMap tm = moduleMap
9269 where
9370 (_, lImports, mlies, _) = fromJust $ GHC. tm_renamed_source tm
9471
95- #if __GLASGOW_HASKELL__ > 802
9672 lies = map fst $ fromMaybe [] mlies
97- #else
98- lies = fromMaybe [] mlies
99- #endif
10073
10174 moduleMap :: ModuleMap
10275 moduleMap = foldl goImp IM. empty lImports `IM.union` foldl goExp IM. empty lies
@@ -106,11 +79,7 @@ genImportMap tm = moduleMap
10679 goImp acc _ = acc
10780
10881 goExp :: ModuleMap -> GHC. LIE name -> ModuleMap
109- #if __GLASGOW_HASKELL__ >= 806
110- goExp acc (GHC. L (GHC. RealSrcSpan r) (GHC. IEModuleContents _ lmn)) =
111- #else
112- goExp acc (GHC. L (GHC. RealSrcSpan r) (GHC. IEModuleContents lmn)) =
113- #endif
82+ goExp acc (GHC. L (GHC. RealSrcSpan r) (IEModuleContentsCompat lmn)) =
11483 IM. insert (rspToInt r) (GHC. unLoc lmn) acc
11584 goExp acc _ = acc
11685
@@ -121,43 +90,21 @@ genDefMap tm = mconcat $ map (go . GHC.unLoc) decls
12190 where
12291 go :: GHC. HsDecl GhcPs -> DefMap
12392 -- Type signatures
124- #if __GLASGOW_HASKELL__ >= 806
125- go (GHC. SigD _ (GHC. TypeSig _ lns _)) =
126- #else
127- go (GHC. SigD (GHC. TypeSig lns _)) =
128- #endif
93+ go (SigDCompat (TypeSigCompat lns _)) =
12994 foldl IM. union mempty $ fmap go' lns
13095 where go' (GHC. L (GHC. RealSrcSpan r) n) = IM. singleton (rspToInt r) n
13196 go' _ = mempty
13297 -- Definitions
133- #if __GLASGOW_HASKELL__ >= 806
134- go (GHC. ValD _ (GHC. FunBind _ (GHC. L (GHC. RealSrcSpan r) n) GHC. MG { GHC. mg_alts = llms } _ _)) =
135- #else
136- go (GHC. ValD (GHC. FunBind (GHC. L (GHC. RealSrcSpan r) n) GHC. MG { GHC. mg_alts = llms } _ _ _)) =
137- #endif
98+ go (ValDCompat (FunBindCompat (GHC. L (GHC. RealSrcSpan r) n) (GHC. MG { GHC. mg_alts = llms }))) =
13899 IM. insert (rspToInt r) n wheres
139100 where
140101 wheres = mconcat $ fmap (gomatch . GHC. unLoc) (GHC. unLoc llms)
141102
142- gomatch GHC. Match { GHC. m_grhss = GHC. GRHSs { GHC. grhssLocalBinds = lbs } } =
143- golbs (GHC. unLoc lbs)
144- #if __GLASGOW_HASKELL__ >= 806
145- gomatch GHC. XMatch {} = error " GHC.XMatch"
146- gomatch (GHC. Match _ _ _ (GHC. XGRHSs _)) = error " GHC.XMatch"
147- #endif
148-
149- #if __GLASGOW_HASKELL__ >= 806
150- golbs (GHC. HsValBinds _ (GHC. ValBinds _ lhsbs lsigs)) =
151- #else
152- golbs (GHC. HsValBinds (GHC. ValBindsIn lhsbs lsigs)) =
153- #endif
154- #if __GLASGOW_HASKELL__ >= 806
155- foldl (\ acc x -> IM. union acc (go $ GHC. ValD GHC. NoExt $ GHC. unLoc x)) mempty lhsbs
156- `mappend` foldl IM. union mempty (fmap (go . GHC. SigD GHC. NoExt . GHC. unLoc) lsigs)
157- #else
158- foldl (\ acc x -> IM. union acc (go $ GHC. ValD $ GHC. unLoc x)) mempty lhsbs
159- `mappend` foldl IM. union mempty (fmap (go . GHC. SigD . GHC. unLoc) lsigs)
160- #endif
103+ gomatch (MatchCompat lbs) = golbs (GHC. unLoc lbs)
104+
105+ golbs (HsValBindsCompat (ValBindsCompat lhsbs lsigs)) =
106+ foldl (\ acc x -> IM. union acc (go $ ValDCompat $ GHC. unLoc x)) mempty lhsbs
107+ `mappend` foldl IM. union mempty (fmap (go . SigDCompat . GHC. unLoc) lsigs)
161108 golbs _ = mempty
162109 go _ = mempty
163110 decls = GHC. hsmodDecls $ GHC. unLoc $ GHC. pm_parsed_source $ GHC. tm_parsed_module tm
0 commit comments