Skip to content

Commit

Permalink
Bugfix: python add blank lines (#1944)
Browse files Browse the repository at this point in the history
* Don't add newlines when not a control statement for Python
* Add test for accidental newline fix
* Add docstring detection to avoid adding unnecessarily newlines
* Add tests for docstring detection
  • Loading branch information
digitalresistor authored and w0rp committed Sep 25, 2018
1 parent aa5c82b commit 8e7e810
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 1 deletion.
17 changes: 16 additions & 1 deletion autoload/ale/fixers/generic_python.vim
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,28 @@ function! ale#fixers#generic_python#AddLinesBeforeControlStatements(buffer, line
let l:new_lines = []
let l:last_indent_size = 0
let l:last_line_is_blank = 0
let l:in_docstring = 0

for l:line in a:lines
let l:indent_size = len(matchstr(l:line, '^ *'))

if !l:in_docstring
" Make sure it is not just a single line docstring and then verify
" it's starting a new docstring
if match(l:line, '\v^ *("""|'''''').*("""|'''''')') == -1
\&& match(l:line, '\v^ *("""|'''''')') >= 0
let l:in_docstring = 1
endif
else
if match(l:line, '\v^ *.*("""|'''''')') >= 0
let l:in_docstring = 0
endif
endif

if !l:last_line_is_blank
\&& !l:in_docstring
\&& l:indent_size <= l:last_indent_size
\&& match(l:line, '\v^ *(return|if|for|while|break|continue)') >= 0
\&& match(l:line, '\v^ *(return|if|for|while|break|continue)(\(| |$)') >= 0
call add(l:new_lines, '')
endif

Expand Down
56 changes: 56 additions & 0 deletions test/fixers/test_python_add_blank_lines_fixer.vader
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,22 @@ After:

Given python(Some Python without blank lines):
def foo():
""" This is a simple test docstring """
return 1


def bar():
'''This is another simple test docstring'''
return 1
return 4


def bar():
"""
This is a multi-line
docstring
"""

if x:
pass
for l in x:
Expand Down Expand Up @@ -44,16 +51,25 @@ Execute(Blank lines should be added appropriately):

Expect python(Newlines should be added):
def foo():
""" This is a simple test docstring """

return 1


def bar():
'''This is another simple test docstring'''

return 1

return 4


def bar():
"""
This is a multi-line
docstring
"""

if x:
pass

Expand Down Expand Up @@ -109,3 +125,43 @@ Expect python(extra newlines shouldn't be added to the main block):

if __name__ == '__main__':
main()


Given python(A file with variables/docstring that start with a control statement):
def some():
"""
This is a docstring that contains an
break control statement and also contains a
return something funny.
"""

continue_some_var = True
forward_something = False

if (
continue_some_var and
forwarded_something
):
return True


Execute(Fix the file):
let g:ale_fixers = {'python': ['add_blank_lines_for_python_control_statements']}
ALEFix

Expect python(Extra new lines are not added to the file):
def some():
"""
This is a docstring that contains an
break control statement and also contains a
return something funny.
"""

continue_some_var = True
forward_something = False

if (
continue_some_var and
forwarded_something
):
return True

0 comments on commit 8e7e810

Please sign in to comment.