[clangd-dev] textDocument/didOpen, file tracking, reading files from disk, etc.
Ken Domino via clangd-dev
clangd-dev at lists.llvm.org
Fri Nov 29 14:42:52 PST 2019
I've made an implementation for implicit file opens (client asks for
language features, but doen't actually do the open request). Please
check out
https://llvm.discourse.group/t/clangd-explicit-and-implicit-doc-open/205
--Ken
On 11/25/2019 4:22 AM, Sam McCall wrote:
> Hi Ken,
>
> The main difficulty here is that clangd builds and holds a clang AST
> for each file that's open, and uses it to serve requests.
> The C++ AST is often very large and expensive to build, though
> incremental rebuilds are usually cheap (preamble optimisation).
> This means:
> - in practice, requests on non-opened files may be extremely
> expensive (e.g. 20 seconds CPU-bound)
> - we'd need to work out when the AST gets disposed for non-open files
> (for open files, this happens on didClose)
>
> Whether we can find appropriate choices here depends a bit on what the
> workflow is - what does it use the documentSymbol results for? Are the
> documents actually open?
>
> An alternative would be to build a somewhat ad-hoc solution like using
> a pseudo-parser to give approximate outlines for non-opened files.
>
> > balk because from a purist point of view, Clangd only gets the file
> contents from the client
> That's not a concern - clangd needs to read from disk e.g. to
> understand the contents of #includes.
>
> On Mon, Nov 25, 2019 at 9:56 AM Ken Domino via clangd-dev
> <clangd-dev at lists.llvm.org <mailto:clangd-dev at lists.llvm.org>> wrote:
>
> Folks,
>
> I'm currently writing a bunch of extensions for Visual Studio 2019 to
> exercise the client-side functionality against different LSP servers.
> The VS2019 client code makes a textDocument/documentSymbol request
> just
> after initialization, which is perfectly fine according to the LSP
> spec.
> However, in Clangd, if it hadn't received the textDocument/didOpen
> request first, it returns an error because the file is untracked in
> DraftMgr--which is an equally fine interpretation of the spec. So,
> the
> VS2019 client never works with Clangd. I have a patch to Clangd to
> fix
> this, reading the file from the file system and then adding the
> doc so
> it is tracked. But the question is whether people are going to balk
> because from a purist point of view, Clangd only gets the file
> contents
> from the client. I have no control over the client because it's MS
> code,
> and I'd rather not write a client from scratch at this point--I'd
> rather
> spend time working on my server for Antlr and other programming
> languages. What do people think about having Clangd read from disk
> for
> any untracked docs?
>
> Note, I'm sending this to the old mail list instead of Discourse or
> Discord or whatever people call it--not many are using it, the UI
> isn't
> easy, and not as simple as sending an email.
>
> Ken Domino
>
> _______________________________________________
> clangd-dev mailing list
> clangd-dev at lists.llvm.org <mailto:clangd-dev at lists.llvm.org>
> https://lists.llvm.org/cgi-bin/mailman/listinfo/clangd-dev
>
More information about the clangd-dev
mailing list