Add a fixer for Python for automatically adding blank lines before control statements

This commit is contained in:
w0rp 2017-05-22 12:59:40 +01:00
parent 4526018344
commit 1e72a7a130
3 changed files with 110 additions and 0 deletions

View File

@ -2,6 +2,11 @@
" Description: A registry of functions for fixing things. " Description: A registry of functions for fixing things.
let s:default_registry = { let s:default_registry = {
\ 'add_blank_lines_for_python_control_statements': {
\ 'function': 'ale#handlers#python#AddLinesBeforeControlStatements',
\ 'suggested_filetypes': ['python'],
\ 'description': 'Add blank lines before control statements.',
\ },
\ 'autopep8': { \ 'autopep8': {
\ 'function': 'ale#handlers#python#AutoPEP8', \ 'function': 'ale#handlers#python#AutoPEP8',
\ 'suggested_filetypes': ['python'], \ 'suggested_filetypes': ['python'],

View File

@ -36,6 +36,26 @@ function! ale#handlers#python#HandlePEP8Format(buffer, lines) abort
return l:output return l:output
endfunction endfunction
" Add blank lines before control statements.
function! ale#handlers#python#AddLinesBeforeControlStatements(buffer, lines) abort
let l:new_lines = []
let l:last_indent_size = 0
for l:line in a:lines
let l:indent_size = len(matchstr(l:line, '^ *'))
if l:indent_size <= l:last_indent_size
\&& match(l:line, '\v^ *(return|if|for|while|break|continue)') >= 0
call add(l:new_lines, '')
endif
call add(l:new_lines, l:line)
let l:last_indent_size = l:indent_size
endfor
return l:new_lines
endfunction
function! ale#handlers#python#AutoPEP8(buffer, lines) abort function! ale#handlers#python#AutoPEP8(buffer, lines) abort
return { return {
\ 'command': 'autopep8 -' \ 'command': 'autopep8 -'

View File

@ -0,0 +1,85 @@
Before:
Save g:ale_fixers
After:
Restore
Given python(Some Python without blank lines):
def foo():
return 1
def bar():
return 1
return 4
def bar():
if x:
pass
for l in x:
pass
for l in x:
pass
break
continue
elif x:
pass
while x:
pass
while x:
pass
else:
pass
if x:
pass
elif x:
pass
else:
pass
Execute(Blank lines should be added appropriately):
let g:ale_fixers = {'python': ['ale#handlers#python#AddLinesBeforeControlStatements']}
ALEFix
Expect python(Newlines should be added):
def foo():
return 1
def bar():
return 1
return 4
def bar():
if x:
pass
for l in x:
pass
for l in x:
pass
break
continue
elif x:
pass
while x:
pass
while x:
pass
else:
pass
if x:
pass
elif x:
pass
else:
pass