libide/lsp: implement generic LSP server support
This provides dynamic type registration for language server plugins so that it does not require writing code in the plugin (unless we end up supporting a very odd Language Server).
This will very likely expose some issues in our IdeLspClient that we need to figure out, so I expect a bit of fallout as a side-effect.
Additionally, this is going to require that we abstract LSP settings
using something like .vscode/settings.json
. Currently, our format
differs a bit from that (and still needs some implementation) but this
moves us in the right direction.
The next steps are going to be making that format more familiar, along with making it loaded as part of LSP configuration. Beyond that, we need to make more generic plumbing work as expected by the LSP peers; especially when dealing with capabilities.
Additional fallout from this will be the temporary loss of some configuration of LSPs like rust-analyzer which we had tweais.ui for. We can probably introduce something like that using tweaks.ui and auto-load/bind those to known settings options in settings.json.
Bundled language servers will also be deleted with this patch series as we don't want to be doing that anymore anyway. We expect that build containers contain the SDK tooling.
Fixes #1850 (closed)