Skip to content
This repository was archived by the owner on Oct 7, 2020. It is now read-only.

Commit ee3f3fa

Browse files
committed
Add support for GHC 8.4.4 and GHC 8.2.2
1 parent aaa6968 commit ee3f3fa

File tree

2 files changed

+80
-19
lines changed

2 files changed

+80
-19
lines changed

hie-plugin-api/Haskell/Ide/Engine/Compat.hs

+79-18
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
{-# LANGUAGE ViewPatterns #-}
44
module Haskell.Ide.Engine.Compat where
55

6-
76
import qualified GHC
87
import qualified Type
98
import qualified TcHsSyn
@@ -37,33 +36,95 @@ isExtensionOf ext = isSuffixOf ('.':ext) . takeExtensions
3736
#endif
3837

3938

39+
#if MIN_VERSION_ghc(8, 4, 0)
40+
type GhcTc = GHC.GhcTc
41+
#else
42+
type GhcTc = GHC.Id
43+
#endif
44+
45+
pattern HsOverLitType :: Type.Type -> GHC.HsExpr GhcTc
46+
pattern HsOverLitType t <-
4047
#if MIN_VERSION_ghc(8, 6, 0)
48+
GHC.HsOverLit _ (GHC.overLitType -> t)
49+
#elseif MIN_VERSION_ghc(8, 4, 0)
50+
GHC.HsOverLit (GHC.overLitType -> t)
51+
#else
52+
GHC.HsOverLit (GHC.overLitType -> t)
53+
#endif
4154

42-
pattern HsOverLitType :: Type.Type -> GHC.HsExpr GHC.GhcTc
43-
pattern HsOverLitType t <- GHC.HsOverLit _ (GHC.overLitType -> t)
55+
pattern HsLitType :: Type.Type -> GHC.HsExpr GhcTc
56+
pattern HsLitType t <-
57+
#if MIN_VERSION_ghc(8, 6, 0)
58+
GHC.HsLit _ (TcHsSyn.hsLitType -> t)
59+
#elseif MIN_VERSION_ghc(8, 4, 0)
60+
GHC.HsLit (TcHsSyn.hsLitType -> t)
61+
#else
62+
GHC.HsLit (TcHsSyn.hsLitType -> t)
63+
#endif
4464

45-
pattern HsLitType :: Type.Type -> GHC.HsExpr GHC.GhcTc
46-
pattern HsLitType t <- GHC.HsLit _ (TcHsSyn.hsLitType -> t)
65+
pattern HsLamType :: Type.Type -> GHC.HsExpr GhcTc
66+
pattern HsLamType t <-
67+
#if MIN_VERSION_ghc(8, 6, 0)
68+
GHC.HsLam _ ((\(GHC.MG { GHC.mg_ext = groupTy }) -> matchGroupType groupTy) -> t)
69+
#elseif MIN_VERSION_ghc(8, 4, 0)
70+
GHC.HsLam (\GHC.MG { GHC.mg_res_ty = res, GHC.mg_arg_tys = args } -> Type.mkFunTys args res -> t)
71+
#else
72+
GHC.HsLam (\GHC.MG { GHC.mg_res_ty = res, GHC.mg_arg_tys = args } -> Type.mkFunTys args res -> t)
73+
#endif
4774

48-
pattern HsLamType :: Type.Type -> GHC.HsExpr GHC.GhcTc
49-
pattern HsLamType t <- GHC.HsLam _ ((\(GHC.MG { GHC.mg_ext = groupTy }) -> matchGroupType groupTy) -> t)
75+
pattern HsLamCaseType :: Type.Type -> GHC.HsExpr GhcTc
76+
pattern HsLamCaseType t <-
77+
#if MIN_VERSION_ghc(8, 6, 0)
78+
GHC.HsLamCase _ ((\(GHC.MG { GHC.mg_ext = groupTy }) -> matchGroupType groupTy) -> t)
79+
#elseif MIN_VERSION_ghc(8, 4, 0)
80+
GHC.HsLamCase (\GHC.MG { GHC.mg_res_ty = res, GHC.mg_arg_tys = args } -> Type.mkFunTys args res -> t)
81+
#else
82+
GHC.HsLamCase (\GHC.MG { GHC.mg_res_ty = res, GHC.mg_arg_tys = args } -> Type.mkFunTys args res -> t)
83+
#endif
5084

51-
pattern HsLamCaseType :: Type.Type -> GHC.HsExpr GHC.GhcTc
52-
pattern HsLamCaseType t <- GHC.HsLamCase _ ((\(GHC.MG { GHC.mg_ext = groupTy }) -> matchGroupType groupTy) -> t)
85+
pattern HsCaseType :: Type.Type -> GHC.HsExpr GhcTc
86+
pattern HsCaseType t <-
87+
#if MIN_VERSION_ghc(8, 6, 0)
88+
GHC.HsCase _ _ ((\(GHC.MG { GHC.mg_ext = groupTy }) -> matchGroupType groupTy) -> t)
89+
#elseif MIN_VERSION_ghc(8, 4, 0)
90+
GHC.HsCase _ (\GHC.MG { GHC.mg_res_ty = res, GHC.mg_arg_tys = args } -> Type.mkFunTys args res -> t)
91+
#else
92+
GHC.HsCase _ (\GHC.MG { GHC.mg_res_ty = res, GHC.mg_arg_tys = args } -> Type.mkFunTys args res -> t)
93+
#endif
5394

54-
pattern HsCaseType :: Type.Type -> GHC.HsExpr GHC.GhcTc
55-
pattern HsCaseType t <- GHC.HsCase _ _ ((\(GHC.MG { GHC.mg_ext = groupTy }) -> matchGroupType groupTy) -> t)
95+
pattern ExplicitListType :: Type.Type -> GHC.HsExpr GhcTc
96+
pattern ExplicitListType t <-
97+
#if MIN_VERSION_ghc(8, 6, 0)
98+
GHC.ExplicitList (TysWiredIn.mkListTy -> t) _ _
99+
#elseif MIN_VERSION_ghc(8, 4, 0)
100+
GHC.ExplicitList (TysWiredIn.mkListTy -> t) _ _
101+
#else
102+
GHC.ExplicitList (TysWiredIn.mkListTy -> t) _ _
103+
#endif
56104

57-
pattern ExplicitListType :: Type.Type -> GHC.HsExpr GHC.GhcTc
58-
pattern ExplicitListType t <- GHC.ExplicitList (TysWiredIn.mkListTy -> t) _ _
105+
pattern ExplicitSumType :: Type.Type -> GHC.HsExpr GhcTc
106+
pattern ExplicitSumType t <-
107+
#if MIN_VERSION_ghc(8, 6, 0)
108+
GHC.ExplicitSum (TysWiredIn.mkSumTy -> t) _ _ _
109+
#elseif MIN_VERSION_ghc(8, 4, 0)
110+
GHC.ExplicitSum _ _ _ (TysWiredIn.mkSumTy -> t)
111+
#else
112+
GHC.ExplicitSum _ _ _ (TysWiredIn.mkSumTy -> t)
113+
#endif
59114

60-
pattern ExplicitSumType :: Type.Type -> GHC.HsExpr GHC.GhcTc
61-
pattern ExplicitSumType t <- GHC.ExplicitSum (TysWiredIn.mkSumTy -> t) _ _ _
62115

63-
pattern HsMultiIfType :: Type.Type -> GHC.HsExpr GHC.GhcTc
64-
pattern HsMultiIfType t <- GHC.HsMultiIf t _
116+
pattern HsMultiIfType :: Type.Type -> GHC.HsExpr GhcTc
117+
pattern HsMultiIfType t <-
118+
#if MIN_VERSION_ghc(8, 6, 0)
119+
GHC.HsMultiIf t _
120+
#elseif MIN_VERSION_ghc(8, 4, 0)
121+
GHC.HsMultiIf t _
122+
#else
123+
GHC.HsMultiIf t _
124+
#endif
65125

126+
#if MIN_VERSION_ghc(8, 6, 0)
66127
matchGroupType :: GHC.MatchGroupTc -> GHC.Type
67128
matchGroupType (GHC.MatchGroupTc args res) = Type.mkFunTys args res
129+
#endif
68130

69-
#endif

hie-plugin-api/Haskell/Ide/Engine/TypeMap.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ everythingButM f x = do
113113
--
114114
-- See #16233<https://gitlab.haskell.org/ghc/ghc/issues/16233>
115115
getType
116-
:: GHC.HscEnv -> GHC.LHsExpr GHC.GhcTc -> IO (Maybe (GHC.SrcSpan, Type.Type))
116+
:: GHC.HscEnv -> GHC.LHsExpr GhcTc -> IO (Maybe (GHC.SrcSpan, Type.Type))
117117
getType hs_env e@(GHC.L spn e') =
118118
-- Some expression forms have their type immediately available
119119
let

0 commit comments

Comments
 (0)