malaperle added a comment.

In https://reviews.llvm.org/D40897#946911, @hokein wrote:

> Our rough plan would be
>
> 1. Define the Symbol structure.
> 2. Design the interfaces of SymbolIndex, ASTIndex.
> 3. Combine 1) and 2) together to make global code completion work (we'd use 
> YAML dataset for LLVM project, note that this is not a final solution, it 
> would be hidden in an `--experimental` flag).
> 4. Switch to use the dataset from index-while-building when it is ready.


Thanks for the explanation. On my end, the plan is not quite sequential. The 
branch I am developing has interfaces for querying, building and a dataset 
format, let's call it ClangdIndexDataStorage, which is different from 
index-while-building (libIndexStore). I also have a version that uses 
libIndexStore through the same interfaces. So with that in mind, there are too 
main activities:

1. Work towards the interfaces for using the index (this patch, and Eric's). 
From my perspective, I will make sure that it can be as compatible as possible 
with reading the index from disk and the features we want to develop. One 
important aspect is to have a good balance between memory and performance. In 
Eclipse CDT and also the branch I work on using ClangdIndexDataStorage, the 
emphasis was to minimize memory consumption and have a configurable cache size. 
But different choices could be made here, perhaps I can start a discussion 
about that separately.
2. Work on index-while-building or the other format getting adopted in Clangd. 
The index-while-building (libIndexStore) is promising but also has a few 
missing pieces. We need a mapping solution (LMDB equivalent). We also need to 
make sure it's fast enough and contain enough information for the features we 
will need, etc.



================
Comment at: clangd/Symbol.h:23
+  // The path of the source file where a symbol occurs.
+  std::string FilePath;
+  // The offset to the first character of the symbol from the beginning of the
----------------
sammccall wrote:
> ioeric wrote:
> > Is this relative or absolute?
> Having every symbol own a copy of the filepath seems wasteful.
> It seems likely that the index will have per-file information too, so this 
> representation should likely be a key to that. Hash of the filepath might 
> work?
How we model it is that a symbol doesn't have a "location", but its occurrence 
do. One could consider the location of a symbol to be either its declaration 
occurrence (SymbolRole::Declaration) or its definition (SymbolRole::Definition).
What we do to get the location path is each occurrence has a pointer (a 
"database" pointer, but it doesn't matter) to a file entry and then we get the 
path from the entry.

So conceptually, it works a bit like this (although it fetches information on 
disk).
```
class IndexOccurrence {
IndexOccurrence *FilePtr;

std::string Occurrence::getPath() {
  return FilePtr->getPath();
}
};
```


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D40897



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

Reply via email to