Language server for real-time testing diagnostics
Find a file
2024-06-15 22:29:02 +09:00
.github/workflows update 2024-05-25 18:16:58 +09:00
crates/adapter (rust-adapter): pass stderr to testing-ls only when there is no stdout 2024-06-15 22:29:02 +09:00
src implement adapter error bubbling and send warning diagnostic 2024-06-13 00:05:43 +09:00
test_proj mvp 2024-05-07 00:08:27 +09:00
.gitignore mvp 2024-05-07 00:08:27 +09:00
Cargo.lock implement $/runFileTest request handling for editor command 2024-06-08 23:07:41 +09:00
Cargo.toml update 2024-05-25 18:16:58 +09:00
justfile mvp 2024-05-07 00:08:27 +09:00
README.md delete some adapter crates and update README 2024-05-19 18:56:44 +09:00

testing-language-server

General purpose LSP server that integrate with testing. The language server is characterized by portability and extensibility.

Motivation

This LSP server is heavily influenced by the following tools

These tools are very useful and powerful. However, they depend on the execution environment, such as VSCode and NeoVim, and the portability aspect was inconvenient for me. So, I designed this testing-language-server and its dedicated adapters for each test tool to be the middle layer to the parts that depend on each editor.

This design makes it easy to view diagnostics from tests in any editor. Environment-dependent features like neotest and VSCode's built-in testing tools can also be achieved with minimal code using testing-language-server.

Features

  • Realtime testing diagnostics
  • More efficient checking of diagnostics
  • Adapter installation command
  • VSCode extension
  • Coc.nvim extension
  • NeoVim builtin LSP plugin

Configuration

language server config:

"languageserver": {
  "testing": {
    "command": "<server path>/testing-language-server",
    "trace.server": "verbose",
    "filetypes": [
      "rust",
      "javascript"
    ],
    "initializationOptions": {
      "initializationOptions": {
        "adapterCommand": {
          ".rs": [
            {
              "path": "<adapter path>/testing-ls-adapter",
              "extra_args": ["--test-kind=cargo-test"]
            }
          ],
          ".js": [
            {
              "path": "<adapter path>/testing-ls-adapter",
              "extra_args": ["--test-kind=jest"]
            }
          ]
        }
      }
    }
  }
}

Adapter

  • cargo test
  • jest
  • others

Writing custom adapter

⚠ The specification of adapter CLI is not stabilized yet.

See spec.rs.

clap crate makes it easy to address specification, but in principle you can create an adapter in any way you like, regardless of the language you implement.