Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: replace python-language-server to supported pylsp #3810

Merged
merged 1 commit into from
Jul 9, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 0 additions & 37 deletions ale_linters/python/pyls.vim

This file was deleted.

37 changes: 37 additions & 0 deletions ale_linters/python/pylsp.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
" Author: aurieh <[email protected]>
" Description: A language server for Python

call ale#Set('python_pylsp_executable', 'pylsp')
call ale#Set('python_pylsp_options', '')
call ale#Set('python_pylsp_use_global', get(g:, 'ale_use_global_executables', 0))
call ale#Set('python_pylsp_auto_pipenv', 0)
call ale#Set('python_pylsp_config', {})

function! ale_linters#python#pylsp#GetExecutable(buffer) abort
if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pylsp_auto_pipenv'))
\ && ale#python#PipenvPresent(a:buffer)
return 'pipenv'
endif

return ale#python#FindExecutable(a:buffer, 'python_pylsp', ['pylsp'])
endfunction

function! ale_linters#python#pylsp#GetCommand(buffer) abort
let l:executable = ale_linters#python#pylsp#GetExecutable(a:buffer)

let l:exec_args = l:executable =~? 'pipenv$'
\ ? ' run pylsp'
\ : ''

return ale#Escape(l:executable) . l:exec_args . ale#Pad(ale#Var(a:buffer, 'python_pylsp_options'))
endfunction

call ale#linter#Define('python', {
\ 'name': 'pylsp',
\ 'lsp': 'stdio',
\ 'executable': function('ale_linters#python#pylsp#GetExecutable'),
\ 'command': function('ale_linters#python#pylsp#GetCommand'),
\ 'project_root': function('ale#python#FindProjectRoot'),
\ 'completion_filter': 'ale#completion#python#CompletionItemFilter',
\ 'lsp_config': {b -> ale#Var(b, 'python_pylsp_config')},
\})
54 changes: 27 additions & 27 deletions doc/ale-python.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ ALE will look for configuration files with the following filenames. >
.pylintrc
Pipfile
Pipfile.lock
poetry.lock
poetry.lock
pyproject.toml
<

Expand Down Expand Up @@ -638,47 +638,47 @@ g:ale_python_pylint_use_msg_id *g:ale_python_pylint_use_msg_id*


===============================================================================
pyls *ale-python-pyls*
pylsp *ale-python-pylsp*

`pyls` will be run from a detected project root, per |ale-python-root|.
`pylsp` will be run from a detected project root, per |ale-python-root|.


g:ale_python_pyls_executable *g:ale_python_pyls_executable*
*b:ale_python_pyls_executable*
g:ale_python_pylsp_executable *g:ale_python_pylsp_executable*
*b:ale_python_pylsp_executable*
Type: |String|
Default: `'pyls'`
Default: `'pylsp'`

See |ale-integrations-local-executables|

Set this to `'pipenv'` to invoke `'pipenv` `run` `pyls'`.
Set this to `'pipenv'` to invoke `'pipenv` `run` `pylsp'`.


g:ale_python_pyls_use_global *g:ale_python_pyls_use_global*
*b:ale_python_pyls_use_global*
g:ale_python_pylsp_use_global *g:ale_python_pylsp_use_global*
*b:ale_python_pylsp_use_global*
Type: |Number|
Default: `get(g:, 'ale_use_global_executables', 0)`

See |ale-integrations-local-executables|


g:ale_python_pyls_auto_pipenv *g:ale_python_pyls_auto_pipenv*
*b:ale_python_pyls_auto_pipenv*
g:ale_python_pylsp_auto_pipenv *g:ale_python_pylsp_auto_pipenv*
*b:ale_python_pylsp_auto_pipenv*
Type: |Number|
Default: `0`

Detect whether the file is inside a pipenv, and set the executable to `pipenv`
if true. This is overridden by a manually-set executable.


g:ale_python_pyls_config *g:ale_python_pyls_config*
*b:ale_python_pyls_config*
g:ale_python_pylsp_config *g:ale_python_pylsp_config*
*b:ale_python_pylsp_config*
Type: |Dictionary|
Default: `{}`

