" Vim compiler file for Python " Compiler: Style checking tool for Python " Maintainer: Oleksandr Tymoshenko " 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 = 1 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 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