From 68c312eec2cb93dba1e8b75f46469984a4194013 Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Wed, 12 Apr 2023 01:15:15 +0000 Subject: automatic import of python-jupyterlab-lsp --- .gitignore | 1 + python-jupyterlab-lsp.spec | 887 +++++++++++++++++++++++++++++++++++++++++++++ sources | 1 + 3 files changed, 889 insertions(+) create mode 100644 python-jupyterlab-lsp.spec create mode 100644 sources diff --git a/.gitignore b/.gitignore index e69de29..e145a18 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/jupyterlab-lsp-4.0.1.tar.gz diff --git a/python-jupyterlab-lsp.spec b/python-jupyterlab-lsp.spec new file mode 100644 index 0000000..fe8f073 --- /dev/null +++ b/python-jupyterlab-lsp.spec @@ -0,0 +1,887 @@ +%global _empty_manifest_terminate_build 0 +Name: python-jupyterlab-lsp +Version: 4.0.1 +Release: 1 +Summary: Coding assistance for JupyterLab with Language Server Protocol +License: BSD-3-Clause +URL: https://pypi.org/project/jupyterlab-lsp/ +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/c1/e0/0995a3659e0770b69b2446e3bc40d736ab6eec0ff2def04853ba36aaef3e/jupyterlab-lsp-4.0.1.tar.gz +BuildArch: noarch + +Requires: python3-jupyter-lsp +Requires: python3-jupyterlab + +%description +# Language Server Protocol integration for Jupyter(Lab) + +[![tests](https://github.com/jupyter-lsp/jupyterlab-lsp/workflows/CI/badge.svg)](https://github.com/jupyter-lsp/jupyterlab-lsp/actions?query=workflow%3ACI+branch%3Amaster) +[![Documentation Status](https://readthedocs.org/projects/jupyterlab-lsp/badge/?version=latest)](https://jupyterlab-lsp.readthedocs.io/en/latest/?badge=latest) +[![Python Demo](https://img.shields.io/badge/demo-Python-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-python/main?urlpath=lab) +[![R Demo](https://img.shields.io/badge/demo-R-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-r/main?urlpath=lab) +[![Julia Demo](https://img.shields.io/badge/demo-Julia-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-julia/main?urlpath=lab) +[![Binder](https://img.shields.io/badge/launch-dev_version-blue)](https://mybinder.org/v2/gh/jupyter-lsp/jupyterlab-lsp/master?urlpath=lab%2Ftree%2Fexamples%2FPython.ipynb) + +**[Installation](#installation) | [Configuring](./docs/Configuring.ipynb) | [Changelog](./CHANGELOG.md) | [Roadmap](./docs/Roadmap.ipynb) | [Contributing](./CONTRIBUTING.md) | [Extending](./docs/Extending.ipynb)** + +## Features + +> Examples show Python code, but most features also work in R, bash, typescript, and [many other languages][language-servers]. + +### Hover + +Hover over any piece of code; if an underline appears, you can press Ctrl +to get a tooltip with function/class signature, module documentation or any other +piece of information that the language server provides + +![hover](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/hover.png) + +### Diagnostics + +Critical errors have red underline, warnings are orange, etc. Hover +over the underlined code to see a more detailed message + +![inspections](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/inspections.png) + +### Jump to Definition and References + +Use the context menu entry, or Alt + :computer_mouse: to jump to definitions/references (you can change it to Ctrl/ in settings); use Alt + o to jump back. + +![jump](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/jump_to_definition.png) + +### Highlight References + +Place your cursor on a variable, function, etc and all the usages will be highlighted + +### Automatic Completion and Continuous Hinting + +- Certain characters, for example '.' (dot) in Python, will automatically trigger + completion. +- You can choose to receive the completion suggestions as you type by enabling `continuousHinting` setting. + +![invoke](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/autocompletion.gif) + +### Automatic Signature Suggestions + +Function signatures will automatically be displayed + +![signature](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/signature.png) + +### Kernel-less Autocompletion + +Advanced static-analysis autocompletion without a running kernel + +![autocompletion](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/completions-Julia-Python-R.gif) + +#### The runtime kernel suggestions are still there + +When a kernel is available the suggestions from the kernel (such as keys of a +dict and columns of a DataFrame) are merged with the suggestions +from the Language Server (in notebook). + +If the kernel is too slow to respond promptly only the Language Server suggestions will be shown (default threshold: 0.6s). +You can configure the completer to not attempt to fetch the kernel completions if the kernel is busy (skipping the 0.6s timeout). + +You can deactivate the kernel suggestions by adding `"Kernel"` to the `disableCompletionsFrom` in the `completion` section +of _Advanced Settings_. Alternatively if you _only_ want kernel completions you can add `"LSP"` to the same +setting; Or add both if you like to code in hardcore mode and get no completions, or if another provider has been added. + +### Rename + +Rename variables, functions and more, in both: notebooks and the file editor. +Use the context menu option or the F2 shortcut to invoke. + +![rename](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/rename.png) + +### Diagnostics panel + +Sort and jump between the diagnostics using the diagnostics panel. +Open it searching for "Show diagnostics panel" in JupyterLab commands palette or from the context menu. +Use context menu on rows in the panel to filter out diagnostics or copy their message. + +![panel](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/panel.png) + +## Prerequisites + +You will need to have both of the following installed: + +- JupyterLab >=3.6.0,<4.0.0a0 +- Python 3.8+ + +In addition, if you wish to use javascript, html, markdown or any other NodeJS-based language server you will need to have appropriate NodeJS version installed. + +> Note: Installation for JupyterLab 2.x requires a different procedure, please consult the documentation for the extension [version 2.x][version 2.x docs]. + +## Installation + +> For more extensive installation instructions, see the [documentation][installation-documentation]. + +For the current stable version, the following steps are recommended. +Use of a python `virtualenv` or a conda env is also recommended. + +1. install python 3 + + ```bash + conda install -c conda-forge python=3 + ``` + +1. install JupyterLab and the extensions + + ```bash + conda install -c conda-forge 'jupyterlab>=3.0.0,<4.0.0a0' jupyterlab-lsp + # or + pip install 'jupyterlab>=3.0.0,<4.0.0a0' jupyterlab-lsp + ``` + + > Note: `jupyterlab-lsp` provides both the server extension and the lab extension. + + > Note: With conda, you could take advantage of the bundles: `jupyter-lsp-python` + > or `jupyter-lsp-r` to install both the server extension and the language server. + +1. install LSP servers for languages of your choice; for example, for Python + ([pylsp](https://github.com/python-lsp/python-lsp-server)) and + R ([languageserver](https://github.com/REditorSupport/languageserver)) servers: + + ```bash + pip install 'python-lsp-server[all]' + R -e 'install.packages("languageserver")' + ``` + + or from `conda-forge` + + ```bash + conda install -c conda-forge python-lsp-server r-languageserver + ``` + + Please see our full list of + [supported language servers][language-servers] + which includes installation hints for the common package managers (npm/pip/conda). + In general, any LSP server from the + [Microsoft list](https://microsoft.github.io/language-server-protocol/implementors/servers/) + should work after [some additional configuration](./CONTRIBUTING.md#specs). + + Note: it is worth visiting the repository of each server you install as + many provide additional configuration options. + +1. Restart JupyterLab + + If JupyterLab is running when you installed the extension, a restart is required + for the server extension and any language servers to be recognized by JupyterLab. + +1. (Optional, IPython users only) to improve the performance of autocompletion, + disable Jedi in IPython (the LSP servers for Python use Jedi too). + You can do that temporarily with: + + ```ipython + %config Completer.use_jedi = False + ``` + + or permanently by setting `c.Completer.use_jedi = False` in your + [`ipython_config.py` file](https://ipython.readthedocs.io/en/stable/config/intro.html?highlight=ipython_config.py#systemwide-configuration). + +1. (Optional, Linux/OSX-only) As a security measure by default Jupyter server only allows + access to files under the Jupyter root directory (the place where you launch the Jupyter server). + Thus, in order to allow `jupyterlab-lsp` to navigate to external files such as packages + installed system-wide or to libraries inside a virtual environment (`conda`, + `pip`, ...) this access control mechanism needs to be circumvented: inside your Jupyter + root directory create a symlink named _.lsp_symlink_ pointing to your system root `/`. + + ``` + ln -s / .lsp_symlink + ``` + + As this symlink is a hidden file the Jupyter server must be instructed to + serve hidden files. Either use the appropriate command line flag: + + ``` + jupyter lab --ContentsManager.allow_hidden=True + ``` + + or, alternatively, set the corresponding setting inside your `jupyter_server_config.py`. + + Help in implementing a custom [`ContentsManager`](https://github.com/jupyter-lsp/jupyterlab-lsp/issues/850) + which will enable navigating to external files without the symlink is welcome. + +### Configuring the servers + +Server configurations can be edited using the Advanced Settings editor in JupyterLab (_Settings > Advanced Settings Editor_). For settings specific to each server, please see the [table of language servers][language-servers]. Example settings might include: + +> Note: for the new (currently recommended) python-lsp-server replace `pyls` occurrences with `pylsp` + +```json +{ + "language_servers": { + "pyls": { + "serverSettings": { + "pyls.plugins.pydocstyle.enabled": true, + "pyls.plugins.pyflakes.enabled": false, + "pyls.plugins.flake8.enabled": true + } + }, + "r-languageserver": { + "serverSettings": { + "r.lsp.debug": false, + "r.lsp.diagnostics": false + } + } + } +} +``` + +The `serverSettings` key specifies the configurations sent to the language servers. These can be written using stringified dot accessors like above (in the VSCode style), or as nested JSON objects, e.g.: + +```json +{ + "language_servers": { + "pyls": { + "serverSettings": { + "pyls": { + "plugins": { + "pydocstyle": { + "enabled": true + }, + "pyflakes": { + "enabled": false + }, + "flake8": { + "enabled": true + } + } + } + } + } + } +} +``` + +#### Other configuration methods + +Some language servers, such as `pyls`, provide other configuration methods _in addition_ to language-server configuration messages (accessed using the Advanced Settings Editor). For example, `pyls` allows users to configure the server using a local configuration file. You can change the inspection/diagnostics for server plugins like `pycodestyle` there. + +The exact configuration details will vary between operating systems (please see the [configuration section of pycodestyle documentation](https://pycodestyle.readthedocs.io/en/latest/intro.html#configuration)), but as an example, on Linux you would simply need to create a file called `~/.config/pycodestyle`, which may look like that: + +```cfg +[pycodestyle] +ignore = E402, E703 +max-line-length = 120 +``` + +In the example above: + +- ignoring E402 allows imports which are not on the very top of the file, +- ignoring E703 allows terminating semicolon (useful for matplotlib plots), +- the maximal allowed line length is increased to 120. + +After changing the configuration you may need to restart the JupyterLab, and please be advised that the errors in configuration may prevent the servers from functioning properly. + +Again, please do check the pycodestyle documentation for specific error codes, and check the configuration of other feature providers and language servers as needed. + +## Acknowledgements + +This would not be possible without the fantastic initial work at +[wylieconlon/lsp-editor-adapter](https://github.com/wylieconlon/lsp-editor-adapter). + +[language-servers]: https://jupyterlab-lsp.readthedocs.io/en/latest/Language%20Servers.html +[installation-documentation]: https://jupyterlab-lsp.readthedocs.io/en/latest/Installation.html +[version 2.x docs]: https://jupyterlab-lsp.readthedocs.io/en/2.x/Installation.html + + +%package -n python3-jupyterlab-lsp +Summary: Coding assistance for JupyterLab with Language Server Protocol +Provides: python-jupyterlab-lsp +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-jupyterlab-lsp +# Language Server Protocol integration for Jupyter(Lab) + +[![tests](https://github.com/jupyter-lsp/jupyterlab-lsp/workflows/CI/badge.svg)](https://github.com/jupyter-lsp/jupyterlab-lsp/actions?query=workflow%3ACI+branch%3Amaster) +[![Documentation Status](https://readthedocs.org/projects/jupyterlab-lsp/badge/?version=latest)](https://jupyterlab-lsp.readthedocs.io/en/latest/?badge=latest) +[![Python Demo](https://img.shields.io/badge/demo-Python-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-python/main?urlpath=lab) +[![R Demo](https://img.shields.io/badge/demo-R-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-r/main?urlpath=lab) +[![Julia Demo](https://img.shields.io/badge/demo-Julia-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-julia/main?urlpath=lab) +[![Binder](https://img.shields.io/badge/launch-dev_version-blue)](https://mybinder.org/v2/gh/jupyter-lsp/jupyterlab-lsp/master?urlpath=lab%2Ftree%2Fexamples%2FPython.ipynb) + +**[Installation](#installation) | [Configuring](./docs/Configuring.ipynb) | [Changelog](./CHANGELOG.md) | [Roadmap](./docs/Roadmap.ipynb) | [Contributing](./CONTRIBUTING.md) | [Extending](./docs/Extending.ipynb)** + +## Features + +> Examples show Python code, but most features also work in R, bash, typescript, and [many other languages][language-servers]. + +### Hover + +Hover over any piece of code; if an underline appears, you can press Ctrl +to get a tooltip with function/class signature, module documentation or any other +piece of information that the language server provides + +![hover](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/hover.png) + +### Diagnostics + +Critical errors have red underline, warnings are orange, etc. Hover +over the underlined code to see a more detailed message + +![inspections](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/inspections.png) + +### Jump to Definition and References + +Use the context menu entry, or Alt + :computer_mouse: to jump to definitions/references (you can change it to Ctrl/ in settings); use Alt + o to jump back. + +![jump](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/jump_to_definition.png) + +### Highlight References + +Place your cursor on a variable, function, etc and all the usages will be highlighted + +### Automatic Completion and Continuous Hinting + +- Certain characters, for example '.' (dot) in Python, will automatically trigger + completion. +- You can choose to receive the completion suggestions as you type by enabling `continuousHinting` setting. + +![invoke](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/autocompletion.gif) + +### Automatic Signature Suggestions + +Function signatures will automatically be displayed + +![signature](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/signature.png) + +### Kernel-less Autocompletion + +Advanced static-analysis autocompletion without a running kernel + +![autocompletion](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/completions-Julia-Python-R.gif) + +#### The runtime kernel suggestions are still there + +When a kernel is available the suggestions from the kernel (such as keys of a +dict and columns of a DataFrame) are merged with the suggestions +from the Language Server (in notebook). + +If the kernel is too slow to respond promptly only the Language Server suggestions will be shown (default threshold: 0.6s). +You can configure the completer to not attempt to fetch the kernel completions if the kernel is busy (skipping the 0.6s timeout). + +You can deactivate the kernel suggestions by adding `"Kernel"` to the `disableCompletionsFrom` in the `completion` section +of _Advanced Settings_. Alternatively if you _only_ want kernel completions you can add `"LSP"` to the same +setting; Or add both if you like to code in hardcore mode and get no completions, or if another provider has been added. + +### Rename + +Rename variables, functions and more, in both: notebooks and the file editor. +Use the context menu option or the F2 shortcut to invoke. + +![rename](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/rename.png) + +### Diagnostics panel + +Sort and jump between the diagnostics using the diagnostics panel. +Open it searching for "Show diagnostics panel" in JupyterLab commands palette or from the context menu. +Use context menu on rows in the panel to filter out diagnostics or copy their message. + +![panel](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/panel.png) + +## Prerequisites + +You will need to have both of the following installed: + +- JupyterLab >=3.6.0,<4.0.0a0 +- Python 3.8+ + +In addition, if you wish to use javascript, html, markdown or any other NodeJS-based language server you will need to have appropriate NodeJS version installed. + +> Note: Installation for JupyterLab 2.x requires a different procedure, please consult the documentation for the extension [version 2.x][version 2.x docs]. + +## Installation + +> For more extensive installation instructions, see the [documentation][installation-documentation]. + +For the current stable version, the following steps are recommended. +Use of a python `virtualenv` or a conda env is also recommended. + +1. install python 3 + + ```bash + conda install -c conda-forge python=3 + ``` + +1. install JupyterLab and the extensions + + ```bash + conda install -c conda-forge 'jupyterlab>=3.0.0,<4.0.0a0' jupyterlab-lsp + # or + pip install 'jupyterlab>=3.0.0,<4.0.0a0' jupyterlab-lsp + ``` + + > Note: `jupyterlab-lsp` provides both the server extension and the lab extension. + + > Note: With conda, you could take advantage of the bundles: `jupyter-lsp-python` + > or `jupyter-lsp-r` to install both the server extension and the language server. + +1. install LSP servers for languages of your choice; for example, for Python + ([pylsp](https://github.com/python-lsp/python-lsp-server)) and + R ([languageserver](https://github.com/REditorSupport/languageserver)) servers: + + ```bash + pip install 'python-lsp-server[all]' + R -e 'install.packages("languageserver")' + ``` + + or from `conda-forge` + + ```bash + conda install -c conda-forge python-lsp-server r-languageserver + ``` + + Please see our full list of + [supported language servers][language-servers] + which includes installation hints for the common package managers (npm/pip/conda). + In general, any LSP server from the + [Microsoft list](https://microsoft.github.io/language-server-protocol/implementors/servers/) + should work after [some additional configuration](./CONTRIBUTING.md#specs). + + Note: it is worth visiting the repository of each server you install as + many provide additional configuration options. + +1. Restart JupyterLab + + If JupyterLab is running when you installed the extension, a restart is required + for the server extension and any language servers to be recognized by JupyterLab. + +1. (Optional, IPython users only) to improve the performance of autocompletion, + disable Jedi in IPython (the LSP servers for Python use Jedi too). + You can do that temporarily with: + + ```ipython + %config Completer.use_jedi = False + ``` + + or permanently by setting `c.Completer.use_jedi = False` in your + [`ipython_config.py` file](https://ipython.readthedocs.io/en/stable/config/intro.html?highlight=ipython_config.py#systemwide-configuration). + +1. (Optional, Linux/OSX-only) As a security measure by default Jupyter server only allows + access to files under the Jupyter root directory (the place where you launch the Jupyter server). + Thus, in order to allow `jupyterlab-lsp` to navigate to external files such as packages + installed system-wide or to libraries inside a virtual environment (`conda`, + `pip`, ...) this access control mechanism needs to be circumvented: inside your Jupyter + root directory create a symlink named _.lsp_symlink_ pointing to your system root `/`. + + ``` + ln -s / .lsp_symlink + ``` + + As this symlink is a hidden file the Jupyter server must be instructed to + serve hidden files. Either use the appropriate command line flag: + + ``` + jupyter lab --ContentsManager.allow_hidden=True + ``` + + or, alternatively, set the corresponding setting inside your `jupyter_server_config.py`. + + Help in implementing a custom [`ContentsManager`](https://github.com/jupyter-lsp/jupyterlab-lsp/issues/850) + which will enable navigating to external files without the symlink is welcome. + +### Configuring the servers + +Server configurations can be edited using the Advanced Settings editor in JupyterLab (_Settings > Advanced Settings Editor_). For settings specific to each server, please see the [table of language servers][language-servers]. Example settings might include: + +> Note: for the new (currently recommended) python-lsp-server replace `pyls` occurrences with `pylsp` + +```json +{ + "language_servers": { + "pyls": { + "serverSettings": { + "pyls.plugins.pydocstyle.enabled": true, + "pyls.plugins.pyflakes.enabled": false, + "pyls.plugins.flake8.enabled": true + } + }, + "r-languageserver": { + "serverSettings": { + "r.lsp.debug": false, + "r.lsp.diagnostics": false + } + } + } +} +``` + +The `serverSettings` key specifies the configurations sent to the language servers. These can be written using stringified dot accessors like above (in the VSCode style), or as nested JSON objects, e.g.: + +```json +{ + "language_servers": { + "pyls": { + "serverSettings": { + "pyls": { + "plugins": { + "pydocstyle": { + "enabled": true + }, + "pyflakes": { + "enabled": false + }, + "flake8": { + "enabled": true + } + } + } + } + } + } +} +``` + +#### Other configuration methods + +Some language servers, such as `pyls`, provide other configuration methods _in addition_ to language-server configuration messages (accessed using the Advanced Settings Editor). For example, `pyls` allows users to configure the server using a local configuration file. You can change the inspection/diagnostics for server plugins like `pycodestyle` there. + +The exact configuration details will vary between operating systems (please see the [configuration section of pycodestyle documentation](https://pycodestyle.readthedocs.io/en/latest/intro.html#configuration)), but as an example, on Linux you would simply need to create a file called `~/.config/pycodestyle`, which may look like that: + +```cfg +[pycodestyle] +ignore = E402, E703 +max-line-length = 120 +``` + +In the example above: + +- ignoring E402 allows imports which are not on the very top of the file, +- ignoring E703 allows terminating semicolon (useful for matplotlib plots), +- the maximal allowed line length is increased to 120. + +After changing the configuration you may need to restart the JupyterLab, and please be advised that the errors in configuration may prevent the servers from functioning properly. + +Again, please do check the pycodestyle documentation for specific error codes, and check the configuration of other feature providers and language servers as needed. + +## Acknowledgements + +This would not be possible without the fantastic initial work at +[wylieconlon/lsp-editor-adapter](https://github.com/wylieconlon/lsp-editor-adapter). + +[language-servers]: https://jupyterlab-lsp.readthedocs.io/en/latest/Language%20Servers.html +[installation-documentation]: https://jupyterlab-lsp.readthedocs.io/en/latest/Installation.html +[version 2.x docs]: https://jupyterlab-lsp.readthedocs.io/en/2.x/Installation.html + + +%package help +Summary: Development documents and examples for jupyterlab-lsp +Provides: python3-jupyterlab-lsp-doc +%description help +# Language Server Protocol integration for Jupyter(Lab) + +[![tests](https://github.com/jupyter-lsp/jupyterlab-lsp/workflows/CI/badge.svg)](https://github.com/jupyter-lsp/jupyterlab-lsp/actions?query=workflow%3ACI+branch%3Amaster) +[![Documentation Status](https://readthedocs.org/projects/jupyterlab-lsp/badge/?version=latest)](https://jupyterlab-lsp.readthedocs.io/en/latest/?badge=latest) +[![Python Demo](https://img.shields.io/badge/demo-Python-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-python/main?urlpath=lab) +[![R Demo](https://img.shields.io/badge/demo-R-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-r/main?urlpath=lab) +[![Julia Demo](https://img.shields.io/badge/demo-Julia-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-julia/main?urlpath=lab) +[![Binder](https://img.shields.io/badge/launch-dev_version-blue)](https://mybinder.org/v2/gh/jupyter-lsp/jupyterlab-lsp/master?urlpath=lab%2Ftree%2Fexamples%2FPython.ipynb) + +**[Installation](#installation) | [Configuring](./docs/Configuring.ipynb) | [Changelog](./CHANGELOG.md) | [Roadmap](./docs/Roadmap.ipynb) | [Contributing](./CONTRIBUTING.md) | [Extending](./docs/Extending.ipynb)** + +## Features + +> Examples show Python code, but most features also work in R, bash, typescript, and [many other languages][language-servers]. + +### Hover + +Hover over any piece of code; if an underline appears, you can press Ctrl +to get a tooltip with function/class signature, module documentation or any other +piece of information that the language server provides + +![hover](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/hover.png) + +### Diagnostics + +Critical errors have red underline, warnings are orange, etc. Hover +over the underlined code to see a more detailed message + +![inspections](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/inspections.png) + +### Jump to Definition and References + +Use the context menu entry, or Alt + :computer_mouse: to jump to definitions/references (you can change it to Ctrl/ in settings); use Alt + o to jump back. + +![jump](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/jump_to_definition.png) + +### Highlight References + +Place your cursor on a variable, function, etc and all the usages will be highlighted + +### Automatic Completion and Continuous Hinting + +- Certain characters, for example '.' (dot) in Python, will automatically trigger + completion. +- You can choose to receive the completion suggestions as you type by enabling `continuousHinting` setting. + +![invoke](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/autocompletion.gif) + +### Automatic Signature Suggestions + +Function signatures will automatically be displayed + +![signature](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/signature.png) + +### Kernel-less Autocompletion + +Advanced static-analysis autocompletion without a running kernel + +![autocompletion](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/completions-Julia-Python-R.gif) + +#### The runtime kernel suggestions are still there + +When a kernel is available the suggestions from the kernel (such as keys of a +dict and columns of a DataFrame) are merged with the suggestions +from the Language Server (in notebook). + +If the kernel is too slow to respond promptly only the Language Server suggestions will be shown (default threshold: 0.6s). +You can configure the completer to not attempt to fetch the kernel completions if the kernel is busy (skipping the 0.6s timeout). + +You can deactivate the kernel suggestions by adding `"Kernel"` to the `disableCompletionsFrom` in the `completion` section +of _Advanced Settings_. Alternatively if you _only_ want kernel completions you can add `"LSP"` to the same +setting; Or add both if you like to code in hardcore mode and get no completions, or if another provider has been added. + +### Rename + +Rename variables, functions and more, in both: notebooks and the file editor. +Use the context menu option or the F2 shortcut to invoke. + +![rename](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/rename.png) + +### Diagnostics panel + +Sort and jump between the diagnostics using the diagnostics panel. +Open it searching for "Show diagnostics panel" in JupyterLab commands palette or from the context menu. +Use context menu on rows in the panel to filter out diagnostics or copy their message. + +![panel](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/panel.png) + +## Prerequisites + +You will need to have both of the following installed: + +- JupyterLab >=3.6.0,<4.0.0a0 +- Python 3.8+ + +In addition, if you wish to use javascript, html, markdown or any other NodeJS-based language server you will need to have appropriate NodeJS version installed. + +> Note: Installation for JupyterLab 2.x requires a different procedure, please consult the documentation for the extension [version 2.x][version 2.x docs]. + +## Installation + +> For more extensive installation instructions, see the [documentation][installation-documentation]. + +For the current stable version, the following steps are recommended. +Use of a python `virtualenv` or a conda env is also recommended. + +1. install python 3 + + ```bash + conda install -c conda-forge python=3 + ``` + +1. install JupyterLab and the extensions + + ```bash + conda install -c conda-forge 'jupyterlab>=3.0.0,<4.0.0a0' jupyterlab-lsp + # or + pip install 'jupyterlab>=3.0.0,<4.0.0a0' jupyterlab-lsp + ``` + + > Note: `jupyterlab-lsp` provides both the server extension and the lab extension. + + > Note: With conda, you could take advantage of the bundles: `jupyter-lsp-python` + > or `jupyter-lsp-r` to install both the server extension and the language server. + +1. install LSP servers for languages of your choice; for example, for Python + ([pylsp](https://github.com/python-lsp/python-lsp-server)) and + R ([languageserver](https://github.com/REditorSupport/languageserver)) servers: + + ```bash + pip install 'python-lsp-server[all]' + R -e 'install.packages("languageserver")' + ``` + + or from `conda-forge` + + ```bash + conda install -c conda-forge python-lsp-server r-languageserver + ``` + + Please see our full list of + [supported language servers][language-servers] + which includes installation hints for the common package managers (npm/pip/conda). + In general, any LSP server from the + [Microsoft list](https://microsoft.github.io/language-server-protocol/implementors/servers/) + should work after [some additional configuration](./CONTRIBUTING.md#specs). + + Note: it is worth visiting the repository of each server you install as + many provide additional configuration options. + +1. Restart JupyterLab + + If JupyterLab is running when you installed the extension, a restart is required + for the server extension and any language servers to be recognized by JupyterLab. + +1. (Optional, IPython users only) to improve the performance of autocompletion, + disable Jedi in IPython (the LSP servers for Python use Jedi too). + You can do that temporarily with: + + ```ipython + %config Completer.use_jedi = False + ``` + + or permanently by setting `c.Completer.use_jedi = False` in your + [`ipython_config.py` file](https://ipython.readthedocs.io/en/stable/config/intro.html?highlight=ipython_config.py#systemwide-configuration). + +1. (Optional, Linux/OSX-only) As a security measure by default Jupyter server only allows + access to files under the Jupyter root directory (the place where you launch the Jupyter server). + Thus, in order to allow `jupyterlab-lsp` to navigate to external files such as packages + installed system-wide or to libraries inside a virtual environment (`conda`, + `pip`, ...) this access control mechanism needs to be circumvented: inside your Jupyter + root directory create a symlink named _.lsp_symlink_ pointing to your system root `/`. + + ``` + ln -s / .lsp_symlink + ``` + + As this symlink is a hidden file the Jupyter server must be instructed to + serve hidden files. Either use the appropriate command line flag: + + ``` + jupyter lab --ContentsManager.allow_hidden=True + ``` + + or, alternatively, set the corresponding setting inside your `jupyter_server_config.py`. + + Help in implementing a custom [`ContentsManager`](https://github.com/jupyter-lsp/jupyterlab-lsp/issues/850) + which will enable navigating to external files without the symlink is welcome. + +### Configuring the servers + +Server configurations can be edited using the Advanced Settings editor in JupyterLab (_Settings > Advanced Settings Editor_). For settings specific to each server, please see the [table of language servers][language-servers]. Example settings might include: + +> Note: for the new (currently recommended) python-lsp-server replace `pyls` occurrences with `pylsp` + +```json +{ + "language_servers": { + "pyls": { + "serverSettings": { + "pyls.plugins.pydocstyle.enabled": true, + "pyls.plugins.pyflakes.enabled": false, + "pyls.plugins.flake8.enabled": true + } + }, + "r-languageserver": { + "serverSettings": { + "r.lsp.debug": false, + "r.lsp.diagnostics": false + } + } + } +} +``` + +The `serverSettings` key specifies the configurations sent to the language servers. These can be written using stringified dot accessors like above (in the VSCode style), or as nested JSON objects, e.g.: + +```json +{ + "language_servers": { + "pyls": { + "serverSettings": { + "pyls": { + "plugins": { + "pydocstyle": { + "enabled": true + }, + "pyflakes": { + "enabled": false + }, + "flake8": { + "enabled": true + } + } + } + } + } + } +} +``` + +#### Other configuration methods + +Some language servers, such as `pyls`, provide other configuration methods _in addition_ to language-server configuration messages (accessed using the Advanced Settings Editor). For example, `pyls` allows users to configure the server using a local configuration file. You can change the inspection/diagnostics for server plugins like `pycodestyle` there. + +The exact configuration details will vary between operating systems (please see the [configuration section of pycodestyle documentation](https://pycodestyle.readthedocs.io/en/latest/intro.html#configuration)), but as an example, on Linux you would simply need to create a file called `~/.config/pycodestyle`, which may look like that: + +```cfg +[pycodestyle] +ignore = E402, E703 +max-line-length = 120 +``` + +In the example above: + +- ignoring E402 allows imports which are not on the very top of the file, +- ignoring E703 allows terminating semicolon (useful for matplotlib plots), +- the maximal allowed line length is increased to 120. + +After changing the configuration you may need to restart the JupyterLab, and please be advised that the errors in configuration may prevent the servers from functioning properly. + +Again, please do check the pycodestyle documentation for specific error codes, and check the configuration of other feature providers and language servers as needed. + +## Acknowledgements + +This would not be possible without the fantastic initial work at +[wylieconlon/lsp-editor-adapter](https://github.com/wylieconlon/lsp-editor-adapter). + +[language-servers]: https://jupyterlab-lsp.readthedocs.io/en/latest/Language%20Servers.html +[installation-documentation]: https://jupyterlab-lsp.readthedocs.io/en/latest/Installation.html +[version 2.x docs]: https://jupyterlab-lsp.readthedocs.io/en/2.x/Installation.html + + +%prep +%autosetup -n jupyterlab-lsp-4.0.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-jupyterlab-lsp -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed Apr 12 2023 Python_Bot - 4.0.1-1 +- Package Spec generated diff --git a/sources b/sources new file mode 100644 index 0000000..d7f1c04 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +93c55b54f41ecd9ee7ed8e0e40982fdf jupyterlab-lsp-4.0.1.tar.gz -- cgit v1.2.3