Building

You should see a file scala-lsp-x.x.x.vsix (x.x.x representing the version you are building). Now install it in Code by choosing Install from VSIX in the Extensions view.

The root Sbt project controls all the Scala parts of the build. The client is written in Typescript (it's really minimal) and lives under scala/. This one is built using Code's tools.

languageserver/ contains the language-independent server implementation. It does not implement the full protocol yet. Features are added by-need, when the reference implementation in ensime-lsp/ needs it

ensime-lsp/ implements an Ensime based Scala language server

scala/ The typescript extension (eventually should migrate to Scala.js)

ensime-lsp is what you will want to build most of the times. It's launched with coursier by the client, for it to be as simply as possible.

You should use sbt publishLocal which publishes the server under ~/.ivy2/local, so the client finds it easily.

Running

You can open code inside the scala/ directory and use F5 to debug the extension. This picks up the changes in the server (make sure you published it locally using sbt publishLocal!) and allows quick iteration.