mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 03:48:18 +00:00
@@ -3,13 +3,19 @@
|
||||
let s:keepcpo= &cpo
|
||||
set cpo&vim
|
||||
|
||||
" searchpair() can be slow, limit the time to 150 msec or what is put in
|
||||
" g:pyindent_searchpair_timeout
|
||||
let s:searchpair_timeout = get(g:, 'pyindent_searchpair_timeout', 150)
|
||||
|
||||
" Identing inside parentheses can be very slow, regardless of the searchpair()
|
||||
" timeout, so let the user disable this feature if he doesn't need it
|
||||
let s:disable_parentheses_indenting = get(g:, 'pyindent_disable_parentheses_indenting', v:false)
|
||||
" need to inspect some old g:pyindent_* variables to be backward compatible
|
||||
let g:python_indent = extend(get(g:, 'python_indent', {}), #{
|
||||
\ closed_paren_align_last_line: v:true,
|
||||
\ open_paren: get(g:, 'pyindent_open_paren', 'shiftwidth() * 2'),
|
||||
\ nested_paren: get(g:, 'pyindent_nested_paren', 'shiftwidth()'),
|
||||
\ continue: get(g:, 'pyindent_continue', 'shiftwidth() * 2'),
|
||||
"\ searchpair() can be slow, limit the time to 150 msec or what is put in
|
||||
"\ g:python_indent.searchpair_timeout
|
||||
\ searchpair_timeout: get(g:, 'pyindent_searchpair_timeout', 150),
|
||||
"\ Identing inside parentheses can be very slow, regardless of the searchpair()
|
||||
"\ timeout, so let the user disable this feature if he doesn't need it
|
||||
\ disable_parentheses_indenting: get(g:, 'pyindent_disable_parentheses_indenting', v:false),
|
||||
\ }, 'keep')
|
||||
|
||||
let s:maxoff = 50 " maximum number of lines to look backwards for ()
|
||||
|
||||
@@ -18,7 +24,7 @@ function s:SearchBracket(fromlnum, flags)
|
||||
\ {-> synstack('.', col('.'))
|
||||
\ ->map({_, id -> id->synIDattr('name')})
|
||||
\ ->match('\%(Comment\|Todo\|String\)$') >= 0},
|
||||
\ [0, a:fromlnum - s:maxoff]->max(), s:searchpair_timeout)
|
||||
\ [0, a:fromlnum - s:maxoff]->max(), g:python_indent.searchpair_timeout)
|
||||
endfunction
|
||||
|
||||
" See if the specified line is already user-dedented from the expected value.
|
||||
@@ -38,7 +44,7 @@ function python#GetIndent(lnum, ...)
|
||||
if a:lnum > 1 && getline(a:lnum - 2) =~ '\\$'
|
||||
return indent(a:lnum - 1)
|
||||
endif
|
||||
return indent(a:lnum - 1) + (exists("g:pyindent_continue") ? eval(g:pyindent_continue) : (shiftwidth() * 2))
|
||||
return indent(a:lnum - 1) + get(g:, 'pyindent_continue', g:python_indent.continue)->eval()
|
||||
endif
|
||||
|
||||
" If the start of the line is in a string don't change the indent.
|
||||
@@ -55,7 +61,7 @@ function python#GetIndent(lnum, ...)
|
||||
return 0
|
||||
endif
|
||||
|
||||
if s:disable_parentheses_indenting == 1
|
||||
if g:python_indent.disable_parentheses_indenting == 1
|
||||
let plindent = indent(plnum)
|
||||
let plnumstart = plnum
|
||||
else
|
||||
@@ -70,8 +76,12 @@ function python#GetIndent(lnum, ...)
|
||||
" 100, 200, 300, 400)
|
||||
call cursor(a:lnum, 1)
|
||||
let [parlnum, parcol] = s:SearchBracket(a:lnum, 'nbW')
|
||||
if parlnum > 0 && parcol != col([parlnum, '$']) - 1
|
||||
return parcol
|
||||
if parlnum > 0
|
||||
if parcol != col([parlnum, '$']) - 1
|
||||
return parcol
|
||||
elseif getline(a:lnum) =~ '^\s*[])}]' && !g:python_indent.closed_paren_align_last_line
|
||||
return indent(parlnum)
|
||||
endif
|
||||
endif
|
||||
|
||||
call cursor(plnum, 1)
|
||||
@@ -123,9 +133,11 @@ function python#GetIndent(lnum, ...)
|
||||
" When the start is inside parenthesis, only indent one 'shiftwidth'.
|
||||
let [pp, _] = s:SearchBracket(a:lnum, 'bW')
|
||||
if pp > 0
|
||||
return indent(plnum) + (exists("g:pyindent_nested_paren") ? eval(g:pyindent_nested_paren) : shiftwidth())
|
||||
return indent(plnum)
|
||||
\ + get(g:, 'pyindent_nested_paren', g:python_indent.nested_paren)->eval()
|
||||
endif
|
||||
return indent(plnum) + (exists("g:pyindent_open_paren") ? eval(g:pyindent_open_paren) : (shiftwidth() * 2))
|
||||
return indent(plnum)
|
||||
\ + get(g:, 'pyindent_open_paren', g:python_indent.open_paren)->eval()
|
||||
endif
|
||||
if plnumstart == p
|
||||
return indent(plnum)
|
||||
|
Reference in New Issue
Block a user