Commits

arsooy committed 4148d28

Addition of pylint.vim

Comments (0)

Files changed (2)

vim/.vim/filetype.vim

-autocmd BufRead,BufNewFile *.mako        set filetype=mako
+autocmd BufRead,BufNewFile *.mako       set filetype=mako
 
 " I have to deal with fpc programs every now and then, so ..
 autocmd BufRead,BufNewFile *.pp         set filetype=pascal

vim/.vim/ftplugin/python/pylint.vim

+" Vim compiler file for Python
+" Compiler:     Style checking tool for Python
+" Maintainer:   Oleksandr Tymoshenko <gonzo@univ.kiev.ua>
+" Last Change:  2009 Apr 19
+" Version:      0.5
+" Contributors:
+"     Artur Wroblewski
+"     Menno
+"
+" Installation:
+"   Drop pylint.vim in ~/.vim/compiler directory. Ensure that your PATH
+"   environment variable includes the path to 'pylint' executable.
+"
+"   Add the following line to the autocmd section of .vimrc
+"
+"      autocmd FileType python compiler pylint
+"
+" Usage:
+"   Pylint is called after a buffer with Python code is saved. QuickFix
+"   window is opened to show errors, warnings and hints provided by Pylint.
+"   Code rate calculated by Pylint is displayed at the bottom of the
+"   window.
+"
+"   Above is realized with :Pylint command. To disable calling Pylint every
+"   time a buffer is saved put into .vimrc file
+"
+"       let g:pylint_onwrite = 0
+"
+"   Displaying code rate calculated by Pylint can be avoided by setting
+"
+"       let g:pylint_show_rate = 0
+"
+"   Openning of QuickFix window can be disabled with
+"
+"       let g:pylint_cwindow = 0
+"
+"   Of course, standard :make command can be used as in case of every
+"   other compiler.
+"
+
+
+if exists('current_compiler')
+  finish
+endif
+let current_compiler = 'pylint'
+
+if !exists('g:pylint_onwrite')
+    let g:pylint_onwrite = 0
+endif
+
+if !exists('g:pylint_show_rate')
+    let g:pylint_show_rate = 1
+endif
+
+if !exists('g:pylint_cwindow')
+    let g:pylint_cwindow = 1
+endif
+
+if exists(':Pylint') != 2
+    command Pylint :call Pylint(0)
+endif
+
+if exists(":CompilerSet") != 2          " older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+" We should echo filename because pylint truncates .py
+" If someone know better way - let me know :)
+CompilerSet makeprg=(echo\ '[%]';\ pylint\ -r\ y\ %)
+
+" We could omit end of file-entry, there is only one file
+" %+I... - include code rating information
+" %-G... - remove all remaining report lines from quickfix buffer
+CompilerSet efm=%+P[%f],%t:\ %#%l:%m,%Z,%+IYour\ code%m,%Z,%-G%.%#
+
+if g:pylint_onwrite
+    augroup python
+        au!
+        au BufWritePost * call Pylint(1)
+    augroup end
+endif
+
+function! Pylint(writing)
+    if !a:writing && &modified
+        " Save before running
+        write
+    endif
+
+    if has('win32') || has('win16') || has('win95') || has('win64')
+        setlocal sp=>%s
+    else
+        setlocal sp=>%s\ 2>&1
+    endif
+
+    " If check is executed by buffer write - do not jump to first error
+    if !a:writing
+        silent make
+    else
+        silent make!
+    endif
+
+    if g:pylint_cwindow
+        cwindow
+    endif
+
+    call PylintEvaluation()
+
+    if g:pylint_show_rate
+        echon 'code rate: ' b:pylint_rate ', prev: ' b:pylint_prev_rate
+    endif
+endfunction
+
+function! PylintEvaluation()
+    let l:list = getqflist()
+    let b:pylint_rate = '0.00'
+    let b:pylint_prev_rate = '0.00'
+    for l:item in l:list
+        if l:item.type == 'I' && l:item.text =~ 'Your code has been rated'
+            let l:re_rate = '\(-\?[0-9]\{1,2\}\.[0-9]\{2\}\)/'
+            let b:pylint_rate = substitute(l:item.text, '.*rated at '.l:re_rate.'.*', '\1', 'g')
+            " Only if there is information about previous run
+            if l:item.text =~ 'previous run: '
+                let b:pylint_prev_rate = substitute(l:item.text, '.*previous run: '.l:re_rate.'.*', '\1', 'g')
+            endif
+        endif
+    endfor
+endfunction