I think we always need something like TM to have an in-process cache for symbols/tags. We're still a lightweight IDE so a my requirement would be to not exchange megabytes of json text on every keystroke.

It's definitely not megabytes. If you are curious about how typical communication looks like, you can try the geany-lsp plugin and set rpc_log in configuration to some file - you will get the full JSON RPC communication.

Question: How does a language server get access to the documents? Does it have to be saved on disk so that the server can open() it?

Basically, one first sends

https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initialize

where one can specify either a single project directory or multiple workspace directories. And then there are the document synchronization notifications informing about what is happening:

https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_synchronization

If no, do we have to constantly send the entire document via IPC or network?

Only deltas (if servers support it, but all those I tried do, otherwise one would indeed have to send the whole document), see

https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_didChange

I was slightly worried if documents don't get de-synchronized but it was quite easy to implement using Scintilla SCN_MODIFIED notifications and seems to work well.


Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.Message ID: <geany/geany/repo-discussions/3675/comments/7480536@github.com>