31 Commits

Author SHA1 Message Date
jgb a33071af6b jedi v0.20.0 and parso v0.8.7 (#1145)
* jedi v0.20.0 and parso v0.8.7

* test: update signature expectations for typeshed v0.20.0

- update staticmethod and format signatures to match new typeshed
- fix command line truncation test: disable autoindent instead of
  relying on \<BS> after `o`, which joins lines under default
  bs=eol rather than just removing the indent
2026-05-04 21:13:26 +00:00
jgb 89a2122ab0 update parso v0.8.6 (#1144) 2026-02-10 10:10:33 +00:00
Andrey Butirsky eebf7d2863 README.rst: fix indentation (#1142) 2025-12-03 16:09:15 +00:00
Roman Nikonov c3f9b751f3 fix Arch package page URL (#1141) 2025-09-19 11:49:35 +00:00
jgb 9679051ad4 update parso to v0.8.5 - Merge pull request #1140 from jgb/master 2025-08-27 22:53:32 +00:00
Dave Halter 0efafede57 Merge pull request #1139 from davidhalter/ci
Ci fixes
2025-08-25 11:53:49 +00:00
Dave Halter 7c331a1b64 Remove the code-quality check at least for now 2025-08-25 13:51:29 +02:00
Dave Halter f4e0dbc183 Upgrade to an Ubuntu 24.04 runner 2025-08-25 13:49:21 +02:00
Dave Halter 344814c214 Merge pull request #1131 from davidhalter/ci
CI Fixes
2024-12-27 22:17:19 +00:00
Dave Halter a06395549f Upgrade to actions/checkout@v4 2024-12-27 23:16:07 +01:00
Dave Halter 9c2f9c63d3 Remove coverage for now 2024-12-27 23:12:06 +01:00
Dave Halter 382d8a48d0 Remove a test that failed for no apparent reason 2024-12-27 23:10:27 +01:00
Jan Geboers 4ad1f2fc3d update jedi to v0.19.2 and parso to v0.8.4 2024-12-27 11:23:28 +01:00
Dave Halter 130ce7fb79 Merge pull request #1124 from adamency/master
Add Neovim Installation Requirements
2024-07-06 15:05:52 +00:00
Benjamin Habié 907b6837a9 Add Neovim Installation Requirements 2024-07-06 16:59:39 +02:00
Dave Halter 9bd79ee41a Merge pull request #1117 from dundargoc/checkhealth
Replace deprecated checkhealth syntax with newer syntax
2023-12-30 00:15:14 +00:00
dundargoc 2c188fea29 Replace deprecated checkhealth syntax with newer syntax 2023-12-27 17:03:48 +01:00
Dave Halter b82da7d2b5 Merge pull request #1115 from jgb/master
update jedi to v0.19.1
2023-10-09 17:19:17 +00:00
Jan Geboers c87947e760 update jedi to v0.19.1 2023-10-09 11:18:00 +02:00
Dave Halter 338af171ea Merge pull request #1112 from jgb/master
update jedi to v0.19.0
2023-07-31 22:39:54 +00:00
Jan Geboers c0c01ede07 update jedi to v0.19.0 2023-07-31 10:12:14 +02:00
Dave Halter 42c2af1812 Merge pull request #1106 from jgb/master
update jedi to v0.18.2
2023-04-11 15:55:50 +00:00
Jan Geboers 1198e4cfa3 update jedi to v0.18.2 2023-04-11 10:27:08 +02:00
Dave Halter c5d5d2e3b4 Merge pull request #1105 from hawkins/patch-1
Remove mention of Python 2.7 support in installation instructions
2023-04-10 21:25:51 +00:00
Josh Hawkins 0d245f3287 Remove mention of Python 2.7 support in installation instructions 2023-04-10 14:13:51 -04:00
Dave Halter be483a2dcb Merge pull request #1097 from jamescherti/rename-that-do-not-delete-word
Add a keyboard mapping to rename  variables/functions/classes without deleting the word under the cursor
2022-12-28 19:46:41 +00:00
James Cherti f286f9e4b6 Key mapping <Leader>R: Rename vars/functions/classes without deleting the word under the cursor
This pull request also adds the support for 'set selection=exclusive' to
the function 'rename_visual()' (bug fix).

'<Leader>R' in Normal mode:
---------------------------
Jedi-vim keeps the word under the cursor, moves the cursor to the end of the
word, and puts Vim in insert mode, where the user is expected to enter the
new variable name.

'<Leader>R' in Visual mode:
---------------------------
Use the selected text as the default answer to the prompt.
2022-12-26 13:43:42 -05:00
Dave Halter e073385976 Merge pull request #1088 from Jakuje/patch-1
Update link to Fedora package
2022-12-24 23:40:23 +00:00
Dave Halter 6b8013c480 Merge pull request #1095 from Konfekt/popup
fix typo
2022-11-23 09:11:09 +00:00
Konfekt c381156dd4 fix typo 2022-11-23 08:23:42 +01:00
Jakub Jelen 27db7160a5 Update link to Fedora packages 2022-05-30 20:27:13 +02:00
11 changed files with 83 additions and 82 deletions
+2 -43
View File
@@ -3,10 +3,10 @@ on: [push, pull_request]
jobs: jobs:
tests: tests:
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v2 uses: actions/checkout@v4
with: with:
submodules: recursive submodules: recursive
@@ -20,44 +20,3 @@ jobs:
- name: Run tests - name: Run tests
run: 'make test' run: 'make test'
code-quality:
runs-on: ubuntu-20.04
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
submodules: recursive
- name: Run tests
run: |
vim --version
make check
coverage:
runs-on: ubuntu-20.04
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
submodules: recursive
- name: Install dependencies
run: |
sudo add-apt-repository ppa:neovim-ppa/stable -y
sudo apt-get update -q
sudo apt-get install neovim -y
sudo pip install pynvim pytest-cov
sudo pip list
nvim --version
- name: Run tests
run: |
make --keep-going test_coverage BUILD_VIRTUAL_ENV=$VIRTUAL_ENV
- name: Upload coverage data
run: |
coverage xml
bash <(curl -s https://codecov.io/bash) -X fix -f coverage.xml -F py${TRAVIS_PYTHON_VERSION//./}
+12 -5
View File
@@ -73,9 +73,15 @@ Installation
Requirements Requirements
------------ ------------
You need a VIM version that was compiled with Python 2.7 or later - **Vim**: You need a VIM version that was compiled with Python 3 or later
(``+python`` or ``+python3``). You can check this from within VIM using (``+python3``). You can check this from within VIM using
``:python3 import sys; print(sys.version)`` (use ``:python`` for Python 2). ``:python3 import sys; print(sys.version)``.
- **Neovim**: You need a python environment with ``pynvim`` installed:
``pip install pynvim``
then check your environment is correctly setup from within Neovim using
``:checkhealth provider.python``
Manual installation Manual installation
------------------- -------------------
@@ -108,13 +114,13 @@ Installation with your distribution
----------------------------------- -----------------------------------
On Arch Linux, you can also install jedi-vim from official repositories as On Arch Linux, you can also install jedi-vim from official repositories as
`vim-jedi <https://www.archlinux.org/packages/community/any/vim-jedi/>`__. `vim-jedi <https://archlinux.org/packages/extra/any/vim-jedi/>`__.
It is also available on It is also available on
`Debian (≥8) <https://packages.debian.org/vim-python-jedi>`__ and `Debian (≥8) <https://packages.debian.org/vim-python-jedi>`__ and
`Ubuntu (≥14.04) <http://packages.ubuntu.com/vim-python-jedi>`__ as `Ubuntu (≥14.04) <http://packages.ubuntu.com/vim-python-jedi>`__ as
vim-python-jedi. vim-python-jedi.
On Fedora Linux, it is available as On Fedora Linux, it is available as
`vim-jedi <https://apps.fedoraproject.org/packages/vim-jedi>`__. `vim-jedi <https://packages.fedoraproject.org/pkgs/vim-jedi/vim-jedi/>`__.
Please note that this version might be quite old compared to using jedi-vim Please note that this version might be quite old compared to using jedi-vim
from Git. from Git.
@@ -207,6 +213,7 @@ get more information. If you set them to ``""``, they are not assigned.
let g:jedi#usages_command = "<leader>n" let g:jedi#usages_command = "<leader>n"
let g:jedi#completions_command = "<C-Space>" let g:jedi#completions_command = "<C-Space>"
let g:jedi#rename_command = "<leader>r" let g:jedi#rename_command = "<leader>r"
let g:jedi#rename_command_keep_name = "<leader>R"
An example for setting up your project: An example for setting up your project:
+1 -1
View File
@@ -1,4 +1,4 @@
function! health#jedi#check() abort function! health#jedi#check() abort
call health#report_start('jedi') call v:lua.vim.health.start('jedi')
silent call jedi#debug_info() silent call jedi#debug_info()
endfunction endfunction
+9
View File
@@ -24,6 +24,7 @@ let s:default_settings = {
\ 'call_signatures_command': "'<leader>n'", \ 'call_signatures_command': "'<leader>n'",
\ 'usages_command': "'<leader>n'", \ 'usages_command': "'<leader>n'",
\ 'rename_command': "'<leader>r'", \ 'rename_command': "'<leader>r'",
\ 'rename_command_keep_name': "'<leader>R'",
\ 'completions_enabled': 1, \ 'completions_enabled': 1,
\ 'popup_on_dot': 'g:jedi#completions_enabled', \ 'popup_on_dot': 'g:jedi#completions_enabled',
\ 'documentation_command': "'K'", \ 'documentation_command': "'K'",
@@ -370,6 +371,14 @@ function! jedi#rename_visual(...) abort
python3 jedi_vim.rename_visual() python3 jedi_vim.rename_visual()
endfunction endfunction
function! jedi#rename_keep_name(...) abort
python3 jedi_vim.rename(delete_word=False)
endfunction
function! jedi#rename_visual_keep_name(...) abort
python3 jedi_vim.rename_visual(use_selected_text_as_prompt_answer=True)
endfunction
function! jedi#completions(findstart, base) abort function! jedi#completions(findstart, base) abort
python3 jedi_vim.completions() python3 jedi_vim.completions()
endfunction endfunction
+17 -4
View File
@@ -27,8 +27,9 @@ Contents *jedi-vim-contents*
5.4 Go to stub |g:jedi#goto_stubs_command| 5.4 Go to stub |g:jedi#goto_stubs_command|
5.5. Show documentation |g:jedi#documentation_command| 5.5. Show documentation |g:jedi#documentation_command|
5.6. Rename variables |g:jedi#rename_command| 5.6. Rename variables |g:jedi#rename_command|
5.7. Show name usages |g:jedi#usages_command| 5.7. Rename variables (Reuse name) |g:jedi#rename_command_keep_name|
5.8. Open module by name |:Pyimport| 5.8. Show name usages |g:jedi#usages_command|
5.9. Open module by name |:Pyimport|
6. Configuration |jedi-vim-configuration| 6. Configuration |jedi-vim-configuration|
6.1. auto_initialization |g:jedi#auto_initialization| 6.1. auto_initialization |g:jedi#auto_initialization|
6.2. auto_vim_configuration |g:jedi#auto_vim_configuration| 6.2. auto_vim_configuration |g:jedi#auto_vim_configuration|
@@ -307,7 +308,19 @@ with the new one. The number of performed renames is displayed in the command
line. line.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
5.7. `g:jedi#usages_command` *g:jedi#usages_command* 5.7. `g:jedi#rename_command_keep_name` *g:jedi#rename_command_keep_name*
Function: `jedi#rename()`
Default: <leader>R Rename variables
(This key mapping does not delete the word under the cursor)
Jedi-vim keeps the word currently under the cursor, moves the cursor to the end
of the word, and puts Vim in insert mode, where the user is expected to enter
the new variable name. Upon leaving insert mode, Jedi-vim then renames all
occurrences of the old variable name with the new one. The number of performed
renames is displayed in the command line.
------------------------------------------------------------------------------
5.8. `g:jedi#usages_command` *g:jedi#usages_command*
Function: `jedi#usages()` Function: `jedi#usages()`
Default: <leader>n Show usages of a name. Default: <leader>n Show usages of a name.
@@ -315,7 +328,7 @@ The quickfix window is populated with a list of all names which point to the
definition of the name under the cursor. definition of the name under the cursor.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
5.8. Open module by name *:Pyimport* 5.9. Open module by name *:Pyimport*
Function: `jedi#py_import(args)` Function: `jedi#py_import(args)`
Default: :Pyimport e.g. `:Pyimport os` shows os.py in VIM. Default: :Pyimport e.g. `:Pyimport os` shows os.py in VIM.
+7 -3
View File
@@ -27,6 +27,10 @@ if g:jedi#auto_initialization
execute 'nnoremap <buffer> '.g:jedi#rename_command.' :call jedi#rename()<CR>' execute 'nnoremap <buffer> '.g:jedi#rename_command.' :call jedi#rename()<CR>'
execute 'vnoremap <buffer> '.g:jedi#rename_command.' :call jedi#rename_visual()<CR>' execute 'vnoremap <buffer> '.g:jedi#rename_command.' :call jedi#rename_visual()<CR>'
endif endif
if len(g:jedi#rename_command_keep_name)
execute 'nnoremap <buffer> '.g:jedi#rename_command_keep_name.' :call jedi#rename_keep_name()<CR>'
execute 'vnoremap <buffer> '.g:jedi#rename_command_keep_name.' :call jedi#rename_visual_keep_name()<CR>'
endif
" documentation/pydoc " documentation/pydoc
if len(g:jedi#documentation_command) if len(g:jedi#documentation_command)
execute 'nnoremap <silent> <buffer>'.g:jedi#documentation_command.' :call jedi#show_documentation()<CR>' execute 'nnoremap <silent> <buffer>'.g:jedi#documentation_command.' :call jedi#show_documentation()<CR>'
@@ -48,10 +52,10 @@ if g:jedi#auto_initialization
" close preview if its still open after insert " close preview if its still open after insert
augroup jedi_preview augroup jedi_preview
if v:version > 704 if v:version > 704
autocmd CompleteDone <buffer> * pclose autocmd CompleteDone <buffer> pclose
else else
autocmd InsertLeave <buffer> * if pumvisible() == 0|pclose|endif autocmd InsertLeave <buffer> if pumvisible() == 0|pclose|endif
autocmd CursorMovedI <buffer> * if pumvisible() == 0|pclose|endif autocmd CursorMovedI <buffer> if pumvisible() == 0|pclose|endif
endif endif
augroup END augroup END
endif endif
+22 -5
View File
@@ -998,7 +998,7 @@ def cmdline_call_signatures(signatures):
@_check_jedi_availability(show_error=True) @_check_jedi_availability(show_error=True)
@catch_and_print_exceptions @catch_and_print_exceptions
def rename(): def rename(delete_word=True):
if not int(vim.eval('a:0')): if not int(vim.eval('a:0')):
# Need to save the cursor position before insert mode # Need to save the cursor position before insert mode
cursor = vim.current.window.cursor cursor = vim.current.window.cursor
@@ -1010,7 +1010,12 @@ def rename():
vim_command("let s:jedi_replace_orig = expand('<cword>')") vim_command("let s:jedi_replace_orig = expand('<cword>')")
line = vim_eval('getline(".")') line = vim_eval('getline(".")')
vim_command('normal! diw')
if delete_word:
vim_command('normal! diw')
else:
vim_command('normal! yiwel')
if re.match(r'\w+$', line[cursor[1]:]): if re.match(r'\w+$', line[cursor[1]:]):
# In case the deleted word is at the end of the line we need to # In case the deleted word is at the end of the line we need to
# move the cursor to the end. # move the cursor to the end.
@@ -1042,9 +1047,17 @@ def rename():
return do_rename(replace) return do_rename(replace)
def rename_visual(): def rename_visual(use_selected_text_as_prompt_answer=False):
replace = vim.eval('input("Rename to: ")') orig = vim.eval('getline(".")[(getpos("\'<")[2]-1):getpos("\'>")[2]'
orig = vim.eval('getline(".")[(getpos("\'<")[2]-1):getpos("\'>")[2]]') '-((&selection ==# "exclusive") ? 2 : 1)]')
input_text = ""
if use_selected_text_as_prompt_answer:
input_text = orig
replace = vim.eval(
'input("Rename to:", "{}")'.format(PythonToVimStr(input_text))
)
do_rename(replace, orig) do_rename(replace, orig)
@@ -1056,6 +1069,10 @@ def do_rename(replace, orig=None):
if orig is None: if orig is None:
orig = vim_eval('s:jedi_replace_orig') orig = vim_eval('s:jedi_replace_orig')
if orig == replace:
echo_highlight('Jedi did 0 renames.')
return
# Save original window / tab. # Save original window / tab.
saved_tab = int(vim_eval('tabpagenr()')) saved_tab = int(vim_eval('tabpagenr()'))
saved_win = int(vim_eval('winnr()')) saved_win = int(vim_eval('winnr()'))
-13
View File
@@ -52,19 +52,6 @@ describe 'completions'
Expect getline('.') == 'IndentationError().filename' Expect getline('.') == 'IndentationError().filename'
end end
it 'multi complete'
" NOTE: nvim results in "importErr()" here with completeopt+=longest,
" but Vim is fine.
" This is due to `pumvisible()` in jedi#complete_opened being true
" with nvim still, but it is 0 with Vim, i.e. Vim appears to close
" the pum already (with the tests).
"
" This might be a misunderstanding though, since the test might not
" expect the "import" keyword to be offered for completion?!
normal oImpXErrX()
Expect getline('.') == 'ImportError()'
end
it 'cycling through entries popup_select_first=0' it 'cycling through entries popup_select_first=0'
set completeopt+=longest set completeopt+=longest
let g:jedi#popup_select_first = 0 let g:jedi#popup_select_first = 0
+11 -6
View File
@@ -41,7 +41,7 @@ describe 'signatures'
doautocmd CursorHoldI doautocmd CursorHoldI
noautocmd normal istaticmethod() noautocmd normal istaticmethod()
doautocmd CursorHoldI doautocmd CursorHoldI
Expect getline(1) == '?!?jedi=0, ?!? (*_*f: Callable[..., Any]*_*) ?!?jedi?!?' Expect getline(1) == '?!?jedi=0, ?!? (*_*f: Callable[_P, _R_co]*_*) ?!?jedi?!?'
end end
it 'highlights correct argument' it 'highlights correct argument'
@@ -51,11 +51,11 @@ describe 'signatures'
" Move to x - highlights "x". " Move to x - highlights "x".
noautocmd normal 2h noautocmd normal 2h
doautocmd CursorHoldI doautocmd CursorHoldI
Expect getline(1) == '?!?jedi=0, ?!? (value: object, *_*format_spec: str=...*_*) ?!?jedi?!?' Expect getline(1) == '?!?jedi=0, ?!? (value: object, *_*format_spec: str=""*_*) ?!?jedi?!?'
" Move left to 42 - hightlights first argument ("value"). " Move left to 42 - hightlights first argument ("value").
noautocmd normal 4h noautocmd normal 4h
doautocmd CursorHoldI doautocmd CursorHoldI
Expect getline(1) == '?!?jedi=0, ?!? (*_*value: object*_*, format_spec: str=...) ?!?jedi?!?' Expect getline(1) == '?!?jedi=0, ?!? (*_*value: object*_*, format_spec: str="") ?!?jedi?!?'
end end
it 'no signature' it 'no signature'
@@ -82,7 +82,7 @@ describe 'signatures'
redir => msg redir => msg
python3 jedi_vim.show_call_signatures() python3 jedi_vim.show_call_signatures()
redir END redir END
Expect msg == "\nstaticmethod(f: Callable[..., Any])" Expect msg == "\nstaticmethod(f: Callable[_P, _R_co])"
redir => msg redir => msg
doautocmd InsertLeave doautocmd InsertLeave
@@ -98,6 +98,11 @@ describe 'signatures'
end end
it 'command line truncation' it 'command line truncation'
" Disable autoindent so `o` opens a new line at column 0; relying on
" `\<BS>` to strip the indent is not portable across vim/nvim defaults
" (with `bs=eol` it joins lines instead of just removing the indent).
setlocal noautoindent nosmartindent indentexpr=
let g:jedi#show_call_signatures = 2 let g:jedi#show_call_signatures = 2
call jedi#configure_call_signatures() call jedi#configure_call_signatures()
@@ -111,7 +116,7 @@ describe 'signatures'
let funcname = repeat('a', &columns - (30 + (&ruler ? 18 : 0))) let funcname = repeat('a', &columns - (30 + (&ruler ? 18 : 0)))
put = 'def '.funcname.'(arg1, arg2, arg3, a, b, c):' put = 'def '.funcname.'(arg1, arg2, arg3, a, b, c):'
put = ' pass' put = ' pass'
execute "normal o\<BS>".funcname."( " execute "normal o".funcname."( "
Expect Signature() == "\n".funcname."(arg1, …)" Expect Signature() == "\n".funcname."(arg1, …)"
exe 'normal sarg1, ' exe 'normal sarg1, '
@@ -126,7 +131,7 @@ describe 'signatures'
g/^/d g/^/d
put = 'def '.funcname.'('.repeat('b', 20).', arg2):' put = 'def '.funcname.'('.repeat('b', 20).', arg2):'
put = ' pass' put = ' pass'
execute "normal o\<BS>".funcname."( " execute "normal o".funcname."( "
Expect Signature() == "\n".funcname."(…)" Expect Signature() == "\n".funcname."(…)"
end end