Skip to content

Commit 7fa044c

Browse files
committed
[fix] make syntactic tokens work with ghc 9.6
1 parent 4f65222 commit 7fa044c

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
@@ -178,7 +178,7 @@ extractTyToTy :: forall f a. (Typeable f, Data a) => a -> Maybe (forall r. (fora
178178
extractTyToTy node
179179
| App conRep argRep <- typeOf node
180180
, Just HRefl <- eqTypeRep conRep (typeRep @f)
181-
= Just $ withTypeable argRep $ (\k -> k node)
181+
= Just $ withTypeable argRep \k -> k node
182182
| otherwise = Nothing
183183

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

200-
-- mapMaybe (mkFromLocatable TKeyword . (\x k -> k x)) $ catMaybes $ [Just i, s, q, pkg, a] <> foldMap (\(l, l') -> [Just l, Just l']) p
203+
mapMaybe (mkFromLocatable TKeyword . (\x k -> k x)) $ catMaybes $ [Just i, s, q, pkg, a] <> foldMap (\(l, l') -> [Just l, Just l']) p
204+
#endif
201205
, maybeToList $ mkFromLocatable TComment . (\x k -> k x) =<< extractTy @LEpaComment node
202206
, do
203207
L loc expr <- maybeToList $ extractTy @(LHsExpr GhcPs) node
@@ -217,13 +221,17 @@ computeRangeHsSyntacticTokenTypeList ParsedModule {pm_parsed_source} =
217221
HsInteger {} -> TNumberLit
218222
HsIntPrim {} -> TNumberLit
219223
HsWordPrim {} -> TNumberLit
224+
#if MIN_VERSION_ghc(9,9,0)
220225
HsWord8Prim {} -> TNumberLit
221226
HsWord16Prim {} -> TNumberLit
222227
HsWord32Prim {} -> TNumberLit
228+
#endif
223229
HsWord64Prim {} -> TNumberLit
230+
#if MIN_VERSION_ghc(9,9,0)
224231
HsInt8Prim {} -> TNumberLit
225232
HsInt16Prim {} -> TNumberLit
226233
HsInt32Prim {} -> TNumberLit
234+
#endif
227235
HsInt64Prim {} -> TNumberLit
228236
HsFloatPrim {} -> TNumberLit
229237
HsDoublePrim {} -> TNumberLit

0 commit comments

Comments
 (0)