Version 12 (modified by pulkomandy, 9 years ago) (diff)

Update the regexps with more finetuned ones (avoids some false positives and checks some more things), and detailed the help text on how to use it.

Here is a small script that will detect some guideline violations for vim. I put it in my .vimrc and it highlight all the errors it can find in all opened files. I'd like to know if you made improvements on it.

:fu FuncHaikuCheck()
		call matchadd('Search', '\%>80v.\+', -1) " line with more than 80 chars
	call matchadd('Search', '0\s* \s*', -1)        " probably wrong indenting
	call matchadd('Search', '\(for\|if\|select\|while\)(', -1)
		"keyword without space after it
	call matchadd('Search', '[a-zA-Z0-9][,=>+\-*;][a-zA-Z0-9]', -1)
		"operator without space around it (without false positive on
	call matchadd('Search', '^[^#].*[^<][a-zA-Z0-9]*/[a-zA-Z0-9]', -1)
		"operator without space around it (without false positive on
		"#include <dir/file.h>)
	call matchadd('Search', '^[^/]\{2}.*[^*][=/+\- ]$', -1)
		"operator at end of line (without false positives on /* and */, nor
	call matchadd('Search', '\s$', -1) "Spaces at end of line
	call matchadd('Search', ',\S', -1) " Missing space after comma

Calling the scrip

The obvious way to enable the script is to do it by hand :

:call FuncHaikuCheck()

It is also possible to make it run on every opened file (this is a bit annoying when using vim for something else than Haiku or C++ files)

" autocmd that will set up the w:created variable (vim tip 1598)
" so we can run the check only once per window
autocmd VimEnter * autocmd WinEnter * let w:created=1

" call the function on all opened files
autocmd WinEnter * if !exists('w:created') | call FuncHaikuCheck() | endif
autocmd BufWinEnter * call FuncHaikuCheck()

The last option is to define a keyboard shortcut to enable it (control+F3 in this example) :

map <C-F3> :call FuncHaikuCheck()<CR>

These rules have been ported to a standalone python program see the Style Checker Tools paragraph in the Haiku coding guidelines and src/tools/checkstyle/