Compare commits
3 Commits
f53e1e0880
...
9bab0e48c8
Author | SHA1 | Date |
---|---|---|
Amir | 9bab0e48c8 | |
Amir | a4e59b561f | |
Amir | b8073ac5c4 |
|
@ -109,7 +109,6 @@ I recommend reading the docs of these plugins to understand them better. Each pl
|
||||||
* [gist-vim](https://github.com/mattn/gist-vim) Easily create gists from Vim using the `:Gist` command
|
* [gist-vim](https://github.com/mattn/gist-vim) Easily create gists from Vim using the `:Gist` command
|
||||||
* [vim-indent-guides](https://github.com/nathanaelkane/vim-indent-guides) Is a plugin for visually displaying indent levels in Vim
|
* [vim-indent-guides](https://github.com/nathanaelkane/vim-indent-guides) Is a plugin for visually displaying indent levels in Vim
|
||||||
* [editorconfig-vim](https://github.com/editorconfig/editorconfig-vim) EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs.
|
* [editorconfig-vim](https://github.com/editorconfig/editorconfig-vim) EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs.
|
||||||
* [jedi-vim](https://github.com/davidhalter/jedi-vim) A great Python autocompletion library for VIM.
|
|
||||||
|
|
||||||
|
|
||||||
## Included color schemes
|
## Included color schemes
|
||||||
|
@ -358,14 +357,6 @@ Open [ctrlp.vim](https://github.com/kien/ctrlp.vim) plugin to quickly find a fil
|
||||||
nnoremap <leader>v :.GBrowse!<CR>
|
nnoremap <leader>v :.GBrowse!<CR>
|
||||||
xnoremap <leader>v :'<'>GBrowse!<CR>
|
xnoremap <leader>v :'<'>GBrowse!<CR>
|
||||||
|
|
||||||
[jedi-vim](https://github.com/davidhalter/jedi-vim) specific mappings (can be used to browse through Python code quickly):
|
|
||||||
|
|
||||||
let g:jedi#goto_assignments_command = "<leader>a"
|
|
||||||
let g:jedi#usages_command = "<leader>u"
|
|
||||||
let g:jedi#completions_command = "<C-Space>"
|
|
||||||
let g:jedi#rename_command = "<leader>r"
|
|
||||||
|
|
||||||
|
|
||||||
### Spell checking
|
### Spell checking
|
||||||
Pressing `<leader>ss` will toggle spell checking:
|
Pressing `<leader>ss` will toggle spell checking:
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
" Author: kmarc <korondi.mark@gmail.com>
|
" Author: kmarc <korondi.mark@gmail.com>
|
||||||
" Description: This file adds support for using GNU awk with sripts.
|
" Description: This file adds support for using GNU awk with scripts.
|
||||||
|
|
||||||
call ale#Set('awk_gawk_executable', 'gawk')
|
call ale#Set('awk_gawk_executable', 'gawk')
|
||||||
call ale#Set('awk_gawk_options', '')
|
call ale#Set('awk_gawk_options', '')
|
||||||
|
|
|
@ -26,7 +26,7 @@ function! ale_linters#cpp#clangtidy#GetCommand(buffer, output) abort
|
||||||
|
|
||||||
" Tell clang-tidy a .h header with a C++ filetype in Vim is a C++ file
|
" Tell clang-tidy a .h header with a C++ filetype in Vim is a C++ file
|
||||||
" only when compile-commands.json file is not there. Adding these
|
" only when compile-commands.json file is not there. Adding these
|
||||||
" flags makes clang-tidy completely ignore compile commmands.
|
" flags makes clang-tidy completely ignore compile commands.
|
||||||
if expand('#' . a:buffer) =~# '\.h$'
|
if expand('#' . a:buffer) =~# '\.h$'
|
||||||
let l:options .= !empty(l:options) ? ' -x c++' : '-x c++'
|
let l:options .= !empty(l:options) ? ' -x c++' : '-x c++'
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
" always, yes, never
|
" always, yes, never
|
||||||
call ale#Set('dockerfile_hadolint_use_docker', 'never')
|
call ale#Set('dockerfile_hadolint_use_docker', 'never')
|
||||||
call ale#Set('dockerfile_hadolint_docker_image', 'hadolint/hadolint')
|
call ale#Set('dockerfile_hadolint_docker_image', 'hadolint/hadolint')
|
||||||
|
call ale#Set('dockerfile_hadolint_options', '')
|
||||||
|
|
||||||
function! ale_linters#dockerfile#hadolint#Handle(buffer, lines) abort
|
function! ale_linters#dockerfile#hadolint#Handle(buffer, lines) abort
|
||||||
" Matches patterns line the following:
|
" Matches patterns line the following:
|
||||||
|
@ -102,7 +103,7 @@ endfunction
|
||||||
|
|
||||||
function! ale_linters#dockerfile#hadolint#GetCommand(buffer) abort
|
function! ale_linters#dockerfile#hadolint#GetCommand(buffer) abort
|
||||||
let l:command = ale_linters#dockerfile#hadolint#GetExecutable(a:buffer)
|
let l:command = ale_linters#dockerfile#hadolint#GetExecutable(a:buffer)
|
||||||
let l:opts = '--no-color -'
|
let l:opts = ale#Var(a:buffer, 'dockerfile_hadolint_options') . ' --no-color -'
|
||||||
|
|
||||||
if l:command is# 'docker'
|
if l:command is# 'docker'
|
||||||
return printf('docker run --rm -i %s hadolint %s',
|
return printf('docker run --rm -i %s hadolint %s',
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
" Author: Dmitri Vereshchagin <dmitri.vereshchagin@gmail.com>
|
||||||
|
" Description: LSP linter for Erlang files
|
||||||
|
|
||||||
|
call ale#Set('erlang_erlang_ls_executable', 'erlang_ls')
|
||||||
|
call ale#Set('erlang_erlang_ls_log_dir', '')
|
||||||
|
call ale#Set('erlang_erlang_ls_log_level', 'info')
|
||||||
|
|
||||||
|
function! s:GetCommand(buffer) abort
|
||||||
|
let l:log_dir = ale#Var(a:buffer, 'erlang_erlang_ls_log_dir')
|
||||||
|
let l:log_level = ale#Var(a:buffer, 'erlang_erlang_ls_log_level')
|
||||||
|
|
||||||
|
let l:command = '%e'
|
||||||
|
|
||||||
|
if !empty(l:log_dir)
|
||||||
|
let l:command .= ' --log-dir=' . ale#Escape(l:log_dir)
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:command .= ' --log-level=' . ale#Escape(l:log_level)
|
||||||
|
|
||||||
|
return l:command
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:FindProjectRoot(buffer) abort
|
||||||
|
let l:markers = ['_build/', 'erlang_ls.config', 'rebar.lock']
|
||||||
|
|
||||||
|
" This is a way to find Erlang/OTP root (the one that is managed
|
||||||
|
" by kerl or asdf). Useful if :ALEGoToDefinition takes us there.
|
||||||
|
let l:markers += ['.kerl_config']
|
||||||
|
|
||||||
|
for l:marker in l:markers
|
||||||
|
let l:path = l:marker[-1:] is# '/'
|
||||||
|
\ ? ale#path#FindNearestDirectory(a:buffer, l:marker)
|
||||||
|
\ : ale#path#FindNearestFile(a:buffer, l:marker)
|
||||||
|
|
||||||
|
if !empty(l:path)
|
||||||
|
return ale#path#Dirname(l:path)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('erlang', {
|
||||||
|
\ 'name': 'erlang_ls',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'erlang_erlang_ls_executable')},
|
||||||
|
\ 'command': function('s:GetCommand'),
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'project_root': function('s:FindProjectRoot'),
|
||||||
|
\})
|
|
@ -1,5 +1,7 @@
|
||||||
" Author: aurieh - https://github.com/aurieh
|
" Author: aurieh - https://github.com/aurieh
|
||||||
|
|
||||||
|
call ale#Set('make_checkmake_config', '')
|
||||||
|
|
||||||
function! ale_linters#make#checkmake#Handle(buffer, lines) abort
|
function! ale_linters#make#checkmake#Handle(buffer, lines) abort
|
||||||
let l:pattern = '\v^(\d+):(.+):(.+)$'
|
let l:pattern = '\v^(\d+):(.+):(.+)$'
|
||||||
let l:output = []
|
let l:output = []
|
||||||
|
@ -17,9 +19,19 @@ function! ale_linters#make#checkmake#Handle(buffer, lines) abort
|
||||||
return l:output
|
return l:output
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#make#checkmake#GetCommand(buffer) abort
|
||||||
|
let l:config = ale#Var(a:buffer, 'make_checkmake_config')
|
||||||
|
let l:cmd = 'checkmake'
|
||||||
|
\ . ' --format="{{.LineNumber}}:{{.Rule}}:{{.Violation}}{{\"\r\n\"}}"'
|
||||||
|
\ . (!empty(l:config) ? ' --config="' . l:config . '"' : '')
|
||||||
|
\ . ' %s'
|
||||||
|
|
||||||
|
return l:cmd
|
||||||
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('make', {
|
call ale#linter#Define('make', {
|
||||||
\ 'name': 'checkmake',
|
\ 'name': 'checkmake',
|
||||||
\ 'executable': 'checkmake',
|
\ 'executable': 'checkmake',
|
||||||
\ 'command': 'checkmake %s --format="{{.LineNumber}}:{{.Rule}}:{{.Violation}}{{\"\r\n\"}}"',
|
\ 'command': function('ale_linters#make#checkmake#GetCommand'),
|
||||||
\ 'callback': 'ale_linters#make#checkmake#Handle',
|
\ 'callback': 'ale_linters#make#checkmake#Handle',
|
||||||
\})
|
\})
|
||||||
|
|
|
@ -17,7 +17,7 @@ function! ale_linters#matlab#mlint#Handle(buffer, lines) abort
|
||||||
let l:code = l:match[3]
|
let l:code = l:match[3]
|
||||||
let l:text = l:match[4]
|
let l:text = l:match[4]
|
||||||
|
|
||||||
" Suppress erroneous waring about filename
|
" Suppress erroneous warning about filename
|
||||||
" TODO: Enable this error when copying filename is supported
|
" TODO: Enable this error when copying filename is supported
|
||||||
if l:code is# 'FNDEF'
|
if l:code is# 'FNDEF'
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
" Author: Yining <zhang.yining@gmail.com>
|
||||||
|
" Description: ruff as linter for python files
|
||||||
|
|
||||||
|
call ale#Set('python_ruff_executable', 'ruff')
|
||||||
|
call ale#Set('python_ruff_options', '')
|
||||||
|
call ale#Set('python_ruff_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
call ale#Set('python_ruff_change_directory', 1)
|
||||||
|
call ale#Set('python_ruff_auto_pipenv', 0)
|
||||||
|
call ale#Set('python_ruff_auto_poetry', 0)
|
||||||
|
|
||||||
|
call ale#fix#registry#Add('ruff',
|
||||||
|
\ 'ale#fixers#ruff#Fix',
|
||||||
|
\ ['python'],
|
||||||
|
\ 'A python linter/fixer for Python written in Rust'
|
||||||
|
\)
|
||||||
|
|
||||||
|
function! ale_linters#python#ruff#GetExecutable(buffer) abort
|
||||||
|
if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_ruff_auto_pipenv'))
|
||||||
|
\ && ale#python#PipenvPresent(a:buffer)
|
||||||
|
return 'pipenv'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_ruff_auto_poetry'))
|
||||||
|
\ && ale#python#PoetryPresent(a:buffer)
|
||||||
|
return 'poetry'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#python#FindExecutable(a:buffer, 'python_ruff', ['ruff'])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#python#ruff#GetCwd(buffer) abort
|
||||||
|
if ale#Var(a:buffer, 'python_ruff_change_directory')
|
||||||
|
" Run from project root if found, else from buffer dir.
|
||||||
|
let l:project_root = ale#python#FindProjectRoot(a:buffer)
|
||||||
|
|
||||||
|
return !empty(l:project_root) ? l:project_root : '%s:h'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#python#ruff#GetCommand(buffer, version) abort
|
||||||
|
let l:executable = ale_linters#python#ruff#GetExecutable(a:buffer)
|
||||||
|
let l:exec_args = l:executable =~? 'pipenv\|poetry$'
|
||||||
|
\ ? ' run ruff'
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
" NOTE: ruff version `0.0.69` supports liniting input from stdin
|
||||||
|
return ale#Escape(l:executable) . l:exec_args
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'python_ruff_options'))
|
||||||
|
\ . ' --format text'
|
||||||
|
\ . (ale#semver#GTE(a:version, [0, 0, 69]) ? ' -' : ' %s')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#python#ruff#Handle(buffer, lines) abort
|
||||||
|
"Example: path/to/file.py:10:5: E999 SyntaxError: unexpected indent
|
||||||
|
let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+)?:? (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('python', {
|
||||||
|
\ 'name': 'ruff',
|
||||||
|
\ 'executable': function('ale_linters#python#ruff#GetExecutable'),
|
||||||
|
\ 'cwd': function('ale_linters#python#ruff#GetCwd'),
|
||||||
|
\ 'command': {buffer -> ale#semver#RunWithVersionCheck(
|
||||||
|
\ buffer,
|
||||||
|
\ ale_linters#python#ruff#GetExecutable(buffer),
|
||||||
|
\ '%e --version',
|
||||||
|
\ function('ale_linters#python#ruff#GetCommand'),
|
||||||
|
\ )},
|
||||||
|
\ 'callback': 'ale_linters#python#ruff#Handle',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'read_buffer': 1,
|
||||||
|
\})
|
|
@ -13,7 +13,7 @@ function! ale_linters#tex#lacheck#Handle(buffer, lines) abort
|
||||||
|
|
||||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
" lacheck follows `\input{}` commands. If the cwd is not the same as the
|
" lacheck follows `\input{}` commands. If the cwd is not the same as the
|
||||||
" file in the buffer then it will fail to find the inputed items. We do not
|
" file in the buffer then it will fail to find the inputted items. We do not
|
||||||
" want warnings from those items anyway
|
" want warnings from those items anyway
|
||||||
if !empty(matchstr(l:match[3], '^Could not open ".\+"$'))
|
if !empty(matchstr(l:match[3], '^Could not open ".\+"$'))
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -216,7 +216,7 @@ function! s:UpdateCursor(cursor, start, end, offset) abort
|
||||||
" to the end of the changes
|
" to the end of the changes
|
||||||
let l:cur_line = l:end_line + l:line_offset
|
let l:cur_line = l:end_line + l:line_offset
|
||||||
let l:cur_column = l:end_column + l:column_offset
|
let l:cur_column = l:end_column + l:column_offset
|
||||||
" else is not necesary, it means modifications are happening
|
" else is not necessary, it means modifications are happening
|
||||||
" after the cursor so no cursor updates need to be done
|
" after the cursor so no cursor updates need to be done
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -130,6 +130,7 @@ let s:should_complete_map = {
|
||||||
\ '<default>': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$',
|
\ '<default>': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$',
|
||||||
\ 'clojure': s:lisp_regex,
|
\ 'clojure': s:lisp_regex,
|
||||||
\ 'lisp': s:lisp_regex,
|
\ 'lisp': s:lisp_regex,
|
||||||
|
\ 'racket': '\k\+$',
|
||||||
\ 'typescript': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|''$|"$',
|
\ 'typescript': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|''$|"$',
|
||||||
\ 'rust': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$',
|
\ 'rust': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$',
|
||||||
\ 'cpp': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$|-\>$',
|
\ 'cpp': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$|-\>$',
|
||||||
|
|
|
@ -570,6 +570,11 @@ let s:default_registry = {
|
||||||
\ 'function': 'ale#fixers#zigfmt#Fix',
|
\ 'function': 'ale#fixers#zigfmt#Fix',
|
||||||
\ 'suggested_filetypes': ['zig'],
|
\ 'suggested_filetypes': ['zig'],
|
||||||
\ 'description': 'Official formatter for Zig',
|
\ 'description': 'Official formatter for Zig',
|
||||||
|
\ },
|
||||||
|
\ 'raco_fmt': {
|
||||||
|
\ 'function': 'ale#fixers#raco_fmt#Fix',
|
||||||
|
\ 'suggested_filetypes': ['racket'],
|
||||||
|
\ 'description': 'Fix Racket files with raco fmt.',
|
||||||
\ }
|
\ }
|
||||||
\}
|
\}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
" Author: Jeremy Cantrell <jmcantrell@gmail.com>
|
||||||
|
" Description: Integration of raco fmt with ALE.
|
||||||
|
|
||||||
|
call ale#Set('racket_raco_fmt_executable', 'raco')
|
||||||
|
call ale#Set('racket_raco_fmt_options', '')
|
||||||
|
|
||||||
|
function! ale#fixers#raco_fmt#Fix(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'racket_raco_fmt_executable')
|
||||||
|
let l:options = ale#Var(a:buffer, 'racket_raco_fmt_options')
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': ale#Escape(l:executable) . ' fmt'
|
||||||
|
\ . (empty(l:options) ? '' : ' ' . l:options),
|
||||||
|
\}
|
||||||
|
endfunction
|
|
@ -0,0 +1,54 @@
|
||||||
|
" Author: Yining <zhang.yining@gmail.com>
|
||||||
|
" Description: ruff as ALE fixer for python files
|
||||||
|
|
||||||
|
function! ale#fixers#ruff#GetCwd(buffer) abort
|
||||||
|
if ale#Var(a:buffer, 'python_ruff_change_directory')
|
||||||
|
" Run from project root if found, else from buffer dir.
|
||||||
|
let l:project_root = ale#python#FindProjectRoot(a:buffer)
|
||||||
|
|
||||||
|
return !empty(l:project_root) ? l:project_root : '%s:h'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#fixers#ruff#GetExecutable(buffer) abort
|
||||||
|
if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_ruff_auto_pipenv'))
|
||||||
|
\ && ale#python#PipenvPresent(a:buffer)
|
||||||
|
return 'pipenv'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_ruff_auto_poetry'))
|
||||||
|
\ && ale#python#PoetryPresent(a:buffer)
|
||||||
|
return 'poetry'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#python#FindExecutable(a:buffer, 'python_ruff', ['ruff'])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#fixers#ruff#GetCommand(buffer, version) abort
|
||||||
|
let l:executable = ale_linters#python#ruff#GetExecutable(a:buffer)
|
||||||
|
let l:exec_args = l:executable =~? 'pipenv\|poetry$'
|
||||||
|
\ ? ' run ruff'
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
" NOTE: ruff version `0.0.72` implement `--fix` with stdin
|
||||||
|
return ale#Escape(l:executable) . l:exec_args
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'python_ruff_options'))
|
||||||
|
\ . ' --fix'
|
||||||
|
\ . (ale#semver#GTE(a:version, [0, 0, 72]) ? ' -' : ' %s')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#fixers#ruff#Fix(buffer) abort
|
||||||
|
let l:fix_cmd = {buffer -> ale#semver#RunWithVersionCheck(
|
||||||
|
\ buffer,
|
||||||
|
\ ale#fixers#ruff#GetExecutable(buffer),
|
||||||
|
\ '%e --version',
|
||||||
|
\ function('ale#fixers#ruff#GetCommand'),
|
||||||
|
\ )}(a:buffer)
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'cwd': ale#fixers#ruff#GetCwd(a:buffer),
|
||||||
|
\ 'command': l:fix_cmd,
|
||||||
|
\}
|
||||||
|
endfunction
|
|
@ -13,7 +13,7 @@ function! ale#handlers#hdl_checker#IsDotGit(path) abort
|
||||||
return ! empty(a:path) && isdirectory(a:path)
|
return ! empty(a:path) && isdirectory(a:path)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Sould return (in order of preference)
|
" Should return (in order of preference)
|
||||||
" 1. Nearest config file
|
" 1. Nearest config file
|
||||||
" 2. Nearest .git directory
|
" 2. Nearest .git directory
|
||||||
" 3. The current path
|
" 3. The current path
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
" Author: Horacio Sanson https://github.com/hsanson
|
" Author: Horacio Sanson https://github.com/hsanson
|
||||||
" Description: Functions for integrating with Java tools
|
" Description: Functions for integrating with Java tools
|
||||||
|
|
||||||
" Find the nearest dir contining a gradle or pom file and asume it
|
" Find the nearest dir contining a gradle or pom file and assume it
|
||||||
" the root of a java app.
|
" the root of a java app.
|
||||||
function! ale#java#FindProjectRoot(buffer) abort
|
function! ale#java#FindProjectRoot(buffer) abort
|
||||||
let l:gradle_root = ale#gradle#FindProjectRoot(a:buffer)
|
let l:gradle_root = ale#gradle#FindProjectRoot(a:buffer)
|
||||||
|
|
|
@ -18,7 +18,7 @@ if !exists('s:timer_args')
|
||||||
let s:timer_args = {}
|
let s:timer_args = {}
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Return 1 if there is a buffer with buftype == 'quickfix' in bufffer list
|
" Return 1 if there is a buffer with buftype == 'quickfix' in buffer list
|
||||||
function! ale#list#IsQuickfixOpen() abort
|
function! ale#list#IsQuickfixOpen() abort
|
||||||
let l:res = getqflist({ 'winid' : winnr() })
|
let l:res = getqflist({ 'winid' : winnr() })
|
||||||
|
|
||||||
|
@ -190,7 +190,7 @@ function! s:RestoreViewIfNeeded(buffer) abort
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Check wether the cursor has moved since linting was actually requested. If
|
" Check whether the cursor has moved since linting was actually requested. If
|
||||||
" the user has indeed moved lines, do nothing
|
" the user has indeed moved lines, do nothing
|
||||||
let l:current_view = winsaveview()
|
let l:current_view = winsaveview()
|
||||||
|
|
||||||
|
|
|
@ -434,7 +434,7 @@ function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort
|
||||||
if empty(l:root) && a:linter.lsp isnot# 'tsserver'
|
if empty(l:root) && a:linter.lsp isnot# 'tsserver'
|
||||||
" If there's no project root, then we can't check files with LSP,
|
" If there's no project root, then we can't check files with LSP,
|
||||||
" unless we are using tsserver, which doesn't use project roots.
|
" unless we are using tsserver, which doesn't use project roots.
|
||||||
call ale#lsp_linter#AddErrorMessage(a:linter.name, "Failed to find project root, language server wont't start.")
|
call ale#lsp_linter#AddErrorMessage(a:linter.name, "Failed to find project root, language server won't start.")
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -37,6 +37,16 @@ hadolint *ale-dockerfile-hadolint*
|
||||||
hadolint can be found at: https://github.com/hadolint/hadolint
|
hadolint can be found at: https://github.com/hadolint/hadolint
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_dockerfile_hadolint_options *g:ale_dockerfile_hadolint_options*
|
||||||
|
*b:ale_dockerfile_hadolint_options*
|
||||||
|
Type: |String|
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
This variable can be changed to add command-line arguments to the hadolint
|
||||||
|
invocation. These arguments will be used whether docker is being used or not
|
||||||
|
(see below).
|
||||||
|
|
||||||
|
|
||||||
g:ale_dockerfile_hadolint_use_docker *g:ale_dockerfile_hadolint_use_docker*
|
g:ale_dockerfile_hadolint_use_docker *g:ale_dockerfile_hadolint_use_docker*
|
||||||
*b:ale_dockerfile_hadolint_use_docker*
|
*b:ale_dockerfile_hadolint_use_docker*
|
||||||
Type: |String|
|
Type: |String|
|
||||||
|
|
|
@ -51,6 +51,31 @@ g:ale_erlang_elvis_executable *g:ale_erlang_elvis_executable*
|
||||||
This variable can be changed to specify the elvis executable.
|
This variable can be changed to specify the elvis executable.
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
erlang_ls *ale-erlang-erlang_ls*
|
||||||
|
|
||||||
|
g:ale_erlang_erlang_ls_executable *g:ale_erlang_erlang_ls_executable*
|
||||||
|
*b:ale_erlang_erlang_ls_executable*
|
||||||
|
Type: |String|
|
||||||
|
Default: `'erlang_ls'`
|
||||||
|
|
||||||
|
This variable can be changed to specify the erlang_ls executable.
|
||||||
|
|
||||||
|
g:ale_erlang_erlang_ls_log_dir *g:ale_erlang_erlang_ls_log_dir*
|
||||||
|
*b:ale_erlang_erlang_ls_log_dir*
|
||||||
|
Type: |String|
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
If set this variable overrides default directory where logs will be written.
|
||||||
|
|
||||||
|
g:ale_erlang_erlang_ls_log_level *g:ale_erlang_erlang_ls_log_level*
|
||||||
|
*b:ale_erlang_erlang_ls_log_level*
|
||||||
|
Type: |String|
|
||||||
|
Default: `'info'`
|
||||||
|
|
||||||
|
This variable can be changed to specify log level.
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
erlc *ale-erlang-erlc*
|
erlc *ale-erlang-erlc*
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ ruumba *ale-eruby-ruumba*
|
||||||
|
|
||||||
g:ale_eruby_ruumba_executable *g:ale_eruby_ruumba_executable*
|
g:ale_eruby_ruumba_executable *g:ale_eruby_ruumba_executable*
|
||||||
*b:ale_eruby_ruumba_executable*
|
*b:ale_eruby_ruumba_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'ruumba`
|
Default: `'ruumba`
|
||||||
|
|
||||||
Override the invoked ruumba binary. This is useful for running ruumba
|
Override the invoked ruumba binary. This is useful for running ruumba
|
||||||
|
|
|
@ -169,7 +169,7 @@ g:ale_go_golines_executable *g:ale_go_lines_executable*
|
||||||
g:ale_go_golines_options *g:ale_go_golines_options*
|
g:ale_go_golines_options *g:ale_go_golines_options*
|
||||||
*b:ale_go_golines_options*
|
*b:ale_go_golines_options*
|
||||||
Type: |String|
|
Type: |String|
|
||||||
Default: ''
|
Default: `''`
|
||||||
|
|
||||||
Additional options passed to the golines command. By default golines has
|
Additional options passed to the golines command. By default golines has
|
||||||
--max-length=100 (lines above 100 characters will be wrapped)
|
--max-length=100 (lines above 100 characters will be wrapped)
|
||||||
|
|
|
@ -123,8 +123,8 @@ g:ale_haskell_hlint_executable *g:ale_haskell_hlint_executable*
|
||||||
|
|
||||||
g:ale_haskell_hlint_options g:ale_haskell_hlint_options
|
g:ale_haskell_hlint_options g:ale_haskell_hlint_options
|
||||||
b:ale_haskell_hlint_options
|
b:ale_haskell_hlint_options
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: ''
|
Default: `''`
|
||||||
|
|
||||||
This variable can be used to pass extra options to the underlying hlint
|
This variable can be used to pass extra options to the underlying hlint
|
||||||
executable.
|
executable.
|
||||||
|
@ -217,8 +217,8 @@ g:ale_haskell_ormolu_executable *g:ale_haskell_ormolu_executable*
|
||||||
|
|
||||||
g:ale_haskell_ormolu_options *g:ale_haskell_ormolu_options*
|
g:ale_haskell_ormolu_options *g:ale_haskell_ormolu_options*
|
||||||
*b:ale_haskell_ormolu_options*
|
*b:ale_haskell_ormolu_options*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: ''
|
Default: `''`
|
||||||
|
|
||||||
This variable can be used to pass extra options to the underlying ormolu
|
This variable can be used to pass extra options to the underlying ormolu
|
||||||
executable.
|
executable.
|
||||||
|
|
|
@ -24,7 +24,7 @@ g:ale_java_checkstyle_executable *g:ale_java_checkstyle_executable*
|
||||||
*b:ale_java_checkstyle_executable*
|
*b:ale_java_checkstyle_executable*
|
||||||
|
|
||||||
Type: |String|
|
Type: |String|
|
||||||
Default: 'checkstyle'
|
Default: `'checkstyle'`
|
||||||
|
|
||||||
This variable can be changed to modify the executable used for checkstyle.
|
This variable can be changed to modify the executable used for checkstyle.
|
||||||
|
|
||||||
|
@ -124,8 +124,8 @@ pmd *ale-java-pmd*
|
||||||
g:ale_java_pmd_options *g:ale_java_pmd_options*
|
g:ale_java_pmd_options *g:ale_java_pmd_options*
|
||||||
*b:ale_java_pmd_options*
|
*b:ale_java_pmd_options*
|
||||||
|
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: '-R category/java/bestpractices'
|
Default: `'-R category/java/bestpractices'`
|
||||||
|
|
||||||
This variable can be changed to modify flags given to PMD. Do not specify -f
|
This variable can be changed to modify flags given to PMD. Do not specify -f
|
||||||
and -d. They are added automatically.
|
and -d. They are added automatically.
|
||||||
|
@ -173,7 +173,7 @@ g:ale_java_javalsp_config *g:ale_java_javalsp_config*
|
||||||
Type: |Dictionary|
|
Type: |Dictionary|
|
||||||
Default: `{}`
|
Default: `{}`
|
||||||
|
|
||||||
The javalsp linter automatically detects external depenencies for Maven and
|
The javalsp linter automatically detects external dependencies for Maven and
|
||||||
Gradle projects. In case the javalsp fails to detect some of them, you can
|
Gradle projects. In case the javalsp fails to detect some of them, you can
|
||||||
specify them setting a dictionary to |g:ale_java_javalsp_config| variable.
|
specify them setting a dictionary to |g:ale_java_javalsp_config| variable.
|
||||||
>
|
>
|
||||||
|
|
|
@ -11,7 +11,7 @@ g:ale_julia_executable *g:ale_julia_executable*
|
||||||
*b:ale_julia_executable*
|
*b:ale_julia_executable*
|
||||||
|
|
||||||
Type: |String|
|
Type: |String|
|
||||||
Default: 'julia'
|
Default: `'julia'`
|
||||||
|
|
||||||
Path to the julia exetuable.
|
Path to the julia exetuable.
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ g:ale_kotlin_ktlint_executable *g:ale_kotlin_ktlint_executable*
|
||||||
|
|
||||||
g:ale_kotlin_ktlint_rulesets *g:ale_kotlin_ktlint_rulesets*
|
g:ale_kotlin_ktlint_rulesets *g:ale_kotlin_ktlint_rulesets*
|
||||||
Type: |List| of |String|s
|
Type: |List| of |String|s
|
||||||
Default: []
|
Default: `[]`
|
||||||
|
|
||||||
This list should contain paths to ruleset jars and/or strings of maven
|
This list should contain paths to ruleset jars and/or strings of maven
|
||||||
artifact triples. Example:
|
artifact triples. Example:
|
||||||
|
|
|
@ -9,7 +9,7 @@ g:ale_llvm_llc_executable *g:ale_llvm_llc_executable*
|
||||||
*b:ale_llvm_llc_executable*
|
*b:ale_llvm_llc_executable*
|
||||||
|
|
||||||
Type: |String|
|
Type: |String|
|
||||||
Default: "llc"
|
Default: `"llc"`
|
||||||
|
|
||||||
The command to use for checking. This variable is useful when llc command
|
The command to use for checking. This variable is useful when llc command
|
||||||
has suffix like "llc-5.0".
|
has suffix like "llc-5.0".
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
===============================================================================
|
||||||
|
ALE Make Integration *ale-make-options*
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
checkmake *ale-make-checkmake*
|
||||||
|
|
||||||
|
g:ale_make_checkmake_config *g:ale_make_checkmake_config*
|
||||||
|
*b:ale_make_checkmake_config*
|
||||||
|
Type: |String|
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
This variable can be used to set the `--config` option of checkmake command.
|
||||||
|
if the value is empty, the checkmake command will not be invoked with the
|
||||||
|
option.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
|
@ -72,7 +72,7 @@ g:ale_perl_perlcritic_options *g:ale_perl_perlcritic_options*
|
||||||
g:ale_perl_perlcritic_showrules *g:ale_perl_perlcritic_showrules*
|
g:ale_perl_perlcritic_showrules *g:ale_perl_perlcritic_showrules*
|
||||||
|
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
Default: 0
|
Default: `0`
|
||||||
|
|
||||||
Controls whether perlcritic rule names are shown after the error message.
|
Controls whether perlcritic rule names are shown after the error message.
|
||||||
Defaults to off to reduce length of message.
|
Defaults to off to reduce length of message.
|
||||||
|
|
|
@ -13,7 +13,7 @@ powershell *ale-powershell-powershell*
|
||||||
|
|
||||||
g:ale_powershell_powershell_executable *g:ale_powershell_powershell_executable*
|
g:ale_powershell_powershell_executable *g:ale_powershell_powershell_executable*
|
||||||
*b:ale_powershell_powershell_executable*
|
*b:ale_powershell_powershell_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'pwsh'`
|
Default: `'pwsh'`
|
||||||
|
|
||||||
This variable can be changed to use a different executable for powershell.
|
This variable can be changed to use a different executable for powershell.
|
||||||
|
|
|
@ -25,7 +25,7 @@ buf-format *ale-proto-buf-format*
|
||||||
g:ale_proto_buf_format_executable *g:ale_proto_buf_format_executable*
|
g:ale_proto_buf_format_executable *g:ale_proto_buf_format_executable*
|
||||||
|
|
||||||
Type: |String|
|
Type: |String|
|
||||||
Default: 'buf'
|
Default: `'buf'`
|
||||||
|
|
||||||
This variable can be changed to modify the executable used for buf.
|
This variable can be changed to modify the executable used for buf.
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ buf-lint *ale-proto-buf-lint*
|
||||||
g:ale_proto_buf_lint_executable *g:ale_proto_buf_lint_executable*
|
g:ale_proto_buf_lint_executable *g:ale_proto_buf_lint_executable*
|
||||||
|
|
||||||
Type: |String|
|
Type: |String|
|
||||||
Default: 'buf'
|
Default: `'buf'`
|
||||||
|
|
||||||
This variable can be changed to modify the executable used for buf.
|
This variable can be changed to modify the executable used for buf.
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ protolint *ale-proto-protolint
|
||||||
g:ale_proto_protolint_executable *g:ale_proto_protolint_executable*
|
g:ale_proto_protolint_executable *g:ale_proto_protolint_executable*
|
||||||
|
|
||||||
Type: |String|
|
Type: |String|
|
||||||
Default: 'protolint'
|
Default: `'protolint'`
|
||||||
|
|
||||||
This variable can be changed to modify the executable used for protolint.
|
This variable can be changed to modify the executable used for protolint.
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ g:ale_purescript_tidy_use_global *g:ale_purescript_tidy_use_global*
|
||||||
|
|
||||||
g:ale_purescript_tidy_options *g:ale_purescript_tidy_options*
|
g:ale_purescript_tidy_options *g:ale_purescript_tidy_options*
|
||||||
*b:ale_purescript_tidy_options*
|
*b:ale_purescript_tidy_options*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `''`
|
Default: `''`
|
||||||
|
|
||||||
This variable can be set to pass in additional option to the 'purs-tidy'
|
This variable can be set to pass in additional option to the 'purs-tidy'
|
||||||
|
|
|
@ -979,7 +979,7 @@ g:ale_python_pylsp_options *g:ale_python_pylsp_options
|
||||||
let g:ale_python_pylsp_executable = 'python3'
|
let g:ale_python_pylsp_executable = 'python3'
|
||||||
let g:ale_python_pylsp_options = '-m pylsp'
|
let g:ale_python_pylsp_options = '-m pylsp'
|
||||||
|
|
||||||
An example stragety for installing `pylsp`:
|
An example strategy for installing `pylsp`:
|
||||||
`python3 -m pip install --user pylsp`
|
`python3 -m pip install --user pylsp`
|
||||||
|
|
||||||
|
|
||||||
|
@ -1115,6 +1115,69 @@ g:ale_python_reorder_python_imports_use_global
|
||||||
See |ale-integrations-local-executables|
|
See |ale-integrations-local-executables|
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
ruff *ale-python-ruff*
|
||||||
|
|
||||||
|
g:ale_python_ruff_change_directory *g:ale_python_ruff_change_directory*
|
||||||
|
*b:ale_python_ruff_change_directory*
|
||||||
|
Type: |Number|
|
||||||
|
Default: `1`
|
||||||
|
|
||||||
|
If set to `1`, `ruff` will be run from a detected project root, per
|
||||||
|
|ale-python-root|. if set to `0` or no project root detected,
|
||||||
|
`ruff` will be run from the buffer's directory.
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_python_ruff_executable *g:ale_python_ruff_executable*
|
||||||
|
*b:ale_python_ruff_executable*
|
||||||
|
Type: |String|
|
||||||
|
Default: `'ruff'`
|
||||||
|
|
||||||
|
See |ale-integrations-local-executables|
|
||||||
|
|
||||||
|
Set this to `'pipenv'` to invoke `'pipenv` `run` `ruff'`.
|
||||||
|
Set this to `'poetry'` to invoke `'poetry` `run` `ruff'`.
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_python_ruff_options *g:ale_python_ruff_options*
|
||||||
|
*b:ale_python_ruff_options*
|
||||||
|
Type: |String|
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
This variable can be changed to add command-line arguments to the ruff
|
||||||
|
invocation.
|
||||||
|
|
||||||
|
For example, to select/enable and/or disable some error codes,
|
||||||
|
you may want to set >
|
||||||
|
let g:ale_python_ruff_options = '--ignore F401'
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_python_ruff_use_global *g:ale_python_ruff_use_global*
|
||||||
|
*b:ale_python_ruff_use_global*
|
||||||
|
Type: |Number|
|
||||||
|
Default: `get(g:, 'ale_use_global_executables', 0)`
|
||||||
|
|
||||||
|
See |ale-integrations-local-executables|
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_python_ruff_auto_pipenv *g:ale_python_ruff_auto_pipenv*
|
||||||
|
*b:ale_python_ruff_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_ruff_auto_poetry *g:ale_python_ruff_auto_poetry*
|
||||||
|
*b:ale_python_ruff_auto_poetry*
|
||||||
|
Type: |Number|
|
||||||
|
Default: `0`
|
||||||
|
|
||||||
|
Detect whether the file is inside a poetry, and set the executable to `poetry`
|
||||||
|
if true. This is overridden by a manually-set executable.
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
unimport *ale-python-unimport*
|
unimport *ale-python-unimport*
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ brakeman *ale-ruby-brakeman*
|
||||||
|
|
||||||
g:ale_ruby_brakeman_executable *g:ale_ruby_brakeman_executable*
|
g:ale_ruby_brakeman_executable *g:ale_ruby_brakeman_executable*
|
||||||
*b:ale_ruby_brakeman_executable*
|
*b:ale_ruby_brakeman_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'brakeman'`
|
Default: `'brakeman'`
|
||||||
|
|
||||||
Override the invoked brakeman binary. Set this to `'bundle'` to invoke
|
Override the invoked brakeman binary. Set this to `'bundle'` to invoke
|
||||||
|
@ -33,7 +33,7 @@ debride *ale-ruby-debride*
|
||||||
|
|
||||||
g:ale_ruby_debride_executable *g:ale_ruby_debride_executable*
|
g:ale_ruby_debride_executable *g:ale_ruby_debride_executable*
|
||||||
*b:ale_ruby_debride_executable*
|
*b:ale_ruby_debride_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'debride'`
|
Default: `'debride'`
|
||||||
|
|
||||||
Override the invoked debride binary. Set this to `'bundle'` to invoke
|
Override the invoked debride binary. Set this to `'bundle'` to invoke
|
||||||
|
@ -60,7 +60,7 @@ rails_best_practices *ale-ruby-rails_best_practices*
|
||||||
g:ale_ruby_rails_best_practices_executable
|
g:ale_ruby_rails_best_practices_executable
|
||||||
*g:ale_ruby_rails_best_practices_executable*
|
*g:ale_ruby_rails_best_practices_executable*
|
||||||
*b:ale_ruby_rails_best_practices_executable*
|
*b:ale_ruby_rails_best_practices_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'rails_best_practices'`
|
Default: `'rails_best_practices'`
|
||||||
|
|
||||||
Override the invoked rails_best_practices binary. Set this to `'bundle'` to
|
Override the invoked rails_best_practices binary. Set this to `'bundle'` to
|
||||||
|
@ -81,7 +81,7 @@ reek *ale-ruby-reek*
|
||||||
|
|
||||||
g:ale_ruby_reek_executable *g:ale_ruby_reek_executable*
|
g:ale_ruby_reek_executable *g:ale_ruby_reek_executable*
|
||||||
*b:ale_ruby_reek_executable*
|
*b:ale_ruby_reek_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'reek'`
|
Default: `'reek'`
|
||||||
|
|
||||||
Override the invoked reek binary. Set this to `'bundle'` to invoke
|
Override the invoked reek binary. Set this to `'bundle'` to invoke
|
||||||
|
@ -91,7 +91,7 @@ g:ale_ruby_reek_executable *g:ale_ruby_reek_executable*
|
||||||
g:ale_ruby_reek_show_context *g:ale_ruby_reek_show_context*
|
g:ale_ruby_reek_show_context *g:ale_ruby_reek_show_context*
|
||||||
*b:ale_ruby_reek_show_context*
|
*b:ale_ruby_reek_show_context*
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
Default: 0
|
Default: `0`
|
||||||
|
|
||||||
Controls whether context is included in the linter message. Defaults to off
|
Controls whether context is included in the linter message. Defaults to off
|
||||||
because context is usually obvious while viewing a file.
|
because context is usually obvious while viewing a file.
|
||||||
|
@ -100,7 +100,7 @@ g:ale_ruby_reek_show_context *g:ale_ruby_reek_show_context*
|
||||||
g:ale_ruby_reek_show_wiki_link *g:ale_ruby_reek_show_wiki_link*
|
g:ale_ruby_reek_show_wiki_link *g:ale_ruby_reek_show_wiki_link*
|
||||||
*b:ale_ruby_reek_show_wiki_link*
|
*b:ale_ruby_reek_show_wiki_link*
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
Default: 0
|
Default: `0`
|
||||||
|
|
||||||
Controls whether linter messages contain a link to an explanatory wiki page
|
Controls whether linter messages contain a link to an explanatory wiki page
|
||||||
for the type of code smell. Defaults to off to improve readability.
|
for the type of code smell. Defaults to off to improve readability.
|
||||||
|
@ -111,7 +111,7 @@ rubocop *ale-ruby-rubocop*
|
||||||
|
|
||||||
g:ale_ruby_rubocop_executable *g:ale_ruby_rubocop_executable*
|
g:ale_ruby_rubocop_executable *g:ale_ruby_rubocop_executable*
|
||||||
*b:ale_ruby_rubocop_executable*
|
*b:ale_ruby_rubocop_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'rubocop'`
|
Default: `'rubocop'`
|
||||||
|
|
||||||
Override the invoked rubocop binary. Set this to `'bundle'` to invoke
|
Override the invoked rubocop binary. Set this to `'bundle'` to invoke
|
||||||
|
@ -128,7 +128,7 @@ g:ale_ruby_rubocop_options *g:ale_ruby_rubocop_options*
|
||||||
|
|
||||||
g:ale_ruby_rubocop_auto_correct_all *g:ale_ruby_rubocop_auto_correct_all*
|
g:ale_ruby_rubocop_auto_correct_all *g:ale_ruby_rubocop_auto_correct_all*
|
||||||
*b:ale_ruby_rubocop_auto_correct_all*
|
*b:ale_ruby_rubocop_auto_correct_all*
|
||||||
Type: Number
|
Type: |Number|
|
||||||
Default: `0`
|
Default: `0`
|
||||||
|
|
||||||
This variable can be changed to make rubocop to correct all offenses (unsafe).
|
This variable can be changed to make rubocop to correct all offenses (unsafe).
|
||||||
|
@ -139,7 +139,7 @@ ruby *ale-ruby-ruby*
|
||||||
|
|
||||||
g:ale_ruby_ruby_executable *g:ale_ruby_ruby_executable*
|
g:ale_ruby_ruby_executable *g:ale_ruby_ruby_executable*
|
||||||
*b:ale_ruby_ruby_executable*
|
*b:ale_ruby_ruby_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'ruby'`
|
Default: `'ruby'`
|
||||||
|
|
||||||
This variable can be changed to use a different executable for ruby.
|
This variable can be changed to use a different executable for ruby.
|
||||||
|
@ -150,7 +150,7 @@ rufo *ale-ruby-rufo*
|
||||||
|
|
||||||
g:ale_ruby_rufo_executable *g:ale_ruby_rufo_executable*
|
g:ale_ruby_rufo_executable *g:ale_ruby_rufo_executable*
|
||||||
*b:ale_ruby_rufo_executable*
|
*b:ale_ruby_rufo_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'rufo'`
|
Default: `'rufo'`
|
||||||
|
|
||||||
Override the invoked rufo binary. This is useful for running rufo from
|
Override the invoked rufo binary. This is useful for running rufo from
|
||||||
|
@ -162,7 +162,7 @@ solargraph *ale-ruby-solargraph*
|
||||||
|
|
||||||
g:ale_ruby_solargraph_executable *g:ale_ruby_solargraph_executable*
|
g:ale_ruby_solargraph_executable *g:ale_ruby_solargraph_executable*
|
||||||
*b:ale_ruby_solargraph_executable*
|
*b:ale_ruby_solargraph_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'solargraph'`
|
Default: `'solargraph'`
|
||||||
|
|
||||||
Override the invoked solargraph binary. This is useful for running solargraph
|
Override the invoked solargraph binary. This is useful for running solargraph
|
||||||
|
@ -174,7 +174,7 @@ sorbet *ale-ruby-sorbet*
|
||||||
|
|
||||||
g:ale_ruby_sorbet_executable *g:ale_ruby_sorbet_executable*
|
g:ale_ruby_sorbet_executable *g:ale_ruby_sorbet_executable*
|
||||||
*b:ale_ruby_sorbet_executable*
|
*b:ale_ruby_sorbet_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'srb'`
|
Default: `'srb'`
|
||||||
|
|
||||||
Override the invoked sorbet binary. Set this to `'bundle'` to invoke
|
Override the invoked sorbet binary. Set this to `'bundle'` to invoke
|
||||||
|
@ -204,7 +204,7 @@ standardrb *ale-ruby-standardrb*
|
||||||
|
|
||||||
g:ale_ruby_standardrb_executable *g:ale_ruby_standardrb_executable*
|
g:ale_ruby_standardrb_executable *g:ale_ruby_standardrb_executable*
|
||||||
*b:ale_ruby_standardrb_executable*
|
*b:ale_ruby_standardrb_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'standardrb'`
|
Default: `'standardrb'`
|
||||||
|
|
||||||
Override the invoked standardrb binary. Set this to `'bundle'` to invoke
|
Override the invoked standardrb binary. Set this to `'bundle'` to invoke
|
||||||
|
@ -224,7 +224,7 @@ syntax_tree *ale-ruby-syntax_tree*
|
||||||
|
|
||||||
g:ale_ruby_syntax_tree_executable *g:ale_ruby_syntax_tree_executable*
|
g:ale_ruby_syntax_tree_executable *g:ale_ruby_syntax_tree_executable*
|
||||||
*b:ale_ruby_syntax_tree_executable*
|
*b:ale_ruby_syntax_tree_executable*
|
||||||
Type: String
|
Type: |String|
|
||||||
Default: `'stree'`
|
Default: `'stree'`
|
||||||
|
|
||||||
Override the invoked SyntaxTree binary. Set this to `'bundle'` to invoke
|
Override the invoked SyntaxTree binary. Set this to `'bundle'` to invoke
|
||||||
|
|
|
@ -261,8 +261,8 @@ g:ale_rust_ignore_error_codes *g:ale_rust_ignore_error_codes*
|
||||||
|
|
||||||
g:ale_rust_ignore_secondary_spans *g:ale_rust_ignore_secondary_spans*
|
g:ale_rust_ignore_secondary_spans *g:ale_rust_ignore_secondary_spans*
|
||||||
*b:ale_rust_ignore_secondary_spans*
|
*b:ale_rust_ignore_secondary_spans*
|
||||||
Type: Number
|
Type: |Number|
|
||||||
Default: 0
|
Default: `0`
|
||||||
|
|
||||||
When set to 1, instructs the Rust error reporting to ignore secondary spans.
|
When set to 1, instructs the Rust error reporting to ignore secondary spans.
|
||||||
The problem with secondary spans is that they sometimes appear in error
|
The problem with secondary spans is that they sometimes appear in error
|
||||||
|
|
|
@ -178,6 +178,7 @@ Notes:
|
||||||
* `SyntaxErl`
|
* `SyntaxErl`
|
||||||
* `dialyzer`!!
|
* `dialyzer`!!
|
||||||
* `elvis`!!
|
* `elvis`!!
|
||||||
|
* `erlang_ls`
|
||||||
* `erlc`
|
* `erlc`
|
||||||
* `erlfmt`
|
* `erlfmt`
|
||||||
* Fish
|
* Fish
|
||||||
|
@ -482,6 +483,7 @@ Notes:
|
||||||
* `pyre`
|
* `pyre`
|
||||||
* `pyright`
|
* `pyright`
|
||||||
* `reorder-python-imports`
|
* `reorder-python-imports`
|
||||||
|
* ruff
|
||||||
* `unimport`
|
* `unimport`
|
||||||
* `vulture`!!
|
* `vulture`!!
|
||||||
* `yapf`
|
* `yapf`
|
||||||
|
@ -495,6 +497,7 @@ Notes:
|
||||||
* Racket
|
* Racket
|
||||||
* `racket-langserver`
|
* `racket-langserver`
|
||||||
* `raco`
|
* `raco`
|
||||||
|
* `raco_fmt`
|
||||||
* Re:VIEW
|
* Re:VIEW
|
||||||
* `redpen`
|
* `redpen`
|
||||||
* ReasonML
|
* ReasonML
|
||||||
|
|
|
@ -33,7 +33,7 @@ lacheck *ale-tex-lacheck*
|
||||||
g:ale_lacheck_executable *g:ale_lacheck_executable*
|
g:ale_lacheck_executable *g:ale_lacheck_executable*
|
||||||
*b:ale_lacheck_executable*
|
*b:ale_lacheck_executable*
|
||||||
Type: |String|
|
Type: |String|
|
||||||
Default: '`lacheck`'
|
Default: `'lacheck'`
|
||||||
|
|
||||||
This variable can be changed to change the path to lacheck.
|
This variable can be changed to change the path to lacheck.
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ g:ale_deno_lsp_project_root *g:ale_deno_lsp_project_root*
|
||||||
executing the following steps in the given order:
|
executing the following steps in the given order:
|
||||||
|
|
||||||
1. Find an ancestor directory containing a tsconfig.json.
|
1. Find an ancestor directory containing a tsconfig.json.
|
||||||
2. Find an ancestory directory containing a .git folder.
|
2. Find an ancestor directory containing a .git folder.
|
||||||
3. Use the directory of the current buffer (if the buffer was opened from
|
3. Use the directory of the current buffer (if the buffer was opened from
|
||||||
a file).
|
a file).
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,7 @@ g:ale_verilog_yosys_options *g:ale_verilog_yosys_options*
|
||||||
Default: `'-Q -T -p ''read_verilog %s'''`
|
Default: `'-Q -T -p ''read_verilog %s'''`
|
||||||
|
|
||||||
This variable can be changed to modify the flags/options passed to 'yosys'.
|
This variable can be changed to modify the flags/options passed to 'yosys'.
|
||||||
By default, Yosys is an interative program. To obtain linting functionality,
|
By default, Yosys is an interactive program. To obtain linting functionality,
|
||||||
the `'read_verilog'` command is used.
|
the `'read_verilog'` command is used.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ g:ale_xml_xmllint_options *g:ale_xml_xmllint_options*
|
||||||
g:ale_xml_xmllint_indentsize *g:ale_xml_xmllint_indentsize*
|
g:ale_xml_xmllint_indentsize *g:ale_xml_xmllint_indentsize*
|
||||||
*b:ale_xml_xmllint_indentsize*
|
*b:ale_xml_xmllint_indentsize*
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
Default: 2
|
Default: `2`
|
||||||
|
|
||||||
This variable can be sent to specify the amount of spaces used for
|
This variable can be sent to specify the amount of spaces used for
|
||||||
indentation.
|
indentation.
|
||||||
|
|
|
@ -750,7 +750,7 @@ g:airline#extensions#ale#enabled *g:airline#extensions#ale#enabled*
|
||||||
g:ale_cache_executable_check_failures *g:ale_cache_executable_check_failures*
|
g:ale_cache_executable_check_failures *g:ale_cache_executable_check_failures*
|
||||||
|
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
Default: undefined
|
Default: not set
|
||||||
|
|
||||||
When set to `1`, ALE will cache failing executable checks for linters. By
|
When set to `1`, ALE will cache failing executable checks for linters. By
|
||||||
default, only executable checks which succeed will be cached.
|
default, only executable checks which succeed will be cached.
|
||||||
|
@ -864,7 +864,7 @@ g:ale_completion_enabled *g:ale_completion_enabled*
|
||||||
*g:ale_completion_tsserver_remove_warnings*
|
*g:ale_completion_tsserver_remove_warnings*
|
||||||
g:ale_completion_tsserver_remove_warnings
|
g:ale_completion_tsserver_remove_warnings
|
||||||
|
|
||||||
Type: Number
|
Type: |Number|
|
||||||
Default: `0`
|
Default: `0`
|
||||||
|
|
||||||
When this option is set to `0`, ALE will return all completion items,
|
When this option is set to `0`, ALE will return all completion items,
|
||||||
|
@ -874,7 +874,7 @@ g:ale_completion_tsserver_remove_warnings
|
||||||
|
|
||||||
g:ale_completion_autoimport *g:ale_completion_autoimport*
|
g:ale_completion_autoimport *g:ale_completion_autoimport*
|
||||||
|
|
||||||
Type: Number
|
Type: |Number|
|
||||||
Default: `1`
|
Default: `1`
|
||||||
|
|
||||||
When this option is set to `1`, ALE will try to automatically import
|
When this option is set to `1`, ALE will try to automatically import
|
||||||
|
@ -1836,7 +1836,7 @@ g:ale_max_signs *g:ale_max_signs*
|
||||||
g:ale_maximum_file_size *g:ale_maximum_file_size*
|
g:ale_maximum_file_size *g:ale_maximum_file_size*
|
||||||
*b:ale_maximum_file_size*
|
*b:ale_maximum_file_size*
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
Default: undefined
|
Default: not set
|
||||||
|
|
||||||
A maximum file size in bytes for ALE to check. If set to any positive
|
A maximum file size in bytes for ALE to check. If set to any positive
|
||||||
number, ALE will skip checking files larger than the given size.
|
number, ALE will skip checking files larger than the given size.
|
||||||
|
@ -1879,7 +1879,7 @@ g:ale_open_list *g:ale_open_list*
|
||||||
g:ale_pattern_options *g:ale_pattern_options*
|
g:ale_pattern_options *g:ale_pattern_options*
|
||||||
|
|
||||||
Type: |Dictionary|
|
Type: |Dictionary|
|
||||||
Default: undefined
|
Default: not set
|
||||||
|
|
||||||
This option maps regular expression patterns to |Dictionary| values for
|
This option maps regular expression patterns to |Dictionary| values for
|
||||||
buffer variables. This option can be set to automatically configure
|
buffer variables. This option can be set to automatically configure
|
||||||
|
@ -1908,7 +1908,7 @@ g:ale_pattern_options *g:ale_pattern_options*
|
||||||
g:ale_pattern_options_enabled *g:ale_pattern_options_enabled*
|
g:ale_pattern_options_enabled *g:ale_pattern_options_enabled*
|
||||||
|
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
Default: undefined
|
Default: not set
|
||||||
|
|
||||||
This option can be used for disabling pattern options. If set to `0`, ALE
|
This option can be used for disabling pattern options. If set to `0`, ALE
|
||||||
will not set buffer variables per |g:ale_pattern_options|.
|
will not set buffer variables per |g:ale_pattern_options|.
|
||||||
|
@ -1954,7 +1954,7 @@ g:ale_root *g:ale_root*
|
||||||
*b:ale_root*
|
*b:ale_root*
|
||||||
|
|
||||||
Type: |Dictionary| or |String|
|
Type: |Dictionary| or |String|
|
||||||
Default: {}
|
Default: `{}`
|
||||||
|
|
||||||
This option is used to determine the project root for a linter. If the value
|
This option is used to determine the project root for a linter. If the value
|
||||||
is a |Dictionary|, it maps a linter to either a |String| containing the
|
is a |Dictionary|, it maps a linter to either a |String| containing the
|
||||||
|
@ -2006,7 +2006,7 @@ g:ale_set_balloons *g:ale_set_balloons*
|
||||||
g:ale_set_balloons_legacy_echo *g:ale_set_balloons_legacy_echo*
|
g:ale_set_balloons_legacy_echo *g:ale_set_balloons_legacy_echo*
|
||||||
*b:ale_set_balloons_legacy_echo*
|
*b:ale_set_balloons_legacy_echo*
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
Default: undefined
|
Default: not set
|
||||||
|
|
||||||
If set to `1`, moving your mouse over documents in Vim will make ALE ask
|
If set to `1`, moving your mouse over documents in Vim will make ALE ask
|
||||||
`tsserver` or `LSP` servers for information about the symbol where the mouse
|
`tsserver` or `LSP` servers for information about the symbol where the mouse
|
||||||
|
@ -2240,10 +2240,10 @@ g:ale_sign_highlight_linenrs *g:ale_sign_highlight_linenrs*
|
||||||
|
|
||||||
g:ale_update_tagstack *g:ale_update_tagstack*
|
g:ale_update_tagstack *g:ale_update_tagstack*
|
||||||
*b:ale_update_tagstack*
|
*b:ale_update_tagstack*
|
||||||
Type: |Number|
|
Type: |Number|
|
||||||
Default: `1`
|
Default: `1`
|
||||||
|
|
||||||
This option can be set to disable updating Vim's |tagstack| automatically.
|
This option can be set to disable updating Vim's |tagstack| automatically.
|
||||||
|
|
||||||
|
|
||||||
g:ale_type_map *g:ale_type_map*
|
g:ale_type_map *g:ale_type_map*
|
||||||
|
@ -2885,6 +2885,7 @@ documented in additional help files.
|
||||||
erlang..................................|ale-erlang-options|
|
erlang..................................|ale-erlang-options|
|
||||||
dialyzer..............................|ale-erlang-dialyzer|
|
dialyzer..............................|ale-erlang-dialyzer|
|
||||||
elvis.................................|ale-erlang-elvis|
|
elvis.................................|ale-erlang-elvis|
|
||||||
|
erlang_ls.............................|ale-erlang-erlang_ls|
|
||||||
erlc..................................|ale-erlang-erlc|
|
erlc..................................|ale-erlang-erlc|
|
||||||
erlfmt................................|ale-erlang-erlfmt|
|
erlfmt................................|ale-erlang-erlfmt|
|
||||||
syntaxerl.............................|ale-erlang-syntaxerl|
|
syntaxerl.............................|ale-erlang-syntaxerl|
|
||||||
|
@ -3036,6 +3037,8 @@ documented in additional help files.
|
||||||
luafmt................................|ale-lua-luafmt|
|
luafmt................................|ale-lua-luafmt|
|
||||||
selene................................|ale-lua-selene|
|
selene................................|ale-lua-selene|
|
||||||
stylua................................|ale-lua-stylua|
|
stylua................................|ale-lua-stylua|
|
||||||
|
make....................................|ale-make-options|
|
||||||
|
checkmake.............................|ale-make-checkmake|
|
||||||
markdown................................|ale-markdown-options|
|
markdown................................|ale-markdown-options|
|
||||||
cspell................................|ale-markdown-cspell|
|
cspell................................|ale-markdown-cspell|
|
||||||
dprint................................|ale-markdown-dprint|
|
dprint................................|ale-markdown-dprint|
|
||||||
|
@ -3159,6 +3162,7 @@ documented in additional help files.
|
||||||
pyre..................................|ale-python-pyre|
|
pyre..................................|ale-python-pyre|
|
||||||
pyright...............................|ale-python-pyright|
|
pyright...............................|ale-python-pyright|
|
||||||
reorder-python-imports................|ale-python-reorder_python_imports|
|
reorder-python-imports................|ale-python-reorder_python_imports|
|
||||||
|
ruff..................................|ale-python-ruff|
|
||||||
unimport..............................|ale-python-unimport|
|
unimport..............................|ale-python-unimport|
|
||||||
vulture...............................|ale-python-vulture|
|
vulture...............................|ale-python-vulture|
|
||||||
yapf..................................|ale-python-yapf|
|
yapf..................................|ale-python-yapf|
|
||||||
|
@ -4558,7 +4562,7 @@ ALEFixPost *ALEFixPost-autocmd*
|
||||||
These |User| autocommands are triggered before and after every lint or fix
|
These |User| autocommands are triggered before and after every lint or fix
|
||||||
cycle. They can be used to update statuslines, send notifications, etc.
|
cycle. They can be used to update statuslines, send notifications, etc.
|
||||||
The autocmd commands are run with |:silent|, so |:unsilent| is required for
|
The autocmd commands are run with |:silent|, so |:unsilent| is required for
|
||||||
echoing messges.
|
echoing messages.
|
||||||
|
|
||||||
For example to change the color of the statusline while the linter is
|
For example to change the color of the statusline while the linter is
|
||||||
running:
|
running:
|
||||||
|
@ -4591,7 +4595,7 @@ ALEJobStarted *ALEJobStarted-autocmd*
|
||||||
ALELSPStarted *ALELSPStarted-autocmd*
|
ALELSPStarted *ALELSPStarted-autocmd*
|
||||||
*ALELSPStarted*
|
*ALELSPStarted*
|
||||||
|
|
||||||
This |User| autocommand is trigged immediately after an LSP connection is
|
This |User| autocommand is triggered immediately after an LSP connection is
|
||||||
successfully initialized. This provides a way to perform any additional
|
successfully initialized. This provides a way to perform any additional
|
||||||
initialization work, such as setting up buffer-level mappings.
|
initialization work, such as setting up buffer-level mappings.
|
||||||
|
|
||||||
|
|
|
@ -187,6 +187,7 @@ formatting.
|
||||||
* [SyntaxErl](https://github.com/ten0s/syntaxerl)
|
* [SyntaxErl](https://github.com/ten0s/syntaxerl)
|
||||||
* [dialyzer](http://erlang.org/doc/man/dialyzer.html) :floppy_disk:
|
* [dialyzer](http://erlang.org/doc/man/dialyzer.html) :floppy_disk:
|
||||||
* [elvis](https://github.com/inaka/elvis) :floppy_disk:
|
* [elvis](https://github.com/inaka/elvis) :floppy_disk:
|
||||||
|
* [erlang_ls](https://github.com/erlang-ls/erlang_ls)
|
||||||
* [erlc](http://erlang.org/doc/man/erlc.html)
|
* [erlc](http://erlang.org/doc/man/erlc.html)
|
||||||
* [erlfmt](https://github.com/WhatsApp/erlfmt)
|
* [erlfmt](https://github.com/WhatsApp/erlfmt)
|
||||||
* Fish
|
* Fish
|
||||||
|
@ -491,6 +492,7 @@ formatting.
|
||||||
* [pyre](https://github.com/facebook/pyre-check) :warning:
|
* [pyre](https://github.com/facebook/pyre-check) :warning:
|
||||||
* [pyright](https://github.com/microsoft/pyright)
|
* [pyright](https://github.com/microsoft/pyright)
|
||||||
* [reorder-python-imports](https://github.com/asottile/reorder_python_imports)
|
* [reorder-python-imports](https://github.com/asottile/reorder_python_imports)
|
||||||
|
* [ruff](https://github.com/charliermarsh/ruff)
|
||||||
* [unimport](https://github.com/hakancelik96/unimport)
|
* [unimport](https://github.com/hakancelik96/unimport)
|
||||||
* [vulture](https://github.com/jendrikseipp/vulture) :warning: :floppy_disk:
|
* [vulture](https://github.com/jendrikseipp/vulture) :warning: :floppy_disk:
|
||||||
* [yapf](https://github.com/google/yapf)
|
* [yapf](https://github.com/google/yapf)
|
||||||
|
@ -504,6 +506,7 @@ formatting.
|
||||||
* Racket
|
* Racket
|
||||||
* [racket-langserver](https://github.com/jeapostrophe/racket-langserver/tree/master)
|
* [racket-langserver](https://github.com/jeapostrophe/racket-langserver/tree/master)
|
||||||
* [raco](https://docs.racket-lang.org/raco/)
|
* [raco](https://docs.racket-lang.org/raco/)
|
||||||
|
* [raco_fmt](https://docs.racket-lang.org/fmt/)
|
||||||
* Re:VIEW
|
* Re:VIEW
|
||||||
* [redpen](http://redpen.cc/)
|
* [redpen](http://redpen.cc/)
|
||||||
* ReasonML
|
* ReasonML
|
||||||
|
|
|
@ -68,6 +68,8 @@ endif
|
||||||
" specification.
|
" specification.
|
||||||
" https://github.com/nvim-treesitter/nvim-treesitter/blob/master/plugin/nvim-treesitter.vim
|
" https://github.com/nvim-treesitter/nvim-treesitter/blob/master/plugin/nvim-treesitter.vim
|
||||||
if exists('g:loaded_nvim_treesitter')
|
if exists('g:loaded_nvim_treesitter')
|
||||||
|
" deprecated TS* highlight groups
|
||||||
|
" see https://github.com/nvim-treesitter/nvim-treesitter/pull/3656
|
||||||
" # Misc
|
" # Misc
|
||||||
hi! link TSPunctSpecial Special
|
hi! link TSPunctSpecial Special
|
||||||
" # Constants
|
" # Constants
|
||||||
|
@ -97,6 +99,53 @@ if exists('g:loaded_nvim_treesitter')
|
||||||
" HTML and JSX tag attributes. By default, this group is linked to TSProperty,
|
" HTML and JSX tag attributes. By default, this group is linked to TSProperty,
|
||||||
" which in turn links to Identifer (white).
|
" which in turn links to Identifer (white).
|
||||||
hi! link TSTagAttribute DraculaGreenItalic
|
hi! link TSTagAttribute DraculaGreenItalic
|
||||||
|
|
||||||
|
if has('nvim-0.8')
|
||||||
|
" # Misc
|
||||||
|
hi! link @punctuation.delimiter Delimiter
|
||||||
|
hi! link @punctuation.bracket Normal
|
||||||
|
hi! link @punctuation.special Special
|
||||||
|
" # Constants
|
||||||
|
hi! link @constant Constant
|
||||||
|
hi! link @constant.builtin Constant
|
||||||
|
hi! link @constant.macro Macro
|
||||||
|
hi! link @string.regex String
|
||||||
|
hi! link @string.escape Character
|
||||||
|
hi! link @symbol DraculaPurple
|
||||||
|
hi! link @annotation DraculaYellow
|
||||||
|
hi! link @attribute DraculaGreenItalic
|
||||||
|
hi! link @namespace Structure
|
||||||
|
" # Functions
|
||||||
|
hi! link @function.builtin DraculaCyan
|
||||||
|
hi! link @funcion.macro Function
|
||||||
|
hi! link @parameter DraculaOrangeItalic
|
||||||
|
hi! link @parameter.reference DraculaOrange
|
||||||
|
hi! link @field DraculaOrange
|
||||||
|
hi! link @property Normal
|
||||||
|
hi! link @constructor DraculaCyan
|
||||||
|
" # Keywords
|
||||||
|
hi! link @label DraculaPurpleItalic
|
||||||
|
hi! link @keyword.function DraculaPink
|
||||||
|
hi! link @keyword.operator Operator
|
||||||
|
hi! link @exception DraculaPurple
|
||||||
|
" # Variable
|
||||||
|
hi! link @variable Normal
|
||||||
|
hi! link @variable.builtin DraculaPurpleItalic
|
||||||
|
" # Text
|
||||||
|
hi! link @text Normal
|
||||||
|
hi! link @text.strong DraculaFgBold
|
||||||
|
hi! link @text.emphasis DraculaFg
|
||||||
|
hi! link @text.underline Underlined
|
||||||
|
hi! link @text.title DraculaYellow
|
||||||
|
hi! link @text.literal DraculaYellow
|
||||||
|
hi! link @text.uri DraculaYellow
|
||||||
|
" # Tags
|
||||||
|
hi! link @tag DraculaCyan
|
||||||
|
hi! link @tag.delimiter Normal
|
||||||
|
" HTML and JSX tag attributes. By default, this group is linked to TSProperty,
|
||||||
|
" which in turn links to Identifer (white).
|
||||||
|
hi! link @tag.attribute DraculaGreenItalic
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
" }}}
|
" }}}
|
||||||
" nvim-cmp: {{{
|
" nvim-cmp: {{{
|
||||||
|
|
|
@ -97,6 +97,10 @@ if !exists('g:dracula_colorterm')
|
||||||
let g:dracula_colorterm = 1
|
let g:dracula_colorterm = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:dracula_high_contrast_diff')
|
||||||
|
let g:dracula_high_contrast_diff = 0
|
||||||
|
endif
|
||||||
|
|
||||||
"}}}2
|
"}}}2
|
||||||
" Script Helpers: {{{2
|
" Script Helpers: {{{2
|
||||||
|
|
||||||
|
@ -197,7 +201,12 @@ call s:h('DraculaBoundary', s:comment, s:bgdark)
|
||||||
call s:h('DraculaWinSeparator', s:comment, s:bgdark)
|
call s:h('DraculaWinSeparator', s:comment, s:bgdark)
|
||||||
call s:h('DraculaLink', s:cyan, s:none, [s:attrs.underline])
|
call s:h('DraculaLink', s:cyan, s:none, [s:attrs.underline])
|
||||||
|
|
||||||
call s:h('DraculaDiffChange', s:orange, s:none)
|
if g:dracula_high_contrast_diff
|
||||||
|
call s:h('DraculaDiffChange', s:yellow, s:purple)
|
||||||
|
else
|
||||||
|
call s:h('DraculaDiffChange', s:orange, s:none)
|
||||||
|
endif
|
||||||
|
|
||||||
call s:h('DraculaDiffText', s:bg, s:orange)
|
call s:h('DraculaDiffText', s:bg, s:orange)
|
||||||
call s:h('DraculaDiffDelete', s:red, s:bgdark)
|
call s:h('DraculaDiffDelete', s:red, s:bgdark)
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,11 @@ terminal emulators, set to 1 to allow underline/undercurl highlights without
|
||||||
changing the foreground color. >
|
changing the foreground color. >
|
||||||
let g:dracula_full_special_attrs_support = 1
|
let g:dracula_full_special_attrs_support = 1
|
||||||
|
|
||||||
|
* *g:dracula_high_contrast_diff*
|
||||||
|
Use high-contrast color when in diff mode. By default it is disabled, set to
|
||||||
|
1 to enable it.
|
||||||
|
let g:dracula_high_contrast_diff = 1
|
||||||
|
|
||||||
* *g:dracula_inverse*
|
* *g:dracula_inverse*
|
||||||
Include inverse attributes in highlighting >
|
Include inverse attributes in highlighting >
|
||||||
let g:dracula_inverse = 1
|
let g:dracula_inverse = 1
|
||||||
|
|
|
@ -60,23 +60,26 @@ lockvar s:SECTCRE s:OPTCRE s:MAX_SECTION_NAME s:MAX_PROPERTY_NAME s:MAX_PROPERTY
|
||||||
" Read \p config_filename and return the options applicable to
|
" Read \p config_filename and return the options applicable to
|
||||||
" \p target_filename. This is the main entry point in this file.
|
" \p target_filename. This is the main entry point in this file.
|
||||||
function! editorconfig_core#ini#read_ini_file(config_filename, target_filename)
|
function! editorconfig_core#ini#read_ini_file(config_filename, target_filename)
|
||||||
let l:oldenc = &encoding
|
|
||||||
|
|
||||||
if !filereadable(a:config_filename)
|
if !filereadable(a:config_filename)
|
||||||
return {}
|
return {}
|
||||||
endif
|
endif
|
||||||
|
|
||||||
try " so &encoding will always be reset
|
try
|
||||||
let &encoding = 'utf-8' " so readfile() will strip BOM
|
|
||||||
let l:lines = readfile(a:config_filename)
|
let l:lines = readfile(a:config_filename)
|
||||||
|
if &encoding !=? 'utf-8'
|
||||||
|
" strip BOM
|
||||||
|
if len(l:lines) > 0 && l:lines[0][:2] ==# "\xEF\xBB\xBF"
|
||||||
|
let l:lines[0] = l:lines[0][3:]
|
||||||
|
endif
|
||||||
|
" convert from UTF-8 to 'encoding'
|
||||||
|
call map(l:lines, 'iconv(v:val, "utf-8", &encoding)')
|
||||||
|
endif
|
||||||
let result = s:parse(a:config_filename, a:target_filename, l:lines)
|
let result = s:parse(a:config_filename, a:target_filename, l:lines)
|
||||||
catch
|
catch
|
||||||
let &encoding = l:oldenc
|
|
||||||
" rethrow, but with a prefix since throw 'Vim...' fails.
|
" rethrow, but with a prefix since throw 'Vim...' fails.
|
||||||
throw 'Could not read editorconfig file at ' . v:throwpoint . ': ' . string(v:exception)
|
throw 'Could not read editorconfig file at ' . v:throwpoint . ': ' . string(v:exception)
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
let &encoding = l:oldenc
|
|
||||||
return result
|
return result
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
|
@ -124,11 +124,11 @@ is restarted.
|
||||||
|
|
||||||
*g:EditorConfig_max_line_indicator*
|
*g:EditorConfig_max_line_indicator*
|
||||||
The way to show the line where the maximal length is reached. Accepted values
|
The way to show the line where the maximal length is reached. Accepted values
|
||||||
are "line", "fill", otherwise there will be no max line indicator.
|
are "line", "fill" and "exceeding", otherwise there will be no max line
|
||||||
|
indicator.
|
||||||
|
|
||||||
"line": the right column of the max line length column will be
|
"line": the right column of the max line length column will be
|
||||||
highlighted, made possible by setting 'colorcolumn' to
|
highlighted, made possible by adding "+1" to 'colorcolumn'.
|
||||||
"max_line_length + 1".
|
|
||||||
|
|
||||||
"fill": all the columns to the right of the max line length column
|
"fill": all the columns to the right of the max line length column
|
||||||
will be highlighted, made possible by setting 'colorcolumn'
|
will be highlighted, made possible by setting 'colorcolumn'
|
||||||
|
@ -161,6 +161,23 @@ max_line_length is set:
|
||||||
<
|
<
|
||||||
This option defaults to 0.
|
This option defaults to 0.
|
||||||
|
|
||||||
|
*g:EditorConfig_softtabstop_space*
|
||||||
|
When spaces are used for indent, Vim's 'softtabstop' feature will make the
|
||||||
|
backspace key delete one indent level. If you turn off that feature (by
|
||||||
|
setting the option to 0), only a single space will be deleted.
|
||||||
|
This option defaults to 1, which enables 'softtabstop' and uses the
|
||||||
|
'shiftwidth' value for it. You can also set this to -1 to automatically follow
|
||||||
|
the current 'shiftwidth' value (since Vim 7.3.693). Or set this to [] if
|
||||||
|
EditorConfig should not touch 'softtabstop' at all.
|
||||||
|
|
||||||
|
*g:EditorConfig_softtabstop_tab*
|
||||||
|
When tabs are used for indent, Vim's 'softtabstop' feature only applies to
|
||||||
|
backspacing over existing runs of spaces.
|
||||||
|
This option defaults to 1, so backspace will delete one indent level worth of
|
||||||
|
spaces; -1 does the same but automatically follows the current 'shiftwidth'
|
||||||
|
value. Set this to 0 to have backspace delete just a single space character.
|
||||||
|
Or set this to [] if EditorConfig should not touch 'softtabstop' at all.
|
||||||
|
|
||||||
*g:EditorConfig_verbose*
|
*g:EditorConfig_verbose*
|
||||||
Set this to 1 if you want debug info printed:
|
Set this to 1 if you want debug info printed:
|
||||||
>
|
>
|
||||||
|
|
|
@ -60,6 +60,14 @@ if !exists('g:EditorConfig_disable_rules')
|
||||||
let g:EditorConfig_disable_rules = []
|
let g:EditorConfig_disable_rules = []
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:EditorConfig_softtabstop_space')
|
||||||
|
let g:EditorConfig_softtabstop_space = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('g:EditorConfig_softtabstop_tab')
|
||||||
|
let g:EditorConfig_softtabstop_tab = 1
|
||||||
|
endif
|
||||||
|
|
||||||
" Copy some of the globals into script variables --- changes to these
|
" Copy some of the globals into script variables --- changes to these
|
||||||
" globals won't affect the plugin until the plugin is reloaded.
|
" globals won't affect the plugin until the plugin is reloaded.
|
||||||
if exists('g:EditorConfig_core_mode') && !empty(g:EditorConfig_core_mode)
|
if exists('g:EditorConfig_core_mode') && !empty(g:EditorConfig_core_mode)
|
||||||
|
@ -394,12 +402,18 @@ function! s:ApplyConfig(config) abort " Set the buffer options {{{1
|
||||||
" value
|
" value
|
||||||
if a:config["indent_size"] == "tab"
|
if a:config["indent_size"] == "tab"
|
||||||
let &l:shiftwidth = &l:tabstop
|
let &l:shiftwidth = &l:tabstop
|
||||||
let &l:softtabstop = &l:shiftwidth
|
if type(g:EditorConfig_softtabstop_tab) != type([])
|
||||||
|
let &l:softtabstop = g:EditorConfig_softtabstop_tab > 0 ?
|
||||||
|
\ &l:shiftwidth : g:EditorConfig_softtabstop_tab
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
let l:indent_size = str2nr(a:config["indent_size"])
|
let l:indent_size = str2nr(a:config["indent_size"])
|
||||||
if l:indent_size > 0
|
if l:indent_size > 0
|
||||||
let &l:shiftwidth = l:indent_size
|
let &l:shiftwidth = l:indent_size
|
||||||
let &l:softtabstop = &l:shiftwidth
|
if type(g:EditorConfig_softtabstop_space) != type([])
|
||||||
|
let &l:softtabstop = g:EditorConfig_softtabstop_space > 0 ?
|
||||||
|
\ &l:shiftwidth : g:EditorConfig_softtabstop_space
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -473,7 +487,7 @@ function! s:ApplyConfig(config) abort " Set the buffer options {{{1
|
||||||
if exists('+colorcolumn')
|
if exists('+colorcolumn')
|
||||||
if l:max_line_length > 0
|
if l:max_line_length > 0
|
||||||
if g:EditorConfig_max_line_indicator == 'line'
|
if g:EditorConfig_max_line_indicator == 'line'
|
||||||
let &l:colorcolumn = l:max_line_length + 1
|
setlocal colorcolumn+=+1
|
||||||
elseif g:EditorConfig_max_line_indicator == 'fill' &&
|
elseif g:EditorConfig_max_line_indicator == 'fill' &&
|
||||||
\ l:max_line_length < &l:columns
|
\ l:max_line_length < &l:columns
|
||||||
" Fill only if the columns of screen is large enough
|
" Fill only if the columns of screen is large enough
|
||||||
|
|
|
@ -160,3 +160,10 @@ if extcore
|
||||||
)
|
)
|
||||||
test_instance vim
|
test_instance vim
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Test the vim core with latin1 encoding
|
||||||
|
(lambda do
|
||||||
|
puts 'Testing with express vim_core mode'
|
||||||
|
vim = create_vim("set encoding=latin1")
|
||||||
|
test_instance vim
|
||||||
|
end).call
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
github: [davidhalter]
|
|
|
@ -1,44 +0,0 @@
|
||||||
### Issue
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Please describe the issue here.
|
|
||||||
|
|
||||||
If you are not using jedi-vim from Git (but e.g. from a distribution's package,
|
|
||||||
please try it with jedi-vim's Git master, too).
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Steps to reproduce
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Include if relevant.
|
|
||||||
|
|
||||||
Please provide steps to reproduce it here, preferably based on a minimal Vim
|
|
||||||
configuration.
|
|
||||||
|
|
||||||
You can use the following template (save it as `minimal.vimrc` in the directory
|
|
||||||
where jedi-vim is installed, `cd` into that directory, and run Vim with
|
|
||||||
`vim -u minimal.vimrc`):
|
|
||||||
|
|
||||||
```
|
|
||||||
set nocompatible
|
|
||||||
|
|
||||||
let script_dir = fnamemodify(expand('<sfile>'), ':h')
|
|
||||||
let &runtimepath .= ','.script_dir.','.script_dir.'/after'
|
|
||||||
|
|
||||||
" Put your config changes here.
|
|
||||||
" let g:jedi#show_call_signatures=1
|
|
||||||
|
|
||||||
syntax on
|
|
||||||
filetype plugin indent on
|
|
||||||
```
|
|
||||||
|
|
||||||
Please provide the `minimal.vimrc` you have used here, too.
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Output of “:verbose JediDebugInfo”
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Please execute `:redir @+> | silent verb JediDebugInfo | redir END` in a
|
|
||||||
Python buffer to copy debug information into your clipboard.
|
|
||||||
Then paste it here.
|
|
||||||
-->
|
|
|
@ -1,63 +0,0 @@
|
||||||
name: ci
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tests:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: Setup
|
|
||||||
run: |
|
|
||||||
sudo pip install pytest
|
|
||||||
vim --version
|
|
||||||
|
|
||||||
#- name: Setup tmate session
|
|
||||||
# uses: mxschmitt/action-tmate@v3
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
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//./}
|
|
|
@ -1,8 +0,0 @@
|
||||||
*~
|
|
||||||
*.sw?
|
|
||||||
*.py[cod]
|
|
||||||
.ropeproject
|
|
||||||
doc/tags
|
|
||||||
.pytest-cache
|
|
||||||
build
|
|
||||||
.coverage*
|
|
|
@ -1,6 +0,0 @@
|
||||||
[submodule "jedi"]
|
|
||||||
path = pythonx/jedi
|
|
||||||
url = https://github.com/davidhalter/jedi.git
|
|
||||||
[submodule "pythonx/parso"]
|
|
||||||
path = pythonx/parso
|
|
||||||
url = https://github.com/davidhalter/parso.git
|
|
|
@ -1,31 +0,0 @@
|
||||||
dist: bionic
|
|
||||||
language: python
|
|
||||||
python: 3.8
|
|
||||||
env:
|
|
||||||
- ENV=test
|
|
||||||
- ENV=check
|
|
||||||
- ENV=test_coverage
|
|
||||||
install:
|
|
||||||
- |
|
|
||||||
if [ "$ENV" = "test" ]; then
|
|
||||||
pip install pytest
|
|
||||||
elif [ "$ENV" = "test_coverage" ]; then
|
|
||||||
sudo add-apt-repository ppa:neovim-ppa/stable -y
|
|
||||||
sudo apt-get update -q
|
|
||||||
sudo apt-get install neovim -y
|
|
||||||
|
|
||||||
pip install pynvim pytest-cov
|
|
||||||
pip list
|
|
||||||
nvim --version
|
|
||||||
else
|
|
||||||
vim --version
|
|
||||||
fi
|
|
||||||
script:
|
|
||||||
- make --keep-going "$ENV" BUILD_VIRTUAL_ENV=$VIRTUAL_ENV
|
|
||||||
|
|
||||||
after_script:
|
|
||||||
- |
|
|
||||||
if [ "$ENV" = "test_coverage" ]; then
|
|
||||||
coverage xml
|
|
||||||
travis_retry bash <(curl -s https://codecov.io/bash) -X fix -f coverage.xml -F py${TRAVIS_PYTHON_VERSION//./}
|
|
||||||
fi
|
|
|
@ -1,61 +0,0 @@
|
||||||
Main Authors
|
|
||||||
============
|
|
||||||
|
|
||||||
David Halter (@davidhalter) <davidhalter88@gmail.com>
|
|
||||||
|
|
||||||
|
|
||||||
Contributors (in order of contributions)
|
|
||||||
========================================
|
|
||||||
|
|
||||||
Patrice Peterson (@runiq)
|
|
||||||
tek (@tek)
|
|
||||||
heavenshell (@heavenshell) <heavenshell.jp@gmail.com>
|
|
||||||
Danilo Bargen (@dbrgn) <gezuru@gmail.com>
|
|
||||||
mattn (@mattn) <mattn.jp@gmail.com>
|
|
||||||
Enrico Batista da Luz (@ricobl) <rico.bl@gmail.com>
|
|
||||||
coot (@coot) <mszamot@gmail.com>
|
|
||||||
Artur Dryomov (@ming13) <artur.dryomov@gmail.com>
|
|
||||||
andviro (@andviro)
|
|
||||||
Jean-Louis Fuchs (@ganwell) <ganwell@fangorn.ch>
|
|
||||||
Mathieu Comandon (@strycore) <strider@strycore.com>
|
|
||||||
Nick Hurley (@todesschaf) <hurley@todesschaf.org>
|
|
||||||
gpoulin (@gpoulin)
|
|
||||||
Akinori Hattori (@hattya)
|
|
||||||
Luper Rouch (@flupke)
|
|
||||||
Matthew Moses (@mlmoses) <moses.matthewl@gmail.com>
|
|
||||||
Tyler Wymer (@twymer)
|
|
||||||
Artem Nezvigin (@artnez)
|
|
||||||
rogererens (@rogererens)
|
|
||||||
Emily Strickland (@emilyst) <mail@emily.st>
|
|
||||||
Tin Tvrtković (@Tinche) <tinchester@gmail.com>
|
|
||||||
Zekeriya Koc (@zekzekus) <zekzekus@gmail.com>
|
|
||||||
ethinx (@ethinx) <eth2net@gmail.com>
|
|
||||||
Wouter Overmeire (@lodagro) <lodagro@gmail.com>
|
|
||||||
Stephen J. Fuhry (@fuhrysteve) <fuhrysteve@gmail.com>
|
|
||||||
Sheng Yun (@ShengYun) <uewing@gmail.com>
|
|
||||||
Yann Thomas-Gérard (@inside) <inside@gmail.com>
|
|
||||||
Colin Su (@littleq0903) <littleq0903@gmail.com>
|
|
||||||
Arthur Jaron (@eyetracker)
|
|
||||||
Justin M. Keyes (@justinmk)
|
|
||||||
nagev (@np1)
|
|
||||||
Chris Lasher (@gotgenes) <chris.lasher@gmail.com>
|
|
||||||
Doan Thanh Nam (@tndoan)
|
|
||||||
Markus Koller (@toupeira)
|
|
||||||
Justin Cheevers @justincheevers
|
|
||||||
Talha Ahmed (@talha81) <talha.ahmed@gmail.com>
|
|
||||||
Matthew Tylee Atkinson (@matatk)
|
|
||||||
Pedro Ferrari (@petobens)
|
|
||||||
Daniel Hahler (@blueyed)
|
|
||||||
Dave Honneffer (@pearofducks)
|
|
||||||
Bagrat Aznauryan (@n9code)
|
|
||||||
Tomoyuki Kashiro (@kashiro)
|
|
||||||
Tommy Allen (@tweekmonster)
|
|
||||||
Mingliang (@Aulddays)
|
|
||||||
Brian Mego (@brianmego)
|
|
||||||
Stevan Milic (@stevanmilic) <stevan.milic@yahoo.com>
|
|
||||||
Konstantin Glukhov (@Konstantin-Glukhov)
|
|
||||||
Seungchan An (@SeungChan92) <dev.issea1015@gmail.com>
|
|
||||||
Thomas Blauth (@ThomasBlauth) <thomas.blauth@protonmail.com>
|
|
||||||
James Cherti (@jamescherti)
|
|
||||||
|
|
||||||
@something are github user names.
|
|
|
@ -1,12 +0,0 @@
|
||||||
# We <3 pull requests!
|
|
||||||
|
|
||||||
1. Fork the Repo on github.
|
|
||||||
2. Add yourself to AUTHORS.txt
|
|
||||||
3. Add a test if possible.
|
|
||||||
4. Push to your fork and submit a pull request.
|
|
||||||
|
|
||||||
Please use PEP8 as a Python code style. For VIM, just try to style your
|
|
||||||
code similar to the jedi-vim code that is already there.
|
|
||||||
|
|
||||||
# Bug reports
|
|
||||||
Please include the output of `:version` and `:JediDebugInfo`.
|
|
|
@ -1,21 +0,0 @@
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) <2013> <David Halter and others, see AUTHORS.txt>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
|
@ -1,35 +0,0 @@
|
||||||
BUILD_VIRTUAL_ENV:=build/venv
|
|
||||||
|
|
||||||
test:
|
|
||||||
pytest
|
|
||||||
|
|
||||||
test_nvim:
|
|
||||||
VSPEC_VIM=nvim pytest
|
|
||||||
|
|
||||||
test_coverage: export PYTEST_ADDOPTS:=--cov pythonx --cov test --cov-report=term-missing:skip-covered
|
|
||||||
test_coverage: test_nvim
|
|
||||||
|
|
||||||
$(dir $(BUILD_VIRTUAL_ENV)):
|
|
||||||
mkdir -p $@
|
|
||||||
|
|
||||||
$(BUILD_VIRTUAL_ENV): | $(dir $(BUILD_VIRTUAL_ENV))
|
|
||||||
python -m venv $@
|
|
||||||
|
|
||||||
$(BUILD_VIRTUAL_ENV)/bin/vint: | $(BUILD_VIRTUAL_ENV)
|
|
||||||
$|/bin/python -m pip install vim-vint==0.3.21
|
|
||||||
|
|
||||||
$(BUILD_VIRTUAL_ENV)/bin/flake8: | $(BUILD_VIRTUAL_ENV)
|
|
||||||
$|/bin/python -m pip install -q flake8==3.7.8
|
|
||||||
|
|
||||||
vint: $(BUILD_VIRTUAL_ENV)/bin/vint
|
|
||||||
$(BUILD_VIRTUAL_ENV)/bin/vint after autoload ftplugin plugin
|
|
||||||
|
|
||||||
flake8: $(BUILD_VIRTUAL_ENV)/bin/flake8
|
|
||||||
$(BUILD_VIRTUAL_ENV)/bin/flake8 pythonx/jedi_*.py
|
|
||||||
|
|
||||||
check: vint flake8
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf build
|
|
||||||
|
|
||||||
.PHONY: test check clean vint flake8
|
|
|
@ -1,293 +0,0 @@
|
||||||
.. image:: https://github.com/davidhalter/jedi-vim/blob/master/doc/logotype-a.svg
|
|
||||||
|
|
||||||
#################################################
|
|
||||||
jedi-vim - awesome Python autocompletion with VIM
|
|
||||||
#################################################
|
|
||||||
|
|
||||||
.. image:: https://travis-ci.org/davidhalter/jedi-vim.svg?branch=master
|
|
||||||
:target: https://travis-ci.org/davidhalter/jedi-vim
|
|
||||||
:alt: Travis-CI build status
|
|
||||||
|
|
||||||
jedi-vim is a VIM binding to the autocompletion library
|
|
||||||
`Jedi <http://github.com/davidhalter/jedi>`_.
|
|
||||||
|
|
||||||
Here are some pictures:
|
|
||||||
|
|
||||||
.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_complete.png
|
|
||||||
|
|
||||||
Completion for almost anything (Ctrl+Space).
|
|
||||||
|
|
||||||
.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_function.png
|
|
||||||
|
|
||||||
Display of function/class bodies, docstrings.
|
|
||||||
|
|
||||||
.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_pydoc.png
|
|
||||||
|
|
||||||
Documentation (Pydoc) support (with highlighting, Shift+k).
|
|
||||||
|
|
||||||
There is also support for goto and renaming.
|
|
||||||
|
|
||||||
|
|
||||||
Get the latest from `github <http://github.com/davidhalter/jedi-vim>`_.
|
|
||||||
|
|
||||||
Documentation
|
|
||||||
=============
|
|
||||||
|
|
||||||
Documentation is available in your vim: ``:help jedi-vim``. You can also look
|
|
||||||
it up `on github <http://github.com/davidhalter/jedi-vim/blob/master/doc/jedi-vim.txt>`_.
|
|
||||||
|
|
||||||
You can read the Jedi library documentation `here <http://jedi.readthedocs.io/en/latest/>`_.
|
|
||||||
|
|
||||||
If you want to report issues, just use the github issue tracker. In case of
|
|
||||||
questions about the software, please use `stackoverflow
|
|
||||||
<https://stackoverflow.com/questions/tagged/jedi-vim>`_ and tag your question with ``jedi-vim``.
|
|
||||||
|
|
||||||
|
|
||||||
Contributing
|
|
||||||
============
|
|
||||||
|
|
||||||
We love Pull Requests! Read the instructions in ``CONTRIBUTING.md``.
|
|
||||||
|
|
||||||
|
|
||||||
Features
|
|
||||||
========
|
|
||||||
|
|
||||||
The Jedi library understands most of Python's core features. From decorators to
|
|
||||||
generators, there is broad support.
|
|
||||||
|
|
||||||
Apart from that, jedi-vim supports the following commands
|
|
||||||
|
|
||||||
- Completion ``<C-Space>``
|
|
||||||
- Goto assignment ``<leader>g`` (typical goto function)
|
|
||||||
- Goto definition ``<leader>d`` (follow identifier as far as possible,
|
|
||||||
includes imports and statements)
|
|
||||||
- Goto (typing) stub ``<leader>s``
|
|
||||||
- Show Documentation/Pydoc ``K`` (shows a popup with assignments)
|
|
||||||
- Renaming ``<leader>r``
|
|
||||||
- Usages ``<leader>n`` (shows all the usages of a name)
|
|
||||||
- Open module, e.g. ``:Pyimport os`` (opens the ``os`` module)
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
You need a VIM version that was compiled with Python 2.7 or later
|
|
||||||
(``+python`` or ``+python3``). You can check this from within VIM using
|
|
||||||
``:python3 import sys; print(sys.version)`` (use ``:python`` for Python 2).
|
|
||||||
|
|
||||||
Manual installation
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
You might want to use `pathogen <https://github.com/tpope/vim-pathogen>`_ or
|
|
||||||
`Vundle <https://github.com/gmarik/vundle>`_ to install jedi-vim.
|
|
||||||
|
|
||||||
The first thing you need after that is an up-to-date version of Jedi. Install
|
|
||||||
``git submodule update --init --recursive`` in your jedi-vim repository.
|
|
||||||
|
|
||||||
Example installation command using Pathogen:
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
git clone --recursive https://github.com/davidhalter/jedi-vim.git ~/.vim/bundle/jedi-vim
|
|
||||||
|
|
||||||
Example installation using Vundle:
|
|
||||||
|
|
||||||
Add the following line in your `~/.vimrc`
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
Plugin 'davidhalter/jedi-vim'
|
|
||||||
|
|
||||||
For installing Jedi, ``pip install jedi`` will also work, but you might run
|
|
||||||
into issues when working in virtual environments. Please use git submodules.
|
|
||||||
|
|
||||||
|
|
||||||
Installation with your distribution
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
On Arch Linux, you can also install jedi-vim from official repositories as
|
|
||||||
`vim-jedi <https://www.archlinux.org/packages/community/any/vim-jedi/>`__.
|
|
||||||
It is also available on
|
|
||||||
`Debian (≥8) <https://packages.debian.org/vim-python-jedi>`__ and
|
|
||||||
`Ubuntu (≥14.04) <http://packages.ubuntu.com/vim-python-jedi>`__ as
|
|
||||||
vim-python-jedi.
|
|
||||||
On Fedora Linux, it is available as
|
|
||||||
`vim-jedi <https://apps.fedoraproject.org/packages/vim-jedi>`__.
|
|
||||||
|
|
||||||
Please note that this version might be quite old compared to using jedi-vim
|
|
||||||
from Git.
|
|
||||||
|
|
||||||
Caveats
|
|
||||||
-------
|
|
||||||
|
|
||||||
Note that the `python-mode <https://github.com/klen/python-mode>`_ VIM plugin seems
|
|
||||||
to conflict with jedi-vim, therefore you should disable it before enabling
|
|
||||||
jedi-vim.
|
|
||||||
|
|
||||||
To enjoy the full features of jedi-vim, you should have VIM >= 7.3, compiled with
|
|
||||||
``+conceal`` (which is not the case on some platforms, including OS X). If your VIM
|
|
||||||
does not meet these requirements, the parameter recommendation list may not appear
|
|
||||||
when you type an open bracket after a function name. Please read
|
|
||||||
`the documentation <http://github.com/davidhalter/jedi-vim/blob/master/doc/jedi-vim.txt>`_
|
|
||||||
for details.
|
|
||||||
|
|
||||||
|
|
||||||
Settings
|
|
||||||
========
|
|
||||||
|
|
||||||
Jedi is by default automatically initialized. If you don't want that I suggest
|
|
||||||
you disable the auto-initialization in your ``.vimrc``:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#auto_initialization = 0
|
|
||||||
|
|
||||||
There are also some VIM options (like ``completeopt`` and key defaults) which
|
|
||||||
are automatically initialized, but you can skip this:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#auto_vim_configuration = 0
|
|
||||||
|
|
||||||
|
|
||||||
You can make jedi-vim use tabs when going to a definition etc:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#use_tabs_not_buffers = 1
|
|
||||||
|
|
||||||
If you are a person who likes to use VIM-splits, you might want to put this in your ``.vimrc``:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#use_splits_not_buffers = "left"
|
|
||||||
|
|
||||||
This options could be "left", "right", "top", "bottom" or "winwidth". It will decide the direction where the split open.
|
|
||||||
|
|
||||||
Jedi automatically starts the completion, if you type a dot, e.g. ``str.``, if
|
|
||||||
you don't want this:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#popup_on_dot = 0
|
|
||||||
|
|
||||||
Jedi selects the first line of the completion menu: for a better typing-flow
|
|
||||||
and usually saves one keypress.
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#popup_select_first = 0
|
|
||||||
|
|
||||||
Jedi displays function call signatures in insert mode in real-time, highlighting
|
|
||||||
the current argument. The call signatures can be displayed as a pop-up in the
|
|
||||||
buffer (set to 1 by default (with the conceal feature), 2 otherwise),
|
|
||||||
which has the advantage of being easier to refer to (but is a hack with
|
|
||||||
many drawbacks since it changes the buffer's contents),
|
|
||||||
or in Vim's command line aligned with the function call (set to 2), which
|
|
||||||
can improve the integrity of Vim's undo history.
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#show_call_signatures = "1"
|
|
||||||
|
|
||||||
Here are a few more defaults for actions, read the docs (``:help jedi-vim``) to
|
|
||||||
get more information. If you set them to ``""``, they are not assigned.
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
NOTE: subject to change!
|
|
||||||
|
|
||||||
let g:jedi#goto_command = "<leader>d"
|
|
||||||
let g:jedi#goto_assignments_command = "<leader>g"
|
|
||||||
let g:jedi#goto_stubs_command = "<leader>s"
|
|
||||||
let g:jedi#goto_definitions_command = ""
|
|
||||||
let g:jedi#documentation_command = "K"
|
|
||||||
let g:jedi#usages_command = "<leader>n"
|
|
||||||
let g:jedi#completions_command = "<C-Space>"
|
|
||||||
let g:jedi#rename_command = "<leader>r"
|
|
||||||
|
|
||||||
An example for setting up your project:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#environment_path = "/usr/bin/python3.9"
|
|
||||||
|
|
||||||
jedi-vim tries its best to guess your virtual env. If you want to work with a
|
|
||||||
specific virtual environment however, you can point jedi-vim towards it:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#environment_path = "venv"
|
|
||||||
|
|
||||||
Finally, if you don't want completion, but all the other features, use:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#completions_enabled = 0
|
|
||||||
|
|
||||||
FAQ
|
|
||||||
===
|
|
||||||
|
|
||||||
I want to use Jedi with a Python 2 Environment, but it's not listed under "Known environments"
|
|
||||||
----------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Starting with version 0.18.0 Jedi dropped support for Python 2.
|
|
||||||
|
|
||||||
|
|
||||||
I don't want the docstring window to popup during completion
|
|
||||||
------------------------------------------------------------
|
|
||||||
|
|
||||||
This depends on the ``completeopt`` option. Jedi initializes it in its
|
|
||||||
``ftplugin``. Add the following line to your ``.vimrc`` to disable it:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
autocmd FileType python setlocal completeopt-=preview
|
|
||||||
|
|
||||||
|
|
||||||
I want <Tab> to do autocompletion
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
Don't even think about changing the Jedi command to ``<Tab>``,
|
|
||||||
use `supertab <https://github.com/ervandew/supertab>`_!
|
|
||||||
|
|
||||||
|
|
||||||
The completion is too slow!
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
1. Completion of complex libraries (like Numpy) should only be slow the first
|
|
||||||
time you complete them. After that the results should be cached and very fast.
|
|
||||||
|
|
||||||
2. If it is still slow after the initial completion and you have installed the
|
|
||||||
python-mode Vim plugin, try disabling its rope mode:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:pymode_rope = 0
|
|
||||||
|
|
||||||
See issue `#163 <https://github.com/davidhalter/jedi-vim/issues/163>`__.
|
|
||||||
|
|
||||||
3. You can also use `deoplete-jedi <https://github.com/zchee/deoplete-jedi>`__
|
|
||||||
for completions, which uses Jedi, but does completions asynchronously
|
|
||||||
(requires Neovim).
|
|
||||||
It makes sense to use both jedi-vim and deoplete-jedi, but you should disable
|
|
||||||
jedi-vim's completions then:
|
|
||||||
|
|
||||||
.. code-block:: vim
|
|
||||||
|
|
||||||
let g:jedi#completions_enabled = 0
|
|
||||||
|
|
||||||
Testing
|
|
||||||
=======
|
|
||||||
|
|
||||||
jedi-vim is being tested with a combination of `vspec
|
|
||||||
<https://github.com/kana/vim-vspec>`_ and `py.test <http://pytest.org/>`_.
|
|
||||||
|
|
||||||
The tests are in the ``test`` subdirectory, you can run them calling::
|
|
||||||
|
|
||||||
py.test
|
|
||||||
|
|
||||||
The tests are automatically run with `travis
|
|
||||||
<https://travis-ci.org/davidhalter/jedi-vim>`_.
|
|
|
@ -1,3 +0,0 @@
|
||||||
if jedi#init_python() && g:jedi#auto_initialization && g:jedi#completions_enabled
|
|
||||||
call jedi#setup_completion()
|
|
||||||
endif
|
|
|
@ -1,34 +0,0 @@
|
||||||
if !jedi#init_python()
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
if g:jedi#show_call_signatures > 0 && has('conceal')
|
|
||||||
" +conceal is the default for vim >= 7.3
|
|
||||||
|
|
||||||
let s:e = g:jedi#call_signature_escape
|
|
||||||
let s:full = s:e.'jedi=.\{-}'.s:e.'.\{-}'.s:e.'jedi'.s:e
|
|
||||||
let s:ignore = s:e.'jedi.\{-}'.s:e
|
|
||||||
exe 'syn match jediIgnore "'.s:ignore.'" contained conceal'
|
|
||||||
setlocal conceallevel=2
|
|
||||||
syn match jediFatSymbol "\*_\*" contained conceal
|
|
||||||
syn match jediFat "\*_\*.\{-}\*_\*" contained contains=jediFatSymbol
|
|
||||||
syn match jediSpace "\v[ ]+( )@=" contained
|
|
||||||
exe 'syn match jediFunction "'.s:full.'" keepend extend '
|
|
||||||
\ .' contains=jediIgnore,jediFat,jediSpace'
|
|
||||||
\ .' containedin=pythonComment,pythonString,pythonRawString'
|
|
||||||
unlet! s:e s:full s:ignore
|
|
||||||
|
|
||||||
hi def link jediIgnore Ignore
|
|
||||||
hi def link jediFatSymbol Ignore
|
|
||||||
hi def link jediSpace Normal
|
|
||||||
|
|
||||||
if exists('g:colors_name')
|
|
||||||
hi def link jediFunction CursorLine
|
|
||||||
hi def link jediFat TabLine
|
|
||||||
else
|
|
||||||
hi def jediFunction term=NONE cterm=NONE ctermfg=6 guifg=Black gui=NONE ctermbg=0 guibg=Grey
|
|
||||||
hi def jediFat term=bold,underline cterm=bold,underline gui=bold,underline ctermbg=0 guibg=#555555
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
hi def jediUsage cterm=reverse gui=standout
|
|
|
@ -1,4 +0,0 @@
|
||||||
function! health#jedi#check() abort
|
|
||||||
call health#report_start('jedi')
|
|
||||||
silent call jedi#debug_info()
|
|
||||||
endfunction
|
|
|
@ -1,732 +0,0 @@
|
||||||
scriptencoding utf-8
|
|
||||||
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
" Settings initialization
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
let s:deprecations = {
|
|
||||||
\ 'get_definition_command': 'goto_definitions_command',
|
|
||||||
\ 'pydoc': 'documentation_command',
|
|
||||||
\ 'related_names_command': 'usages_command',
|
|
||||||
\ 'autocompletion_command': 'completions_command',
|
|
||||||
\ 'show_function_definition': 'show_call_signatures',
|
|
||||||
\ }
|
|
||||||
|
|
||||||
let s:default_settings = {
|
|
||||||
\ 'use_tabs_not_buffers': 0,
|
|
||||||
\ 'use_splits_not_buffers': 1,
|
|
||||||
\ 'auto_initialization': 1,
|
|
||||||
\ 'auto_vim_configuration': 1,
|
|
||||||
\ 'goto_command': "'<leader>d'",
|
|
||||||
\ 'goto_assignments_command': "'<leader>g'",
|
|
||||||
\ 'goto_definitions_command': "''",
|
|
||||||
\ 'goto_stubs_command': "'<leader>s'",
|
|
||||||
\ 'completions_command': "'<C-Space>'",
|
|
||||||
\ 'call_signatures_command': "'<leader>n'",
|
|
||||||
\ 'usages_command': "'<leader>n'",
|
|
||||||
\ 'rename_command': "'<leader>r'",
|
|
||||||
\ 'completions_enabled': 1,
|
|
||||||
\ 'popup_on_dot': 'g:jedi#completions_enabled',
|
|
||||||
\ 'documentation_command': "'K'",
|
|
||||||
\ 'show_call_signatures': has('conceal') ? 1 : 2,
|
|
||||||
\ 'show_call_signatures_delay': 500,
|
|
||||||
\ 'call_signature_escape': "'?!?'",
|
|
||||||
\ 'auto_close_doc': 1,
|
|
||||||
\ 'max_doc_height': 30,
|
|
||||||
\ 'popup_select_first': 1,
|
|
||||||
\ 'quickfix_window_height': 10,
|
|
||||||
\ 'force_py_version': "'auto'",
|
|
||||||
\ 'environment_path': "'auto'",
|
|
||||||
\ 'added_sys_path': '[]',
|
|
||||||
\ 'project_path': "'auto'",
|
|
||||||
\ 'smart_auto_mappings': 0,
|
|
||||||
\ 'case_insensitive_completion': 1,
|
|
||||||
\ 'use_tag_stack': 1
|
|
||||||
\ }
|
|
||||||
|
|
||||||
for [s:key, s:val] in items(s:deprecations)
|
|
||||||
if exists('g:jedi#'.s:key)
|
|
||||||
echom "'g:jedi#".s:key."' is deprecated. Please use 'g:jedi#".s:val."' instead. Sorry for the inconvenience."
|
|
||||||
exe 'let g:jedi#'.s:val.' = g:jedi#'.s:key
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
for [s:key, s:val] in items(s:default_settings)
|
|
||||||
if !exists('g:jedi#'.s:key)
|
|
||||||
exe 'let g:jedi#'.s:key.' = '.s:val
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
let s:supports_buffer_usages = has('nvim') || exists('*prop_add')
|
|
||||||
|
|
||||||
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
" Python initialization
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
let s:script_path = expand('<sfile>:p:h:h')
|
|
||||||
|
|
||||||
function! s:init_python() abort
|
|
||||||
" Use g:jedi#force_py_version for loading Jedi, or fall back to using
|
|
||||||
" `has()` - preferring Python 3.
|
|
||||||
if !has('python3')
|
|
||||||
throw 'jedi-vim requires Vim with support for Python 3.'
|
|
||||||
endif
|
|
||||||
call jedi#setup_python_imports()
|
|
||||||
return 1
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#reinit_python() abort
|
|
||||||
let s:_init_python = -1
|
|
||||||
call jedi#init_python()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
" This is meant to be called with `:unsilent` (for &shortmess+=F).
|
|
||||||
function! s:display_exception() abort
|
|
||||||
let error_lines = split(v:exception, '\n')
|
|
||||||
let msg = 'Error: jedi-vim failed to initialize Python: '
|
|
||||||
\ .error_lines[0].' (in '.v:throwpoint.')'
|
|
||||||
if len(error_lines) > 1
|
|
||||||
echohl ErrorMsg
|
|
||||||
echom 'jedi-vim error: '.error_lines[0]
|
|
||||||
for line in error_lines[1:]
|
|
||||||
echom line
|
|
||||||
endfor
|
|
||||||
echohl None
|
|
||||||
let help_cmd = ':JediDebugInfo'
|
|
||||||
if exists(':checkhealth') == 2
|
|
||||||
let help_cmd .= ' / :checkhealth'
|
|
||||||
endif
|
|
||||||
let msg .= printf('. See :messages and/or %s for more information.',
|
|
||||||
\ help_cmd)
|
|
||||||
endif
|
|
||||||
redraw " Redraw to only have the main message by default.
|
|
||||||
echoerr msg
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
let s:_init_python = -1
|
|
||||||
function! jedi#init_python() abort
|
|
||||||
if s:_init_python == -1
|
|
||||||
let s:_init_python = 0
|
|
||||||
try
|
|
||||||
let s:_init_python = s:init_python()
|
|
||||||
let s:_init_python = 1
|
|
||||||
catch /^jedi/
|
|
||||||
" Only catch errors from jedi-vim itself here, so that for
|
|
||||||
" unexpected Python exceptions the traceback will be shown
|
|
||||||
" (e.g. with NameError in jedi#setup_python_imports's code).
|
|
||||||
if !exists('g:jedi#squelch_py_warning')
|
|
||||||
unsilent call s:display_exception()
|
|
||||||
endif
|
|
||||||
endtry
|
|
||||||
endif
|
|
||||||
return s:_init_python
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#setup_python_imports() abort
|
|
||||||
let g:_jedi_init_error = 0
|
|
||||||
let init_lines = [
|
|
||||||
\ 'import vim',
|
|
||||||
\ 'def _jedi_handle_exc(exc_info):',
|
|
||||||
\ ' try:',
|
|
||||||
\ ' from jedi_vim_debug import format_exc_info',
|
|
||||||
\ ' vim.vars["_jedi_init_error"] = format_exc_info(exc_info)',
|
|
||||||
\ ' except Exception:',
|
|
||||||
\ ' import traceback',
|
|
||||||
\ ' vim.vars["_jedi_init_error"] = "\\n".join(traceback.format_exception(*exc_info))',
|
|
||||||
\ 'try:',
|
|
||||||
\ ' import jedi_vim',
|
|
||||||
\ ' if hasattr(jedi_vim, "jedi_import_error"):',
|
|
||||||
\ ' _jedi_handle_exc(jedi_vim.jedi_import_error)',
|
|
||||||
\ 'except Exception as exc:',
|
|
||||||
\ ' _jedi_handle_exc(sys.exc_info())',
|
|
||||||
\ ]
|
|
||||||
exe 'python3 exec('''.escape(join(init_lines, '\n'), "'").''')'
|
|
||||||
if g:_jedi_init_error isnot 0
|
|
||||||
throw printf('jedi#setup_python_imports: %s', g:_jedi_init_error)
|
|
||||||
endif
|
|
||||||
return 1
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#debug_info() abort
|
|
||||||
if &verbose
|
|
||||||
if &filetype !=# 'python'
|
|
||||||
echohl WarningMsg | echo 'You should run this in a buffer with filetype "python".' | echohl None
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
let spath = shellescape(s:script_path)
|
|
||||||
echo '#### Jedi-vim debug information'
|
|
||||||
echo "\n"
|
|
||||||
echo '##### jedi-vim version'
|
|
||||||
echo "\n"
|
|
||||||
echo ' - jedi-vim git version: '
|
|
||||||
echon substitute(system('git -C '.spath.' describe --tags --always --dirty'), '\v\n$', '', '')
|
|
||||||
echo ' - jedi git submodule status: '
|
|
||||||
echon substitute(system('git -C '.spath.' submodule status pythonx/jedi'), '\v\n$', '', '')
|
|
||||||
echo ' - parso git submodule status: '
|
|
||||||
echon substitute(system('git -C '.spath.' submodule status pythonx/parso'), '\v\n$', '', '')
|
|
||||||
echo "\n"
|
|
||||||
echo '##### Global Python'
|
|
||||||
echo "\n"
|
|
||||||
echo 'Using Python version 3 to access Jedi.'
|
|
||||||
let s:pythonjedi_called = 0
|
|
||||||
try
|
|
||||||
python3 import vim; vim.command('let s:pythonjedi_called = 1')
|
|
||||||
catch
|
|
||||||
echo 'Error when trying to import vim: '.v:exception
|
|
||||||
endtry
|
|
||||||
if !s:pythonjedi_called
|
|
||||||
echohl WarningMsg
|
|
||||||
echom 'python3 failed to run, likely a Python config issue.'
|
|
||||||
if exists(':checkhealth') == 2
|
|
||||||
echom 'Try :checkhealth for more information.'
|
|
||||||
endif
|
|
||||||
echohl None
|
|
||||||
else
|
|
||||||
try
|
|
||||||
python3 from jedi_vim_debug import display_debug_info
|
|
||||||
python3 display_debug_info()
|
|
||||||
catch
|
|
||||||
echohl WarningMsg
|
|
||||||
echo 'Error when running display_debug_info: '.v:exception
|
|
||||||
echohl None
|
|
||||||
endtry
|
|
||||||
endif
|
|
||||||
echo "\n"
|
|
||||||
echo '##### Settings'
|
|
||||||
echo "\n"
|
|
||||||
echo '```'
|
|
||||||
let jedi_settings = items(filter(copy(g:), "v:key =~# '\\v^jedi#'"))
|
|
||||||
let has_nondefault_settings = 0
|
|
||||||
for [k, V] in jedi_settings
|
|
||||||
exe 'let default = '.get(s:default_settings,
|
|
||||||
\ substitute(k, '\v^jedi#', '', ''), "'-'")
|
|
||||||
" vint: -ProhibitUsingUndeclaredVariable
|
|
||||||
if default !=# V
|
|
||||||
echo printf('g:%s = %s (default: %s)', k, string(V), string(default))
|
|
||||||
unlet! V " Fix variable type mismatch with Vim 7.3.
|
|
||||||
let has_nondefault_settings = 1
|
|
||||||
endif
|
|
||||||
" vint: +ProhibitUsingUndeclaredVariable
|
|
||||||
endfor
|
|
||||||
if has_nondefault_settings
|
|
||||||
echo "\n"
|
|
||||||
endif
|
|
||||||
verb set omnifunc? completeopt?
|
|
||||||
echo '```'
|
|
||||||
|
|
||||||
if &verbose
|
|
||||||
echo "\n"
|
|
||||||
echo '#### :version'
|
|
||||||
echo '```'
|
|
||||||
version
|
|
||||||
echo '```'
|
|
||||||
echo "\n"
|
|
||||||
echo '#### :messages'
|
|
||||||
echo '```'
|
|
||||||
messages
|
|
||||||
echo '```'
|
|
||||||
echo "\n"
|
|
||||||
echo '<details><summary>:scriptnames</summary>'
|
|
||||||
echo "\n"
|
|
||||||
echo '```'
|
|
||||||
scriptnames
|
|
||||||
echo '```'
|
|
||||||
echo '</details>'
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Helper function instead of `python vim.eval()`, and `.command()` because
|
|
||||||
" these also return error definitions.
|
|
||||||
function! jedi#_vim_exceptions(str, is_eval) abort
|
|
||||||
let l:result = {}
|
|
||||||
try
|
|
||||||
if a:is_eval
|
|
||||||
let l:result.result = eval(a:str)
|
|
||||||
else
|
|
||||||
execute a:str
|
|
||||||
let l:result.result = ''
|
|
||||||
endif
|
|
||||||
catch
|
|
||||||
let l:result.exception = v:exception
|
|
||||||
let l:result.throwpoint = v:throwpoint
|
|
||||||
endtry
|
|
||||||
return l:result
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call jedi#init_python() " Might throw an error.
|
|
||||||
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
" functions that call python code
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
function! jedi#goto() abort
|
|
||||||
python3 jedi_vim.goto(mode="goto")
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#goto_assignments() abort
|
|
||||||
python3 jedi_vim.goto(mode="assignment")
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#goto_definitions() abort
|
|
||||||
python3 jedi_vim.goto(mode="definition")
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#goto_stubs() abort
|
|
||||||
python3 jedi_vim.goto(mode="stubs")
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#usages() abort
|
|
||||||
if exists('#jedi_usages#BufWinEnter')
|
|
||||||
call jedi#clear_usages()
|
|
||||||
endif
|
|
||||||
python3 jedi_vim.usages()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
if !s:supports_buffer_usages
|
|
||||||
" Hide usages in the current window.
|
|
||||||
" Only handles the current window due to matchdelete() restrictions.
|
|
||||||
function! jedi#_hide_usages_in_win() abort
|
|
||||||
let winnr = winnr()
|
|
||||||
let matchids = getwinvar(winnr, '_jedi_usages_vim_matchids', [])
|
|
||||||
|
|
||||||
for matchid in matchids[1:]
|
|
||||||
call matchdelete(matchid)
|
|
||||||
endfor
|
|
||||||
call setwinvar(winnr, '_jedi_usages_vim_matchids', [])
|
|
||||||
|
|
||||||
" Remove the autocommands that might have triggered this function.
|
|
||||||
augroup jedi_usages
|
|
||||||
exe 'autocmd! * <buffer='.winbufnr(winnr).'>'
|
|
||||||
augroup END
|
|
||||||
unlet! b:_jedi_usages_needs_clear
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Show usages for current window (Vim without textprops only).
|
|
||||||
function! jedi#_show_usages_in_win() abort
|
|
||||||
python3 jedi_vim.highlight_usages_for_vim_win()
|
|
||||||
|
|
||||||
if !exists('#jedi_usages#TextChanged#<buffer>')
|
|
||||||
augroup jedi_usages
|
|
||||||
" Unset highlights on any changes to this buffer.
|
|
||||||
" NOTE: Neovim's API handles movement of highlights, but would only
|
|
||||||
" need to clear highlights that are changed inline.
|
|
||||||
autocmd TextChanged <buffer> call jedi#_clear_buffer_usages()
|
|
||||||
|
|
||||||
" Hide usages when the buffer is removed from the window, or when
|
|
||||||
" entering insert mode (but keep them for later).
|
|
||||||
autocmd BufWinLeave,InsertEnter <buffer> call jedi#_hide_usages_in_win()
|
|
||||||
augroup END
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Remove usages for the current buffer (and all its windows).
|
|
||||||
function! jedi#_clear_buffer_usages() abort
|
|
||||||
let bufnr = bufnr('%')
|
|
||||||
let nvim_src_ids = getbufvar(bufnr, '_jedi_usages_src_ids', [])
|
|
||||||
if !empty(nvim_src_ids)
|
|
||||||
for src_id in nvim_src_ids
|
|
||||||
" TODO: could only clear highlights below/after changed line?!
|
|
||||||
call nvim_buf_clear_highlight(bufnr, src_id, 0, -1)
|
|
||||||
endfor
|
|
||||||
else
|
|
||||||
call jedi#_hide_usages_in_win()
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Remove/unset global usages.
|
|
||||||
function! jedi#clear_usages() abort
|
|
||||||
augroup jedi_usages
|
|
||||||
autocmd! BufWinEnter
|
|
||||||
autocmd! WinEnter
|
|
||||||
augroup END
|
|
||||||
|
|
||||||
if !s:supports_buffer_usages
|
|
||||||
" Vim without textprops: clear current window,
|
|
||||||
" autocommands will clean others on demand.
|
|
||||||
call jedi#_hide_usages_in_win()
|
|
||||||
|
|
||||||
" Setup autocommands to clear remaining highlights on WinEnter.
|
|
||||||
augroup jedi_usages
|
|
||||||
for b in range(1, bufnr('$'))
|
|
||||||
if getbufvar(b, '_jedi_usages_needs_clear')
|
|
||||||
exe 'autocmd WinEnter <buffer='.b.'> call jedi#_hide_usages_in_win()'
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
augroup END
|
|
||||||
endif
|
|
||||||
|
|
||||||
python3 jedi_vim.clear_usages()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#rename(...) abort
|
|
||||||
python3 jedi_vim.rename()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#rename_visual(...) abort
|
|
||||||
python3 jedi_vim.rename_visual()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#completions(findstart, base) abort
|
|
||||||
python3 jedi_vim.completions()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#enable_speed_debugging() abort
|
|
||||||
python3 jedi_vim.jedi.set_debug_function(jedi_vim.print_to_stdout, speed=True, warnings=False, notices=False)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#enable_debugging() abort
|
|
||||||
python3 jedi_vim.jedi.set_debug_function(jedi_vim.print_to_stdout)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#disable_debugging() abort
|
|
||||||
python3 jedi_vim.jedi.set_debug_function(None)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! jedi#py_import(args) abort
|
|
||||||
python3 jedi_vim.py_import()
|
|
||||||
endfun
|
|
||||||
|
|
||||||
function! jedi#choose_environment(args) abort
|
|
||||||
python3 jedi_vim.choose_environment()
|
|
||||||
endfun
|
|
||||||
|
|
||||||
function! jedi#load_project(args) abort
|
|
||||||
python3 jedi_vim.load_project()
|
|
||||||
endfun
|
|
||||||
|
|
||||||
function! jedi#py_import_completions(argl, cmdl, pos) abort
|
|
||||||
python3 jedi_vim.py_import_completions()
|
|
||||||
endfun
|
|
||||||
|
|
||||||
function! jedi#clear_cache(bang) abort
|
|
||||||
if a:bang
|
|
||||||
python3 jedi_vim.jedi.cache.clear_time_caches(True)
|
|
||||||
else
|
|
||||||
python3 jedi_vim.jedi.cache.clear_time_caches(False)
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
" show_documentation
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
function! jedi#show_documentation() abort
|
|
||||||
python3 if jedi_vim.show_documentation() is None: vim.command('return')
|
|
||||||
|
|
||||||
let bn = bufnr('__doc__')
|
|
||||||
if bn > 0
|
|
||||||
let wi=index(tabpagebuflist(tabpagenr()), bn)
|
|
||||||
if wi >= 0
|
|
||||||
" If the __doc__ buffer is open in the current tab, jump to it
|
|
||||||
silent execute (wi+1).'wincmd w'
|
|
||||||
else
|
|
||||||
silent execute 'sbuffer '.bn
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
split __doc__
|
|
||||||
endif
|
|
||||||
|
|
||||||
setlocal modifiable
|
|
||||||
setlocal noswapfile
|
|
||||||
setlocal buftype=nofile
|
|
||||||
silent normal! ggdG
|
|
||||||
silent $put=l:doc
|
|
||||||
silent normal! 1Gdd
|
|
||||||
setlocal nomodifiable
|
|
||||||
setlocal nomodified
|
|
||||||
setlocal filetype=rst
|
|
||||||
setlocal foldlevel=200 " do not fold in __doc__
|
|
||||||
|
|
||||||
if l:doc_lines > g:jedi#max_doc_height " max lines for plugin
|
|
||||||
let l:doc_lines = g:jedi#max_doc_height
|
|
||||||
endif
|
|
||||||
execute 'resize '.l:doc_lines
|
|
||||||
|
|
||||||
" quit comands
|
|
||||||
nnoremap <buffer> q ZQ
|
|
||||||
if len(g:jedi#documentation_command)
|
|
||||||
execute 'nnoremap <buffer> '.g:jedi#documentation_command.' ZQ'
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
" helper functions
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function! jedi#add_goto_window(for_usages, len) abort
|
|
||||||
let height = min([a:len, g:jedi#quickfix_window_height])
|
|
||||||
|
|
||||||
" Use :copen to go to the window always - the user should select an entry.
|
|
||||||
execute 'belowright copen '.height
|
|
||||||
|
|
||||||
if &filetype !=# 'qf'
|
|
||||||
echoerr printf('jedi-vim: unexpected ft with current window (%s), please report!', &filetype)
|
|
||||||
endif
|
|
||||||
if g:jedi#use_tabs_not_buffers == 1
|
|
||||||
noremap <buffer> <CR> :call jedi#goto_window_on_enter()<CR>
|
|
||||||
endif
|
|
||||||
|
|
||||||
augroup jedi_goto_window
|
|
||||||
if a:for_usages
|
|
||||||
autocmd BufWinLeave <buffer> call jedi#clear_usages()
|
|
||||||
else
|
|
||||||
autocmd WinLeave <buffer> q " automatically leave, if an option is chosen
|
|
||||||
endif
|
|
||||||
augroup END
|
|
||||||
|
|
||||||
if a:for_usages && !has('nvim')
|
|
||||||
if s:supports_buffer_usages
|
|
||||||
" Setup autocommand for pending highlights with Vim's textprops.
|
|
||||||
" (cannot be added to unlisted buffers)
|
|
||||||
augroup jedi_usages
|
|
||||||
autocmd! BufWinEnter * call s:usages_for_pending_buffers()
|
|
||||||
augroup END
|
|
||||||
else
|
|
||||||
" Setup global autocommand to display any usages for a window.
|
|
||||||
" Gets removed when closing the quickfix window that displays them, or
|
|
||||||
" when clearing them (e.g. on TextChanged).
|
|
||||||
augroup jedi_usages
|
|
||||||
autocmd! BufWinEnter,WinEnter * call jedi#_show_usages_in_win()
|
|
||||||
augroup END
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Highlight usages for a buffer if not done so yet (Neovim only).
|
|
||||||
function! s:usages_for_pending_buffers() abort
|
|
||||||
python3 jedi_vim._handle_pending_usages_for_buf()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#goto_window_on_enter() abort
|
|
||||||
let l:list = getqflist()
|
|
||||||
let l:data = l:list[line('.') - 1]
|
|
||||||
if l:data.bufnr
|
|
||||||
" close goto_window buffer
|
|
||||||
normal! ZQ
|
|
||||||
python3 jedi_vim.set_buffer(vim.eval('bufname(l:data.bufnr)'))
|
|
||||||
call cursor(l:data.lnum, l:data.col)
|
|
||||||
else
|
|
||||||
echohl WarningMsg | echo 'Builtin module cannot be opened.' | echohl None
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! s:syn_stack() abort
|
|
||||||
if !exists('*synstack')
|
|
||||||
return []
|
|
||||||
endif
|
|
||||||
return map(synstack(line('.'), col('.') - 1), "synIDattr(v:val, 'name')")
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#do_popup_on_dot_in_highlight() abort
|
|
||||||
let highlight_groups = s:syn_stack()
|
|
||||||
for a in highlight_groups
|
|
||||||
if a ==# 'pythonDoctest'
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
for a in highlight_groups
|
|
||||||
for b in ['pythonString', 'pythonComment', 'pythonNumber']
|
|
||||||
if a == b
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
endfor
|
|
||||||
return 1
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
|
|
||||||
let s:show_call_signatures_last = [0, 0, '']
|
|
||||||
function! jedi#show_call_signatures() abort
|
|
||||||
if s:_init_python == 0
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
let [line, col] = [line('.'), col('.')]
|
|
||||||
let curline = getline(line)
|
|
||||||
let reload_signatures = 1
|
|
||||||
|
|
||||||
" Caching. On the same line only.
|
|
||||||
if line == s:show_call_signatures_last[0]
|
|
||||||
" Check if the number of special signs before or after the
|
|
||||||
" cursor has not changed since the last call, which means that the
|
|
||||||
" argument position was not changed and we can skip repainting.
|
|
||||||
let prevcol = s:show_call_signatures_last[1]
|
|
||||||
let prevline = s:show_call_signatures_last[2]
|
|
||||||
let no_special = '[^,()=]'
|
|
||||||
if substitute(curline[:col-2], no_special, '', 'g')
|
|
||||||
\ == substitute(prevline[:prevcol-2], no_special, '', 'g')
|
|
||||||
\ && substitute(curline[(col-2):], no_special, '', 'g')
|
|
||||||
\ == substitute(prevline[(prevcol-2):], no_special, '', 'g')
|
|
||||||
let reload_signatures = 0
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
let s:show_call_signatures_last = [line, col, curline]
|
|
||||||
|
|
||||||
if reload_signatures
|
|
||||||
python3 jedi_vim.show_call_signatures()
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#clear_call_signatures() abort
|
|
||||||
if s:_init_python == 0
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
let s:show_call_signatures_last = [0, 0, '']
|
|
||||||
python3 jedi_vim.clear_call_signatures()
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#configure_call_signatures() abort
|
|
||||||
augroup jedi_call_signatures
|
|
||||||
autocmd! * <buffer>
|
|
||||||
if g:jedi#show_call_signatures == 2 " Command line call signatures
|
|
||||||
autocmd InsertEnter <buffer> let g:jedi#first_col = s:save_first_col()
|
|
||||||
endif
|
|
||||||
autocmd InsertEnter <buffer> let s:show_call_signatures_last = [0, 0, '']
|
|
||||||
autocmd InsertLeave <buffer> call jedi#clear_call_signatures()
|
|
||||||
if g:jedi#show_call_signatures_delay > 0
|
|
||||||
autocmd InsertEnter <buffer> let b:_jedi_orig_updatetime = &updatetime
|
|
||||||
\ | let &updatetime = g:jedi#show_call_signatures_delay
|
|
||||||
autocmd InsertLeave <buffer> if exists('b:_jedi_orig_updatetime')
|
|
||||||
\ | let &updatetime = b:_jedi_orig_updatetime
|
|
||||||
\ | unlet b:_jedi_orig_updatetime
|
|
||||||
\ | endif
|
|
||||||
autocmd CursorHoldI <buffer> call jedi#show_call_signatures()
|
|
||||||
else
|
|
||||||
autocmd CursorMovedI <buffer> call jedi#show_call_signatures()
|
|
||||||
endif
|
|
||||||
augroup END
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
" Determine where the current window is on the screen for displaying call
|
|
||||||
" signatures in the correct column.
|
|
||||||
function! s:save_first_col() abort
|
|
||||||
if bufname('%') ==# '[Command Line]' || winnr('$') == 1
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
let startwin = winnr()
|
|
||||||
let winwidth = winwidth(0)
|
|
||||||
if winwidth == &columns
|
|
||||||
return 0
|
|
||||||
elseif winnr('$') == 2
|
|
||||||
return startwin == 1 ? 0 : (winwidth(1) + 1)
|
|
||||||
elseif winnr('$') == 3
|
|
||||||
if startwin == 1
|
|
||||||
return 0
|
|
||||||
endif
|
|
||||||
let ww1 = winwidth(1)
|
|
||||||
let ww2 = winwidth(2)
|
|
||||||
let ww3 = winwidth(3)
|
|
||||||
if ww1 + ww2 + ww3 + 2 == &columns
|
|
||||||
if startwin == 2
|
|
||||||
return ww1 + 1
|
|
||||||
else
|
|
||||||
return ww1 + ww2 + 2
|
|
||||||
endif
|
|
||||||
elseif startwin == 2
|
|
||||||
if ww2 + ww3 + 1 == &columns
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return ww1 + 1
|
|
||||||
endif
|
|
||||||
else " startwin == 3
|
|
||||||
if ww2 + ww3 + 1 == &columns
|
|
||||||
return ww2 + 1
|
|
||||||
else
|
|
||||||
return ww1 + 1
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
return 0
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#complete_string(autocomplete) abort
|
|
||||||
if a:autocomplete
|
|
||||||
if !(g:jedi#popup_on_dot && jedi#do_popup_on_dot_in_highlight())
|
|
||||||
return ''
|
|
||||||
endif
|
|
||||||
|
|
||||||
let s:saved_completeopt = &completeopt
|
|
||||||
set completeopt-=longest
|
|
||||||
set completeopt+=menuone
|
|
||||||
set completeopt-=menu
|
|
||||||
if &completeopt !~# 'noinsert\|noselect'
|
|
||||||
" Patch 775 introduced noinsert and noselect, previously these
|
|
||||||
" options didn't exist. Setting them in earlier versions results in
|
|
||||||
" errors (E474).
|
|
||||||
if has('patch-7.4-775')
|
|
||||||
if g:jedi#popup_select_first
|
|
||||||
set completeopt+=noinsert
|
|
||||||
else
|
|
||||||
set completeopt+=noselect
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
" To pass the tests we use this, it seems to get the closest to
|
|
||||||
" the other options. I'm really not sure if this properly
|
|
||||||
" works, but VIM 7.4-775 is already pretty old, so it might not
|
|
||||||
" be a problem anymore in a few years.
|
|
||||||
set completeopt+=longest
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
elseif pumvisible()
|
|
||||||
return "\<C-n>"
|
|
||||||
endif
|
|
||||||
return "\<C-x>\<C-o>\<C-r>=jedi#complete_opened(".a:autocomplete.")\<CR>"
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#complete_opened(autocomplete) abort
|
|
||||||
if a:autocomplete
|
|
||||||
let &completeopt = s:saved_completeopt
|
|
||||||
unlet s:saved_completeopt
|
|
||||||
elseif pumvisible() && g:jedi#popup_select_first && stridx(&completeopt, 'longest') > -1
|
|
||||||
return "\<Down>"
|
|
||||||
endif
|
|
||||||
return ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#smart_auto_mappings() abort
|
|
||||||
" Auto put import statement after from module.name<space> and complete
|
|
||||||
if search('\m^\s*from\s\+[A-Za-z0-9._]\{1,50}\%#\s*$', 'bcn', line('.'))
|
|
||||||
" Enter character and start completion.
|
|
||||||
return "\<space>import \<C-r>=jedi#complete_string(1)\<CR>"
|
|
||||||
endif
|
|
||||||
return "\<space>"
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function! jedi#setup_completion() abort
|
|
||||||
" We need our own omnifunc, so this overrides the omnifunc set by
|
|
||||||
" $VIMRUNTIME/ftplugin/python.vim.
|
|
||||||
setlocal omnifunc=jedi#completions
|
|
||||||
|
|
||||||
" map ctrl+space for autocompletion
|
|
||||||
if g:jedi#completions_command ==# '<C-Space>'
|
|
||||||
" In terminals, <C-Space> sometimes equals <Nul>.
|
|
||||||
imap <buffer> <Nul> <C-Space>
|
|
||||||
smap <buffer> <Nul> <C-Space>
|
|
||||||
endif
|
|
||||||
if len(g:jedi#completions_command)
|
|
||||||
execute 'inoremap <expr> <buffer> '.g:jedi#completions_command.' jedi#complete_string(0)'
|
|
||||||
" A separate mapping for select mode: deletes and completes.
|
|
||||||
execute 'snoremap <expr> <buffer> '.g:jedi#completions_command." '\<C-g>c'.jedi#complete_string(0)"
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
"python3 jedi_vim.jedi.set_debug_function(jedi_vim.print_to_stdout, speed=True, warnings=False, notices=False)
|
|
||||||
"python3 jedi_vim.jedi.set_debug_function(jedi_vim.print_to_stdout)
|
|
||||||
|
|
||||||
" vim: set et ts=4:
|
|
|
@ -1,7 +0,0 @@
|
||||||
coverage:
|
|
||||||
status:
|
|
||||||
project: true
|
|
||||||
patch: true
|
|
||||||
changes: true
|
|
||||||
|
|
||||||
comment: off
|
|
|
@ -1,578 +0,0 @@
|
||||||
*jedi-vim.txt* - For Vim version 7.3 - Last change: 2014/07/29
|
|
||||||
__ _______ _______ __ ____ ____ __ .___ ___.~
|
|
||||||
| | | ____|| \ | | \ \ / / | | | \/ |~
|
|
||||||
| | | |__ | .--. || | _____\ \/ / | | | \ / |~
|
|
||||||
.--. | | | __| | | | || | |______\ / | | | |\/| |~
|
|
||||||
| `--' | | |____ | '--' || | \ / | | | | | |~
|
|
||||||
\______/ |_______||_______/ |__| \__/ |__| |__| |__|~
|
|
||||||
|
|
||||||
jedi-vim - awesome Python autocompletion with Vim
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Contents *jedi-vim-contents*
|
|
||||||
|
|
||||||
1. Introduction |jedi-vim-introduction|
|
|
||||||
2. Installation |jedi-vim-installation|
|
|
||||||
2.0. Requirements |jedi-vim-installation-requirements|
|
|
||||||
2.1. Manually |jedi-vim-installation-manually|
|
|
||||||
2.2. Using Pathogen |jedi-vim-installation-pathogen|
|
|
||||||
2.3. Using Vundle |jedi-vim-installation-vundle|
|
|
||||||
2.4. Installing from Repositories |jedi-vim-installation-repos|
|
|
||||||
3. Supported Python features |jedi-vim-support|
|
|
||||||
4. Usage |jedi-vim-usage|
|
|
||||||
5. Mappings |jedi-vim-keybindings|
|
|
||||||
5.1. Start completion |g:jedi#completions_command|
|
|
||||||
5.2. Go to definition |g:jedi#goto_command|
|
|
||||||
5.3. Go to assignment |g:jedi#goto_assignments_command|
|
|
||||||
5.4 Go to stub |g:jedi#goto_stubs_command|
|
|
||||||
5.5. Show documentation |g:jedi#documentation_command|
|
|
||||||
5.6. Rename variables |g:jedi#rename_command|
|
|
||||||
5.7. Show name usages |g:jedi#usages_command|
|
|
||||||
5.8. Open module by name |:Pyimport|
|
|
||||||
6. Configuration |jedi-vim-configuration|
|
|
||||||
6.1. auto_initialization |g:jedi#auto_initialization|
|
|
||||||
6.2. auto_vim_configuration |g:jedi#auto_vim_configuration|
|
|
||||||
6.3. popup_on_dot |g:jedi#popup_on_dot|
|
|
||||||
6.4. popup_select_first |g:jedi#popup_select_first|
|
|
||||||
6.5. auto_close_doc |g:jedi#auto_close_doc|
|
|
||||||
6.6. show_call_signatures |g:jedi#show_call_signatures|
|
|
||||||
6.7. show_call_signatures_delay |g:jedi#show_call_signatures_delay|
|
|
||||||
6.8. use_tabs_not_buffers |g:jedi#use_tabs_not_buffers|
|
|
||||||
6.9. squelch_py_warning |g:jedi#squelch_py_warning|
|
|
||||||
6.10. completions_enabled |g:jedi#completions_enabled|
|
|
||||||
6.11. use_splits_not_buffers |g:jedi#use_splits_not_buffers|
|
|
||||||
6.12. force_py_version |g:jedi#force_py_version|
|
|
||||||
6.13. smart_auto_mappings |g:jedi#smart_auto_mappings|
|
|
||||||
6.14. use_tag_stack |g:jedi#use_tag_stack|
|
|
||||||
6.15. environment_path |g:jedi#environment_path|
|
|
||||||
|b:jedi_environment_path|
|
|
||||||
6.16. added_sys_path |g:jedi#added_sys_path|
|
|
||||||
|b:jedi_added_sys_path|
|
|
||||||
6.17. case_insensitive_completion |g:jedi#case_insensitive_completion|
|
|
||||||
|b:jedi_case_insensitive_completion|
|
|
||||||
7. Testing |jedi-vim-testing|
|
|
||||||
8. Contributing |jedi-vim-contributing|
|
|
||||||
9. License |jedi-vim-license|
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
1. Introduction *jedi-vim-introduction*
|
|
||||||
|
|
||||||
Jedi-vim is a Vim binding to the awesome Python autocompletion library
|
|
||||||
`jedi`. Among jedi's (and, therefore, jedi-vim's) features are:
|
|
||||||
|
|
||||||
- Completion for a wide array of Python features (see |jedi-vim-support|)
|
|
||||||
- Robust in dealing with syntax errors and wrong indentation
|
|
||||||
- Parses complex module/function/class structures
|
|
||||||
- Infers function arguments from Sphinx/Epydoc strings
|
|
||||||
- Doesn't execute Python code
|
|
||||||
- Supports Virtualenv
|
|
||||||
- Supports Python 2.7 and 3.4+
|
|
||||||
|
|
||||||
By leveraging this library, jedi-vim adds the following capabilities to Vim:
|
|
||||||
|
|
||||||
- Displaying function/class bodies
|
|
||||||
- "Go to definition" command
|
|
||||||
- Displaying docstrings
|
|
||||||
- Renaming and refactoring
|
|
||||||
- Looking up related names
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
2. Installation *jedi-vim-installation*
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
2.0. Requirements *jedi-vim-installation-requirements*
|
|
||||||
|
|
||||||
First of all, jedi-vim requires Vim to be compiled with the `+python` option.
|
|
||||||
|
|
||||||
It is best if you have VIM >= 7.3, compiled with the `+conceal` option. With
|
|
||||||
older versions, you will probably not see the parameter recommendation list
|
|
||||||
for functions after typing the open bracket. Some platforms (including OS X
|
|
||||||
releases) do not ship a VIM with `+conceal`. You can check if your VIM has the
|
|
||||||
feature with >
|
|
||||||
|
|
||||||
:ver
|
|
||||||
|
|
||||||
and look for "`+conceal`" (as opposed to "`-conceal`") or >
|
|
||||||
|
|
||||||
:echo has('conceal')
|
|
||||||
|
|
||||||
which will report 0 (not included) or 1 (included). If your VIM lacks this
|
|
||||||
feature and you would like function parameter completion, you will need to
|
|
||||||
build your own VIM, or use a package for your operating system that has this
|
|
||||||
feature (such as MacVim on OS X, which also contains a console binary).
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
2.1. Installing manually *jedi-vim-installation-manually*
|
|
||||||
|
|
||||||
1. If you want to install jedi as a submodule instead, issue this command: >
|
|
||||||
|
|
||||||
git clone --recursive http://github.com/davidhalter/jedi-vim
|
|
||||||
|
|
||||||
2. Put the plugin files into their respective folders in your vim runtime
|
|
||||||
directory (usually ~/.vim). Be sure to pay attention to the directory
|
|
||||||
structure!
|
|
||||||
3. Update the Vim help tags with >
|
|
||||||
|
|
||||||
:helptags <path/to/vimruntime>/doc
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
2.2. Installing using Pathogen *jedi-vim-installation-pathogen*
|
|
||||||
|
|
||||||
Pathogen simplifies installation considerably.
|
|
||||||
|
|
||||||
1.a Clone the git repository into your bundles directory: >
|
|
||||||
|
|
||||||
git clone http://github.com/davidhalter/jedi-vim path/to/bundles/jedi-vim
|
|
||||||
|
|
||||||
1b. Again, if you want to install jedi as a submodule, use this command
|
|
||||||
instead: >
|
|
||||||
|
|
||||||
git clone --recursive http://github.com/davidhalter/jedi-vim
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
2.3. Installing using Vundle *jedi-vim-installation-vundle*
|
|
||||||
|
|
||||||
1. Vundle automatically downloads subrepositories as git submodules, so you
|
|
||||||
will automatically get the jedi library with the jedi-vim plugin. Add the
|
|
||||||
following to the Bundles section in your .vimrc file: >
|
|
||||||
|
|
||||||
Plugin 'davidhalter/jedi-vim'
|
|
||||||
|
|
||||||
2. Issue the following command in Vim: >
|
|
||||||
|
|
||||||
:PluginInstall
|
|
||||||
|
|
||||||
Help tags are generated automatically, so you should be good to go.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
2.4. Installing from Repositories *jedi-vim-installation-repos*
|
|
||||||
|
|
||||||
Some Linux distributions have jedi-vim packages in their official
|
|
||||||
repositories. On Arch Linux, install vim-jedi. On Debian (8+) or Ubuntu
|
|
||||||
(14.04+) install vim-python-jedi.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
3. Supported Python features *jedi-vim-support*
|
|
||||||
|
|
||||||
The Jedi library does all the hard work behind the scenes. It understands most
|
|
||||||
Python features, among them:
|
|
||||||
|
|
||||||
- Builtins
|
|
||||||
- Multiple `return`s or `yield`s
|
|
||||||
- Tuple assignments/array indexing/dictionary indexing
|
|
||||||
- `with`-statement/exception handling
|
|
||||||
- `*args` and `**kwargs`
|
|
||||||
- Decorators, lambdas, closures
|
|
||||||
- Generators, iterators
|
|
||||||
- Some descriptors: `property`/`staticmethod`/`classmethod`
|
|
||||||
- Some magic methods: `__call__`, `__iter__`, `__next__`, `__get__`,
|
|
||||||
`__getitem__`, `__init__`
|
|
||||||
- `list.append()`, `set.add()`, `list.extend()`, etc.
|
|
||||||
- (Nested) list comprehensions and ternary expressions
|
|
||||||
- Relative `import`s
|
|
||||||
- `getattr()`/`__getattr__`/`__getattribute__`
|
|
||||||
- Function annotations (py3k feature, are being ignored at the moment, but are
|
|
||||||
parsed)
|
|
||||||
- Class decorators (py3k feature, are being ignored at the moment, but are
|
|
||||||
parsed)
|
|
||||||
- Simple/usual `sys.path` modifications
|
|
||||||
- `isinstance` checks for `if`/`while`/`assert` case, that doesn't work with
|
|
||||||
Jedi
|
|
||||||
- Stubs
|
|
||||||
- And more...
|
|
||||||
|
|
||||||
Note: This list is not necessarily up to date. For a complete list of
|
|
||||||
features, please refer to the Jedi documentation at
|
|
||||||
http://jedi.readthedocs.io.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
4. Usage *jedi-vim-usage*
|
|
||||||
|
|
||||||
With the default settings, autocompletion can be triggered by typing
|
|
||||||
<Ctrl-Space>. The first entry will automatically be selected, so you can press
|
|
||||||
<Return> to insert it into your code or keep typing and narrow down your
|
|
||||||
completion options. The usual <C-X><C-O> and <C-P>/<C-N> keybindings work as
|
|
||||||
well. Autocompletion is also triggered by typing a period in insert mode.
|
|
||||||
Since periods rarely occur in Python code outside of method/import lookups,
|
|
||||||
this is handy to have (but can be disabled).
|
|
||||||
|
|
||||||
When it encounters a new module, jedi might take a few seconds to parse that
|
|
||||||
module's contents. Afterwards, the contents are cached and completion will be
|
|
||||||
almost instantaneous.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
5. Key Bindings *jedi-vim-keybindings*
|
|
||||||
|
|
||||||
All keybindings can be mapped by setting the appropriate global option. For
|
|
||||||
example, to set the keybinding for starting omnicompletion to <C-N> instead of
|
|
||||||
<Ctrl-Space>, add the following setting to your .vimrc file: >
|
|
||||||
|
|
||||||
let g:jedi#completions_command = "<C-N>"
|
|
||||||
|
|
||||||
Note: If you have |g:jedi#auto_initialization| set to 0, you have to create
|
|
||||||
a mapping yourself by calling a function: >
|
|
||||||
|
|
||||||
" Using <C-N> for omnicompletion
|
|
||||||
inoremap <silent> <buffer> <C-N> <c-x><c-o>
|
|
||||||
" Use <localleader>r (by default <\-r>) for renaming
|
|
||||||
nnoremap <silent> <buffer> <localleader>r :call jedi#rename()<cr>
|
|
||||||
" etc.
|
|
||||||
|
|
||||||
Note: You can set commands to '', which means that they are empty and not
|
|
||||||
assigned. It's an easy way to "disable" functionality of jedi-vim.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
5.1. `g:jedi#completions_command` *g:jedi#completions_command*
|
|
||||||
Function: n/a; see above
|
|
||||||
Default: <Ctrl-Space> Start completion
|
|
||||||
|
|
||||||
Performs autocompletion (or omnicompletion, to be precise).
|
|
||||||
|
|
||||||
Note: If you want to use <Tab> for completion, please install Supertab:
|
|
||||||
https://github.com/ervandew/supertab.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
5.2. `g:jedi#goto_command` *g:jedi#goto_command*
|
|
||||||
Function: `jedi#goto()`
|
|
||||||
Default: <leader>d Go to definition (or assignment)
|
|
||||||
|
|
||||||
This function first tries |jedi#goto_definitions|, and falls back to
|
|
||||||
|jedi#goto_assignments| for builtin modules. It produces an error if nothing
|
|
||||||
could be found.
|
|
||||||
NOTE: this implementation is subject to change.
|
|
||||||
Ref: https://github.com/davidhalter/jedi/issues/570
|
|
||||||
|
|
||||||
This command tries to find the original definition of the function/class under
|
|
||||||
the cursor. Just like the `jedi#goto_assignments()` function, it does not work
|
|
||||||
if the definition isn't in a Python source file.
|
|
||||||
|
|
||||||
The difference between `jedi#goto_assignments()` and `jedi#goto_definitions()`
|
|
||||||
is that the latter performs recursive lookups. Take, for example, the
|
|
||||||
following module structure: >
|
|
||||||
|
|
||||||
# file1.py:
|
|
||||||
from file2 import foo
|
|
||||||
|
|
||||||
# file2.py:
|
|
||||||
from file3 import bar as foo
|
|
||||||
|
|
||||||
# file3.py
|
|
||||||
def bar():
|
|
||||||
pass
|
|
||||||
|
|
||||||
The `jedi#goto_assignments()` function will take you to the >
|
|
||||||
|
|
||||||
from file2 import foo
|
|
||||||
|
|
||||||
statement in file1.py, while the `jedi#goto_definitions()` function will take
|
|
||||||
you all the way to the >
|
|
||||||
|
|
||||||
def bar():
|
|
||||||
|
|
||||||
line in file3.py.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
5.3. `g:jedi#goto_assignments_command` *g:jedi#goto_assignments_command*
|
|
||||||
Function: `jedi#goto_assignments()`
|
|
||||||
Default: <leader>g Go to assignment
|
|
||||||
|
|
||||||
This function finds the first definition of the function/class under the
|
|
||||||
cursor. It produces an error if the definition is not in a Python file.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
5.4. `g:jedi#goto_stubs_command` *g:jedi#goto_stubs_command*
|
|
||||||
Function: `jedi#goto_stubs()`
|
|
||||||
Default: <leader>s Go to stub
|
|
||||||
|
|
||||||
Finds the stub of the function/class under the cursor.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
5.5. `g:jedi#documentation_command` *g:jedi#documentation_command*
|
|
||||||
Function: `jedi#show_documentation()`
|
|
||||||
Default: <K> Show pydoc documentation
|
|
||||||
|
|
||||||
This shows the pydoc documentation for the item currently under the cursor.
|
|
||||||
The documentation is opened in a horizontally split buffer. The height of this
|
|
||||||
buffer is controlled by `g:jedi#max_doc_height` (set by default to 30).
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
5.6. `g:jedi#rename_command` *g:jedi#rename_command*
|
|
||||||
Function: `jedi#rename()`
|
|
||||||
Default: <leader>r Rename variables
|
|
||||||
|
|
||||||
Jedi-vim deletes the word currently under the cursor 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.7. `g:jedi#usages_command` *g:jedi#usages_command*
|
|
||||||
Function: `jedi#usages()`
|
|
||||||
Default: <leader>n Show usages of a name.
|
|
||||||
|
|
||||||
The quickfix window is populated with a list of all names which point to the
|
|
||||||
definition of the name under the cursor.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
5.8. Open module by name *:Pyimport*
|
|
||||||
Function: `jedi#py_import(args)`
|
|
||||||
Default: :Pyimport e.g. `:Pyimport os` shows os.py in VIM.
|
|
||||||
|
|
||||||
Simulate an import and open that module in VIM.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
6. Configuration *jedi-vim-configuration*
|
|
||||||
|
|
||||||
Note: You currently have to set these options in your .vimrc. Setting them in
|
|
||||||
an ftplugin (e.g. ~/.vim/ftplugin/python/jedi-vim-settings.vim) will not work
|
|
||||||
because jedi-vim is not set up as an filetype plugin, but as a "regular"
|
|
||||||
plugin.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.1. `g:jedi#auto_initialization` *g:jedi#auto_initialization*
|
|
||||||
|
|
||||||
Upon initialization, jedi-vim performs the following steps:
|
|
||||||
|
|
||||||
1. Set the current buffers 'omnifunc' to its own completion function
|
|
||||||
`jedi#completions`
|
|
||||||
2. Create mappings to commands specified in |jedi-vim-keybindings|
|
|
||||||
3. Call `jedi#configure_call_signatures()` if
|
|
||||||
`g:jedi#show_call_signatures` is set
|
|
||||||
|
|
||||||
You can disable the default initialization routine by setting this option to
|
|
||||||
0. Beware that you have to perform the above steps yourself, though.
|
|
||||||
|
|
||||||
Options: 0 or 1
|
|
||||||
Default: 1 (Perform automatic initialization)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.2. `g:jedi#auto_vim_configuration` *g:jedi#auto_vim_configuration*
|
|
||||||
|
|
||||||
Jedi-vim sets 'completeopt' to `menuone,longest,preview` by default, if
|
|
||||||
'completeopt' is not changed from Vim's default.
|
|
||||||
It also remaps <Ctrl-C> to <Esc> in insert mode.
|
|
||||||
|
|
||||||
If you want to keep your own configuration, disable this setting.
|
|
||||||
|
|
||||||
Options: 0 or 1
|
|
||||||
Default: 1 (Set 'completeopt' and mapping as described above)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.3. `g:jedi#popup_on_dot` *g:jedi#popup_on_dot*
|
|
||||||
|
|
||||||
Jedi-vim automatically starts completion upon typing a period in insert mode.
|
|
||||||
|
|
||||||
However, when working with large modules, this can slow down your typing flow
|
|
||||||
since you have to wait for jedi to parse the module and show the completion
|
|
||||||
menu. By disabling this setting, completion is only started when you manually
|
|
||||||
press the completion key.
|
|
||||||
You need to also have `g:jedi#completions_enabled` enabled for this.
|
|
||||||
|
|
||||||
Options: 0 or 1
|
|
||||||
Default: 1 (Start completion on typing a period)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.4. `g:jedi#popup_select_first` *g:jedi#popup_select_first*
|
|
||||||
|
|
||||||
Upon starting completion, jedi-vim can automatically select the first entry
|
|
||||||
that pops up (without actually inserting it).
|
|
||||||
|
|
||||||
This leads to a better typing flow: As you type more characters, the entries
|
|
||||||
in the completion menu are narrowed down. If they are narrowed down enough,
|
|
||||||
you can just press <Return> to insert the first match.
|
|
||||||
|
|
||||||
Options: 0 or 1
|
|
||||||
Default: 1 (Automatically select first completion entry)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.5. `g:jedi#auto_close_doc` *g:jedi#auto_close_doc*
|
|
||||||
|
|
||||||
When doing completion, jedi-vim shows the docstring of the currently selected
|
|
||||||
item in a preview window. By default, this window is being closed after
|
|
||||||
insertion of a completion item.
|
|
||||||
|
|
||||||
Set this to 0 to leave the preview window open even after leaving insert mode.
|
|
||||||
This could be useful if you want to browse longer docstrings.
|
|
||||||
|
|
||||||
Options: 0 or 1
|
|
||||||
Default: 1 (Automatically close preview window upon leaving insert mode)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.6. `g:jedi#show_call_signatures` *g:jedi#show_call_signatures*
|
|
||||||
|
|
||||||
Jedi-vim can display a small window detailing the arguments of the currently
|
|
||||||
completed function and highlighting the currently selected argument. This can
|
|
||||||
be disabled by setting this option to 0. Setting this option to 2 shows call
|
|
||||||
signatures in the command line instead of a popup window.
|
|
||||||
|
|
||||||
Options: 0, 1, or 2
|
|
||||||
Default: 1 (Show call signatures window)
|
|
||||||
|
|
||||||
Note: 'showmode' must be disabled for command line call signatures to be
|
|
||||||
visible.
|
|
||||||
|
|
||||||
Note: This setting is ignored if |g:jedi#auto_initialization| is set to 0. In
|
|
||||||
that case, if you want to see call signatures, you have to set it up
|
|
||||||
manually by calling a function in your configuration file: >
|
|
||||||
|
|
||||||
call jedi#configure_call_signatures()
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.7. `g:jedi#show_call_signatures_delay` *g:jedi#show_call_signatures_delay*
|
|
||||||
|
|
||||||
The delay to be used with |g:jedi#show_call_signatures|. If it is greater
|
|
||||||
than 0 it will use Vim's |CursorHoldI| event instead of |CursorMovedI|.
|
|
||||||
It will temporarily set Vim's |'updatetime'| option during insert mode.
|
|
||||||
|
|
||||||
Options: delay in milliseconds
|
|
||||||
Default: 500
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.8. `g:jedi#use_tabs_not_buffers` *g:jedi#use_tabs_not_buffers*
|
|
||||||
|
|
||||||
You can make jedi-vim open a new tab if you use the "go to", "show
|
|
||||||
definition", or "related names" commands. When you leave this at the default
|
|
||||||
(0), they open in the current window instead.
|
|
||||||
|
|
||||||
Options: 0 or 1
|
|
||||||
Default: 0 (Command output reuses current window)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.9. `g:jedi#squelch_py_warning` *g:jedi#squelch_py_warning*
|
|
||||||
|
|
||||||
When Vim has not been compiled with +python, jedi-vim shows a warning to that
|
|
||||||
effect and aborts loading itself. Set this to 1 to suppress that warning.
|
|
||||||
|
|
||||||
Options: 0 or 1
|
|
||||||
Default: 0 (Warning is shown)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.10. `g:jedi#completions_enabled` *g:jedi#completions_enabled*
|
|
||||||
|
|
||||||
If you don't want Jedi completion, but all the other features, you can disable
|
|
||||||
it in favor of another completion engine (that probably also uses Jedi, like
|
|
||||||
YCM).
|
|
||||||
|
|
||||||
Options: 0 or 1
|
|
||||||
Default: 1
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.11. `g:jedi#use_splits_not_buffers` *g:jedi#use_splits_not_buffers*
|
|
||||||
|
|
||||||
If you want to open new split for "go to", you could set this option to the
|
|
||||||
direction which you want to open a split with.
|
|
||||||
|
|
||||||
Options: top, left, right, bottom or winwidth
|
|
||||||
Default: "" (not enabled by default)
|
|
||||||
|
|
||||||
Note: with the 'winwidth' option the window is split vertically or horizontally
|
|
||||||
depending on the width of the window relative to 'textwidth'. This essentially
|
|
||||||
means that if the window is big enough it will be split vertically but if it is
|
|
||||||
small a horizontal split happens.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.12. `g:jedi#force_py_version` *g:jedi#force_py_version*
|
|
||||||
|
|
||||||
If you have installed multiple Python versions, you can force the Python
|
|
||||||
version that is going to be used.
|
|
||||||
You don't have to compile VIM with multiple Python versions.
|
|
||||||
The variable can be set in the .vimrc like this to force python 2:
|
|
||||||
|
|
||||||
let g:jedi#force_py_version = 2
|
|
||||||
|
|
||||||
By default jedi loads the latest Python version installed on your system that
|
|
||||||
can be found.
|
|
||||||
|
|
||||||
This variable can be changed during runtime.
|
|
||||||
|
|
||||||
Options: 2, 2.7, 3, 3.5, 3.6, ...
|
|
||||||
Default: "auto"
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.13. `g:jedi#smart_auto_mappings` *g:jedi#smart_auto_mappings*
|
|
||||||
|
|
||||||
When you start typing `from module.name<space>` jedi-vim automatically
|
|
||||||
can add the "import" statement and trigger the autocompletion popup.
|
|
||||||
|
|
||||||
You can enable this using: >
|
|
||||||
|
|
||||||
let g:jedi#smart_auto_mappings = 1
|
|
||||||
<
|
|
||||||
Options: 0 or 1
|
|
||||||
Default: 0 (disabled by default)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.14. `g:jedi#use_tag_stack` *g:jedi#use_tag_stack*
|
|
||||||
|
|
||||||
Write results of |jedi#goto| to a temporary file and use the |:tjump| command
|
|
||||||
to enable full |tagstack| functionality. Use of the tag stack allows
|
|
||||||
returning to the usage of a function with CTRL-T after exploring the
|
|
||||||
definition with arbitrary changes to the |jumplist|.
|
|
||||||
|
|
||||||
Options: 0 or 1
|
|
||||||
Default: 1 (enabled by default)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.15. `g:jedi#environment_path` *g:jedi#environment_path*
|
|
||||||
*b:jedi_environment_path*
|
|
||||||
|
|
||||||
To use a specific virtualenv or a specific Python version it is possible to
|
|
||||||
set an interpreter.
|
|
||||||
|
|
||||||
Both setting the directory and setting a project is working.
|
|
||||||
|
|
||||||
Examples: "/usr/bin/python3.9", "venv", "../venv", "../venv/bin/python"
|
|
||||||
|
|
||||||
The buffer-local variable `b:jedi_environment_path` can be used to override the
|
|
||||||
global variable `g:jedi#environment_path`.
|
|
||||||
|
|
||||||
Default: "auto"
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.16. `g:jedi#added_sys_path` *g:jedi#added_sys_path*
|
|
||||||
*b:jedi_added_sys_path*
|
|
||||||
|
|
||||||
To add extra sys_path.
|
|
||||||
|
|
||||||
The buffer-local variable `b:jedi_added_sys_path` can be used to add
|
|
||||||
additional extra sys_path.
|
|
||||||
|
|
||||||
Examples: ["../site-packages"]
|
|
||||||
Default: []
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
6.17. `g:jedi#case_insensitive_completion` *g:jedi#case_insensitive_completion*
|
|
||||||
*b:jedi_case_insensitive_completion*
|
|
||||||
|
|
||||||
0 to disable case insensitive completion.
|
|
||||||
1 to enable case insensitive completion (default).
|
|
||||||
|
|
||||||
The buffer-local variable `b:jedi_case_insensitive_completion` can be used to
|
|
||||||
override the global variable `g:jedi#case_insensitive_completion`.
|
|
||||||
|
|
||||||
Default: 1
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
7. Testing *jedi-vim-testing*
|
|
||||||
|
|
||||||
jedi-vim is being tested with a combination of vspec
|
|
||||||
https://github.com/kana/vim-vspec and py.test http://pytest.org/.
|
|
||||||
|
|
||||||
The tests are in the test subdirectory, you can run them calling::
|
|
||||||
|
|
||||||
py.test
|
|
||||||
|
|
||||||
The tests are automatically run with `travis
|
|
||||||
<https://travis-ci.org/davidhalter/jedi-vim>`_.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
8. Contributing *jedi-vim-contributing*
|
|
||||||
|
|
||||||
We love Pull Requests! Read the instructions in `CONTRIBUTING.md`.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
9. License *jedi-vim-license*
|
|
||||||
|
|
||||||
Jedi-vim is licensed with the MIT license.
|
|
||||||
|
|
||||||
vim: textwidth=78 et filetype=help:norightleft:
|
|
|
@ -1,140 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
||||||
<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
||||||
width="897.845px" height="247.51px" viewBox="0 0 897.845 247.51" enable-background="new 0 0 897.845 247.51"
|
|
||||||
xml:space="preserve">
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="287.3965" y1="65.2686" x2="287.3965" y2="106.4546">
|
|
||||||
<stop offset="0" style="stop-color:#E27817"/>
|
|
||||||
<stop offset="0.3906" style="stop-color:#E47519"/>
|
|
||||||
<stop offset="0.7116" style="stop-color:#E96B1F"/>
|
|
||||||
<stop offset="1" style="stop-color:#F15A29"/>
|
|
||||||
</linearGradient>
|
|
||||||
<polygon fill="url(#SVGID_1_)" points="285.068,66.556 272.054,95.664 302.739,95.664 302.739,66.556 "/>
|
|
||||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="216.8877" y1="65.2686" x2="216.8877" y2="106.4546">
|
|
||||||
<stop offset="0" style="stop-color:#E27817"/>
|
|
||||||
<stop offset="0.3906" style="stop-color:#E47519"/>
|
|
||||||
<stop offset="0.7116" style="stop-color:#E96B1F"/>
|
|
||||||
<stop offset="1" style="stop-color:#F15A29"/>
|
|
||||||
</linearGradient>
|
|
||||||
<polygon fill="url(#SVGID_2_)" points="180.483,95.664 193.893,95.664 240.172,95.664 253.292,66.556 180.483,66.556 "/>
|
|
||||||
<g>
|
|
||||||
<polygon fill="#019733" points="256.464,59.293 253.603,65.696 253.593,65.696 253.197,66.592 240.172,95.7 215.738,150.321
|
|
||||||
199.788,185.978 231.676,185.978 231.676,185.969 272.071,95.7 275.634,87.737 285.089,66.592 288.355,59.293 "/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<polygon fill="#019733" points="215.738,150.321 194.605,95.7 180.483,95.7 180.483,135.118 199.788,185.969 199.788,185.978
|
|
||||||
"/>
|
|
||||||
</g>
|
|
||||||
<path fill="#019733" d="M151.355,59.294v100.005h-28.989h-11.292v-7.972c3.644-4.232,6.749-9.936,6.749-16.218
|
|
||||||
c0-2.846-0.456-5.578-1.294-8.104h0.011l-4.274-12.151c-0.238-1.16-0.633-2.257-1.15-3.281v-0.032l-5.878-11.59
|
|
||||||
c-1.201-2.808-3.975-4.897-7.34-5.362c0.281-4.969,2.837-8.87,5.932-8.87l-3.137-1.004l3.137-3.033
|
|
||||||
c-5.01,0-9.098,5.775-9.388,13.021c-3.116,0.609-5.672,2.598-6.79,5.258l-5.723,11.271c-0.052,0.104-0.104,0.197-0.155,0.3v0.01
|
|
||||||
c-0.528,1.057-0.932,2.174-1.169,3.344l-4.232,12.079c-0.012,0.02-0.012,0.03-0.021,0.042c-0.828,2.525-1.294,5.258-1.294,8.104
|
|
||||||
c0,6.282,3.25,11.985,6.904,16.218v35.616h29.112h11.294h58.105V59.294H151.355z M86.554,117.834
|
|
||||||
c-0.673,2.019-2.442,3.252-3.954,2.744c-1.51-0.508-2.194-2.547-1.521-4.565c0.673-2.017,2.443-3.25,3.953-2.742
|
|
||||||
C86.544,113.777,87.228,115.817,86.554,117.834z M110.163,120.578c-1.51,0.508-3.27-0.726-3.954-2.744
|
|
||||||
c-0.672-2.017,0.011-4.057,1.521-4.563c1.512-0.508,3.282,0.726,3.955,2.742C112.357,118.031,111.674,120.07,110.163,120.578z"/>
|
|
||||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="134.6348" y1="65.2686" x2="134.6348" y2="106.4546">
|
|
||||||
<stop offset="0" style="stop-color:#E27817"/>
|
|
||||||
<stop offset="0.3906" style="stop-color:#E47519"/>
|
|
||||||
<stop offset="0.7116" style="stop-color:#E96B1F"/>
|
|
||||||
<stop offset="1" style="stop-color:#F15A29"/>
|
|
||||||
</linearGradient>
|
|
||||||
<polygon fill="url(#SVGID_3_)" points="151.292,66.556 117.914,66.556 117.914,95.664 145.981,95.664 151.292,95.664
|
|
||||||
151.355,95.664 151.355,66.592 151.292,66.592 "/>
|
|
||||||
<g opacity="0.5">
|
|
||||||
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="244.0713" y1="198.6924" x2="244.0713" y2="111.1674">
|
|
||||||
<stop offset="0" style="stop-color:#019733"/>
|
|
||||||
<stop offset="0.1363" style="stop-color:#0B732D;stop-opacity:0.8637"/>
|
|
||||||
<stop offset="0.2826" style="stop-color:#145529;stop-opacity:0.7174"/>
|
|
||||||
<stop offset="0.4366" style="stop-color:#1A3D25;stop-opacity:0.5634"/>
|
|
||||||
<stop offset="0.5997" style="stop-color:#1F2C22;stop-opacity:0.4003"/>
|
|
||||||
<stop offset="0.778" style="stop-color:#222221;stop-opacity:0.222"/>
|
|
||||||
<stop offset="1" style="stop-color:#231F20;stop-opacity:0"/>
|
|
||||||
</linearGradient>
|
|
||||||
<polygon fill="url(#SVGID_4_)" points="256.464,59.293 253.603,65.696 253.593,65.696 253.197,66.592 240.172,95.7
|
|
||||||
215.738,150.321 199.788,185.978 231.676,185.978 231.676,185.969 272.071,95.7 275.634,87.737 285.089,66.592 288.355,59.293
|
|
||||||
"/>
|
|
||||||
</g>
|
|
||||||
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="165.9131" y1="41.1123" x2="165.9131" y2="128.6277">
|
|
||||||
<stop offset="0" style="stop-color:#019733"/>
|
|
||||||
<stop offset="0.1363" style="stop-color:#0B732D;stop-opacity:0.8637"/>
|
|
||||||
<stop offset="0.2826" style="stop-color:#145529;stop-opacity:0.7174"/>
|
|
||||||
<stop offset="0.4366" style="stop-color:#1A3D25;stop-opacity:0.5634"/>
|
|
||||||
<stop offset="0.5997" style="stop-color:#1F2C22;stop-opacity:0.4003"/>
|
|
||||||
<stop offset="0.778" style="stop-color:#222221;stop-opacity:0.222"/>
|
|
||||||
<stop offset="1" style="stop-color:#231F20;stop-opacity:0"/>
|
|
||||||
</linearGradient>
|
|
||||||
<rect x="151.355" y="59.294" opacity="0.5" fill="url(#SVGID_5_)" width="29.116" height="127.649"/>
|
|
||||||
<g opacity="0.58">
|
|
||||||
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="198.1104" y1="83.4141" x2="198.1104" y2="154.2879">
|
|
||||||
<stop offset="0" style="stop-color:#019733"/>
|
|
||||||
<stop offset="0.0409" style="stop-color:#038E32;stop-opacity:0.9591"/>
|
|
||||||
<stop offset="0.2465" style="stop-color:#0F662B;stop-opacity:0.7535"/>
|
|
||||||
<stop offset="0.4491" style="stop-color:#184726;stop-opacity:0.5509"/>
|
|
||||||
<stop offset="0.6453" style="stop-color:#1E3123;stop-opacity:0.3547"/>
|
|
||||||
<stop offset="0.8322" style="stop-color:#222421;stop-opacity:0.1678"/>
|
|
||||||
<stop offset="1" style="stop-color:#231F20;stop-opacity:0"/>
|
|
||||||
</linearGradient>
|
|
||||||
<polygon fill="url(#SVGID_6_)" points="215.738,150.321 194.605,95.7 180.483,95.7 180.483,135.118 199.788,185.969
|
|
||||||
199.788,185.978 "/>
|
|
||||||
</g>
|
|
||||||
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="127.7627" y1="192.1367" x2="127.7627" y2="137.5901">
|
|
||||||
<stop offset="0" style="stop-color:#019733"/>
|
|
||||||
<stop offset="0.0409" style="stop-color:#038E32;stop-opacity:0.9591"/>
|
|
||||||
<stop offset="0.2465" style="stop-color:#0F662B;stop-opacity:0.7535"/>
|
|
||||||
<stop offset="0.4491" style="stop-color:#184726;stop-opacity:0.5509"/>
|
|
||||||
<stop offset="0.6453" style="stop-color:#1E3123;stop-opacity:0.3547"/>
|
|
||||||
<stop offset="0.8322" style="stop-color:#222421;stop-opacity:0.1678"/>
|
|
||||||
<stop offset="1" style="stop-color:#231F20;stop-opacity:0"/>
|
|
||||||
</linearGradient>
|
|
||||||
<path opacity="0.6" fill="url(#SVGID_7_)" d="M151.355,59.294v100.005h-28.989h-11.292v-7.972
|
|
||||||
c3.644-4.232,6.749-9.936,6.749-16.218c0-2.846-0.456-5.578-1.294-8.104h0.011l-4.274-12.151c-0.238-1.16-0.633-2.257-1.15-3.281
|
|
||||||
v-0.032l-5.878-11.59c-1.201-2.808-3.975-4.897-7.34-5.362c0.281-4.969,2.837-8.87,5.932-8.87l-3.137-1.004l3.137-3.033
|
|
||||||
c-5.01,0-9.098,5.775-9.388,13.021c-3.116,0.609-5.672,2.598-6.79,5.258l-5.723,11.271c-0.052,0.104-0.104,0.197-0.155,0.3v0.01
|
|
||||||
c-0.528,1.057-0.932,2.174-1.169,3.344l-4.232,12.079c-0.012,0.02-0.012,0.03-0.021,0.042c-0.828,2.525-1.294,5.258-1.294,8.104
|
|
||||||
c0,6.282,3.25,11.985,6.904,16.218v35.616h29.112h11.294h58.105V59.294H151.355z M86.554,117.834
|
|
||||||
c-0.673,2.019-2.442,3.252-3.954,2.744c-1.51-0.508-2.194-2.547-1.521-4.565c0.673-2.017,2.443-3.25,3.953-2.742
|
|
||||||
C86.544,113.777,87.228,115.817,86.554,117.834z M110.163,120.578c-1.51,0.508-3.27-0.726-3.954-2.744
|
|
||||||
c-0.672-2.017,0.011-4.057,1.521-4.563c1.512-0.508,3.282,0.726,3.955,2.742C112.357,118.031,111.674,120.07,110.163,120.578z"/>
|
|
||||||
<g opacity="0.5">
|
|
||||||
<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="244.0713" y1="53.3584" x2="244.0713" y2="78.0277">
|
|
||||||
<stop offset="0" style="stop-color:#019733"/>
|
|
||||||
<stop offset="0.1363" style="stop-color:#0B732D;stop-opacity:0.8637"/>
|
|
||||||
<stop offset="0.2826" style="stop-color:#145529;stop-opacity:0.7174"/>
|
|
||||||
<stop offset="0.4366" style="stop-color:#1A3D25;stop-opacity:0.5634"/>
|
|
||||||
<stop offset="0.5997" style="stop-color:#1F2C22;stop-opacity:0.4003"/>
|
|
||||||
<stop offset="0.778" style="stop-color:#222221;stop-opacity:0.222"/>
|
|
||||||
<stop offset="1" style="stop-color:#231F20;stop-opacity:0"/>
|
|
||||||
</linearGradient>
|
|
||||||
<polygon fill="url(#SVGID_8_)" points="256.464,59.293 253.603,65.696 253.593,65.696 253.197,66.592 240.172,95.7
|
|
||||||
215.738,150.321 199.788,185.978 231.676,185.978 231.676,185.969 272.071,95.7 275.634,87.737 285.089,66.592 288.355,59.293
|
|
||||||
"/>
|
|
||||||
</g>
|
|
||||||
<polygon fill="#019733" points="180.483,59.198 183.329,66.556 180.471,66.556 "/>
|
|
||||||
<polygon fill="#019733" points="180.483,59.198 183.329,66.556 180.471,66.556 "/>
|
|
||||||
<g>
|
|
||||||
<polygon fill="#019733" points="290.713,66.592 285.054,66.592 288.32,59.293 "/>
|
|
||||||
<polygon fill="#019733" points="308.417,120.554 283.562,95.7 300.261,95.7 "/>
|
|
||||||
<polygon opacity="0.6" fill="#019733" points="308.417,120.554 283.562,95.7 300.261,95.7 "/>
|
|
||||||
<polygon fill="#019733" points="290.713,66.592 285.054,66.592 288.32,59.293 "/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#666666" d="M358.849,130.077v23.827h28.81V77.887h16.547v91.732h-62.987v-39.542H358.849z"/>
|
|
||||||
<path fill="#666666" d="M434.61,93.602v22.677h45.356v14.949H434.61v22.677h45.356v15.715h-62.987V77.887h62.987v15.715H434.61z"
|
|
||||||
/>
|
|
||||||
<path fill="#666666" d="M492.744,169.619V77.887h56.342l6.643,8.05v75.634l-6.579,8.049H492.744z M539.184,93.602h-28.811v60.303
|
|
||||||
h28.811V93.602z"/>
|
|
||||||
<path fill="#666666" d="M586.136,169.619h-17.632V77.887h17.632V169.619z"/>
|
|
||||||
<path fill="#666666" d="M598.913,116.278h33.281v14.949h-33.281V116.278z"/>
|
|
||||||
<path fill="#666666" d="M691.412,77.887h16.544l-19.995,91.732h-21.462l-21.527-91.732h17.63l13.798,70.588L691.412,77.887z"/>
|
|
||||||
<path fill="#666666" d="M738.364,169.619h-17.631V77.887h17.631V169.619z"/>
|
|
||||||
<path fill="#666666" d="M768.77,169.619h-17.632V77.887h17.632l17.886,50.273l18.59-50.273h16.545v91.732h-16.545v-38.392
|
|
||||||
l-12.84,38.392h-10.35l-13.286-38.392V169.619z"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 9.8 KiB |
|
@ -1,53 +0,0 @@
|
||||||
if !jedi#init_python()
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
" Initialization of jedi-vim
|
|
||||||
" ------------------------------------------------------------------------
|
|
||||||
|
|
||||||
if g:jedi#auto_initialization
|
|
||||||
" goto / get_definition / usages
|
|
||||||
if len(g:jedi#goto_command)
|
|
||||||
execute 'nnoremap <buffer> '.g:jedi#goto_command.' :call jedi#goto()<CR>'
|
|
||||||
endif
|
|
||||||
if len(g:jedi#goto_assignments_command)
|
|
||||||
execute 'nnoremap <buffer> '.g:jedi#goto_assignments_command.' :call jedi#goto_assignments()<CR>'
|
|
||||||
endif
|
|
||||||
if len(g:jedi#goto_definitions_command)
|
|
||||||
execute 'nnoremap <buffer> '.g:jedi#goto_definitions_command.' :call jedi#goto_definitions()<CR>'
|
|
||||||
endif
|
|
||||||
if len(g:jedi#goto_stubs_command)
|
|
||||||
execute 'nnoremap <buffer> '.g:jedi#goto_stubs_command.' :call jedi#goto_stubs()<CR>'
|
|
||||||
endif
|
|
||||||
if len(g:jedi#usages_command)
|
|
||||||
execute 'nnoremap <buffer> '.g:jedi#usages_command.' :call jedi#usages()<CR>'
|
|
||||||
endif
|
|
||||||
" rename
|
|
||||||
if len(g:jedi#rename_command)
|
|
||||||
execute 'nnoremap <buffer> '.g:jedi#rename_command.' :call jedi#rename()<CR>'
|
|
||||||
execute 'vnoremap <buffer> '.g:jedi#rename_command.' :call jedi#rename_visual()<CR>'
|
|
||||||
endif
|
|
||||||
" documentation/pydoc
|
|
||||||
if len(g:jedi#documentation_command)
|
|
||||||
execute 'nnoremap <silent> <buffer>'.g:jedi#documentation_command.' :call jedi#show_documentation()<CR>'
|
|
||||||
endif
|
|
||||||
|
|
||||||
if g:jedi#show_call_signatures > 0
|
|
||||||
call jedi#configure_call_signatures()
|
|
||||||
endif
|
|
||||||
|
|
||||||
if g:jedi#completions_enabled == 1
|
|
||||||
inoremap <silent> <buffer> . .<C-R>=jedi#complete_string(1)<CR>
|
|
||||||
endif
|
|
||||||
|
|
||||||
if g:jedi#smart_auto_mappings == 1
|
|
||||||
inoremap <silent> <buffer> <space> <C-R>=jedi#smart_auto_mappings()<CR>
|
|
||||||
end
|
|
||||||
|
|
||||||
if g:jedi#auto_close_doc
|
|
||||||
" close preview if its still open after insert
|
|
||||||
augroup jedi_preview
|
|
||||||
autocmd! InsertLeave <buffer> if pumvisible() == 0|pclose|endif
|
|
||||||
augroup END
|
|
||||||
endif
|
|
||||||
endif
|
|
|
@ -1,77 +0,0 @@
|
||||||
"jedi-vim - Omni Completion for python in vim
|
|
||||||
" Maintainer: David Halter <davidhalter88@gmail.com>
|
|
||||||
"
|
|
||||||
" This part of the software is just the vim interface. The really big deal is
|
|
||||||
" the Jedi Python library.
|
|
||||||
|
|
||||||
if get(g:, 'jedi#auto_vim_configuration', 1)
|
|
||||||
" jedi-vim doesn't work in compatible mode (vim script syntax problems)
|
|
||||||
if &compatible
|
|
||||||
" vint: -ProhibitSetNoCompatible
|
|
||||||
set nocompatible
|
|
||||||
" vint: +ProhibitSetNoCompatible
|
|
||||||
endif
|
|
||||||
|
|
||||||
" jedi-vim really needs, otherwise jedi-vim cannot start.
|
|
||||||
filetype plugin on
|
|
||||||
|
|
||||||
augroup jedi_pyi
|
|
||||||
au!
|
|
||||||
autocmd BufNewFile,BufRead *.pyi set filetype=python
|
|
||||||
augroup END
|
|
||||||
|
|
||||||
" Change completeopt, but only if it was not set already.
|
|
||||||
" This gets done on VimEnter, since otherwise Vim fails to restore the
|
|
||||||
" screen. Neovim is not affected, this is likely caused by using
|
|
||||||
" :redir/execute() before the (alternate) terminal is configured.
|
|
||||||
function! s:setup_completeopt()
|
|
||||||
if exists('*execute')
|
|
||||||
let completeopt = execute('silent verb set completeopt?')
|
|
||||||
else
|
|
||||||
redir => completeopt
|
|
||||||
silent verb set completeopt?
|
|
||||||
redir END
|
|
||||||
endif
|
|
||||||
if len(split(completeopt, '\n')) == 1
|
|
||||||
set completeopt=menuone,longest,preview
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
if has('nvim')
|
|
||||||
call s:setup_completeopt()
|
|
||||||
else
|
|
||||||
augroup jedi_startup
|
|
||||||
au!
|
|
||||||
autocmd VimEnter * call s:setup_completeopt()
|
|
||||||
augroup END
|
|
||||||
endif
|
|
||||||
|
|
||||||
if len(mapcheck('<C-c>', 'i')) == 0
|
|
||||||
inoremap <C-c> <ESC>
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Pyimport command
|
|
||||||
command! -nargs=1 -complete=custom,jedi#py_import_completions Pyimport :call jedi#py_import(<q-args>)
|
|
||||||
|
|
||||||
command! -nargs=? -complete=file JediChooseEnvironment :call jedi#choose_environment(<q-args>)
|
|
||||||
command! -nargs=? -complete=file JediLoadProject :call jedi#load_project(<q-args>)
|
|
||||||
|
|
||||||
|
|
||||||
function! s:jedi_debug_info()
|
|
||||||
" Ensure the autoload file has been loaded (and ignore any errors, which
|
|
||||||
" will be displayed with the debug info).
|
|
||||||
let unset = {}
|
|
||||||
let saved_squelch_py_warning = get(g:, 'jedi#squelch_py_warning', unset)
|
|
||||||
let g:jedi#squelch_py_warning = 1
|
|
||||||
call jedi#init_python()
|
|
||||||
if saved_squelch_py_warning is unset
|
|
||||||
unlet g:jedi#squelch_py_warning
|
|
||||||
else
|
|
||||||
let g:jedi#squelch_py_warning = saved_squelch_py_warning
|
|
||||||
endif
|
|
||||||
call jedi#debug_info()
|
|
||||||
endfunction
|
|
||||||
command! -nargs=0 -bar JediDebugInfo call s:jedi_debug_info()
|
|
||||||
command! -nargs=0 -bang JediClearCache call jedi#clear_cache(<bang>0)
|
|
||||||
|
|
||||||
" vim: set et ts=4:
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,96 +0,0 @@
|
||||||
"""Used in jedi-vim's jedi#debug_info()"""
|
|
||||||
import sys
|
|
||||||
|
|
||||||
import vim
|
|
||||||
from jedi_vim import PythonToVimStr, jedi
|
|
||||||
|
|
||||||
|
|
||||||
def echo(msg):
|
|
||||||
vim.command('echo %r' % PythonToVimStr(msg))
|
|
||||||
|
|
||||||
|
|
||||||
def echo_error(msg):
|
|
||||||
vim.command('echohl ErrorMsg')
|
|
||||||
echo(msg)
|
|
||||||
vim.command('echohl None')
|
|
||||||
|
|
||||||
|
|
||||||
def format_exc_info(exc_info=None, tb_indent=2):
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
if exc_info is None:
|
|
||||||
exc_info = sys.exc_info()
|
|
||||||
|
|
||||||
exc_msg = traceback.format_exception_only(exc_info[0], exc_info[1])
|
|
||||||
lines = ''.join(exc_msg).rstrip('\n').split('\n')
|
|
||||||
|
|
||||||
lines.append('Traceback (most recent call last):')
|
|
||||||
tb = traceback.format_tb(exc_info[2])
|
|
||||||
lines.extend(''.join(tb).rstrip('\n').split('\n'))
|
|
||||||
|
|
||||||
indent = ' ' * tb_indent
|
|
||||||
return '{0}'.format(('\n' + indent).join(lines))
|
|
||||||
|
|
||||||
|
|
||||||
def get_known_environments():
|
|
||||||
"""Get known Jedi environments."""
|
|
||||||
envs = list(jedi.find_virtualenvs())
|
|
||||||
envs.extend(jedi.find_system_environments())
|
|
||||||
return envs
|
|
||||||
|
|
||||||
|
|
||||||
def display_debug_info():
|
|
||||||
echo(' - global sys.executable: `{0}`'.format(sys.executable))
|
|
||||||
echo(' - global sys.version: `{0}`'.format(
|
|
||||||
', '.join([x.strip()
|
|
||||||
for x in sys.version.split('\n')])))
|
|
||||||
echo(' - global site module: `{0}`'.format(__import__('site').__file__))
|
|
||||||
|
|
||||||
try:
|
|
||||||
import jedi_vim
|
|
||||||
except Exception:
|
|
||||||
echo_error('ERROR: could not import jedi_vim: {0}'.format(
|
|
||||||
format_exc_info()))
|
|
||||||
return
|
|
||||||
|
|
||||||
if jedi_vim.jedi is None:
|
|
||||||
if hasattr(jedi_vim, 'jedi_import_error'):
|
|
||||||
error_msg = format_exc_info(jedi_vim.jedi_import_error)
|
|
||||||
else:
|
|
||||||
error_msg = 'unknown error'
|
|
||||||
echo_error('ERROR: could not import the "jedi" Python module: {0}'.format(
|
|
||||||
error_msg))
|
|
||||||
else:
|
|
||||||
echo('\n##### Jedi\n\n - path: `{0}`'.format(jedi_vim.jedi.__file__))
|
|
||||||
echo(' - version: {0}'.format(jedi_vim.jedi.__version__))
|
|
||||||
|
|
||||||
try:
|
|
||||||
project = jedi_vim.get_project()
|
|
||||||
environment = project.get_environment()
|
|
||||||
except AttributeError:
|
|
||||||
script_evaluator = jedi_vim.jedi.Script('')._evaluator
|
|
||||||
try:
|
|
||||||
sys_path = script_evaluator.project.sys_path
|
|
||||||
except AttributeError:
|
|
||||||
sys_path = script_evaluator.sys_path
|
|
||||||
else:
|
|
||||||
echo('\n##### Jedi environment: {0}\n\n'.format(environment))
|
|
||||||
echo(' - executable: {0}'.format(environment.executable))
|
|
||||||
try:
|
|
||||||
sys_path = environment.get_sys_path()
|
|
||||||
except Exception:
|
|
||||||
echo_error('ERROR: failed to get sys path from environment: {0}'.format(
|
|
||||||
format_exc_info()))
|
|
||||||
return
|
|
||||||
|
|
||||||
echo(' - sys_path:')
|
|
||||||
for p in sys_path:
|
|
||||||
echo(' - `{0}`'.format(p))
|
|
||||||
|
|
||||||
if environment:
|
|
||||||
echo('\n##### Known environments\n\n')
|
|
||||||
for environment in get_known_environments():
|
|
||||||
echo(' - {0} ({1})\n'.format(
|
|
||||||
environment,
|
|
||||||
environment.executable,
|
|
||||||
))
|
|
|
@ -1,5 +0,0 @@
|
||||||
[tool:pytest]
|
|
||||||
testpaths = test
|
|
||||||
|
|
||||||
[flake8]
|
|
||||||
max-line-length = 100
|
|
|
@ -1,11 +0,0 @@
|
||||||
function! CurrentBufferIsModule(module_name)
|
|
||||||
return EndsWith(bufname('%'), a:module_name.'.py')
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
function EndsWith(string, end)
|
|
||||||
let l:should = len(a:string) - strlen(a:end)
|
|
||||||
return l:should == stridx(a:string, a:end, should)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" vim: et:ts=4:sw=4
|
|
|
@ -1,65 +0,0 @@
|
||||||
"""Runs tests from ./vspec in vim-vspec."""
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
try:
|
|
||||||
from urllib.request import urlretrieve
|
|
||||||
except ImportError:
|
|
||||||
from urllib import urlretrieve
|
|
||||||
import zipfile
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
vspec_version = '1.9.0'
|
|
||||||
|
|
||||||
VSPEC_URL = 'https://github.com/kana/vim-vspec/archive/%s.zip' % vspec_version
|
|
||||||
root = os.path.dirname(os.path.dirname(__file__))
|
|
||||||
CACHE_FOLDER = os.path.join(root, 'build')
|
|
||||||
VSPEC_FOLDER = os.path.join(CACHE_FOLDER, 'vim-vspec-%s' % vspec_version)
|
|
||||||
VSPEC_RUNNER = os.path.join(VSPEC_FOLDER, 'bin/vspec')
|
|
||||||
TEST_DIR = os.path.join(root, 'test', 'vspec')
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='session')
|
|
||||||
def install_vspec():
|
|
||||||
if not os.path.isdir(CACHE_FOLDER):
|
|
||||||
os.mkdir(CACHE_FOLDER)
|
|
||||||
|
|
||||||
if not os.path.exists(VSPEC_FOLDER):
|
|
||||||
name, hdrs = urlretrieve(VSPEC_URL)
|
|
||||||
z = zipfile.ZipFile(name)
|
|
||||||
for n in z.namelist():
|
|
||||||
dest = os.path.join(CACHE_FOLDER, n)
|
|
||||||
destdir = os.path.dirname(dest)
|
|
||||||
if not os.path.isdir(destdir):
|
|
||||||
os.makedirs(destdir)
|
|
||||||
data = z.read(n)
|
|
||||||
if not os.path.isdir(dest):
|
|
||||||
with open(dest, 'wb') as f:
|
|
||||||
f.write(data)
|
|
||||||
z.close()
|
|
||||||
os.chmod(VSPEC_RUNNER, 0o777)
|
|
||||||
|
|
||||||
|
|
||||||
def get_vspec_tests():
|
|
||||||
for f in os.listdir(TEST_DIR):
|
|
||||||
yield os.path.relpath(os.path.join(TEST_DIR, f))
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('path', get_vspec_tests())
|
|
||||||
def test_integration(install_vspec, path):
|
|
||||||
output = subprocess.check_output(
|
|
||||||
[VSPEC_RUNNER, '.', VSPEC_FOLDER, os.path.relpath(path, root)],
|
|
||||||
cwd=root,
|
|
||||||
)
|
|
||||||
had_ok = False
|
|
||||||
for line in output.splitlines():
|
|
||||||
if (line.startswith(b'not ok') or
|
|
||||||
line.startswith(b'Error') or
|
|
||||||
line.startswith(b'Bail out!')):
|
|
||||||
pytest.fail(u"{0} failed:\n{1}".format(
|
|
||||||
path, output.decode('utf-8')), pytrace=False)
|
|
||||||
if not had_ok and line.startswith(b'ok'):
|
|
||||||
had_ok = True
|
|
||||||
if not had_ok:
|
|
||||||
pytest.fail(u"{0} failed: no 'ok' found:\n{1}".format(
|
|
||||||
path, output.decode('utf-8')), pytrace=False)
|
|
|
@ -1,8 +0,0 @@
|
||||||
" Minimal vimrc to use jedi-vim.
|
|
||||||
"
|
|
||||||
" Not used anywhere yet, but allows for easy testing.
|
|
||||||
let script_dir = fnamemodify(expand('<sfile>'), ':h:h')
|
|
||||||
let &runtimepath = script_dir.','.&runtimepath.','.script_dir.'/after'
|
|
||||||
|
|
||||||
syntax on
|
|
||||||
filetype plugin indent on
|
|
|
@ -1,29 +0,0 @@
|
||||||
source plugin/jedi.vim
|
|
||||||
source test/_utils.vim
|
|
||||||
|
|
||||||
describe 'simple:'
|
|
||||||
before
|
|
||||||
new
|
|
||||||
normal! ifoo
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
bd!
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'choose'
|
|
||||||
Expect g:jedi#environment_path == 'auto'
|
|
||||||
Expect bufname('%') == ''
|
|
||||||
|
|
||||||
JediChooseEnvironment
|
|
||||||
" A Python executable needs to be a few letters
|
|
||||||
Expect len(getline('.')) > 5
|
|
||||||
Expect bufname('%') == 'Hit Enter to Choose an Environment'
|
|
||||||
|
|
||||||
execute "normal \<CR>"
|
|
||||||
Expect g:jedi#environment_path != 'auto'
|
|
||||||
bd " TODO why is this necessary? There seems to be a random buffer.
|
|
||||||
Expect bufname('%') == ''
|
|
||||||
Expect getline('.') == 'foo'
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,131 +0,0 @@
|
||||||
let g:jedi#completions_command = 'X'
|
|
||||||
source plugin/jedi.vim
|
|
||||||
|
|
||||||
describe 'completions'
|
|
||||||
before
|
|
||||||
new
|
|
||||||
set filetype=python
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
" default
|
|
||||||
let g:jedi#popup_select_first = 1
|
|
||||||
bd!
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'longest in completeopt'
|
|
||||||
" This gets set up with Vim only on VimEnter.
|
|
||||||
if has('nvim')
|
|
||||||
Expect stridx(&completeopt, 'longest') > -1
|
|
||||||
else
|
|
||||||
Expect stridx(&completeopt, 'longest') == -1
|
|
||||||
doautocmd VimEnter
|
|
||||||
Expect stridx(&completeopt, 'longest') > -1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Do not use it for following tests.
|
|
||||||
set completeopt-=longest
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'no smart import by default'
|
|
||||||
exec "normal ifrom os "
|
|
||||||
Expect getline('.') == 'from os '
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'import'
|
|
||||||
" X is the completion command
|
|
||||||
normal oimporX
|
|
||||||
Expect getline('.') == 'import'
|
|
||||||
normal a subproX
|
|
||||||
Expect getline('.') == 'import subprocess'
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'exception'
|
|
||||||
normal oIndentationErrX
|
|
||||||
Expect getline('.') == 'IndentationError'
|
|
||||||
|
|
||||||
" Do not remap keys (".") here, otherwise this triggers completion in
|
|
||||||
" Neovim already.
|
|
||||||
normal! a().filena
|
|
||||||
|
|
||||||
normal aX
|
|
||||||
Expect getline('.') == 'IndentationError().filename'
|
|
||||||
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'
|
|
||||||
set completeopt+=longest
|
|
||||||
let g:jedi#popup_select_first = 0
|
|
||||||
execute "normal oraise impX\<C-n>"
|
|
||||||
|
|
||||||
Expect getline('.') == 'raise ImportError'
|
|
||||||
set completeopt-=longest
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'cycling through entries popup_select_first=1'
|
|
||||||
execute "normal oraise impX\<C-n>"
|
|
||||||
Expect getline('.') == 'raise ImportWarning'
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'cycling through entries popup_select_first=1 and longest'
|
|
||||||
set completeopt+=longest
|
|
||||||
execute "normal oraise impX"
|
|
||||||
Expect getline('.') == 'raise Import'
|
|
||||||
|
|
||||||
" With Neovim pumvisible() is 1 in jedi#complete_opened, which then
|
|
||||||
" triggers the <Down>. This is not the case with Vim.
|
|
||||||
if has('nvim')
|
|
||||||
execute "normal oraise impX\<C-n>"
|
|
||||||
Expect getline('.') == 'raise ImportWarning'
|
|
||||||
|
|
||||||
execute "normal oraise impX\<C-n>\<C-n>"
|
|
||||||
Expect getline('.') == 'raise imp'
|
|
||||||
else
|
|
||||||
execute "normal oraise impX\<C-n>"
|
|
||||||
Expect getline('.') == 'raise ImportError'
|
|
||||||
|
|
||||||
execute "normal oraise impX\<C-n>\<C-n>"
|
|
||||||
Expect getline('.') == 'raise ImportWarning'
|
|
||||||
endif
|
|
||||||
set completeopt-=longest
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'smart completions'
|
|
||||||
before
|
|
||||||
new
|
|
||||||
let g:jedi#smart_auto_mappings = 1
|
|
||||||
set filetype=python
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
" default
|
|
||||||
let g:jedi#smart_auto_mappings = 0
|
|
||||||
bd!
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'smart import'
|
|
||||||
exec "normal ifrom os "
|
|
||||||
Expect getline('.') == 'from os import '
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'no smart import after space'
|
|
||||||
exec "normal! ifrom os "
|
|
||||||
exec "normal a "
|
|
||||||
Expect getline('.') == 'from os '
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
" vim: et:ts=4:sw=4
|
|
|
@ -1,20 +0,0 @@
|
||||||
let g:jedi#completions_command = 'X'
|
|
||||||
let g:jedi#completions_enabled = 0
|
|
||||||
source plugin/jedi.vim
|
|
||||||
|
|
||||||
describe 'completions_disabled'
|
|
||||||
before
|
|
||||||
set filetype=python
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
try | %bwipeout! | catch | endtry
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'typing'
|
|
||||||
normal oraise ImportErrX
|
|
||||||
Expect getline('.') == 'raise ImportErrX'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
" vim: et:ts=4:sw=4
|
|
|
@ -1,34 +0,0 @@
|
||||||
source plugin/jedi.vim
|
|
||||||
|
|
||||||
describe 'documentation docstrings'
|
|
||||||
before
|
|
||||||
set filetype=python
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
try | %bwipeout! | catch | endtry
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'simple'
|
|
||||||
Expect maparg('K') == ':call jedi#show_documentation()<CR>'
|
|
||||||
put = 'ImportError'
|
|
||||||
normal GK
|
|
||||||
Expect bufname('%') == "__doc__"
|
|
||||||
Expect &filetype == 'rst'
|
|
||||||
let header = getline(1, 2)
|
|
||||||
Expect header[0] == "Docstring for class builtins.ImportError"
|
|
||||||
Expect header[1] == "========================================"
|
|
||||||
let content = join(getline(3, '$'), "\n")
|
|
||||||
Expect stridx(content, "Import can't find module") > 0
|
|
||||||
normal K
|
|
||||||
Expect bufname('%') == ''
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'no documentation'
|
|
||||||
put = 'x = 2'
|
|
||||||
normal o<ESC>GK
|
|
||||||
Expect bufname('%') == ''
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
" vim: et:ts=4:sw=4
|
|
|
@ -1,177 +0,0 @@
|
||||||
let mapleader = '\'
|
|
||||||
source plugin/jedi.vim
|
|
||||||
source test/_utils.vim
|
|
||||||
|
|
||||||
describe 'goto simple:'
|
|
||||||
before
|
|
||||||
new
|
|
||||||
set filetype=python
|
|
||||||
put =[
|
|
||||||
\ 'def a(): pass',
|
|
||||||
\ 'b = a',
|
|
||||||
\ 'c = b',
|
|
||||||
\ ]
|
|
||||||
normal! ggdd
|
|
||||||
normal! G$
|
|
||||||
Expect line('.') == 3
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
bd!
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'goto definitions'
|
|
||||||
normal \d
|
|
||||||
Expect line('.') == 2
|
|
||||||
Expect col('.') == 1
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'goto assignments'
|
|
||||||
normal \g
|
|
||||||
Expect line('.') == 2
|
|
||||||
Expect col('.') == 1
|
|
||||||
|
|
||||||
" cursor before `=` means that it stays there.
|
|
||||||
normal \g
|
|
||||||
Expect line('.') == 2
|
|
||||||
Expect col('.') == 1
|
|
||||||
|
|
||||||
" going to the last line changes it.
|
|
||||||
normal! $
|
|
||||||
normal \g
|
|
||||||
Expect line('.') == 1
|
|
||||||
Expect col('.') == 5
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
describe 'goto with tabs:'
|
|
||||||
before
|
|
||||||
set filetype=python
|
|
||||||
let g:jedi#use_tabs_not_buffers = 1
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
try | %bwipeout! | catch | endtry
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'follow import'
|
|
||||||
put = ['import subprocess', 'subprocess']
|
|
||||||
normal G\g
|
|
||||||
Expect getline('.') == 'import subprocess'
|
|
||||||
Expect line('.') == 2
|
|
||||||
Expect col('.') == 8
|
|
||||||
|
|
||||||
normal G\d
|
|
||||||
Expect CurrentBufferIsModule('subprocess') == 1
|
|
||||||
Expect line('.') == 1
|
|
||||||
Expect col('.') == 1
|
|
||||||
Expect tabpagenr('$') == 2
|
|
||||||
Expect winnr('$') == 1
|
|
||||||
bwipe
|
|
||||||
|
|
||||||
Expect tabpagenr('$') == 1
|
|
||||||
Expect bufname('%') == ''
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
describe 'goto with buffers'
|
|
||||||
before
|
|
||||||
set filetype=python
|
|
||||||
let g:jedi#use_tabs_not_buffers = 0
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
try | %bwipeout! | catch | endtry
|
|
||||||
set nohidden
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'no new tabs'
|
|
||||||
put = ['import os']
|
|
||||||
normal G$
|
|
||||||
call jedi#goto_assignments()
|
|
||||||
python3 jedi_vim.goto()
|
|
||||||
Expect CurrentBufferIsModule('os') == 0
|
|
||||||
" Without hidden, it's not possible to open a new buffer, when the old
|
|
||||||
" one is not saved.
|
|
||||||
set hidden
|
|
||||||
call jedi#goto_assignments()
|
|
||||||
Expect CurrentBufferIsModule('os') == 1
|
|
||||||
Expect winnr('$') == 1
|
|
||||||
Expect tabpagenr('$') == 1
|
|
||||||
Expect line('.') == 1
|
|
||||||
Expect col('.') == 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
describe 'goto with splits'
|
|
||||||
before
|
|
||||||
enew!
|
|
||||||
set filetype=python
|
|
||||||
let g:jedi#use_splits_not_buffers = 'left'
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
try | %bwipeout! | catch | endtry
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'follow import'
|
|
||||||
put = ['import subprocess', 'subprocess']
|
|
||||||
normal G\g
|
|
||||||
Expect getline('.') == 'import subprocess'
|
|
||||||
Expect line('.') == 2
|
|
||||||
Expect col('.') == 8
|
|
||||||
|
|
||||||
normal G\d
|
|
||||||
Expect CurrentBufferIsModule('subprocess') == 1
|
|
||||||
Expect line('.') == 1
|
|
||||||
Expect col('.') == 1
|
|
||||||
Expect winnr('$') == 2
|
|
||||||
wincmd l
|
|
||||||
Expect bufname('%') == ''
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
describe 'goto wildignore'
|
|
||||||
before
|
|
||||||
enew!
|
|
||||||
set filetype=python
|
|
||||||
set wildignore=*,with\ spaces,*.pyc
|
|
||||||
set hidden
|
|
||||||
let g:jedi#use_tag_stack = 1
|
|
||||||
let g:jedi#use_tabs_not_buffers = 0
|
|
||||||
" Need to use splits for code coverage in new_buffer()
|
|
||||||
let g:jedi#use_splits_not_buffers = 1
|
|
||||||
|
|
||||||
put = ['from subprocess import Popen', 'Popen']
|
|
||||||
Expect CurrentBufferIsModule('subprocess') == 0
|
|
||||||
normal G
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
try | %bwipeout! | catch | endtry
|
|
||||||
set wildignore&vim
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'restores wildignore'
|
|
||||||
let before = &wildignore
|
|
||||||
call jedi#goto()
|
|
||||||
Expect getline('.') =~ 'Popen'
|
|
||||||
Expect &wildignore == before
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'not using tagstack'
|
|
||||||
let g:jedi#use_tag_stack = 0
|
|
||||||
call jedi#goto()
|
|
||||||
Expect CurrentBufferIsModule('subprocess') == 1
|
|
||||||
Expect getline('.') =~ 'Popen'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
" vim: et:ts=4:sw=4
|
|
|
@ -1,13 +0,0 @@
|
||||||
source plugin/jedi.vim
|
|
||||||
|
|
||||||
describe 'JediDebugInfo'
|
|
||||||
it 'works'
|
|
||||||
redir @a | JediDebugInfo | redir END
|
|
||||||
let output = split(@a, '\n')
|
|
||||||
Expect output[0] == 'You should run this in a buffer with filetype "python".'
|
|
||||||
Expect output[1] == '#### Jedi-vim debug information'
|
|
||||||
Expect output[-1] == '</details>'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
" vim: et:ts=4:sw=4
|
|
|
@ -1,34 +0,0 @@
|
||||||
source plugin/jedi.vim
|
|
||||||
source test/_utils.vim
|
|
||||||
|
|
||||||
describe 'pyimport'
|
|
||||||
before
|
|
||||||
let g:jedi#use_tabs_not_buffers = 1
|
|
||||||
let g:jedi#project_path = 'autoload'
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
try | %bwipeout! | catch | endtry
|
|
||||||
unlet g:jedi#project_path
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'open_tab'
|
|
||||||
Pyimport os
|
|
||||||
Expect CurrentBufferIsModule('os') == 1
|
|
||||||
Pyimport subprocess
|
|
||||||
Expect CurrentBufferIsModule('subprocess') == 1
|
|
||||||
" the empty tab is sometimes also a tab
|
|
||||||
Expect tabpagenr('$') >= 2
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'completion'
|
|
||||||
" don't know how to test this directly
|
|
||||||
"execute "Pyimport subproc\<Tab>"
|
|
||||||
"Expect CurrentBufferIsModule('subprocess') == 1
|
|
||||||
|
|
||||||
Expect jedi#py_import_completions('subproc', 0, 0) == 'subprocess'
|
|
||||||
Expect jedi#py_import_completions('subprocess', 0, 0) == 'subprocess'
|
|
||||||
let g:comp = jedi#py_import_completions('sre_', 0, 0)
|
|
||||||
Expect g:comp == "sre_compile\nsre_constants\nsre_parse"
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,143 +0,0 @@
|
||||||
source plugin/jedi.vim
|
|
||||||
|
|
||||||
describe 'signatures'
|
|
||||||
before
|
|
||||||
enew
|
|
||||||
set filetype=python
|
|
||||||
end
|
|
||||||
|
|
||||||
after
|
|
||||||
try | %bwipeout! | catch | endtry
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'simple'
|
|
||||||
normal odef xyz(number): return
|
|
||||||
normal o
|
|
||||||
normal oxyz()
|
|
||||||
doautocmd CursorHoldI
|
|
||||||
Expect getline(3) == '?!?jedi=0, ?!? (*_*number*_*) ?!?jedi?!?'
|
|
||||||
|
|
||||||
doautocmd InsertLeave
|
|
||||||
Expect getline(3) == ''
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'multiple buffers'
|
|
||||||
set hidden
|
|
||||||
new
|
|
||||||
setfiletype python
|
|
||||||
redir => autocmds
|
|
||||||
autocmd jedi_call_signatures * <buffer>
|
|
||||||
redir END
|
|
||||||
Expect autocmds =~# 'jedi_call_signatures'
|
|
||||||
buffer #
|
|
||||||
redir => autocmds
|
|
||||||
autocmd jedi_call_signatures * <buffer>
|
|
||||||
redir END
|
|
||||||
Expect autocmds =~# 'jedi_call_signatures'
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'simple after CursorHoldI with only parenthesis'
|
|
||||||
noautocmd normal o
|
|
||||||
doautocmd CursorHoldI
|
|
||||||
noautocmd normal istaticmethod()
|
|
||||||
doautocmd CursorHoldI
|
|
||||||
Expect getline(1) == '?!?jedi=0, ?!? (*_*f: Callable[..., Any]*_*) ?!?jedi?!?'
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'highlights correct argument'
|
|
||||||
noautocmd normal o
|
|
||||||
doautocmd CursorHoldI
|
|
||||||
noautocmd normal iformat(42, "x")
|
|
||||||
" Move to x - highlights "x".
|
|
||||||
noautocmd normal 2h
|
|
||||||
doautocmd CursorHoldI
|
|
||||||
Expect getline(1) == '?!?jedi=0, ?!? (value: object, *_*format_spec: str=...*_*) ?!?jedi?!?'
|
|
||||||
" Move left to 42 - hightlights first argument ("value").
|
|
||||||
noautocmd normal 4h
|
|
||||||
doautocmd CursorHoldI
|
|
||||||
Expect getline(1) == '?!?jedi=0, ?!? (*_*value: object*_*, format_spec: str=...) ?!?jedi?!?'
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'no signature'
|
|
||||||
exe 'normal ostr '
|
|
||||||
python3 jedi_vim.show_call_signatures()
|
|
||||||
Expect getline(1, '$') == ['', 'str ']
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'signatures disabled'
|
|
||||||
let g:jedi#show_call_signatures = 0
|
|
||||||
|
|
||||||
exe 'normal ostr( '
|
|
||||||
python3 jedi_vim.show_call_signatures()
|
|
||||||
Expect getline(1, '$') == ['', 'str( ']
|
|
||||||
|
|
||||||
let g:jedi#show_call_signatures = 1
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'command line simple'
|
|
||||||
let g:jedi#show_call_signatures = 2
|
|
||||||
call jedi#configure_call_signatures()
|
|
||||||
|
|
||||||
exe 'normal ostaticmethod( '
|
|
||||||
redir => msg
|
|
||||||
python3 jedi_vim.show_call_signatures()
|
|
||||||
redir END
|
|
||||||
Expect msg == "\nstaticmethod(f: Callable[..., Any])"
|
|
||||||
|
|
||||||
redir => msg
|
|
||||||
doautocmd InsertLeave
|
|
||||||
redir END
|
|
||||||
Expect msg == "\n"
|
|
||||||
|
|
||||||
normal Sdef foo(a, b): pass
|
|
||||||
exe 'normal ofoo(a, b, c, '
|
|
||||||
redir => msg
|
|
||||||
python3 jedi_vim.show_call_signatures()
|
|
||||||
redir END
|
|
||||||
Expect msg == "\nfoo(a, b)"
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'command line truncation'
|
|
||||||
let g:jedi#show_call_signatures = 2
|
|
||||||
call jedi#configure_call_signatures()
|
|
||||||
|
|
||||||
function! Signature()
|
|
||||||
redir => msg
|
|
||||||
python3 jedi_vim.show_call_signatures()
|
|
||||||
redir END
|
|
||||||
return msg
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
let funcname = repeat('a', &columns - (30 + (&ruler ? 18 : 0)))
|
|
||||||
put = 'def '.funcname.'(arg1, arg2, arg3, a, b, c):'
|
|
||||||
put = ' pass'
|
|
||||||
execute "normal o\<BS>".funcname."( "
|
|
||||||
Expect Signature() == "\n".funcname."(arg1, …)"
|
|
||||||
|
|
||||||
exe 'normal sarg1, '
|
|
||||||
Expect Signature() == "\n".funcname."(…, arg2, …)"
|
|
||||||
|
|
||||||
exe 'normal sarg2, arg3, '
|
|
||||||
Expect Signature() == "\n".funcname."(…, a, b, c)"
|
|
||||||
|
|
||||||
exe 'normal sa, b, '
|
|
||||||
Expect Signature() == "\n".funcname."(…, c)"
|
|
||||||
|
|
||||||
g/^/d
|
|
||||||
put = 'def '.funcname.'('.repeat('b', 20).', arg2):'
|
|
||||||
put = ' pass'
|
|
||||||
execute "normal o\<BS>".funcname."( "
|
|
||||||
Expect Signature() == "\n".funcname."(…)"
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'command line no signature'
|
|
||||||
let g:jedi#show_call_signatures = 2
|
|
||||||
call jedi#configure_call_signatures()
|
|
||||||
|
|
||||||
exe 'normal ostr '
|
|
||||||
redir => msg
|
|
||||||
python3 jedi_vim.show_call_signatures()
|
|
||||||
redir END
|
|
||||||
Expect msg == "\n"
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1940,7 +1940,7 @@ syn keyword ngxDirectiveThirdParty srcache_default_expire
|
||||||
syn keyword ngxDirectiveThirdParty srcache_max_expire
|
syn keyword ngxDirectiveThirdParty srcache_max_expire
|
||||||
|
|
||||||
" SSSD Info Module <https://github.com/veruu/ngx_sssd_info>
|
" SSSD Info Module <https://github.com/veruu/ngx_sssd_info>
|
||||||
" Retrieves additional attributes from SSSD for current authentizated user
|
" Retrives additional attributes from SSSD for current authentizated user
|
||||||
syn keyword ngxDirectiveThirdParty sssd_info
|
syn keyword ngxDirectiveThirdParty sssd_info
|
||||||
syn keyword ngxDirectiveThirdParty sssd_info_output_to
|
syn keyword ngxDirectiveThirdParty sssd_info_output_to
|
||||||
syn keyword ngxDirectiveThirdParty sssd_info_groups
|
syn keyword ngxDirectiveThirdParty sssd_info_groups
|
||||||
|
|
|
@ -18,7 +18,7 @@ function! s:strip_white_space(l,r,line) abort
|
||||||
if l[-1:] ==# ' ' && stridx(a:line,l) == -1 && stridx(a:line,l[0:-2]) == 0
|
if l[-1:] ==# ' ' && stridx(a:line,l) == -1 && stridx(a:line,l[0:-2]) == 0
|
||||||
let l = l[:-2]
|
let l = l[:-2]
|
||||||
endif
|
endif
|
||||||
if r[0] ==# ' ' && a:line[-strlen(r):] != r && a:line[1-strlen(r):] == r[1:]
|
if r[0] ==# ' ' && (' ' . a:line)[-strlen(r)-1:] != r && a:line[-strlen(r):] == r[1:]
|
||||||
let r = r[1:]
|
let r = r[1:]
|
||||||
endif
|
endif
|
||||||
return [l, r]
|
return [l, r]
|
||||||
|
|
|
@ -470,7 +470,7 @@ function! s:GitCmd() abort
|
||||||
let string = strpart(string, len(arg))
|
let string = strpart(string, len(arg))
|
||||||
let arg = substitute(arg, '^\s\+', '', '')
|
let arg = substitute(arg, '^\s\+', '', '')
|
||||||
let arg = substitute(arg,
|
let arg = substitute(arg,
|
||||||
\ '\(' . dquote . '''\%(''''\|[^'']\)*''\|\\[' . s:fnameescape . ']\|^\\[>+-]\|!\d*\)\|' . s:expand,
|
\ '\(' . dquote . '''\%(''''\|[^'']\)*''\|\\[' . s:fnameescape . ']\|^\\[>+-]\|' . s:commit_expand . '\)\|' . s:expand,
|
||||||
\ '\=submatch(0)[0] ==# "\\" ? submatch(0)[1] : submatch(0)[1:-2]', 'g')
|
\ '\=submatch(0)[0] ==# "\\" ? submatch(0)[1] : submatch(0)[1:-2]', 'g')
|
||||||
call add(list, arg)
|
call add(list, arg)
|
||||||
endwhile
|
endwhile
|
||||||
|
@ -1958,6 +1958,7 @@ endfunction
|
||||||
let s:var = '\%(<\%(cword\|cWORD\|cexpr\|cfile\|sfile\|slnum\|afile\|abuf\|amatch' . (has('clientserver') ? '\|client' : '') . '\)>\|%\|#<\=\d\+\|##\=\)'
|
let s:var = '\%(<\%(cword\|cWORD\|cexpr\|cfile\|sfile\|slnum\|afile\|abuf\|amatch' . (has('clientserver') ? '\|client' : '') . '\)>\|%\|#<\=\d\+\|##\=\)'
|
||||||
let s:flag = '\%(:[p8~.htre]\|:g\=s\(.\).\{-\}\1.\{-\}\1\)'
|
let s:flag = '\%(:[p8~.htre]\|:g\=s\(.\).\{-\}\1.\{-\}\1\)'
|
||||||
let s:expand = '\%(\(' . s:var . '\)\(' . s:flag . '*\)\(:S\)\=\)'
|
let s:expand = '\%(\(' . s:var . '\)\(' . s:flag . '*\)\(:S\)\=\)'
|
||||||
|
let s:commit_expand = '!\\\@!#\=\d*\|!%'
|
||||||
|
|
||||||
function! s:BufName(var) abort
|
function! s:BufName(var) abort
|
||||||
if a:var ==# '%'
|
if a:var ==# '%'
|
||||||
|
@ -1978,8 +1979,8 @@ function! s:ExpandVar(other, var, flags, esc, ...) abort
|
||||||
return substitute(a:other[1:-2], "''", "'", "g")
|
return substitute(a:other[1:-2], "''", "'", "g")
|
||||||
elseif a:other =~# '^"'
|
elseif a:other =~# '^"'
|
||||||
return substitute(a:other[1:-2], '""', '"', "g")
|
return substitute(a:other[1:-2], '""', '"', "g")
|
||||||
elseif a:other =~# '^!'
|
elseif a:other =~# '^[!`]'
|
||||||
let buffer = s:BufName(len(a:other) > 1 ? '#'. a:other[1:-1] : '%')
|
let buffer = s:BufName(a:other =~# '[0-9#]' ? '#' . matchstr(a:other, '\d\+') : '%')
|
||||||
let owner = s:Owner(buffer)
|
let owner = s:Owner(buffer)
|
||||||
return len(owner) ? owner : '@'
|
return len(owner) ? owner : '@'
|
||||||
elseif a:other =~# '^\~[~.]$'
|
elseif a:other =~# '^\~[~.]$'
|
||||||
|
@ -2033,7 +2034,11 @@ function! s:ExpandVar(other, var, flags, esc, ...) abort
|
||||||
return join(files, "\1")
|
return join(files, "\1")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let s:fnameescape = " \t\n*?[{`$\\%#'\"|!<"
|
if has('win32')
|
||||||
|
let s:fnameescape = " \t\n*?`%#'\"|!<"
|
||||||
|
else
|
||||||
|
let s:fnameescape = " \t\n*?[{`$\\%#'\"|!<"
|
||||||
|
endif
|
||||||
|
|
||||||
function! s:Expand(rev, ...) abort
|
function! s:Expand(rev, ...) abort
|
||||||
if a:rev =~# '^>' && s:Slash(@%) =~# '^fugitive://' && empty(s:DirCommitFile(@%)[1])
|
if a:rev =~# '^>' && s:Slash(@%) =~# '^fugitive://' && empty(s:DirCommitFile(@%)[1])
|
||||||
|
@ -2060,13 +2065,13 @@ function! s:Expand(rev, ...) abort
|
||||||
let file = a:rev
|
let file = a:rev
|
||||||
endif
|
endif
|
||||||
return substitute(file,
|
return substitute(file,
|
||||||
\ '\(\\[' . s:fnameescape . ']\|^\\[>+-]\|!\d*\|^\~[~.]\)\|' . s:expand,
|
\ '\(\\[' . s:fnameescape . ']\|^\\[>+-]\|' . s:commit_expand . '\|^\~[~.]\)\|' . s:expand,
|
||||||
\ '\=tr(s:ExpandVar(submatch(1),submatch(2),submatch(3),"", a:0 ? a:1 : getcwd()), "\1", " ")', 'g')
|
\ '\=tr(s:ExpandVar(submatch(1),submatch(2),submatch(3),"", a:0 ? a:1 : getcwd()), "\1", " ")', 'g')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! fugitive#Expand(object) abort
|
function! fugitive#Expand(object) abort
|
||||||
return substitute(a:object,
|
return substitute(a:object,
|
||||||
\ '\(\\[' . s:fnameescape . ']\|^\\[>+-]\|!\d*\|^\~[~.]\)\|' . s:expand,
|
\ '\(\\[' . s:fnameescape . ']\|^\\[>+-]\|' . s:commit_expand . '\|^\~[~.]\)\|' . s:expand,
|
||||||
\ '\=tr(s:ExpandVar(submatch(1),submatch(2),submatch(3),submatch(5)), "\1", " ")', 'g')
|
\ '\=tr(s:ExpandVar(submatch(1),submatch(2),submatch(3),submatch(5)), "\1", " ")', 'g')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -2087,7 +2092,7 @@ function! s:SplitExpandChain(string, ...) abort
|
||||||
\ '\=s:DotRelative(s:Slash(simplify(getcwd() . "/" . submatch(0))), cwd)', '')
|
\ '\=s:DotRelative(s:Slash(simplify(getcwd() . "/" . submatch(0))), cwd)', '')
|
||||||
endif
|
endif
|
||||||
let arg = substitute(arg,
|
let arg = substitute(arg,
|
||||||
\ '\(' . dquote . '''\%(''''\|[^'']\)*''\|\\[' . s:fnameescape . ']\|^\\[>+-]\|!\d*\|^\~[~]\|^\~\w*\|\$\w\+\)\|' . s:expand,
|
\ '\(' . dquote . '''\%(''''\|[^'']\)*''\|\\[' . s:fnameescape . ']\|^\\[>+-]\|' . s:commit_expand . '\|^\~[~]\|^\~\w*\|\$\w\+\)\|' . s:expand,
|
||||||
\ '\=s:ExpandVar(submatch(1),submatch(2),submatch(3),submatch(5), cwd)', 'g')
|
\ '\=s:ExpandVar(submatch(1),submatch(2),submatch(3),submatch(5), cwd)', 'g')
|
||||||
call extend(list, split(arg, "\1", 1))
|
call extend(list, split(arg, "\1", 1))
|
||||||
if arg ==# '--'
|
if arg ==# '--'
|
||||||
|
|
|
@ -70,12 +70,10 @@ that are part of Git repositories).
|
||||||
O jump to patch or blob in new tab
|
O jump to patch or blob in new tab
|
||||||
p jump to patch or blob in preview window
|
p jump to patch or blob in preview window
|
||||||
- reblame at commit
|
- reblame at commit
|
||||||
~ reblame at commit~[count]
|
|
||||||
P reblame at commit^[count]
|
|
||||||
|
|
||||||
*g:fugitive_dynamic_colors*
|
*g:fugitive_dynamic_colors*
|
||||||
In the GUI or a 256 color terminal, commit hashes will
|
In the GUI or a 256 color terminal, commit hashes will
|
||||||
highlighted in different colors. To disable this:
|
be highlighted in different colors. To disable this:
|
||||||
>
|
>
|
||||||
let g:fugitive_dynamic_colors = 0
|
let g:fugitive_dynamic_colors = 0
|
||||||
<
|
<
|
||||||
|
|
|
@ -140,7 +140,7 @@ function! FugitiveExecute(args, ...) abort
|
||||||
return call('fugitive#Execute', [a:args] + a:000)
|
return call('fugitive#Execute', [a:args] + a:000)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FugitiveShellCommand() turns an array of arugments into a Git command string
|
" FugitiveShellCommand() turns an array of arguments into a Git command string
|
||||||
" which can be executed with functions like system() and commands like :!.
|
" which can be executed with functions like system() and commands like :!.
|
||||||
" Integer arguments will be treated as buffer numbers, and the appropriate
|
" Integer arguments will be treated as buffer numbers, and the appropriate
|
||||||
" relative path inserted in their place.
|
" relative path inserted in their place.
|
||||||
|
|
|
@ -501,18 +501,15 @@ endfunction
|
||||||
" Floating window: does not care where cursor is.
|
" Floating window: does not care where cursor is.
|
||||||
" Preview window: assumes cursor is in preview window.
|
" Preview window: assumes cursor is in preview window.
|
||||||
function! s:populate_hunk_preview_window(header, body)
|
function! s:populate_hunk_preview_window(header, body)
|
||||||
let body_length = len(a:body)
|
|
||||||
|
|
||||||
if g:gitgutter_preview_win_floating
|
if g:gitgutter_preview_win_floating
|
||||||
if exists('*nvim_open_win')
|
if exists('*nvim_open_win')
|
||||||
let height = min([body_length, g:gitgutter_floating_window_options.height])
|
|
||||||
|
|
||||||
" Assumes cursor is not in previewing window.
|
" Assumes cursor is not in previewing window.
|
||||||
call nvim_buf_set_var(winbufnr(s:winid), 'hunk_header', a:header)
|
call nvim_buf_set_var(winbufnr(s:winid), 'hunk_header', a:header)
|
||||||
|
|
||||||
let [_scrolloff, &scrolloff] = [&scrolloff, 0]
|
let [_scrolloff, &scrolloff] = [&scrolloff, 0]
|
||||||
|
|
||||||
let width = max(map(copy(a:body), 'strdisplaywidth(v:val)'))
|
let [width, height] = s:screen_lines(a:body)
|
||||||
|
let height = min([height, g:gitgutter_floating_window_options.height])
|
||||||
call nvim_win_set_width(s:winid, width)
|
call nvim_win_set_width(s:winid, width)
|
||||||
call nvim_win_set_height(s:winid, height)
|
call nvim_win_set_height(s:winid, height)
|
||||||
|
|
||||||
|
@ -548,9 +545,7 @@ function! s:populate_hunk_preview_window(header, body)
|
||||||
call setline(1, a:body)
|
call setline(1, a:body)
|
||||||
setlocal nomodified
|
setlocal nomodified
|
||||||
|
|
||||||
normal! G$
|
let [_, height] = s:screen_lines(a:body)
|
||||||
let hunk_height = max([body_length, winline()])
|
|
||||||
let height = min([hunk_height, &previewheight])
|
|
||||||
execute 'resize' height
|
execute 'resize' height
|
||||||
1
|
1
|
||||||
|
|
||||||
|
@ -565,6 +560,27 @@ function! s:populate_hunk_preview_window(header, body)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
" Calculates the number of columns and the number of screen lines the given
|
||||||
|
" array of lines will take up, taking account of wrapping.
|
||||||
|
function! s:screen_lines(lines)
|
||||||
|
let [_virtualedit, &virtualedit]=[&virtualedit, 'all']
|
||||||
|
let cursor = getcurpos()
|
||||||
|
normal! g$
|
||||||
|
let available_width = virtcol('.')
|
||||||
|
call setpos('.', cursor)
|
||||||
|
let &virtualedit=_virtualedit
|
||||||
|
let width = min([max(map(copy(a:lines), 'strdisplaywidth(v:val)')), available_width])
|
||||||
|
|
||||||
|
if exists('*reduce')
|
||||||
|
let height = reduce(a:lines, { acc, val -> acc + strdisplaywidth(val) / width + (strdisplaywidth(val) % width == 0 ? 0 : 1) }, 0)
|
||||||
|
else
|
||||||
|
let height = eval(join(map(copy(a:lines), 'strdisplaywidth(v:val) / width + (strdisplaywidth(v:val) % width == 0 ? 0 : 1)'), '+'))
|
||||||
|
endif
|
||||||
|
|
||||||
|
return [width, height]
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! s:enable_staging_from_hunk_preview_window()
|
function! s:enable_staging_from_hunk_preview_window()
|
||||||
augroup gitgutter_hunk_preview
|
augroup gitgutter_hunk_preview
|
||||||
autocmd!
|
autocmd!
|
||||||
|
|
|
@ -546,7 +546,7 @@ function! s:TableFormat()
|
||||||
let l:flags = (&gdefault ? '' : 'g')
|
let l:flags = (&gdefault ? '' : 'g')
|
||||||
execute 's/\(:\@<!-:\@!\|[^|:-]\)//e' . l:flags
|
execute 's/\(:\@<!-:\@!\|[^|:-]\)//e' . l:flags
|
||||||
execute 's/--/-/e' . l:flags
|
execute 's/--/-/e' . l:flags
|
||||||
Tabularize /|
|
Tabularize /\(\\\)\@<!|
|
||||||
" Move colons for alignment to left or right side of the cell.
|
" Move colons for alignment to left or right side of the cell.
|
||||||
execute 's/:\( \+\)|/\1:|/e' . l:flags
|
execute 's/:\( \+\)|/\1:|/e' . l:flags
|
||||||
execute 's/|\( \+\):/|:\1/e' . l:flags
|
execute 's/|\( \+\):/|:\1/e' . l:flags
|
||||||
|
|
|
@ -2,7 +2,7 @@ GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
diff-lcs (1.2.5)
|
diff-lcs (1.2.5)
|
||||||
rake (12.3.3)
|
rake (10.4.2)
|
||||||
rspec (3.4.0)
|
rspec (3.4.0)
|
||||||
rspec-core (~> 3.4.0)
|
rspec-core (~> 3.4.0)
|
||||||
rspec-expectations (~> 3.4.0)
|
rspec-expectations (~> 3.4.0)
|
||||||
|
|
|
@ -70,6 +70,13 @@ support:
|
||||||
git clone https://tpope.io/vim/surround.git
|
git clone https://tpope.io/vim/surround.git
|
||||||
vim -u NONE -c "helptags surround/doc" -c q
|
vim -u NONE -c "helptags surround/doc" -c q
|
||||||
|
|
||||||
|
## FAQ
|
||||||
|
|
||||||
|
> How do I surround without adding a space?
|
||||||
|
|
||||||
|
Only the opening brackets—`[`, `{`, and `(`—add a space. Use a closing
|
||||||
|
bracket, or the `b` (`(`) and `B` (`{`) aliases.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
See the contribution guidelines for
|
See the contribution guidelines for
|
||||||
|
|
|
@ -63,7 +63,6 @@ vim-indent-guides https://github.com/nathanaelkane/vim-indent-guides
|
||||||
mru.vim https://github.com/vim-scripts/mru.vim
|
mru.vim https://github.com/vim-scripts/mru.vim
|
||||||
editorconfig-vim https://github.com/editorconfig/editorconfig-vim
|
editorconfig-vim https://github.com/editorconfig/editorconfig-vim
|
||||||
dracula https://github.com/dracula/vim
|
dracula https://github.com/dracula/vim
|
||||||
jedi-vim https://github.com/davidhalter/jedi-vim
|
|
||||||
""".strip()
|
""".strip()
|
||||||
|
|
||||||
GITHUB_ZIP = "%s/archive/master.zip"
|
GITHUB_ZIP = "%s/archive/master.zip"
|
||||||
|
|
|
@ -186,14 +186,3 @@ let g:EditorConfig_exclude_patterns = ['fugitive://.*']
|
||||||
" Copy the link to the line of a Git repository to the clipboard
|
" Copy the link to the line of a Git repository to the clipboard
|
||||||
nnoremap <leader>v :.GBrowse!<CR>
|
nnoremap <leader>v :.GBrowse!<CR>
|
||||||
xnoremap <leader>v :GBrowse!<CR>
|
xnoremap <leader>v :GBrowse!<CR>
|
||||||
|
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
||||||
" => jedi-vim
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
||||||
let g:jedi#auto_vim_configuration = 0
|
|
||||||
let g:jedi#goto_assignments_command = "<leader>a"
|
|
||||||
let g:jedi#usages_command = "<leader>u"
|
|
||||||
let g:jedi#completions_command = "<C-Space>"
|
|
||||||
let g:jedi#rename_command = "<leader>r"
|
|
||||||
let g:jedi#popup_on_dot = 0
|
|
||||||
|
|
Loading…
Reference in New Issue