[PATCH] D44293: [clangd] Fix irrelevant declaratations in goto definition (on macros).
Ilya Biryukov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 13 03:02:01 PDT 2018
ilya-biryukov added inline comments.
================
Comment at: clangd/XRefs.cpp:201
std::vector<MacroDecl> MacroInfos = DeclMacrosFinder->takeMacroInfos();
+ if (!MacroInfos.empty()) {
+ for (auto Item : MacroInfos) {
----------------
hokein wrote:
> ilya-biryukov wrote:
> > I wonder whether we should fix the `DeclrationAndMacrosFinder` to not return declarations coming from macro instantiations instead.
> > There are other clients (e.g. document highlights) that will probably break in the same way.
> >
> > Do you think it would be possible and it would make sense for `DeclrationAndMacrosFinder` to only return a macro in this case and not return Decls coming from macro expansions?
> I thought about it initially, but the information provided `handleDeclOccurrence` is limited...the occurrence location (`FID` and `Offset`) is expansion location (which is not always we want). That being said, when GoToDefinition on a macro, all declarations inside the macro body will be picked up.
>
> In document hover implementation, we also use the same mechanism to avoid this problem :(
>
As discussed offline, we should probably move this logic to `DeclrationAndMacrosFinder` so that all its clients (hover, documentHighlights, findDefinitions) are consistent.
Having a single function in `DeclrationAndMacrosFinder` that returns results (currently there are two: `takeDecls()` and `takeMacros()`) would allow that with minimal changes.
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D44293
More information about the cfe-commits
mailing list