LSP Devtools#

The LSP Devtools project provides a number of tools for making the the process of developing language servers easier.

Client Capability Index#


This accuracy of this section entirely depends on the captured capabilities data that is bundled with pytest-lsp.

Pull requests for corrections and new data welcome!

Inspired by this provides information on which clients support which features of the LSP Specification.


General client capabilities.


Capabilities for NotebookDocuments.


Capabilities for text document methods like completion, code actions and more.


Work done progress, show document and message requests


File operations, workspace folders and configuration


The lsp-devtools package provides a collection of CLI utilities that help inspect and visualise the interactions between a language client and a server.

See the Getting Started guide for details.


pytest-lsp is a pytest plugin for writing end-to-end tests for language servers.

================================== test session starts ====================================
platform linux -- Python 3.11.2, pytest-7.2.0, pluggy-1.0.0
rootdir: /..., configfile: tox.ini
plugins: typeguard-2.13.3, asyncio-0.20.2, lsp-0.2.1
asyncio: mode=Mode.AUTO
collected 1 item F                                                                      [100%]

======================================== FAILURES =========================================
____________________________________ test_completions _____________________________________

client = <pytest_lsp.client.LanguageClient object at 0x7f38f144a690>
E       assert False AssertionError
---------------------------- Captured window/logMessages call -----------------------------
  LOG: Suggesting item 0
  LOG: Suggesting item 1
  LOG: Suggesting item 2
  LOG: Suggesting item 3
  LOG: Suggesting item 4
  LOG: Suggesting item 5
  LOG: Suggesting item 6
  LOG: Suggesting item 7
  LOG: Suggesting item 8
  LOG: Suggesting item 9
================================ short test summary info ==================================
FAILED - assert False
=================================== 1 failed in 1.02s =====================================

It works by running the language server in a subprocess and communicating with it over stdio, just like a real language client. This also means pytest-lsp can be used to test language servers written in any language - not just Python.

pytest-lsp relies on pygls for its language server protocol implementation.

See the Getting Started guide for details on how to write your first test case.