Skip to content

Commit

Permalink
Merge branch 'release/0.6.8'
Browse files Browse the repository at this point in the history
  • Loading branch information
klen committed Sep 6, 2012
2 parents 49ae47e + e1311f5 commit e4a72d7
Show file tree
Hide file tree
Showing 8 changed files with 232 additions and 50 deletions.
4 changes: 4 additions & 0 deletions Changelog.rst
@@ -1,6 +1,10 @@
Changelog
=========

## 2012-09-06 0.6.8
-------------------
* Add PEP8 indentation ":help 'pymode_indent'"

## 2012-08-15 0.6.7
-------------------
* Fix documentation. Thanks (c) bgrant;
Expand Down
14 changes: 8 additions & 6 deletions README.rst
Expand Up @@ -287,11 +287,11 @@ Default values: ::
" Autoremove unused whitespaces
let g:pymode_utils_whitespaces = 1

" Set default pymode python indent options
let g:pymode_options_indent = 1
" Enable pymode indentation
let g:pymode_indent = 1

" Set default pymode python other options
let g:pymode_options_other = 1
" Set default pymode python options
let g:pymode_options = 1


Syntax highlight
Expand Down Expand Up @@ -478,6 +478,10 @@ Copyright (C) 2012 Kirill Klenov (klen_)
Copyright (c) 2010 Dmitry Vasiliev
http://www.hlabs.spb.ru/vim/python.vim

**PEP8 VIM indentation**
Copyright (c) 2012 Hynek Schlawack <hs@ox.cx>
http://github.com/hynek/vim-python-pep8-indent


License
=======
Expand All @@ -488,8 +492,6 @@ If you like this plugin, you can send me postcard :)
My address is here: "Russia, 143401, Krasnogorsk, Shkolnaya 1-19" to "Kirill Klenov".
**Thanks for support!**

Version 0.6.5: I still haven't received any postcard, guys :(


.. _GNU lesser general public license: http://www.gnu.org/copyleft/lesser.html
.. _klen: http://klen.github.com/
Expand Down
14 changes: 14 additions & 0 deletions after/indent/python.vim
@@ -0,0 +1,14 @@
if pymode#Default('b:pymode_indent', 1) || !g:pymode_indent
finish
endif


setlocal nolisp
setlocal tabstop=4
setlocal softtabstop=4
setlocal shiftwidth=4
setlocal shiftround
setlocal expandtab
setlocal autoindent
setlocal indentexpr=pymode#indent#Indent(v:lnum)
setlocal indentkeys=!^F,o,O,<:>,0),0],0},=elif,=except
184 changes: 184 additions & 0 deletions autoload/pymode/indent.vim
@@ -0,0 +1,184 @@
" PEP8 compatible Python indent file
" Language: Python
" Maintainer: Hynek Schlawack <hs@ox.cx>
" Prev Maintainer: Eric Mc Sween <em@tomcom.de> (address invalid)
" Original Author: David Bustos <bustos@caltech.edu> (address invalid)
" Last Change: 2012-06-21
" License: Public Domainlet


function! pymode#indent#Indent(lnum)

" First line has indent 0
if a:lnum == 1
return 0
endif

" If we can find an open parenthesis/bracket/brace, line up with it.
call cursor(a:lnum, 1)
let parlnum = s:SearchParensPair()
if parlnum > 0
let parcol = col('.')
let closing_paren = match(getline(a:lnum), '^\s*[])}]') != -1
if match(getline(parlnum), '[([{]\s*$', parcol - 1) != -1
if closing_paren
return indent(parlnum)
else
return indent(parlnum) + &shiftwidth
endif
else
return parcol
endif
endif

" Examine this line
let thisline = getline(a:lnum)
let thisindent = indent(a:lnum)

" If the line starts with 'elif' or 'else', line up with 'if' or 'elif'
if thisline =~ '^\s*\(elif\|else\)\>'
let bslnum = s:BlockStarter(a:lnum, '^\s*\(if\|elif\)\>')
if bslnum > 0
return indent(bslnum)
else
return -1
endif
endif

" If the line starts with 'except' or 'finally', line up with 'try'
" or 'except'
if thisline =~ '^\s*\(except\|finally\)\>'
let bslnum = s:BlockStarter(a:lnum, '^\s*\(try\|except\)\>')
if bslnum > 0
return indent(bslnum)
else
return -1
endif
endif

