FWIW emacs these days has native LSP support (eglot) and native tree-sitter supported, but you'll need to grab tree-sitter libraries and LSP servers. For MacOS I found just using brew to install most of these works great, and I wonder if Windows can't work the same way. If you're in a VM you should just be able to have your package manager do the work.
LLM support in emacs is still a bit primitive but there are packages like emacs claude-code that are changing things. Personally I wrote an elisp function which grabs the filename of the emacs window relative to the project root and copies it so that I can just paste it into claude code and have it ask questions or do things.
```
(defun copy-buffer-file-name-from-project-root () "Copy the relative path of the buffer in this project to the kill ring" (interactive) (kill-new (file-relative-name (buffer-file-name (current-buffer)) (project-root (project-current)))))
```
if you're curious but depending on how you have your clipboards setup with the kill ring, you may need to modify this.
---
As far as fighting the JS fight on the Zed website, well, I think this thread isn't one of those upvote-anti-JS-rant threads that spring up on this site all the time so shrug.