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
@@ -20,11 +23,16 @@ import Development.IDE.Core.PositionMapping
20
23
import Development.IDE.Core.Shake
21
24
import Development.IDE.GHC.Compat
22
25
import Development.IDE.Spans.AtPoint
26
+ #if MIN_VERSION_ghc(9,2,1)
27
+ import GHC.Parser.Annotation (AnnContext , AnnList ,
28
+ AnnParen , AnnPragma )
29
+ #endif
23
30
#if MIN_VERSION_ghc(9,0,1)
24
31
import GHC.Types.Name
25
32
#else
26
33
import Name
27
34
#endif
35
+ import Debug.Trace
28
36
import Development.IDE.GHC.ExactPrint (GetAnnotatedParsedSource (GetAnnotatedParsedSource ))
29
37
import HieDb.Query
30
38
import Ide.Plugin.Config
@@ -44,11 +52,16 @@ renameProvider state pluginId (RenameParams (TextDocumentIdentifier uri) pos _pr
44
52
response $ do
45
53
nfp <- safeUriToNfp uri
46
54
oldName <- getNameAtPos state nfp pos
55
+ traceM $ " oldName: " <> prettyPrint oldName
47
56
workspaceRefs <- refsAtName state nfp oldName
57
+ traceM $ " workspaceRefs: " <> show workspaceRefs
48
58
let filesRefs = groupOn locToUri workspaceRefs
49
59
getFileEdits = ap (getSrcEdits state . renameModRefs newNameText) (locToUri . head )
50
60
61
+ traceM $ " \n filesRefs: " <> show filesRefs
62
+
51
63
fileEdits <- mapM getFileEdits filesRefs
64
+ traceM $ " \n fileEdits: " <> show fileEdits
52
65
pure $ foldl' (<>) mempty fileEdits
53
66
54
67
-------------------------------------------------------------------------------
@@ -73,7 +86,7 @@ getSrcEdits state updateMod uri = do
73
86
" Rename.GetParsedModuleWithComments"
74
87
state
75
88
(use GetAnnotatedParsedSource nfp)
76
- let (ps, apiAnns ) = (astA annotatedAst, annsA annotatedAst)
89
+ let (ps, anns ) = (astA annotatedAst, annsA annotatedAst)
77
90
#if !MIN_VERSION_ghc(9,2,1)
78
91
let src = T. pack $ exactPrint ps anns
79
92
res = T. pack $ exactPrint (updateMod <$> ps) anns
@@ -95,12 +108,32 @@ renameModRefs ::
95
108
HsModule GhcPs
96
109
-> HsModule GhcPs
97
110
#endif
111
+ #if MIN_VERSION_ghc(9,2,1)
112
+ renameModRefs newNameText refs = everywhere $
113
+ -- there has to be a better way...
114
+ mkT (replace @ AnnListItem ) `extT`
115
+ -- replace @AnnList `extT` -- not needed
116
+ -- replace @AnnParen `extT` -- not needed
117
+ -- replace @AnnPragma `extT` -- not needed
118
+ -- replace @AnnContext `extT` -- not needed
119
+ -- replace @NoEpAnns `extT` -- not needed
120
+ replace @ NameAnn
121
+ where
122
+ replace :: forall an . Typeable an => LocatedAn an RdrName -> LocatedAn an RdrName
123
+ replace (L srcSpan oldRdrName)
124
+ | isRef (locA srcSpan) = L srcSpan $ newRdrName oldRdrName
125
+ replace lOldRdrName = lOldRdrName
126
+ #else
98
127
renameModRefs newNameText refs = everywhere $ mkT replace
99
128
where
100
129
replace :: Located RdrName -> Located RdrName
101
130
replace (L srcSpan oldRdrName)
102
131
| isRef srcSpan = L srcSpan $ newRdrName oldRdrName
103
132
replace lOldRdrName = lOldRdrName
133
+ #endif
134
+
135
+ isRef :: SrcSpan -> Bool
136
+ isRef = (`elem` refs) . fromJust . srcSpanToLocation
104
137
105
138
newRdrName :: RdrName -> RdrName
106
139
newRdrName oldRdrName = case oldRdrName of
@@ -109,9 +142,8 @@ renameModRefs newNameText refs = everywhere $ mkT replace
109
142
110
143
newOccName = mkTcOcc $ T. unpack newNameText
111
144
112
- isRef :: SrcSpan -> Bool
113
- isRef = (`elem` refs) . fromJust . srcSpanToLocation
114
-
145
+ newRdrName :: RdrName -> RdrName
146
+ newRdrName = error " not implemented"
115
147
-------------------------------------------------------------------------------
116
148
-- Reference finding
117
149
0 commit comments