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.
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).
- 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/
.
- e.g.
- Provide HTTP interface for clients to communicate with language servers via websockets
- 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?
- monaco-languageclient: NPM module to connect Monaco editor with language servers
- [WIP] changes to import monaco-lsp code into jupyterlab-monaco (jupyterlab-monaco#12)
- Theia
- Gitpod
- R-Brain