Dictionary with configuration settings for pyls. For example, to disable
Dictionary with configuration settings for pylsp. For example, to disable
the pycodestyle linter: >
{
\ 'pyls': {
\ 'pylsp': {
\ 'plugins': {
\ 'pycodestyle': {
\ 'enabled': v:false
Expand All @@ -688,24 +688,24 @@ g:ale_python_pyls_config *g:ale_python_pyls_config*
\ }
<

g:ale_python_pyls_options *g:ale_python_pyls_options*
*b:ale_python_pyls_options*
g:ale_python_pylsp_options *g:ale_python_pylsp_options*
*b:ale_python_pylsp_options*
Type: |String|
Default: `''`

This variable can be changed to add command-line arguments to the pyls
invocation. Note that this is not the same thing as ale_python_pyls_config,
which allows configuration of how pyls functions; this is intended to
provide flexibility in how the pyls command is invoked.
This variable can be changed to add command-line arguments to the pylsp
invocation. Note that this is not the same thing as ale_python_pylsp_config,
which allows configuration of how pylsp functions; this is intended to
provide flexibility in how the pylsp command is invoked.

For example, if you had installed `pyls` but your `pyls` executable was not
on your `PATH` for some reason, an alternative way to run the pyls server
For example, if you had installed `pylsp` but your `pylsp` executable was not
on your `PATH` for some reason, an alternative way to run the pylsp server
would be:
let g:ale_python_pyls_executable = 'python3'
let g:ale_python_pyls_options = '-m pyls'
let g:ale_python_pylsp_executable = 'python3'
let g:ale_python_pylsp_options = '-m pylsp'

An example stragety for installing `pyls`:
`python3 -m pip install --user pyls`
An example stragety for installing `pylsp`:
`python3 -m pip install --user pylsp`

===============================================================================
pyre *ale-python-pyre*
Expand Down
2 changes: 1 addition & 1 deletion doc/ale-supported-languages-and-tools.txt
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ Notes:
* `pyflakes`
* `pylama`!!
* `pylint`!!
* `pyls`
* `pylsp`
* `pyre`
* `pyright`
* `reorder-python-imports`
Expand Down
2 changes: 1 addition & 1 deletion doc/ale.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2945,7 +2945,7 @@ documented in additional help files.
pyflakes..............................|ale-python-pyflakes|
pylama................................|ale-python-pylama|
pylint................................|ale-python-pylint|
pyls..................................|ale-python-pyls|
pylsp.................................|ale-python-pylsp|
pyre..................................|ale-python-pyre|
pyright...............................|ale-python-pyright|
reorder-python-imports................|ale-python-reorder_python_imports|
Expand Down
2 changes: 1 addition & 1 deletion supported-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ formatting.
* [pyflakes](https://github.com/PyCQA/pyflakes)
* [pylama](https://github.com/klen/pylama) :floppy_disk:
* [pylint](https://www.pylint.org/) :floppy_disk:
* [pyls](https://github.com/palantir/python-language-server) :warning:
* [pylsp](https://github.com/python-lsp/python-lsp-server) :warning:
* [pyre](https://github.com/facebook/pyre-check) :warning:
* [pyright](https://github.com/microsoft/pyright)
* [reorder-python-imports](https://github.com/asottile/reorder_python_imports)
Expand Down
6 changes: 3 additions & 3 deletions test/completion/test_lsp_completion_messages.vader
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,8 @@ Given python(Some Python file):
bazxyzxyzxyz

Execute(The right message should be sent for the initial LSP request):
runtime ale_linters/python/pyls.vim
let b:ale_linters = ['pyls']
runtime ale_linters/python/pylsp.vim
let b:ale_linters = ['pylsp']
" The cursor position needs to match what was saved before.
call setpos('.', [bufnr(''), 1, 5, 0])

Expand All @@ -226,7 +226,7 @@ Execute(The right message should be sent for the initial LSP request):
\ string(g:Callback)
" We should send the right message.
" The character index needs to be at most the index of the last character on
" the line, or integration with pyls will be broken.
" the line, or integration with pylsp will be broken.
"
" We need to send the message for changing the document first.
AssertEqual
Expand Down
4 changes: 2 additions & 2 deletions test/completion/test_public_completion_api.vader
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Execute(ale#completion#CanProvideCompletions should return 0 when no completion
AssertEqual 0, ale#completion#CanProvideCompletions()

Execute(ale#completion#CanProvideCompletions should return 1 when at least one completion source is available):
runtime ale_linters/python/pyls.vim
let b:ale_linters = ['pyls']
runtime ale_linters/python/pylsp.vim
let b:ale_linters = ['pylsp']

AssertEqual 1, ale#completion#CanProvideCompletions()
57 changes: 0 additions & 57 deletions test/linter/test_pyls.vader

This file was deleted.

57 changes: 57 additions & 0 deletions test/linter/test_pylsp.vader
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
Before:
call ale#assert#SetUpLinterTest('python', 'pylsp')

let b:bin_dir = has('win32') ? 'Scripts' : 'bin'

After:
unlet! b:bin_dir
unlet! b:executable

call ale#assert#TearDownLinterTest()

Execute(The pylsp command callback should return default string):
AssertLinter 'pylsp', ale#Escape('pylsp')

Execute(The pylsp executable should be configurable):
let g:ale_python_pylsp_executable = '~/.local/bin/pylsp'

AssertLinter '~/.local/bin/pylsp' , ale#Escape('~/.local/bin/pylsp')

Execute(The pylsp command callback should let you set options):
let g:ale_python_pylsp_options = '--some-option'

AssertLinter 'pylsp', ale#Escape('pylsp') . ' --some-option'

Execute(The pylsp executable should be run from the virtualenv path):
call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py')

let b:executable = ale#path#Simplify(
\ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/pylsp'
\)

AssertEqual ale#Escape(b:executable),
\ ale_linters#python#pylsp#GetCommand(bufnr(''))

Execute(You should be able to override the pylsp virtualenv lookup):
call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py')

let g:ale_python_pylsp_use_global = 1

AssertLinter 'pylsp', ale#Escape('pylsp')

Execute(Setting executable to 'pipenv' appends 'run pylsp'):
let g:ale_python_pylsp_executable = 'path/to/pipenv'

AssertLinter 'path/to/pipenv', ale#Escape('path/to/pipenv') . ' run pylsp'

Execute(Pipenv is detected when python_pylsp_auto_pipenv is set):
let g:ale_python_pylsp_auto_pipenv = 1
call ale#test#SetFilename('../test-files/python/pipenv/whatever.py')

AssertLinter 'pipenv',
\ ale#Escape('pipenv') . ' run pylsp'

Execute(Should accept configuration settings):
AssertLSPConfig {}
let b:ale_python_pylsp_config = {'pylsp': {'plugins': {'preload': {'enabled': v:false}}}}
AssertLSPConfig {'pylsp': {'plugins': {'preload': {'enabled': v:false}}}}
6 changes: 3 additions & 3 deletions test/lsp/test_engine_lsp_response_handling.vader
Original file line number Diff line number Diff line change
Expand Up @@ -391,11 +391,11 @@ Execute(LSP diagnostics responses on project root should not populate loclist):
\ ale#test#GetLoclistWithoutModule()

Execute(LSP errors should mark linters no longer active):
let b:ale_linters = ['pyls']
runtime ale_linters/python/pyls.vim
let b:ale_linters = ['pylsp']
runtime ale_linters/python/pylsp.vim
call ale#test#SetFilename('filename.py')
call ale#engine#InitBufferInfo(bufnr(''))
call ale#lsp_linter#SetLSPLinterMap({1: 'pyls'})
call ale#lsp_linter#SetLSPLinterMap({1: 'pylsp'})

let g:ale_buffer_info[bufnr('')].active_linter_list = ale#linter#Get('python')
Assert !empty(g:ale_buffer_info[bufnr('')].active_linter_list)
Expand Down
8 changes: 4 additions & 4 deletions test/test_find_references.vader
Original file line number Diff line number Diff line change
Expand Up @@ -344,8 +344,8 @@ Execute(LSP reference responses with a null result should be handled):
AssertEqual ['echom ''No references found.'''], g:expr_list

Execute(LSP reference requests should be sent):
runtime ale_linters/python/pyls.vim
let b:ale_linters = ['pyls']
runtime ale_linters/python/pylsp.vim
let b:ale_linters = ['pylsp']
call setpos('.', [bufnr(''), 1, 5, 0])

ALEFindReferences
Expand Down Expand Up @@ -381,8 +381,8 @@ Execute(LSP reference requests should be sent):
AssertEqual {'42': {'open_in': 'current-buffer', 'use_relative_paths': 0}}, ale#references#GetMap()

Execute('-relative' argument should enable 'use_relative_paths' in HandleLSPResponse):
runtime ale_linters/python/pyls.vim
let b:ale_linters = ['pyls']
runtime ale_linters/python/pylsp.vim
let b:ale_linters = ['pylsp']
call setpos('.', [bufnr(''), 1, 5, 0])

ALEFindReferences -relative
Expand Down
Loading