" Examine previous line
let plnum = a:lnum - 1
let pline = getline(plnum)
let sslnum = s:StatementStart(plnum)

" If the previous line is blank, keep the same indentation
if pline =~ '^\s*$'
return -1
endif

" If this line is explicitly joined, try to find an indentation that looks
" good.
if pline =~ '\\$'
let compound_statement = '^\s*\(if\|while\|for\s.*\sin\|except\)\s*'
let maybe_indent = matchend(getline(sslnum), compound_statement)
if maybe_indent != -1
return maybe_indent
else
return indent(sslnum) + &sw * 2
endif
endif

" If the previous line ended with a colon and is not a comment, indent
" relative to statement start.
if pline =~ ':\s*$' && pline !~ '^\s*#'
return indent(sslnum) + &sw
endif

" If the previous line was a stop-execution statement or a pass
if getline(sslnum) =~ '^\s*\(break\|continue\|raise\|return\|pass\)\>'
" See if the user has already dedented
if indent(a:lnum) > indent(sslnum) - &sw
" If not, recommend one dedent
return indent(sslnum) - &sw
endif
" Otherwise, trust the user
return -1
endif

" In all other cases, line up with the start of the previous statement.
return indent(sslnum)
endfunction


" Find backwards the closest open parenthesis/bracket/brace.
function! s:SearchParensPair()
let line = line('.')
let col = col('.')

" Skip strings and comments and don't look too far
let skip = "line('.') < " . (line - 50) . " ? dummy :" .
\ 'synIDattr(synID(line("."), col("."), 0), "name") =~? ' .
\ '"string\\|comment"'

" Search for parentheses
call cursor(line, col)
let parlnum = searchpair('(', '', ')', 'bW', skip)
let parcol = col('.')

" Search for brackets
call cursor(line, col)
let par2lnum = searchpair('\[', '', '\]', 'bW', skip)
let par2col = col('.')

" Search for braces
call cursor(line, col)
let par3lnum = searchpair('{', '', '}', 'bW', skip)
let par3col = col('.')

" Get the closest match
if par2lnum > parlnum || (par2lnum == parlnum && par2col > parcol)
let parlnum = par2lnum
let parcol = par2col
endif
if par3lnum > parlnum || (par3lnum == parlnum && par3col > parcol)
let parlnum = par3lnum
let parcol = par3col
endif

" Put the cursor on the match
if parlnum > 0
call cursor(parlnum, parcol)
endif
return parlnum
endfunction


" Find the start of a multi-line statement
function! s:StatementStart(lnum)
let lnum = a:lnum
while 1
if getline(lnum - 1) =~ '\\$'
let lnum = lnum - 1
else
call cursor(lnum, 1)
let maybe_lnum = s:SearchParensPair()
if maybe_lnum < 1
return lnum
else
let lnum = maybe_lnum
endif
endif
endwhile
endfunction


