1- {-# LANGUAGE CPP #-}
2- {-# LANGUAGE DataKinds #-}
3- {-# LANGUAGE GADTs #-}
4- {-# LANGUAGE NamedFieldPuns #-}
1+ {-# LANGUAGE CPP #-}
2+ {-# LANGUAGE DataKinds #-}
3+ {-# LANGUAGE GADTs #-}
4+ {-# LANGUAGE NamedFieldPuns #-}
5+ {-# LANGUAGE RankNTypes #-}
6+ {-# LANGUAGE ScopedTypeVariables #-}
7+ {-# LANGUAGE TypeApplications #-}
58
69module Ide.Plugin.Rename (descriptor ) where
710
@@ -11,7 +14,7 @@ import Control.Monad.Trans.Class
1114import Control.Monad.Trans.Except
1215import Data.Containers.ListUtils
1316import Data.Generics
14- import Data.List.Extra hiding (nubOrd )
17+ import Data.List.Extra hiding (nubOrd , replace )
1518import qualified Data.Map as M
1619import Data.Maybe
1720import qualified Data.Text as T
@@ -20,11 +23,16 @@ import Development.IDE.Core.PositionMapping
2023import Development.IDE.Core.Shake
2124import Development.IDE.GHC.Compat
2225import Development.IDE.Spans.AtPoint
26+ #if MIN_VERSION_ghc(9,2,1)
27+ import GHC.Parser.Annotation (AnnContext , AnnList ,
28+ AnnParen , AnnPragma )
29+ #endif
2330#if MIN_VERSION_ghc(9,0,1)
2431import GHC.Types.Name
2532#else
2633import Name
2734#endif
35+ import Development.IDE.GHC.ExactPrint (GetAnnotatedParsedSource (GetAnnotatedParsedSource ))
2836import HieDb.Query
2937import Ide.Plugin.Config
3038import Ide.PluginUtils
@@ -46,7 +54,6 @@ renameProvider state pluginId (RenameParams (TextDocumentIdentifier uri) pos _pr
4654 workspaceRefs <- refsAtName state nfp oldName
4755 let filesRefs = groupOn locToUri workspaceRefs
4856 getFileEdits = ap (getSrcEdits state . renameModRefs newNameText) (locToUri . head )
49-
5057 fileEdits <- mapM getFileEdits filesRefs
5158 pure $ foldl' (<>) mempty fileEdits
5259
@@ -67,14 +74,14 @@ getSrcEdits ::
6774getSrcEdits state updateMod uri = do
6875 ccs <- lift getClientCapabilities
6976 nfp <- safeUriToNfp uri
70- ~ ParsedModule {pm_parsed_source = ps, pm_annotations = apiAnns} <-
77+ annotatedAst <-
7178 handleMaybeM " Error: could not get parsed source" $ liftIO $ runAction
7279 " Rename.GetParsedModuleWithComments"
7380 state
74- (use GetParsedModuleWithComments nfp)
81+ (use GetAnnotatedParsedSource nfp)
82+ let (ps, anns) = (astA annotatedAst, annsA annotatedAst)
7583#if !MIN_VERSION_ghc(9,2,1)
76- let anns = relativiseApiAnns ps apiAnns
77- src = T. pack $ exactPrint ps anns
84+ let src = T. pack $ exactPrint ps anns
7885 res = T. pack $ exactPrint (updateMod <$> ps) anns
7986#else
8087 let src = T. pack $ exactPrint ps
@@ -94,12 +101,32 @@ renameModRefs ::
94101 HsModule GhcPs
95102 -> HsModule GhcPs
96103#endif
104+ #if MIN_VERSION_ghc(9,2,1)
105+ renameModRefs newNameText refs = everywhere $
106+ -- there has to be a better way...
107+ mkT (replace @ AnnListItem ) `extT`
108+ -- replace @AnnList `extT` -- not needed
109+ -- replace @AnnParen `extT` -- not needed
110+ -- replace @AnnPragma `extT` -- not needed
111+ -- replace @AnnContext `extT` -- not needed
112+ -- replace @NoEpAnns `extT` -- not needed
113+ replace @ NameAnn
114+ where
115+ replace :: forall an . Typeable an => LocatedAn an RdrName -> LocatedAn an RdrName
116+ replace (L srcSpan oldRdrName)
117+ | isRef (locA srcSpan) = L srcSpan $ newRdrName oldRdrName
118+ replace lOldRdrName = lOldRdrName
119+ #else
97120renameModRefs newNameText refs = everywhere $ mkT replace
98121 where
99122 replace :: Located RdrName -> Located RdrName
100123 replace (L srcSpan oldRdrName)
101124 | isRef srcSpan = L srcSpan $ newRdrName oldRdrName
102125 replace lOldRdrName = lOldRdrName
126+ #endif
127+
128+ isRef :: SrcSpan -> Bool
129+ isRef = (`elem` refs) . fromJust . srcSpanToLocation
103130
104131 newRdrName :: RdrName -> RdrName
105132 newRdrName oldRdrName = case oldRdrName of
@@ -108,9 +135,8 @@ renameModRefs newNameText refs = everywhere $ mkT replace
108135
109136 newOccName = mkTcOcc $ T. unpack newNameText
110137
111- isRef :: SrcSpan -> Bool
112- isRef = (`elem` refs) . fromJust . srcSpanToLocation
113-
138+ newRdrName :: RdrName -> RdrName
139+ newRdrName = error " not implemented"
114140-------------------------------------------------------------------------------
115141-- Reference finding
116142
0 commit comments