Skip to content

Commit

Permalink
Improve indent for try statement
Browse files Browse the repository at this point in the history
  • Loading branch information
hattya committed Jul 17, 2023
1 parent 06c33bc commit f0fedf6
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 7 deletions.
6 changes: 4 additions & 2 deletions indent/python.vim
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
" Vim indent file
" Language: Python
" Author: Akinori Hattori <hattya@gmail.com>
" Last Change: 2023-07-13
" Last Change: 2023-07-17
" License: MIT License

if exists('b:did_indent')
Expand Down Expand Up @@ -135,6 +135,8 @@ function! GetPEP8PythonIndent() abort
let kw = s:matchkw(ll)
if kw ==# ''
let ind += s:cont()
elseif kw =~# 'except'
let ind += len(substitute(kw, '\s\+', '', '')) + 1
else
let ind += len(substitute(kw, '\s\+', ' ', '')) + 1
endif
Expand Down Expand Up @@ -181,7 +183,7 @@ function! s:is_compound_stmt(str, ...) abort
endfunction

function! s:matchkw(str) abort
return matchstr(a:str, '\v^\s*\zs<%(assert|del|return|yield%(\s+from)=|raise|import|from|global|nonlocal|if|elif|while|for|except|with|match|case|def|class)>')
return matchstr(a:str, '\v^\s*\zs<%(%(assert|del|return|yield%(\s+from)=|raise|import|from|global|nonlocal|if|elif|while|for|with|match|case|def|class)>|except>%(\s*\*)=)')
endfunction

function! s:cont() abort
Expand Down
99 changes: 94 additions & 5 deletions test/indent.vimspec
Original file line number Diff line number Diff line change
Expand Up @@ -691,66 +691,109 @@ Describe filetype indent
Describe try statement
It aligns with left brackets
let in = "try:\<CR>...\<CR>"
let in .= "except (TypeError,\<CR>ValueError):"
let in .= "except (TypeError,\<CR>ValueError):\<CR>pass\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except* (TypeError,\<CR>ValueError):"
let out = [
\ 'try:',
\ ' ...',
\ 'except (TypeError,',
\ ' ValueError):',
\ ' pass',
\ 'try:',
\ ' ...',
\ 'except* (TypeError,',
\ ' ValueError):',
\]
Assert Equals(Insert(in), Buffer(out))
End

It increases the indent level by 2
let b:python_indent_multiline_statement = 1
let in = "try:\<CR>...\<CR>"
let in .= "except (TypeError,\<CR>ValueError):"
let in .= "except (TypeError,\<CR>ValueError):\<CR>pass\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except* (TypeError,\<CR>ValueError):"
let out = [
\ 'try:',
\ ' ...',
\ 'except (TypeError,',
\ ' ValueError):',
\ ' pass',
\ 'try:',
\ ' ...',
\ 'except* (TypeError,',
\ ' ValueError):',
\]
Assert Equals(Insert(in), Buffer(out))
End

It increases the indent level (hanging indent)
let in = "try:\<CR>...\<CR>"
let in .= "except (\<CR>TypeError,\<CR>ValueError\<CR>):"
let in .= "except (\<CR>TypeError,\<CR>ValueError\<CR>):\<CR>pass\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except* (\<CR>TypeError,\<CR>ValueError\<CR>):"
let out = [
\ 'try:',
\ ' ...',
\ 'except (',
\ ' TypeError,',
\ ' ValueError',
\ '):',
\ ' pass',
\ 'try:',
\ ' ...',
\ 'except* (',
\ ' TypeError,',
\ ' ValueError',
\ '):',
\]
Assert Equals(Insert(in), Buffer(out))
End

