@@ -101,6 +101,7 @@ renameProvider state pluginId (RenameParams _prog (TextDocumentIdentifier uri) p
101
101
[] -> throwError $ PluginInvalidParams " No symbol to rename at given position"
102
102
_ -> do
103
103
refs <- HS. fromList . concat <$> mapM (refsAtName state nfp) oldNames
104
+
104
105
-- Validate rename
105
106
crossModuleEnabled <- liftIO $ runAction " rename: config" state $ usePropertyAction # crossModule pluginId properties
106
107
unless crossModuleEnabled $ failWhenImportOrExport state nfp refs oldNames
@@ -196,10 +197,7 @@ refsAtName state nfp name = do
196
197
dbRefs <- case nameModule_maybe name of
197
198
Nothing -> pure []
198
199
Just mod -> liftIO $ mapMaybe rowToLoc <$> withHieDb (\ hieDb ->
199
- -- GHC inserts `Use`s of record constructor everywhere where its record selectors are used,
200
- -- which leads to fields being renamed whenever corresponding constructor is renamed.
201
- -- see https://github.com/haskell/haskell-language-server/issues/2915
202
- -- To work around this, we filter out compiler-generated references.
200
+ -- See Note [Generated references]
203
201
filter (\ (refRow HieDb. :. _) -> refIsGenerated refRow) <$>
204
202
findReferences
205
203
hieDb
@@ -235,8 +233,13 @@ handleGetHieAst state nfp =
235
233
-- which is bad (see https://github.com/haskell/haskell-language-server/issues/3799)
236
234
fmap removeGenerated $ runActionE " Rename.GetHieAst" state $ useE GetHieAst nfp
237
235
238
- -- | We don't want to rename in code generated by GHC as this gives false positives.
239
- -- So we restrict the HIE file to remove all the generated code.
236
+ {- Note [Generated references]
237
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
238
+ GHC inserts `Use`s of record constructor everywhere where its record selectors are used,
239
+ which leads to record fields being renamed whenever corresponding constructor is renamed.
240
+ see https://github.com/haskell/haskell-language-server/issues/2915
241
+ To work around this, we filter out compiler-generated references.
242
+ -}
240
243
removeGenerated :: HieAstResult -> HieAstResult
241
244
removeGenerated HAR {.. } =
242
245
HAR {hieAst = sourceOnlyAsts, refMap = sourceOnlyRefMap, .. }
0 commit comments