<div dir="ltr">Hi Nathan,<div><br></div><div>clangd has an experimental option to automatically build an index for the projects (i.e. the CDBs) of the files you're editing in the background and load them on subsequent runs.</div><div>We hope this is going to become the default in the long-term, the idea is that the index will into per-file chunks and those chunks will be loaded when the files are accessed.</div><div>I believe it currently won't provide the definition locations, because they would be in the chunks for the '.cpp' files and '.cpp' files are not included by the users of the library.</div><div><br></div><div>However, if we figure out how to load this extra information for the symbols from the headers chunks, we should be covered.</div><div><a class="gmail_plusreply" id="plusReplyChip-3" href="mailto:sammccall@google.com" tabindex="-1">+Sam McCall</a>, <a class="gmail_plusreply" id="plusReplyChip-4" href="mailto:kadircet@google.com" tabindex="-1">+Kadir Çetinkaya</a>, who are actually working on this, they might have ideas on how to do it best.</div><div><br></div><div>PS to try out the background index, build clangd from the latest head (it's important to sync before building, a change that loads the index has landed today) and run clangd with '-background-index' flag.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jan 10, 2019 at 9:12 AM Nathan Ridge via clangd-dev <<a href="mailto:clangd-dev@lists.llvm.org">clangd-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi clangd-dev,<br>
<br>
Suppose you are working on a codebase that involves multiple projects: for example, an application and one or more libraries it depends on. The projects may live in distinct repositories, have distinct build systems, and therefore produce distinct compilation database files; yet, it may be useful to treat the set of projects as a single codebase for editing purposes.<br>
<br>
Specifically, it would be useful to have a way for clangd to index a set of such projects together and cross-reference them as a single codebase.<br>
<br>
To give a concrete example, consider the following toy repository:<br>
<br>
<a href="https://github.com/simark/clangd-multi-project-test" rel="noreferrer" target="_blank">https://github.com/simark/clangd-multi-project-test</a><br>
<br>
It consists of a library called "libfoo" and an application "bar" which uses the library. For ease of demonstration they are together in the same repository, but they are built separately and produce separate compilation database files. There is a "setup.sh" script to easily configure and build them both.<br>
<br>
To be specific about what I mean by cross-referencing them as a single codebase: we would like to be able to set up clangd in such a way that:<br>
<br>
* "Go to definition" on the use of Multiply() in bar.cpp takes you to the definition in foo.cpp (not the declaration in foo.h)<br>
* Searching for references of Multiply() in foo.cpp finds the usage in bar.cpp<br>
<br>
We also have a suggestion for how clangd could support such a setup:<br>
<br>
* Clangd could be modified to accept multiple compilation database files, either at startup time via command line flags, or in the "initialize" request, or both.<br>
* When given multiple compilation database files, clangd would merge them into a single compilation database, and then proceed as if it had been given the merged database.<br>
<br>
Any feedback on either the described use case, or the suggested solution, would be appreciated!<br>
<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><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Regards,</div><div>Ilya Biryukov</div></div></div></div></div>