[PATCH] D70008: [clangd] Store xref for Macros in ParsedAST.

UTKARSH SAXENA via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 12 04:48:16 PST 2019


usaxena95 marked an inline comment as done.
usaxena95 added inline comments.


================
Comment at: clang-tools-extra/clangd/CollectMacros.h:29
   std::vector<Range> Ranges;
+  llvm::DenseMap<SymbolID, std::set<Location>> MacroRefs;
 };
----------------
hokein wrote:
> I think the `Ranges` and `MacrosRefs` have a lot of duplications, it is wasteful to store a same range twice. We don't need the MainFilePath, the callers should know the corresponding file path for the AST. Something like `llvm::DenseMap<SymbolID, std::vector<Range>> Refs;` should be enough.
> 
> symbol id for macro generation is required the definition location, but only defined macros have it, we may need an extra `vector` to store ranges for undefined macros.
> 
> ```
> #ifndef abc // there is no macro info* for abc, so getSymbolID will fail, but we still want it, e.g. in semantic highlighting.
> #endif
> ``` 
> 
> There may be more tricky cases, it would be nice to have in the test.
> 
> ```
> #define abc 1
> #undef abc
> 
> #define abc 2
> #undef abc
> ```
- using `llvm::DenseMap<SymbolID, std::set<Range>> Refs;` as de-duplication is easier.
- Iterating on all the ranges is a pain. Let me know if you want to provide a different method to return all the ranges (sad part: lot of copying).
- I had multiple definitions of a macro in the test case, but I have shifted to its separate test case.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D70008





More information about the cfe-commits mailing list