roc/crates/lang_srv
Eli Dowling a6549f3fd3
using ROCLS_LOG for logging env var
Signed-off-by: faldor20 <eli.jambu@yahoo.com>
2024-01-29 21:54:48 +10:00
..
src using ROCLS_LOG for logging env var 2024-01-29 21:54:48 +10:00
Cargo.toml Using env_logger for logging 2024-01-29 21:54:47 +10:00
debug_server.sh Using env_logger for logging 2024-01-29 21:54:47 +10:00
README.md using ROCLS_LOG for logging env var 2024-01-29 21:54:48 +10:00

roc_ls

This is a basic language server for Roc.

Support for the following LSP features are provided:

  • Inline diagnostics
  • Hover to view type of value
  • Go-to-definition
    • Example

      23a57d06-5b70-46f2-b0c4-5836eaec669b

    • Note that go-to-definition for the builtins does not yet work.

    • Go-to-definition for abilities resolves to their specialization, if one exists.

      • Example

        1ba98bf9-518b-4c47-b606-a6ce6767566f

  • Formatting Roc files on save
    • Example

      fbbe4bc1-64af-4c7d-b633-d7761906df11

Semantic highlighting will be added soon. Additional features require changes to the compiler infrastructure that are not yet available.

Note that the language server is a bit naïve:

  • If you make a change in a dependency, you'll also need to make a change in the dependents' files for the changes to be picked up.
  • The language server will only operate on changes on save, auto-saving is recommended.

Installing

The roc_lang_server binary is included with the nightly releases. We recommend using the same version of roc and roc_lang_server.

Building from source

Follow the building from source instructions for roc. Then run:

# do `nix develop` first if you're using nix!
cargo build -p roc_lang_srv --release

This will give you the language server binary at:

target/release/roc_ls

Configuring in your editor

Please follow your editor's language server implementation's documentation to see how custom language servers should be configured.

coc.nvim

Add the following to your coc JSON configuration file:

{
  "languageserver": {
    "roc": {
      "command": "<path to binary folder>/roc_ls",
      "filetypes": ["roc"]
    }
  }
}

If you're using coc.nvim and want to use the configuration above, be sure to also instruct your vim that *.roc files have roc filetype.

Debug

If you want to debug the server, use debug_server.sh instead of the direct binary.

If you would like to enable debug logging set the ROCLS_LOG environment variable to debug or trace for even more logs. eg: ROCLS_LOG=debug