How we made the Deno language server faster
deno.com
deno.com
Typically, the LSP is notified on any file change and is responsible for keeping its own copy of the files. This way it doesn't need to request the "latest" files - on a keystroke, it just needs to update the actual file being edited.
It seems like the Deno LSP doesn't follow this push model for some reason, which is going to make it inherently unscalable in very large projects. I'm curious why.
Sure, in a project like this, observability becomes harder, but that's pretty much the biggest challenge. The fact that this was in any way passable for so long indicates how much engineers are willing to take suboptimal experiences, and how fast computers are today.
Similarly, 75kloc is not a huge project, and even 750k with deps is simply "big". Eg. Linux kernel is >25M, LibreOffice is >10M, Wordpress itself is around 1M, Gimp is 900K, etc. All that is without external dependencies.
Even final code completion that returns in "under 1s" is too slow (I can't imagine ever turning on a feature that would take the original 8s!).
Working with deno using intellij's deno language server support[0] is extremely frustrating, slow and missing features, compared to it's normal TS/JS support.
Glad to hear that things are improving though, I'll have to give it another go.
Is there a list of language code smells? If the best parts of your language come from another language are you better off skipping the middle layer now instead of later when there's more code to rewrite?