@@ -14,7 +14,7 @@ import Control.Monad
1414import Control.Monad.Except (ExceptT , throwError )
1515import Control.Monad.IO.Class (MonadIO , liftIO )
1616import Control.Monad.Trans.Class (lift )
17- import Data.Bifunctor ( first )
17+ import Data.Either ( rights )
1818import Data.Foldable (fold )
1919import Data.Generics
2020import Data.Hashable
@@ -31,14 +31,11 @@ import qualified Data.Text as T
3131import Development.IDE (Recorder , WithPriority ,
3232 usePropertyAction )
3333import Development.IDE.Core.PluginUtils
34- import Development.IDE.Core.PositionMapping
3534import Development.IDE.Core.RuleTypes
3635import Development.IDE.Core.Service
3736import Development.IDE.Core.Shake
38- import Development.IDE.GHC.Compat.Core
37+ import Development.IDE.GHC.Compat
3938import Development.IDE.GHC.Compat.ExactPrint
40- import Development.IDE.GHC.Compat.Parser
41- import Development.IDE.GHC.Compat.Units
4239import Development.IDE.GHC.Error
4340import Development.IDE.GHC.ExactPrint
4441import qualified Development.IDE.GHC.ExactPrint as E
@@ -212,26 +209,29 @@ refsAtName state nfp name = do
212209 )
213210 pure $ nameLocs name ast ++ dbRefs
214211
215- nameLocs :: Name -> ( HieAstResult , PositionMapping ) -> [Location ]
216- nameLocs name (HAR _ _ rm _ _, pm ) =
217- concatMap (mapMaybe (toCurrentLocation pm . realSrcSpanToLocation . fst ))
212+ nameLocs :: Name -> HieAstResult -> [Location ]
213+ nameLocs name (HAR _ _ rm _ _) =
214+ concatMap (map ( realSrcSpanToLocation . fst ))
218215 (M. lookup (Right name) rm)
219216
220217---------------------------------------------------------------------------------------------------
221218-- Util
222219
223220getNamesAtPos :: MonadIO m => IdeState -> NormalizedFilePath -> Position -> ExceptT PluginError m [Name ]
224221getNamesAtPos state nfp pos = do
225- ( HAR {hieAst}, pm) <- handleGetHieAst state nfp
226- pure $ getNamesAtPoint hieAst pos pm
222+ HAR {hieAst} <- handleGetHieAst state nfp
223+ pure $ getNamesAtPoint' hieAst pos
227224
228225handleGetHieAst ::
229226 MonadIO m =>
230227 IdeState ->
231228 NormalizedFilePath ->
232- ExceptT PluginError m ( HieAstResult , PositionMapping )
229+ ExceptT PluginError m HieAstResult
233230handleGetHieAst state nfp =
234- fmap (first removeGenerated) $ runActionE " Rename.GetHieAst" state $ useWithStaleE GetHieAst nfp
231+ -- We explicitly do not want to allow a stale version here - we only want to rename if
232+ -- the module compiles, otherwise we can't guarantee that we'll rename everything,
233+ -- which is bad (see https://github.com/haskell/haskell-language-server/issues/3799)
234+ fmap removeGenerated $ runActionE " Rename.GetHieAst" state $ useE GetHieAst nfp
235235
236236-- | We don't want to rename in code generated by GHC as this gives false positives.
237237-- So we restrict the HIE file to remove all the generated code.
@@ -246,6 +246,11 @@ removeGenerated HAR{..} = HAR{hieAst = go hieAst,..}
246246collectWith :: (Hashable a , Eq b ) => (a -> b ) -> HashSet a -> [(b , HashSet a )]
247247collectWith f = map (\ (a :| as) -> (f a, HS. fromList (a: as))) . groupWith f . HS. toList
248248
249+ -- | A variant 'getNamesAtPoint' that does not expect a 'PositionMapping'
250+ getNamesAtPoint' :: HieASTs a -> Position -> [Name ]
251+ getNamesAtPoint' hf pos =
252+ concat $ pointCommand hf pos (rights . M. keys . getNodeIds)
253+
249254locToUri :: Location -> Uri
250255locToUri (Location uri _) = uri
251256
0 commit comments