usaxena95 added inline comments.

================
Comment at: clang-tools-extra/clangd/index/FileIndex.cpp:86
+    // Add macro references.
+    for (const auto &IDToRefs : MacroRefsToIndex->MacroRefs) {
+      for (const auto &Range : IDToRefs.second) {
----------------
ilya-biryukov wrote:
> hokein wrote:
> > ilya-biryukov wrote:
> > > This is trying to emulate existing logic in `SymbolCollector::finish`. Is 
> > > there a way we could share this?
> > > Would avoid creating extra copies of reference slabs and allow to keep 
> > > the code in one place, rather than scattering it between `FileIndex.cpp` 
> > > and `SymbolCollector.cpp`. Would also allow to keep `toURI` private, 
> > > meaning we don't have to worry about naming it and the fact it's exposed 
> > > in the public interface.
> > > 
> > > One potential way to do this is to have an alternative version of 
> > > `handleMacroOccurence`, which would fill `SymbolCollector::MacroRefs` 
> > > directly and call this right after `indexTopLevelDecls`.
> > > Would that work?
> > +1 on the concern about performance (this is a hot function, we are paying 
> > an extra cost of copying all refs, which should be avoided), and the 
> > layering of `toURI`.
> > 
> > > One potential way to do this is to have an alternative version of 
> > > handleMacroOccurence, which would fill SymbolCollector::MacroRefs 
> > > directly and call this right after indexTopLevelDecls.
> > > Would that work?
> > 
> > the main problem is that at this point (parsing is finished), preprocessor 
> > callback is not available, so we won't see macro references 
> > (`SymbolCollector::handleMacroOccurence` will only receive macro 
> > definitions).
> > 
> > I think two options:
> > - as mentioned above, add alternative version of `handleMacroOccurence` in 
> > SymbolCollector, calling it **before** `indexTopLevelDecls` (because 
> > `finish` is called in `indexTopLevelDecls` which we have no way to 
> > customize);
> > - or we could add a finish callback to the `SymbolCollector` which is 
> > called in `SymbolCollector::finish`, and put this logic to the callback.
> > 
> Thanks, good point, in my proposal we should populate macro references before 
> calling `indexTopLevelDecls`.
> 
> I would still suggest going with the first option, it seems simpler to me. 
> But up to you, @usaxena95.
This looks much better now. Thanks for your inputs Haojian and Ilya.
I have added another version of `handleMacroOccurence` to add the 
`MainFileMacros` to the references. 

> add alternative version of handleMacroOccurence in SymbolCollector, calling 
> it before `indexTopLevelDecls`

@hokein 
SymbolCollector doesn't build the slabs in the `finish` so I think it is still 
fine to call it after `indexTopLevelDecls`. But doing this before `finish` 
makes more sense semantically and reasonable.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D71406/new/

https://reviews.llvm.org/D71406



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to