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 #-}
5
8
6
9
module Ide.Plugin.Rename (descriptor ) where
7
10
@@ -11,7 +14,7 @@ import Control.Monad.Trans.Class
11
14
import Control.Monad.Trans.Except
12
15
import Data.Containers.ListUtils
13
16
import Data.Generics
14
- import Data.List.Extra hiding (nubOrd )
17
+ import Data.List.Extra hiding (nubOrd , replace )
15
18
import qualified Data.Map as M
16
19
import Data.Maybe
17
20
import qualified Data.Text as T
@@ -25,7 +28,10 @@ import GHC.Types.Name
25
28
#else
26
29
import Name
27
30
#endif
31
+ import Debug.Trace
28
32
import Development.IDE.GHC.ExactPrint (GetAnnotatedParsedSource (GetAnnotatedParsedSource ))
33
+ import GHC.Parser.Annotation (AnnContext , AnnList ,
34
+ AnnParen , AnnPragma )
29
35
import HieDb.Query
30
36
import Ide.Plugin.Config
31
37
import Ide.PluginUtils
@@ -44,11 +50,16 @@ renameProvider state pluginId (RenameParams (TextDocumentIdentifier uri) pos _pr
44
50
response $ do
45
51
nfp <- safeUriToNfp uri
46
52
oldName <- getNameAtPos state nfp pos
53
+ traceM $ " oldName: " <> prettyPrint oldName
47
54
workspaceRefs <- refsAtName state nfp oldName
55
+ traceM $ " workspaceRefs: " <> show workspaceRefs
48
56
let filesRefs = groupOn locToUri workspaceRefs
49
57
getFileEdits = ap (getSrcEdits state . renameModRefs newNameText) (locToUri . head )
50
58
59
+ traceM $ " \n filesRefs: " <> show filesRefs
60
+
51
61
fileEdits <- mapM getFileEdits filesRefs
62
+ traceM $ " \n fileEdits: " <> show fileEdits
52
63
pure $ foldl' (<>) mempty fileEdits
53
64
54
65
-------------------------------------------------------------------------------
@@ -95,12 +106,32 @@ renameModRefs ::
95
106
HsModule GhcPs
96
107
-> HsModule GhcPs
97
108
#endif
109
+ #if MIN_VERSION_ghc(9,2,1)
110
+ renameModRefs newNameText refs = everywhere $
111
+ -- there has to be a better way...
112
+ mkT (replace @ AnnListItem ) `extT`
113
+ -- replace @AnnList `extT` -- not needed
114
+ -- replace @AnnParen `extT` -- not needed
115
+ -- replace @AnnPragma `extT` -- not needed
116
+ -- replace @AnnContext `extT` -- not needed
117
+ -- replace @NoEpAnns `extT` -- not needed
118
+ replace @ NameAnn
119
+ where
120
+ replace :: forall an . Typeable an => LocatedAn an RdrName -> LocatedAn an RdrName
121
+ replace (L srcSpan oldRdrName)
122
+ | isRef (locA srcSpan) = L srcSpan $ newRdrName oldRdrName
123
+ replace lOldRdrName = lOldRdrName
124
+ #else
98
125
renameModRefs newNameText refs = everywhere $ mkT replace
99
126
where
100
127
replace :: Located RdrName -> Located RdrName
101
128
replace (L srcSpan oldRdrName)
102
129
| isRef srcSpan = L srcSpan $ newRdrName oldRdrName
103
130
replace lOldRdrName = lOldRdrName
131
+ #endif
132
+
133
+ isRef :: SrcSpan -> Bool
134
+ isRef = (`elem` refs) . fromJust . srcSpanToLocation
104
135
105
136
newRdrName :: RdrName -> RdrName
106
137
newRdrName oldRdrName = case oldRdrName of
@@ -109,9 +140,8 @@ renameModRefs newNameText refs = everywhere $ mkT replace
109
140
110
141
newOccName = mkTcOcc $ T. unpack newNameText
111
142
112
- isRef :: SrcSpan -> Bool
113
- isRef = (`elem` refs) . fromJust . srcSpanToLocation
114
-
143
+ newRdrName :: RdrName -> RdrName
144
+ newRdrName = error " not implemented"
115
145
-------------------------------------------------------------------------------
116
146
-- Reference finding
117
147
0 commit comments