<div dir="ltr">From the YCM side: I think this is a <i>fantastic</i> idea! We were thinking about pulling out the C++ completion out of ycmd and into a separate server that ycmd would talk to (much like it works for several other languages already) but hearing that clang devs are taking this on saves us a bunch of work!<div><br></div><div>And it's great to hear it will follow the common completion API MS is pushing; we'll be supporting that API on the back-end of ycmd some time in the future (and clangd might accelerate that). We're looking into possibly supporting it on the front-end as well.</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 25, 2017 at 6:38 AM, Manuel Klimek <span dir="ltr"><<a href="mailto:klimek@google.com" target="_blank">klimek@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><span class=""><div dir="ltr">On Wed, Jan 25, 2017 at 3:34 PM Jusufadis Bakamovic <<a href="mailto:jbakam@gmail.com" target="_blank">jbakam@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_4275048355256936777gmail_msg">Hi,<div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">I think this is an excellent idea which should be pursued as far as possible as it will enable us to seamlessly integrate multiple clang-based services into the development environment. Possibly it will enable us to integrate non-clang-based kind of services as well. I might say that I've developed a (prototype) solution which somewhat resembles this idea (implementation goes up to extent of my current needs & time resources). See [1] for a short overview but in general it is a generic, message-queue based, client-server architecture which acts as a thin proxy layer between the client requests and concrete service implementation (i.e. syntax-highlighting, clang-format, etc.). Server transparently makes sure that each service is run in its own context (thread/process) and provides full-control of services (startup-(all), shutdown-(all), run, etc.): see [2] for server implementation. This way a service developer can completely put focus on service implementation details itself without caring about other details. See [3] for base service implementation and [4] & [5] for examples of concrete service implementations (clang-format service & syntax-highlight service).  </div><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">What would be a way to get involved with ClangD?</div></div></blockquote><div><br></div></span><div>Lurk on the cfe-commits mailing list for clangd based code reviews to come in (Benjamin is working on getting an initial prototype up), and contribute there.</div><div><br></div><div>Once we have more of the basic infrastructure in place, we'll accept patches like we do for the rest of clang and have a bug list.</div><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_4275048355256936777gmail_msg"><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">Cheers,</div><div class="m_4275048355256936777gmail_msg">Adi</div><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">[1] <a href="https://github.com/JBakamovic/yavide/blob/master/docs/services_framework.md#framework" class="m_4275048355256936777gmail_msg" target="_blank">https://github.com/<wbr>JBakamovic/yavide/blob/master/<wbr>docs/services_framework.md#<wbr>framework</a></div><div class="m_4275048355256936777gmail_msg">[2] <a href="https://github.com/JBakamovic/yavide/blob/master/core/server/yavide_server.py" class="m_4275048355256936777gmail_msg" target="_blank">https://github.com/<wbr>JBakamovic/yavide/blob/master/<wbr>core/server/yavide_server.py</a></div><div class="m_4275048355256936777gmail_msg">[3] <a href="https://github.com/JBakamovic/yavide/blob/master/core/services/yavide_service.py" class="m_4275048355256936777gmail_msg" target="_blank">https://github.com/<wbr>JBakamovic/yavide/blob/master/<wbr>core/services/yavide_service.<wbr>py</a></div><div class="m_4275048355256936777gmail_msg">[4] <a href="https://github.com/JBakamovic/yavide/blob/master/core/services/clang_formatter_service.py" class="m_4275048355256936777gmail_msg" target="_blank">https://github.com/<wbr>JBakamovic/yavide/blob/master/<wbr>core/services/clang_formatter_<wbr>service.py</a><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">[5] <a href="https://github.com/JBakamovic/yavide/blob/master/core/services/syntax_highlighter_service.py" class="m_4275048355256936777gmail_msg" target="_blank">https://github.com/<wbr>JBakamovic/yavide/blob/master/<wbr>core/services/syntax_<wbr>highlighter_service.py</a></div><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div></div><div class="gmail_extra m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"><div class="gmail_quote m_4275048355256936777gmail_msg"></div></div><div class="gmail_extra m_4275048355256936777gmail_msg"><div class="gmail_quote m_4275048355256936777gmail_msg">On 25 January 2017 at 14:11, Manuel Klimek via cfe-dev <span dir="ltr" class="m_4275048355256936777gmail_msg"><<a href="mailto:cfe-dev@lists.llvm.org" class="m_4275048355256936777gmail_msg" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br class="m_4275048355256936777gmail_msg"></div></div><div class="gmail_extra m_4275048355256936777gmail_msg"><div class="gmail_quote m_4275048355256936777gmail_msg"><blockquote class="gmail_quote m_4275048355256936777gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_4275048355256936777gmail_msg">Hi fellow clang devs,<div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">we wanted to let you know that we're (finally) starting up work on ClangD, which you might know from email threads such as [1] (June 2012!).</div><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">In the meantime, YCM had done a good enough job at packaging up a libclang interface to our favorite editors, and other priorities (like modules) have eaten up a lot of folks priority lunches.</div><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">What has changed?</div><div class="m_4275048355256936777gmail_msg">1. YCM is starting to develop more and more into a language multiplexer, with other languages (Go, Typescript, etc) providing their own servers to talk to</div><div class="m_4275048355256936777gmail_msg">2. MS has created a language server protocol [2], which already has both a bunch of client and server implementations</div><div class="m_4275048355256936777gmail_msg">3. Debugging through python into libclang crashers is a pain and eating our support resources</div><div class="m_4275048355256936777gmail_msg">4. While libclang is a good abstraction if you want to have something run in your process with close coupling, a standard protocol like the language server protocol seems like a better way to allow fast iterations on the server implementation without the need to keep backward-compatibility hacks through a restrictive C API.</div><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">One of the cool things about the MS language server protocol is that it seems to not actually do any networking, which means that we do not need to introduce any new dependencies into clang-tools-extra, which is where we want to start developing this.</div><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">If you have any thoughts / concerns let me know; otherwise look forward to code reviews on initial ClangD dropping by :D</div><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">Cheers,</div><div class="m_4275048355256936777gmail_msg">/Manuel</div><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div><div class="m_4275048355256936777gmail_msg">[1] <a href="http://lists.llvm.org/pipermail/cfe-dev/2012-June/022028.html" class="m_4275048355256936777gmail_msg" target="_blank">http://lists.llvm.org/<wbr>pipermail/cfe-dev/2012-June/<wbr>022028.html</a></div><div class="m_4275048355256936777gmail_msg">[2] <a href="https://github.com/Microsoft/language-server-protocol" class="m_4275048355256936777gmail_msg" target="_blank">https://github.com/<wbr>Microsoft/language-server-<wbr>protocol</a></div><div class="m_4275048355256936777gmail_msg"><br class="m_4275048355256936777gmail_msg"></div></div>
<br class="m_4275048355256936777gmail_msg"></blockquote></div></div><div class="gmail_extra m_4275048355256936777gmail_msg"><div class="gmail_quote m_4275048355256936777gmail_msg"><blockquote class="gmail_quote m_4275048355256936777gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">______________________________<wbr>_________________<br class="m_4275048355256936777gmail_msg">
cfe-dev mailing list<br class="m_4275048355256936777gmail_msg">
<a href="mailto:cfe-dev@lists.llvm.org" class="m_4275048355256936777gmail_msg" target="_blank">cfe-dev@lists.llvm.org</a><br class="m_4275048355256936777gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" class="m_4275048355256936777gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br class="m_4275048355256936777gmail_msg">
<br class="m_4275048355256936777gmail_msg"></blockquote></div></div></blockquote></div></div></div></div>
</blockquote></div><br></div></div>