" Find the block starter that matches the current line
function! s:BlockStarter(lnum, block_start_re)
let lnum = a:lnum
let maxindent = 10000 " whatever
while lnum > 1
let lnum = prevnonblank(lnum - 1)
if indent(lnum) < maxindent
if getline(lnum) =~ a:block_start_re
return lnum
else
let maxindent = indent(lnum)
" It's not worth going further if we reached the top level
if maxindent == 0
return -1
endif
endif
endif
endwhile
return -1
endfunction
31 changes: 10 additions & 21 deletions doc/pymode.txt
Expand Up @@ -6,7 +6,7 @@
(__) (__) (__) (_) (_)(_____)(_)\_) (_/\/\_)(_____)(____/(____) ~


Version: 0.6.7
Version: 0.6.8

==============================================================================
CONTENTS *Python-mode-contents*
Expand Down Expand Up @@ -100,10 +100,9 @@ PythonMode. These options should be set in your vimrc.

|'pymode_syntax'| Turns off the custom syntax highlighting

|'pymode_options_indent'| Set default pymode options for
python indentation
|'pymode_indent'| Enable/Disable pymode PEP8 indentation

|'pymode_options_other'| Set default pymode options for
|'pymode_options'| Set default pymode options for
python codding

|'pymode_motion'| Enable pymode motion stuff
Expand Down Expand Up @@ -346,24 +345,12 @@ If this option is set to 0 then the custom syntax highlighting will
not be used.

------------------------------------------------------------------------------
*'pymode_options_indent'*
*'pymode_indent'*
Values: 0 or 1.
Default: 1.

If this option is set to 1, pymode will enable the following options for python
buffers: >
If this option is set to 1, pymode will enable python indentation support

setlocal cinwords=if,elif,else,for,while,try,except,finally,def,class
setlocal cindent
setlocal tabstop=4
setlocal softtabstop=4
setlocal shiftwidth=4
setlocal shiftround
setlocal smartindent
setlocal smarttab
setlocal expandtab
setlocal autoindent
<
------------------------------------------------------------------------------
*'pymode_folding'*
Values: 0 or 1.
Expand All @@ -372,7 +359,7 @@ Default: 1.
If this option is set to 1, pymode will enable python-folding.

------------------------------------------------------------------------------
*'pymode_options_other'*
*'pymode_options'*
Values: 0 or 1.
Default: 1.

Expand Down Expand Up @@ -535,6 +522,10 @@ from `.vimrc` from your projects directories.
Copyright (c) 2010 Dmitry Vasiliev
http://www.hlabs.spb.ru/vim/python.vim

PEP8 VIM indentation
Copyright (c) 2012 Hynek Schlawack <hs@ox.cx>
http://github.com/hynek/vim-python-pep8-indent


==============================================================================
7. License ~
Expand All @@ -547,8 +538,6 @@ If you like this plugin, you can send me a postcard :)
My address is: "Russia, 143401, Krasnogorsk, Shkolnaya 1-19" to "Kirill Klenov".
Thanks for your support!

Version 0.6.5: I still haven't received any postcards, guys :(


------------------------------------------------------------------------------

Expand Down
16 changes: 1 addition & 15 deletions ftplugin/python/pymode.vim
Expand Up @@ -15,22 +15,8 @@ endif

" Options {{{

" Python indent options
if pymode#Option('options_indent')
setlocal cinwords=if,elif,else,for,while,try,except,finally,def,class
setlocal cindent
setlocal tabstop=4
setlocal softtabstop=4
setlocal shiftwidth=4
setlocal shiftround
setlocal smartindent
setlocal smarttab
setlocal expandtab
setlocal autoindent
endif

" Python other options
if pymode#Option('options_other')
if pymode#Option('options')
setlocal complete+=t
setlocal formatoptions-=t
if v:version > 702 && !&relativenumber
Expand Down
12 changes: 6 additions & 6 deletions plugin/pymode.vim
@@ -1,4 +1,4 @@
let g:pymode_version = "0.6.7"
let g:pymode_version = "0.6.8"

com! PymodeVersion echomsg "Current python-mode version: " . g:pymode_version

Expand Down Expand Up @@ -281,13 +281,13 @@ call pymode#Default("g:pymode_folding", 1)
" OPTION: g:pymode_syntax -- bool. Enable python-mode syntax for pyfiles.
call pymode#Default("g:pymode_syntax", 1)

" OPTION: g:pymode_indent -- bool. Enable/Disable pymode PEP8 indentation
call pymode#Default("g:pymode_indent", 1)

" OPTION: g:pymode_utils_whitespaces -- bool. Remove unused whitespaces on save
call pymode#Default("g:pymode_utils_whitespaces", 1)

" OPTION: g:pymode_options_indent -- bool. To set indent options.
call pymode#Default("g:pymode_options_indent", 1)

" OPTION: g:pymode_options_other -- bool. To set other options.
call pymode#Default("g:pymode_options_other", 1)
" OPTION: g:pymode_options -- bool. To set some python options.
call pymode#Default("g:pymode_options", 1)

" vim: fdm=marker:fdl=0
7 changes: 5 additions & 2 deletions pylibs/autopep8.py
Expand Up @@ -49,7 +49,7 @@
pep8 = None


__version__ = '0.7.3'
__version__ = '0.8'


PEP8_BIN = 'pep8'
Expand Down Expand Up @@ -1580,4 +1580,7 @@ def main():


if __name__ == '__main__':
sys.exit(main())
try:
sys.exit(main())
except KeyboardInterrupt:
sys.exit(1)

0 comments on commit e4a72d7

Please sign in to comment.