Skip to content

Commit 4dcd24e

Browse files
committed
[fix] make syntactic tokens work with ghc 9.6
1 parent e50eb77 commit 4dcd24e

File tree

2 files changed

+27
-9
lines changed
  • ghcide/src/Development/IDE/GHC/Compat
  • plugins/hls-semantic-tokens-plugin/src/Ide/Plugin/SemanticTokens

2 files changed

+27
-9
lines changed

ghcide/src/Development/IDE/GHC/Compat/Core.hs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,7 @@ instance HasSrcSpan (SrcLoc.GenLocated SrcSpan a) where
633633
#if MIN_VERSION_ghc(9,11,0)
634634
instance HasSrcSpan (GHC.EpToken sym) where
635635
getLoc = GHC.getHasLoc
636-
#else
636+
#elif MIN_VERSION_ghc(9,9,0)
637637
instance HasSrcSpan (GHC.EpToken sym) where
638638
getLoc = GHC.getHasLoc . \case
639639
GHC.NoEpTok -> Nothing
@@ -650,15 +650,25 @@ instance HasSrcSpan GHC.AddEpAnn where
650650
getLoc (GHC.AddEpAnn _ loc) = getLoc loc
651651

652652
instance HasSrcSpan GHC.EpaLocation where
653+
#if MIN_VERSION_ghc(9,9,0)
653654
getLoc loc = GHC.getHasLoc loc
655+
#else
656+
getLoc loc = case loc of
657+
GHC.EpaSpan span bufspan -> RealSrcSpan span $ case bufspan of Strict.Nothing -> Nothing; Strict.Just a -> Just a
658+
GHC.EpaDelta {} -> panic "compiler inserted epadelta in EpaLocation"
659+
#endif
654660
#endif
655661

656-
#if MIN_VERSION_ghc(9,9,0)
657662
instance HasSrcSpan GHC.LEpaComment where
663+
#if MIN_VERSION_ghc(9,9,0)
658664
getLoc :: GHC.LEpaComment -> SrcSpan
659665
getLoc (GHC.L l _) = case l of
660666
SrcLoc.EpaDelta {} -> panic "compiler inserted epadelta into NoCommentsLocation"
661667
SrcLoc.EpaSpan span -> span
668+
#else
669+
getLoc :: GHC.LEpaComment -> SrcSpan
670+
getLoc c = case c of
671+
SrcLoc.L (GHC.Anchor realSpan _) _ -> RealSrcSpan realSpan Nothing
662672
#endif
663673

664674
#if MIN_VERSION_ghc(9,9,0)

plugins/hls-semantic-tokens-plugin/src/Ide/Plugin/SemanticTokens/Internal.hs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ extractTyToTy :: forall f a. (Typeable f, Data a) => a -> Maybe (forall r. (fora
180180
extractTyToTy node
181181
| App conRep argRep <- typeOf node
182182
, Just HRefl <- eqTypeRep conRep (typeRep @f)
183-
= Just $ withTypeable argRep $ (\k -> k node)
183+
= Just $ withTypeable argRep \k -> k node
184184
| otherwise = Nothing
185185

186186
{-# inline extractTy #-}
@@ -193,13 +193,17 @@ extractTy node
193193
computeRangeHsSyntacticTokenTypeList :: ParsedModule -> RangeHsSyntacticTokenTypes
194194
computeRangeHsSyntacticTokenTypeList ParsedModule {pm_parsed_source} =
195195
let toks = astTraversalWith pm_parsed_source \node -> mconcat
196-
[ maybeToList $ mkFromLocatable TKeyword . (\k -> k \x k' -> k' x) =<< extractTyToTy @EpToken node
197-
-- FIXME: probably needs to be commented out for ghc > 9.10
198-
-- , maybeToList $ mkFromLocatable TKeyword . (\x k -> k x) =<< extractTy node
199-
-- , do
200-
-- EpAnnImportDecl i p s q pkg a <- maybeToList $ extractTy @EpAnnImportDecl node
196+
[
197+
#if MIN_VERSION_ghc(9,9,0)
198+
maybeToList $ mkFromLocatable TKeyword . (\k -> k \x k' -> k' x) =<< extractTyToTy @EpToken node,
199+
#endif
200+
#if !MIN_VERSION_ghc(9,11,0)
201+
maybeToList $ mkFromLocatable TKeyword . (\x k -> k x) =<< extractTy @AddEpAnn node
202+
, do
203+
EpAnnImportDecl i p s q pkg a <- maybeToList $ extractTy @EpAnnImportDecl node
201204

202-
-- mapMaybe (mkFromLocatable TKeyword . (\x k -> k x)) $ catMaybes $ [Just i, s, q, pkg, a] <> foldMap (\(l, l') -> [Just l, Just l']) p
205+
mapMaybe (mkFromLocatable TKeyword . (\x k -> k x)) $ catMaybes $ [Just i, s, q, pkg, a] <> foldMap (\(l, l') -> [Just l, Just l']) p
206+
#endif
203207
, maybeToList $ mkFromLocatable TComment . (\x k -> k x) =<< extractTy @LEpaComment node
204208
, do
205209
L loc expr <- maybeToList $ extractTy @(LHsExpr GhcPs) node
@@ -219,13 +223,17 @@ computeRangeHsSyntacticTokenTypeList ParsedModule {pm_parsed_source} =
219223
HsInteger {} -> TNumberLit
220224
HsIntPrim {} -> TNumberLit
221225
HsWordPrim {} -> TNumberLit
226+
#if MIN_VERSION_ghc(9,9,0)
222227
HsWord8Prim {} -> TNumberLit
223228
HsWord16Prim {} -> TNumberLit
224229
HsWord32Prim {} -> TNumberLit
230+
#endif
225231
HsWord64Prim {} -> TNumberLit
232+
#if MIN_VERSION_ghc(9,9,0)
226233
HsInt8Prim {} -> TNumberLit
227234
HsInt16Prim {} -> TNumberLit
228235
HsInt32Prim {} -> TNumberLit
236+
#endif
229237
HsInt64Prim {} -> TNumberLit
230238
HsFloatPrim {} -> TNumberLit
231239
HsDoublePrim {} -> TNumberLit

0 commit comments

Comments
 (0)