It increases the indent level by 2 (hanging indent)
let b:python_indent_multiline_statement = 1
let in = "try:\<CR>...\<CR>"
let in .= "except (\<CR>TypeError,\<CR>ValueError\<CR>):"
let in .= "except (\<CR>TypeError,\<CR>ValueError\<CR>):\<CR>pass\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except* (\<CR>TypeError,\<CR>ValueError\<CR>):"
let out = [
\ 'try:',
\ ' ...',
\ 'except (',
\ ' TypeError,',
\ ' ValueError',
\ '):',
\ ' pass',
\ 'try:',
\ ' ...',
\ 'except* (',
\ ' TypeError,',
\ ' ValueError',
\ '):',
\]
Assert Equals(Insert(in), Buffer(out))
End

It increases the indent level (line continueation)
let in = "try:\<CR>...\<CR>"
let in .= "except TypeError, \\\<CR>ValueError:"
let in .= "except TypeError, \\\<CR>ValueError:\<CR>pass\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except* TypeError, \\\<CR>ValueError:\<CR>pass\<CR>"
let in .= "except * \\\<CR>OSError:"
let out = [
\ 'try:',
\ ' ...',
\ 'except TypeError, \',
\ ' ValueError:',
\ ' pass',
\ 'try:',
\ ' ...',
\ 'except* TypeError, \',
\ ' ValueError:',
\ ' pass',
\ 'except * \',
\ ' OSError:',
\]
Assert Equals(Insert(in), Buffer(out))
End
Expand All @@ -771,10 +814,29 @@ Describe filetype indent
Assert Equals(Insert(in), Buffer(out))
End

It indents the except* clause
let in = "try:\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except* TypeError:\<CR>pass\<CR>"
let in .= "except* ValueError:"
let out = [
\ 'try:',
\ ' try:',
\ ' ...',
\ ' except* TypeError:',
\ ' pass',
\ ' except* ValueError:',
\]
Assert Equals(Insert(in), Buffer(out))
End

It indents the else clause
let in = "try:\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except TypeError:\<CR>pass\<CR>"
let in .= "else:\<CR>pass\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except* TypeError:\<CR>pass\<CR>"
let in .= "else:"
let out = [
\ 'try:',
Expand All @@ -783,6 +845,12 @@ Describe filetype indent
\ ' except TypeError:',
\ ' pass',
\ ' else:',
\ ' pass',
\ ' try:',
\ ' ...',
\ ' except* TypeError:',
\ ' pass',
\ ' else:',
\]
Assert Equals(Insert(in), Buffer(out))
End
Expand All @@ -792,10 +860,17 @@ Describe filetype indent
let in .= "try:\<CR>...\<CR>"
let in .= "except TypeError:\<CR>pass\<CR>"
let in .= "finally:\<CR>pass\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except* TypeError:\<CR>pass\<CR>"
let in .= "finally:\<CR>pass\<CR>"
let in .= "finally:\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except ValueError:\<CR>pass\<CR>"
let in .= "else:\<CR>pass\<CR>"
let in .= "finally:\<CR>pass\<CR>"
let in .= "try:\<CR>...\<CR>"
let in .= "except* ValueError:\<CR>pass\<CR>"
let in .= "else:\<CR>pass\<CR>"
let in .= "finally:"
let out = [
\ 'try:',
Expand All @@ -805,6 +880,12 @@ Describe filetype indent
\ ' pass',
\ ' finally:',
\ ' pass',
\ ' try:',
\ ' ...',
\ ' except* TypeError:',
\ ' pass',
\ ' finally:',
\ ' pass',
\ 'finally:',
\ ' try:',
\ ' ...',
Expand All @@ -813,6 +894,14 @@ Describe filetype indent
\ ' else:',
\ ' pass',
\ ' finally:',
\ ' pass',
\ ' try:',
\ ' ...',
\ ' except* ValueError:',
\ ' pass',
\ ' else:',
\ ' pass',
\ ' finally:',
\]
Assert Equals(Insert(in), Buffer(out))
End
Expand Down

0 comments on commit f0fedf6

Please sign in to comment.