Skip to content

Commit

Permalink
chore: replace python-language-server to supported pylsp
Browse files Browse the repository at this point in the history
As mentioned in dense-analysis#3722 palantir's python-language-server is no longer maintained.
The alternative is to use the community-driven https://github.com/python-lsp/python-lsp-server.
  • Loading branch information
GerardoGR committed Jul 9, 2021
1 parent e230f07 commit 38753bb
Show file tree
Hide file tree
Showing 18 changed files with 152 additions and 152 deletions.
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

0 comments on commit 38753bb

Please sign in to comment.