<div dir="ltr"><div dir="ltr">On Fri, Jan 11, 2019 at 1:06 AM Nathan Ridge via clangd-dev <<a href="mailto:clangd-dev@lists.llvm.org">clangd-dev@lists.llvm.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Thanks for the info! I was aware of the auto-index functionality, but didn't know that it already supported multiple CDBs.<br>
<br>
> Then if you've just files open from source/bar directory in your clangd instance, <br>
> it won't become aware of the other compilation database that lies in libfoo and <br>
> only give you declaration for Multiply, but if you open any source file under <br>
> source/libfoo (not necessarily libfoo/foo.cpp itself) clangd will be able to index <br>
> that directory as well and start giving you definition location for Multiply as well. <br>
> (You also need to #include "foo.h" in foo.cpp but I assume that was unintentional.)<br>
><br>
> Does that sound good?<br>
<br>
It sounds very good!<br></blockquote><div>Caveats here: how the auto-index behaves with multiple CDBs hasn't been heavily tested yet, and I think there are likely bugs.</div><div>What Ilya describes is the behavior that naturally fell out of the design (given that a clangd instance supports multiple CDBs, which aren't known up-front).</div><div>The index works by building a whole TU at once (using a command from the main-file's CDB), and then partitioning the symbols according to the files they appear in. We probably accidentally assumed that each partition is then associated with the TU's CDB, which may cause some problems (if leaf/leaf.cc and lib/lib.cc and both include lib/lib.h, then we'll end up indexing lib.h in both the leaf/ and lib/ projects).</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Out of curiosity, though - if a client wanted to send all the CDBs upfront, to avoid the requirement that you have to open a file from each project, would that be a reasonable capability to add?<br></blockquote><div>That seems doable. The way this currently works is:</div><div> - A CDB is "discovered" the first time we try to get the command for a file under its directory</div><div> - once a CDB is "discovered", the auto-index loads any index shards that exist for the CDB, and starts indexing files that don't have an up-to-date shard</div><div>So we could add a custom command or a startup option to make clangd discover particular CDBs (e.g. by looking for a compile command for dir/dummy.txt, and then throwing it away).</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Thanks,<br>
Nate<br>
_______________________________________________<br>
clangd-dev mailing list<br>
<a href="mailto:clangd-dev@lists.llvm.org" target="_blank">clangd-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/clangd-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/clangd-dev</a><br>
</blockquote></div></div>