[cfe-dev] Clang-based indexer and code navigator
ryan.prichard at gmail.com
Sun Mar 10 13:53:45 PDT 2013
On 03/10/2013 05:25 AM, ramneek wrote:
> Looks great from the demo images. Haven't tried it though.
> Do i need to reindex everything in case if i make a minor change in a file or does it track dependencies and patches the index appropriately?
There is an --incremental option to sw-clang-indexer. It doesn't patch
the index, but it avoids reindexing every translation unit when the
project is reindexed. With that option, the indexer saves an index file
for each translation unit and avoids reindexing a translation unit if
none of its source files have changed. The indexer still merges all of
the translation units' indices into a single index. On my machine, for
LLVM+Clang, --incremental reduces the reindexing time from about 5.5
minutes to 16 seconds. It has a few limitations:
- It doesn't keep track of compiler options, so if the options change,
it can incorrectly reuse a translation unit's index file.
- Keeping around index files for each translation unit uses much more
disk space. While the index for LLVM+Clang is about 160MB, the
intermediate index files total 2.8GB. I believe the difference in sizes
is due to header files. (The per-translation-unit indices are already
partitioned by source file to reduce merge time; placing each partition
into a separate file could theoretically reduce the disk usage.)
- If there are somehow multiple translation units in
compile_commands.json with the same object file output, then the indexer
may behave unpredictably, because it may spawn a subprocess that
overwrites an index file while simultaneously reading the index file.
This should be easy to fix.
More information about the cfe-dev