ioeric accepted this revision.
ioeric added inline comments.

================
Comment at: clangd/index/FileIndex.h:47
+  // The shared_ptr keeps the symbols alive.
+  std::shared_ptr<SymbolIndex> buildMemIndex();
 
----------------
kbobyrev wrote:
> sammccall wrote:
> > ioeric wrote:
> > > Maybe avoid hardcoding the index name, so that we could potentially 
> > > switch to use a different index implementation?
> > > 
> > > We might also want to allow user to specify different index 
> > > implementations for file index e.g. main file dynamic index might prefer 
> > > MemIndex while Dex might be a better choice for the preamble index. 
> > I don't think "returns an index of unspecified implementation" is the best 
> > contract. MemIndex and DexIndex will both continue to exist, and they have 
> > different performance characteristics (roughly fast build vs fast query). 
> > So it should be up to the caller, no?
> We could make the index type a template parameter to allow users decide which 
> one they want (also, this could be have a default value, e.g. `MemIndex` and 
> later `DexIndex`). Would that be a viable solution?
Provide one interface for each index implementation sounds good to me. Thanks 
for the clarification!


================
Comment at: clangd/index/Index.h:15
 #include "clang/Lex/Lexer.h"
+#include "llvm/ADT/Any.h"
 #include "llvm/ADT/DenseMap.h"
----------------
nit: no longer needed?


================
Comment at: clangd/index/dex/DexIndex.h:42
+  // All symbols must outlive this index.
+  template <typename Range> DexIndex(Range &&Symbols) {
+    for (auto &&Sym : Symbols)
----------------
sammccall wrote:
> ioeric wrote:
> > sammccall wrote:
> > > ioeric wrote:
> > > > Why is this constructor needed? I think this could restrict the 
> > > > flexibility of DexIndex initialization, in case we need to pass in 
> > > > extra parameters here.
> > > I'm not sure exactly what you mean here.
> > > 
> > > We need a way to specify the symbols to be indexed.
> > > Because these are now immutable, doing that in the constructor if 
> > > possible is best.
> > > 
> > > Previously this was a vector<const Symbol*>, but that sometimes required 
> > > us to construct that big vector, dereference all those pointers, and 
> > > throw away the vector. This signature is strictly more general (if you 
> > > have a vector of pointers, you can pass `make_pointee_range<const 
> > > Symbol>`)
> > > 
> > > > in case we need to pass in extra parameters here.
> > > What stops us adding more parameters?
> > > What stops us adding more parameters?
> > I thought this template was added so that we could use it as a drop-in 
> > replacement of `MemIndex` (with the same signature) e.g. in `FileIndex`? I 
> > might have overthought though.
> > 
> > Thanks for the explanation!
> Sure, Dex and MemIndex had the same constructor signatures as each other 
> before this patch, and they have the same as each other after this patch.
> 
> That makes it convenient to use them interchangeably, but there's no hard 
> requirement (no construction from templates etc).
Sounds good.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D51422



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

Reply via email to