Skip to content

Latest commit

 

History

History
56 lines (38 loc) · 3.38 KB

jupyterlab-monaco-lsp.md

File metadata and controls

56 lines (38 loc) · 3.38 KB

Add language server (LSP) support to notebook server/jupyter-server and jupyterlab-monaco

Problem

There is an m * n complexity problem of providing a high-level of support for any programming language in any editor, IDE, or client endpoint (e.g. jupyterlab, jupyter notebook, nteract).

The Language Server protocol is a protocol for programming languages to provide code intelligence such as auto complete, go to definition, and find all references to client applications such as code editors (like VS Code) and code managers (like Sourcegraph and Sourcegraph for Github).

Once a language server is created for a programming language (e.g. Python language server), it becomes an m + n problem because each client application must only build an integration with the server (e.g. Python for VS Code) vs. building the code intelligence parts and the integration.

The overall complaint is that the JupyterLab/Jupyter Notebooks code editing experience is missing many of the luxuries of modern code editors and IDEs, like static code analysis for features like autocomplete for unexecuted code, type checking, linting, formatting, go to definition, and find all references. For a popular review of these complaints, see slides 60-71 from I Don't Like Notebooks.

Proposed Enhancement

The monaco-editor is an open-source text editor written in Javascript and used in VS Code.

jupyterlab-monaco is a JupyterLab extension that allows users to edit documents using monaco-editor.

monaco-editor ships with language features for TypeScript, JavaScript, CSS, LESS, SCSS, JSON, HTML. In order to support other languages (e.g. Python), it must connect to a language server (e.g. Python language server).

TODO

  • Create a notebook server extension to allow clients to connect with language servers
    • Provide HTTP interface for clients to communicate with language servers via websockets
      • e.g. /lsp/python/ or /lsp/r/.
  • Add a new set of classes to @jupyterlab/services that provide a client-side interface to those endpoints?
  • Add LSP support to monaco-editor in jupyterlab-monaco
    • Using classes from @jupyterlab/services?

Notes

Libraries

Reference implementations

References