Updated plugins

This commit is contained in:
amix 2015-01-18 12:58:28 +00:00
parent c3ba0f3c06
commit e7a01094b6
274 changed files with 4547 additions and 3075 deletions

1
.gitignore vendored
View file

@ -5,3 +5,4 @@ sources_forked/yankring/doc/tags
sources_non_forked/tlib/doc/tags sources_non_forked/tlib/doc/tags
my_configs.vim my_configs.vim
tags tags
.DS_Store

View file

@ -1,4 +1,4 @@
" Copyright (c) 2013 Junegunn Choi " Copyright (c) 2014 Junegunn Choi
" "
" MIT License " MIT License
" "
@ -33,13 +33,12 @@ function! s:set_color(group, attr, color)
execute printf("hi %s %s%s=%s", a:group, gui ? 'gui' : 'cterm', a:attr, a:color) execute printf("hi %s %s%s=%s", a:group, gui ? 'gui' : 'cterm', a:attr, a:color)
endfunction endfunction
function! s:blank() function! s:blank(repel)
let main = bufwinnr(t:goyo_master) if bufwinnr(t:goyo_pads.r) <= bufwinnr(t:goyo_pads.l) + 1
if main != -1 \ || bufwinnr(t:goyo_pads.b) <= bufwinnr(t:goyo_pads.t) + 3
execute main . 'wincmd w'
else
call s:goyo_off() call s:goyo_off()
endif endif
execute 'wincmd' a:repel
endfunction endfunction
function! s:init_pad(command) function! s:init_pad(command)
@ -59,12 +58,12 @@ function! s:init_pad(command)
return bufnr return bufnr
endfunction endfunction
function! s:setup_pad(bufnr, vert, size) function! s:setup_pad(bufnr, vert, size, repel)
let win = bufwinnr(a:bufnr) let win = bufwinnr(a:bufnr)
execute win . 'wincmd w' execute win . 'wincmd w'
execute (a:vert ? 'vertical ' : '') . 'resize ' . max([0, a:size]) execute (a:vert ? 'vertical ' : '') . 'resize ' . max([0, a:size])
augroup goyop augroup goyop
autocmd WinEnter,CursorMoved <buffer> nested call s:blank() execute 'autocmd WinEnter,CursorMoved <buffer> nested call s:blank("'.a:repel.'")'
autocmd WinLeave <buffer> call s:hide_statusline() autocmd WinLeave <buffer> call s:hide_statusline()
augroup END augroup END
@ -86,17 +85,21 @@ function! s:hmargin()
endfunction endfunction
function! s:resize_pads() function! s:resize_pads()
let t:goyo_width = max([2, t:goyo_width])
let t:goyo_margin_top = min([max([2, t:goyo_margin_top]), &lines / 2 - 1])
let t:goyo_margin_bottom = min([max([2, t:goyo_margin_bottom]), &lines / 2 - 1])
let hmargin = s:hmargin() let hmargin = s:hmargin()
let tmargin = get(g:, 'goyo_margin_top', 4)
let bmargin = get(g:, 'goyo_margin_bottom', 4)
augroup goyop augroup goyop
autocmd! autocmd!
augroup END augroup END
call s:setup_pad(t:goyo_pads.t, 0, tmargin - 1) call s:setup_pad(t:goyo_pads.t, 0, t:goyo_margin_top - 1, 'j')
call s:setup_pad(t:goyo_pads.b, 0, bmargin - 2) call s:setup_pad(t:goyo_pads.b, 0, t:goyo_margin_bottom - 2, 'k')
call s:setup_pad(t:goyo_pads.l, 1, hmargin / 2 - 1) call s:setup_pad(t:goyo_pads.l, 1, hmargin / 2 - 1, 'l')
call s:setup_pad(t:goyo_pads.r, 1, hmargin / 2 - 1) call s:setup_pad(t:goyo_pads.r, 1, hmargin / 2 - 1, 'h')
let t:goyo_width = winwidth(0)
endfunction endfunction
function! s:tranquilize() function! s:tranquilize()
@ -119,6 +122,41 @@ function! s:hide_statusline()
let &l:statusline = repeat(' ', winwidth(0)) let &l:statusline = repeat(' ', winwidth(0))
endfunction endfunction
function! s:hide_linenr()
if !get(g:, 'goyo_linenr', 0)
setlocal nonu
if exists('&rnu')
setlocal nornu
endif
endif
if exists('&colorcolumn')
setlocal colorcolumn=
endif
endfunction
function! s:maps_nop()
let mapped = filter(['R', 'H', 'J', 'K', 'L', '|', '_', '='],
\ "empty(maparg(\"\<c-w>\".v:val, 'n'))")
for c in mapped
execute 'nnoremap <c-w>'.escape(c, '|').' <nop>'
endfor
return mapped
endfunction
function! s:maps_resize()
let commands = {
\ '>': ':<c-u>let t:goyo_width = winwidth(0) + 2 * v:count1 <bar> call <sid>resize_pads()<cr>',
\ '<': ':<c-u>let t:goyo_width = winwidth(0) - 2 * v:count1 <bar> call <sid>resize_pads()<cr>',
\ '+': ':<c-u>let t:goyo_margin_top -= v:count1 <bar> let t:goyo_margin_bottom -= v:count1 <bar> call <sid>resize_pads()<cr>',
\ '-': ':<c-u>let t:goyo_margin_top += v:count1 <bar> let t:goyo_margin_bottom += v:count1 <bar> call <sid>resize_pads()<cr>'
\ }
let mapped = filter(keys(commands), "empty(maparg(\"\<c-w>\".v:val, 'n'))")
for c in mapped
execute 'nnoremap <silent> <c-w>'.c.' '.commands[c]
endfor
return mapped
endfunction
function! s:goyo_on(width) function! s:goyo_on(width)
let s:orig_tab = tabpagenr() let s:orig_tab = tabpagenr()
@ -127,6 +165,8 @@ function! s:goyo_on(width)
let t:goyo_master = winbufnr(0) let t:goyo_master = winbufnr(0)
let t:goyo_width = a:width let t:goyo_width = a:width
let t:goyo_margin_top = get(g:, 'goyo_margin_top', 4)
let t:goyo_margin_bottom = get(g:, 'goyo_margin_bottom', 4)
let t:goyo_pads = {} let t:goyo_pads = {}
let t:goyo_revert = let t:goyo_revert =
\ { 'laststatus': &laststatus, \ { 'laststatus': &laststatus,
@ -140,6 +180,7 @@ function! s:goyo_on(width)
\ 'sidescroll': &sidescroll, \ 'sidescroll': &sidescroll,
\ 'sidescrolloff': &sidescrolloff \ 'sidescrolloff': &sidescrolloff
\ } \ }
let t:goyo_maps = extend(s:maps_nop(), s:maps_resize())
if has('gui_running') if has('gui_running')
let t:goyo_revert.guioptions = &guioptions let t:goyo_revert.guioptions = &guioptions
endif endif
@ -177,16 +218,7 @@ function! s:goyo_on(width)
silent! call lightline#disable() silent! call lightline#disable()
endif endif
if !get(g:, 'goyo_linenr', 0) call s:hide_linenr()
setlocal nonu
if exists('&rnu')
setlocal nornu
endif
endif
if exists('&colorcolumn')
setlocal colorcolumn=
endif
" Global options " Global options
let &winheight = max([&winminheight, 1]) let &winheight = max([&winminheight, 1])
set winminheight=1 set winminheight=1
@ -217,11 +249,11 @@ function! s:goyo_on(width)
augroup goyo augroup goyo
autocmd! autocmd!
autocmd BufWinLeave <buffer> call s:goyo_off()
autocmd TabLeave * call s:goyo_off() autocmd TabLeave * call s:goyo_off()
autocmd VimResized * call s:resize_pads() autocmd VimResized * call s:resize_pads()
autocmd ColorScheme * call s:tranquilize() autocmd ColorScheme * call s:tranquilize()
autocmd WinEnter,WinLeave <buffer> call s:hide_statusline() autocmd BufWinEnter * call s:hide_linenr() | call s:hide_statusline()
autocmd WinEnter,WinLeave * call s:hide_statusline()
augroup END augroup END
call s:hide_statusline() call s:hide_statusline()
@ -251,6 +283,10 @@ function! s:goyo_off()
augroup END augroup END
augroup! goyop augroup! goyop
for c in t:goyo_maps
execute 'nunmap <c-w>'.escape(c, '|')
endfor
let goyo_revert = t:goyo_revert let goyo_revert = t:goyo_revert
let goyo_disabled_gitgutter = t:goyo_disabled_gitgutter let goyo_disabled_gitgutter = t:goyo_disabled_gitgutter
let goyo_disabled_signify = t:goyo_disabled_signify let goyo_disabled_signify = t:goyo_disabled_signify
@ -268,6 +304,7 @@ function! s:goyo_off()
tabclose tabclose
execute 'normal! '.s:orig_tab.'gt' execute 'normal! '.s:orig_tab.'gt'
if winbufnr(0) == goyo_orig_buffer if winbufnr(0) == goyo_orig_buffer
" Doesn't work if window closed with `q`
execute printf('normal! %dG%d|', line, col) execute printf('normal! %dG%d|', line, col)
endif endif

View file

@ -623,8 +623,13 @@ function! s:Path.str(...)
if has_key(options, 'truncateTo') if has_key(options, 'truncateTo')
let limit = options['truncateTo'] let limit = options['truncateTo']
if len(toReturn) > limit if len(toReturn) > limit-1
let toReturn = "<" . strpart(toReturn, len(toReturn) - limit + 1) let toReturn = toReturn[(len(toReturn)-limit+1):]
if len(split(toReturn, '/')) > 1
let toReturn = '</' . join(split(toReturn, '/')[1:], '/') . '/'
else
let toReturn = '<' . toReturn
endif
endif endif
endif endif

View file

@ -18,10 +18,27 @@
- - - - - -
1\. [Introduction](#introduction) 1. [Introduction](#introduction)
2\. [Installation](#installation) 2. [Installation](#installation)
3\. [FAQ](#faq) 2.1. [Requirements](#requirements)
4\. [Other resources](#otherresources) 2.2. [Installing syntastic with Pathogen](#installpathogen)
3. [Recommended settings](#settings)
4. [FAQ](#faq)
4.1. [I installed syntastic but it isn't reporting any errors...](#faqinfo)
4.2. [The `python` checker complains about syntactically valid Python 3 constructs...](#faqpython3)
4.3. [Are there any local checkers for HTML5 that I can use with syntastic?](#faqhtml5)
4.4. [The `perl` checker has stopped working...](#faqperl)
4.5. [What happened to the `rustc` checker?](#faqrust)
4.6. [I run a checker and the location list is not updated...](#faqloclist)
4.6. [I run`:lopen` or `:lwindow` and the error window is empty...](#faqloclist)
4.7. [How can I pass additional arguments to a checker?](#faqargs)
4.8. [Syntastic supports several checkers for my filetype - how do I tell which one(s) to use?](#faqcheckers)
4.9. [What is the difference between syntax checkers and style checkers?](#faqstyle)
4.10. [I have enabled multiple checkers for the current filetype. How can I display all of the errors from all of the checkers together?](#faqaggregate)
4.11. [How can I jump between the different errors without using the location list at the bottom of the window?](#faqlnext)
4.12. [The error window is closed automatically when I :quit the current buffer but not when I :bdelete it?](#faqbdelete)
5. [Resources](#otherresources)
- - - - - -
<a name="introduction"></a> <a name="introduction"></a>
@ -35,17 +52,17 @@ are detected, the user is notified and is happy because they didn't have to
compile their code or execute their script to find them. compile their code or execute their script to find them.
At the time of this writing, syntax checking plugins exist for ActionScript, At the time of this writing, syntax checking plugins exist for ActionScript,
Ada, AppleScript, Arduino, AsciiDoc, ASM, BEMHTML, Bro, Bourne shell, C, Ada, AppleScript, AsciiDoc, ASM, BEMHTML, Bro, Bourne shell, C, C++, C#, Cabal,
C++, C#, Cabal, Chef, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart, Chef, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart, DocBook, Dust,
DocBook, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata, GLSL, Go, Elixir, Erlang, eRuby, Fortran, Gentoo metadata, GLSL, Go, Haml, Haskell,
Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON, JSX, LESS, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON, JSX, LESS, Lex, Limbo,
Lex, Limbo, LISP, LLVM intermediate language, Lua, Markdown, MATLAB, NASM, LISP, LLVM intermediate language, Lua, Markdown, MATLAB, NASM, Objective-C,
Objective-C, Objective-C++, OCaml, Perl, Perl POD, PHP, gettext Portable Objective-C++, OCaml, Perl, Perl POD, PHP, gettext Portable Object, OS X and
Object, OS X and iOS property lists, Puppet, Python, R, Racket, Relax NG, iOS property lists, Puppet, Python, R, Racket, Relax NG, reStructuredText, RPM
reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, Tcl, TeX, Texinfo, spec, Ruby, SASS/SCSS, Scala, Slim, Tcl, TeX, Texinfo, Twig, TypeScript, Vala,
Twig, TypeScript, Vala, Verilog, VHDL, VimL, xHtml, XML, XSLT, YACC, YAML, Verilog, VHDL, VimL, xHtml, XML, XSLT, YACC, YAML, z80, Zope page templates,
z80, Zope page templates, and zsh. See the [wiki][3] for details about the and zsh. See the [wiki][3] for details about the corresponding supported
corresponding supported checkers. checkers.
Below is a screenshot showing the methods that Syntastic uses to display syntax Below is a screenshot showing the methods that Syntastic uses to display syntax
errors. Note that, in practise, you will only have a subset of these methods errors. Note that, in practise, you will only have a subset of these methods
@ -128,18 +145,36 @@ If you get an error when you do this, then you probably didn't install
following: following:
1. Created both the `~/.vim/autoload` and `~/.vim/bundle` directories. 1. Created both the `~/.vim/autoload` and `~/.vim/bundle` directories.
2. Added the `call pathogen#infect()` line to your `~/.vimrc` file 2. Added the `execute pathogen#infect()` line to your `~/.vimrc` file
3. Did the `git clone` of syntastic inside `~/.vim/bundle` 3. Did the `git clone` of syntastic inside `~/.vim/bundle`
4. Have permissions to access all of these directories. 4. Have permissions to access all of these directories.
<a name="settings"></a>
## 3\. Recommended settings
Syntastic has a large number of options that can be configured, and the
defaults are not particularly well suitable for new users. It is recommended
that you start by adding the following lines to your `vimrc` file, and return
to them after reading the manual (see `:help syntastic` in Vim):
```vim
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
```
<a name="faq"></a> <a name="faq"></a>
## 3\. FAQ ## 4\. FAQ
<a name="faqinfo"></a> <a name="faqinfo"></a>
__Q. I installed syntastic but it isn't reporting any errors...__ __4.1. Q. I installed syntastic but it isn't reporting any errors...__
A. The most likely reason is that none of the syntax checkers that it requires A. The most likely reason is that none of the syntax checkers that it requires
is installed. For example: by default, python requires either `flake8` or is installed. For example: by default, python requires either `flake8` or
@ -155,7 +190,7 @@ create an issue - or better yet, create a pull request.
<a name="faqpython3"></a> <a name="faqpython3"></a>
__Q. The `python` checker complains about syntactically valid Python 3 constructs...__ __4.2. Q. The `python` checker complains about syntactically valid Python 3 constructs...__
A. Configure the `python` checker to call a Python 3 interpreter rather than A. Configure the `python` checker to call a Python 3 interpreter rather than
Python 2, e.g: Python 2, e.g:
@ -163,9 +198,27 @@ Python 2, e.g:
let g:syntastic_python_python_exec = '/path/to/python3' let g:syntastic_python_python_exec = '/path/to/python3'
``` ```
<a name="faqhtml5"></a>
__4.3. Q. Are there any local checkers for HTML5 that I can use with syntastic?__
[HTML Tidy][18] has a fork named [HTML Tidy for HTML5][19]. It's a drop
in replacement, and syntastic can use it without changes. Just install it
somewhere and point `g:syntastic_html_tidy_exec` to its executable.
Alternatively, you can install [vnu.jar][21] from the [validator.nu][20]
project and run it as a [HTTP server][23]:
```sh
$ java -Xss512k -cp /path/to/vnu.jar nu.validator.servlet.Main 8888
```
Then you can [configure][22] syntastic to use it:
```vim
let g:syntastic_html_validator_api = 'http://localhost:8888/'
```
<a name="faqperl"></a> <a name="faqperl"></a>
__Q. The `perl` checker has stopped working...__ __4.4. Q. The `perl` checker has stopped working...__
A. The `perl` checker runs `perl -c` against your file, which in turn A. The `perl` checker runs `perl -c` against your file, which in turn
__executes__ any `BEGIN`, `UNITCHECK`, and `CHECK` blocks, and any `use` __executes__ any `BEGIN`, `UNITCHECK`, and `CHECK` blocks, and any `use`
@ -174,14 +227,14 @@ wrote the file yourself, but it's a security problem if you're checking third
party files. Since there is currently no way to disable this behaviour while party files. Since there is currently no way to disable this behaviour while
still producing useful results, the checker is now disabled by default. To still producing useful results, the checker is now disabled by default. To
(re-)enable it, make sure the `g:syntastic_perl_checkers` list includes `perl`, (re-)enable it, make sure the `g:syntastic_perl_checkers` list includes `perl`,
and set `g:syntastic_enable_perl_checker` to 1 in your vimrc: and set `g:syntastic_enable_perl_checker` to 1 in your `vimrc`:
```vim ```vim
let g:syntastic_enable_perl_checker = 1 let g:syntastic_enable_perl_checker = 1
``` ```
<a name="faqrust"></a> <a name="faqrust"></a>
__Q. What happened to the `rustc` checker?__ __4.5. Q. What happened to the `rustc` checker?__
A. It has been included in the [Rust compiler package][12]. If you have A. It has been included in the [Rust compiler package][12]. If you have
a recent version of the Rust compiler, the checker should be picked up a recent version of the Rust compiler, the checker should be picked up
@ -189,27 +242,27 @@ automatically by syntastic.
<a name="faqloclist"></a> <a name="faqloclist"></a>
__Q. I run a checker and the location list is not updated...__ __4.6. Q. I run a checker and the location list is not updated...__
__Q. I run`:lopen` or `:lwindow` and the error window is empty...__ __4.6. Q. I run`:lopen` or `:lwindow` and the error window is empty...__
A. By default the location list is changed only when you run the `:Errors` A. By default the location list is changed only when you run the `:Errors`
command, in order to minimise conflicts with other plugins. If you want the command, in order to minimise conflicts with other plugins. If you want the
location list to always be updated when you run the checkers, add this line to location list to always be updated when you run the checkers, add this line to
your vimrc: your `vimrc`:
```vim ```vim
let g:syntastic_always_populate_loc_list = 1 let g:syntastic_always_populate_loc_list = 1
``` ```
<a name="faqargs"></a> <a name="faqargs"></a>
__Q. How can I pass additional arguments to a checker?__ __4.7. Q. How can I pass additional arguments to a checker?__
A. Almost all syntax checkers use the `makeprgBuild()` function. Those checkers A. Almost all syntax checkers use the `makeprgBuild()` function. Those checkers
that do can be configured using global variables. The general form of the that do can be configured using global variables. The general form of the
global `args` variables is `syntastic_<filetype>_<checker>_args`. global `args` variables is `syntastic_<filetype>_<checker>_args`.
So, If you wanted to pass "--my --args --here" to the ruby mri checker you So, If you wanted to pass `--my --args --here` to the ruby mri checker you
would add this line to your vimrc: would add this line to your `vimrc`:
```vim ```vim
let g:syntastic_ruby_mri_args = "--my --args --here" let g:syntastic_ruby_mri_args = "--my --args --here"
``` ```
@ -218,10 +271,10 @@ See `:help syntastic-checker-options` for more information.
<a name="faqcheckers"></a> <a name="faqcheckers"></a>
__Q. Syntastic supports several checkers for my filetype - how do I tell it __4.8. Q. Syntastic supports several checkers for my filetype - how do I tell it
which one(s) to use?__ which one(s) to use?__
A. Stick a line like this in your vimrc: A. Stick a line like this in your `vimrc`:
```vim ```vim
let g:syntastic_<filetype>_checkers = ['<checker-name>'] let g:syntastic_<filetype>_checkers = ['<checker-name>']
``` ```
@ -259,7 +312,7 @@ filetype of the current file is `php`).
<a name="faqstyle"></a> <a name="faqstyle"></a>
__Q. What is the difference between syntax checkers and style checkers?__ __4.9. Q. What is the difference between syntax checkers and style checkers?__
A. The errors and warnings they produce are highlighted differently and can A. The errors and warnings they produce are highlighted differently and can
be filtered by different rules, but otherwise the distinction is pretty much be filtered by different rules, but otherwise the distinction is pretty much
@ -289,10 +342,10 @@ See `:help syntastic_quiet_messages` for details.
<a name="faqaggregate"></a> <a name="faqaggregate"></a>
__Q. I have enabled multiple checkers for the current filetype. How can I __4.10. Q. I have enabled multiple checkers for the current filetype. How can I
display all of the errors from all of the checkers together?__ display all of the errors from all of the checkers together?__
A. Set `g:syntastic_aggregate_errors` to 1 in your vimrc: A. Set `g:syntastic_aggregate_errors` to 1 in your `vimrc`:
```vim ```vim
let g:syntastic_aggregate_errors = 1 let g:syntastic_aggregate_errors = 1
``` ```
@ -301,19 +354,19 @@ See `:help syntastic-aggregating-errors` for more details.
<a name="faqlnext"></a> <a name="faqlnext"></a>
__Q. How can I jump between the different errors without using the location __4.11. Q. How can I jump between the different errors without using the location
list at the bottom of the window?__ list at the bottom of the window?__
A. Vim provides several built-in commands for this. See `:help :lnext` and A. Vim provides several built-in commands for this. See `:help :lnext` and
`:help :lprev`. `:help :lprevious`.
If you use these commands a lot then you may want to add shortcut mappings to If you use these commands a lot then you may want to add shortcut mappings to
your vimrc, or install something like [unimpaired][2], which provides such your `vimrc`, or install something like [unimpaired][2], which provides such
mappings (among other things). mappings (among other things).
<a name="faqbdelete"></a> <a name="faqbdelete"></a>
__Q. The error window is closed automatically when I :quit the current buffer __4.12. Q. The error window is closed automatically when I :quit the current buffer
but not when I :bdelete it?__ but not when I :bdelete it?__
A. There is no safe way to handle that situation automatically, but you can A. There is no safe way to handle that situation automatically, but you can
@ -324,10 +377,9 @@ nnoremap <silent> <C-d> :lclose<CR>:bdelete<CR>
cabbrev <silent> bd lclose\|bdelete cabbrev <silent> bd lclose\|bdelete
``` ```
<a name="otherresources"></a> <a name="otherresources"></a>
## 4\. Other resources ## 5\. Resources
The preferred place for posting suggestions, reporting bugs, and general The preferred place for posting suggestions, reporting bugs, and general
discussions related to syntastic is the [issue tracker at GitHub][4]. discussions related to syntastic is the [issue tracker at GitHub][4].
@ -358,6 +410,12 @@ a look at [jedi-vim][7], [python-mode][8], or [YouCompleteMe][9].
[15]: https://github.com/MarcWeber/vim-addon-manager [15]: https://github.com/MarcWeber/vim-addon-manager
[16]: https://github.com/junegunn/vim-plug/ [16]: https://github.com/junegunn/vim-plug/
[17]: https://github.com/gmarik/Vundle.vim [17]: https://github.com/gmarik/Vundle.vim
[18]: http://tidy.sourceforge.net/
[19]: http://w3c.github.io/tidy-html5/
[20]: http://about.validator.nu/
[21]: https://github.com/validator/validator/releases/latest
[22]: https://github.com/scrooloose/syntastic/wiki/HTML%3A---validator
[23]: http://validator.github.io/validator/#standalone
<!-- <!--
vim:tw=79:sw=4: vim:tw=79:sw=4:

View file

@ -18,9 +18,17 @@ endfunction " }}}2
" read additional compiler flags from the given configuration file " read additional compiler flags from the given configuration file
" the file format and its parsing mechanism is inspired by clang_complete " the file format and its parsing mechanism is inspired by clang_complete
function! syntastic#c#ReadConfig(file) " {{{2 function! syntastic#c#ReadConfig(file) " {{{2
" search in the current file's directory upwards call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: looking for', a:file)
" search upwards from the current file's directory
let config = findfile(a:file, '.;') let config = findfile(a:file, '.;')
if config == '' || !filereadable(config) if config == ''
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: file not found')
return ''
endif
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: config file:', config)
if !filereadable(config)
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: file unreadable')
return '' return ''
endif endif
@ -31,6 +39,7 @@ function! syntastic#c#ReadConfig(file) " {{{2
try try
let lines = readfile(config) let lines = readfile(config)
catch /\m^Vim\%((\a\+)\)\=:E48[45]/ catch /\m^Vim\%((\a\+)\)\=:E48[45]/
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: error reading file')
return '' return ''
endtry endtry
@ -62,7 +71,7 @@ endfunction " }}}2
" GetLocList() for C-like compilers " GetLocList() for C-like compilers
function! syntastic#c#GetLocList(filetype, subchecker, options) " {{{2 function! syntastic#c#GetLocList(filetype, subchecker, options) " {{{2
try try
let flags = s:_getCflags(a:filetype, a:subchecker, a:options) let flags = s:_get_cflags(a:filetype, a:subchecker, a:options)
catch /\m\C^Syntastic: skip checks$/ catch /\m\C^Syntastic: skip checks$/
return [] return []
endtry endtry
@ -70,9 +79,9 @@ function! syntastic#c#GetLocList(filetype, subchecker, options) " {{{2
let makeprg = syntastic#util#shexpand(g:syntastic_{a:filetype}_compiler) . let makeprg = syntastic#util#shexpand(g:syntastic_{a:filetype}_compiler) .
\ ' ' . flags . ' ' . syntastic#util#shexpand('%') \ ' ' . flags . ' ' . syntastic#util#shexpand('%')
let errorformat = s:_getCheckerVar('g', a:filetype, a:subchecker, 'errorformat', a:options['errorformat']) let errorformat = s:_get_checker_var('g', a:filetype, a:subchecker, 'errorformat', a:options['errorformat'])
let postprocess = s:_getCheckerVar('g', a:filetype, a:subchecker, 'remove_include_errors', 0) ? let postprocess = s:_get_checker_var('g', a:filetype, a:subchecker, 'remove_include_errors', 0) ?
\ ['filterForeignErrors'] : [] \ ['filterForeignErrors'] : []
" process makeprg " process makeprg
@ -91,25 +100,25 @@ function! s:_init() " {{{2
let s:handlers = [] let s:handlers = []
let s:cflags = {} let s:cflags = {}
call s:_regHandler('\m\<cairo', 's:_check_pkg', ['cairo', 'cairo']) call s:_registerHandler('\m\<cairo', 's:_checkPackage', ['cairo', 'cairo'])
call s:_regHandler('\m\<freetype', 's:_check_pkg', ['freetype', 'freetype2', 'freetype']) call s:_registerHandler('\m\<freetype', 's:_checkPackage', ['freetype', 'freetype2', 'freetype'])
call s:_regHandler('\m\<glade', 's:_check_pkg', ['glade', 'libglade-2.0', 'libglade']) call s:_registerHandler('\m\<glade', 's:_checkPackage', ['glade', 'libglade-2.0', 'libglade'])
call s:_regHandler('\m\<glib', 's:_check_pkg', ['glib', 'glib-2.0', 'glib']) call s:_registerHandler('\m\<glib', 's:_checkPackage', ['glib', 'glib-2.0', 'glib'])
call s:_regHandler('\m\<gtk', 's:_check_pkg', ['gtk', 'gtk+-2.0', 'gtk+', 'glib-2.0', 'glib']) call s:_registerHandler('\m\<gtk', 's:_checkPackage', ['gtk', 'gtk+-2.0', 'gtk+', 'glib-2.0', 'glib'])
call s:_regHandler('\m\<libsoup', 's:_check_pkg', ['libsoup', 'libsoup-2.4', 'libsoup-2.2']) call s:_registerHandler('\m\<libsoup', 's:_checkPackage', ['libsoup', 'libsoup-2.4', 'libsoup-2.2'])
call s:_regHandler('\m\<libxml', 's:_check_pkg', ['libxml', 'libxml-2.0', 'libxml']) call s:_registerHandler('\m\<libxml', 's:_checkPackage', ['libxml', 'libxml-2.0', 'libxml'])
call s:_regHandler('\m\<pango', 's:_check_pkg', ['pango', 'pango']) call s:_registerHandler('\m\<pango', 's:_checkPackage', ['pango', 'pango'])
call s:_regHandler('\m\<SDL', 's:_check_pkg', ['sdl', 'sdl']) call s:_registerHandler('\m\<SDL', 's:_checkPackage', ['sdl', 'sdl'])
call s:_regHandler('\m\<opengl', 's:_check_pkg', ['opengl', 'gl']) call s:_registerHandler('\m\<opengl', 's:_checkPackage', ['opengl', 'gl'])
call s:_regHandler('\m\<webkit', 's:_check_pkg', ['webkit', 'webkit-1.0']) call s:_registerHandler('\m\<webkit', 's:_checkPackage', ['webkit', 'webkit-1.0'])
call s:_regHandler('\m\<php\.h\>', 's:_check_php', []) call s:_registerHandler('\m\<php\.h\>', 's:_checkPhp', [])
call s:_regHandler('\m\<Python\.h\>', 's:_check_python', []) call s:_registerHandler('\m\<Python\.h\>', 's:_checkPython', [])
call s:_regHandler('\m\<ruby', 's:_check_ruby', []) call s:_registerHandler('\m\<ruby', 's:_checkRuby', [])
endfunction " }}}2 endfunction " }}}2
" return a handler dictionary object " register a handler dictionary object
function! s:_regHandler(regex, function, args) " {{{2 function! s:_registerHandler(regex, function, args) " {{{2
let handler = {} let handler = {}
let handler["regex"] = a:regex let handler["regex"] = a:regex
let handler["func"] = function(a:function) let handler["func"] = function(a:function)
@ -117,8 +126,75 @@ function! s:_regHandler(regex, function, args) " {{{2
call add(s:handlers, handler) call add(s:handlers, handler)
endfunction " }}}2 endfunction " }}}2
" try to find library with 'pkg-config'
" search possible libraries from first to last given
" argument until one is found
function! s:_checkPackage(name, ...) " {{{2
if executable('pkg-config')
if !has_key(s:cflags, a:name)
for pkg in a:000
let pkg_flags = system('pkg-config --cflags ' . pkg)
" since we cannot necessarily trust the pkg-config exit code
" we have to check for an error output as well
if v:shell_error == 0 && pkg_flags !~? 'not found'
let pkg_flags = ' ' . substitute(pkg_flags, "\n", '', '')
let s:cflags[a:name] = pkg_flags
return pkg_flags
endif
endfor
else
return s:cflags[a:name]
endif
endif
return ''
endfunction " }}}2
" try to find PHP includes with 'php-config'
function! s:_checkPhp() " {{{2
if executable('php-config')
if !has_key(s:cflags, 'php')
let s:cflags['php'] = system('php-config --includes')
let s:cflags['php'] = ' ' . substitute(s:cflags['php'], "\n", '', '')
endif
return s:cflags['php']
endif
return ''
endfunction " }}}2
" try to find the python headers with distutils
function! s:_checkPython() " {{{2
if executable('python')
if !has_key(s:cflags, 'python')
let s:cflags['python'] = system('python -c ''from distutils import ' .
\ 'sysconfig; import sys; sys.stdout.write(sysconfig.get_python_inc())''')
let s:cflags['python'] = substitute(s:cflags['python'], "\n", '', '')
let s:cflags['python'] = ' -I' . s:cflags['python']
endif
return s:cflags['python']
endif
return ''
endfunction " }}}2
" try to find the ruby headers with 'rbconfig'
function! s:_checkRuby() " {{{2
if executable('ruby')
if !has_key(s:cflags, 'ruby')
let s:cflags['ruby'] = system('ruby -r rbconfig -e ' .
\ '''puts RbConfig::CONFIG["rubyhdrdir"] || RbConfig::CONFIG["archdir"]''')
let s:cflags['ruby'] = substitute(s:cflags['ruby'], "\n", '', '')
let s:cflags['ruby'] = ' -I' . s:cflags['ruby']
endif
return s:cflags['ruby']
endif
return ''
endfunction " }}}2
" }}}1
" Utilities {{{1
" resolve checker-related user variables " resolve checker-related user variables
function! s:_getCheckerVar(scope, filetype, subchecker, name, default) " {{{2 function! s:_get_checker_var(scope, filetype, subchecker, name, default) " {{{2
let prefix = a:scope . ':' . 'syntastic_' let prefix = a:scope . ':' . 'syntastic_'
if exists(prefix . a:filetype . '_' . a:subchecker . '_' . a:name) if exists(prefix . a:filetype . '_' . a:subchecker . '_' . a:name)
return {a:scope}:syntastic_{a:filetype}_{a:subchecker}_{a:name} return {a:scope}:syntastic_{a:filetype}_{a:subchecker}_{a:name}
@ -130,10 +206,10 @@ function! s:_getCheckerVar(scope, filetype, subchecker, name, default) " {{{2
endfunction " }}}2 endfunction " }}}2
" resolve user CFLAGS " resolve user CFLAGS
function! s:_getCflags(ft, ck, opts) " {{{2 function! s:_get_cflags(ft, ck, opts) " {{{2
" determine whether to parse header files as well " determine whether to parse header files as well
if has_key(a:opts, 'header_names') && expand('%') =~? a:opts['header_names'] if has_key(a:opts, 'header_names') && expand('%', 1) =~? a:opts['header_names']
if s:_getCheckerVar('g', a:ft, a:ck, 'check_header', 0) if s:_get_checker_var('g', a:ft, a:ck, 'check_header', 0)
let flags = get(a:opts, 'header_flags', '') . ' -c ' . syntastic#c#NullOutput() let flags = get(a:opts, 'header_flags', '') . ' -c ' . syntastic#c#NullOutput()
else else
" checking headers when check_header is unset: bail out " checking headers when check_header is unset: bail out
@ -143,21 +219,21 @@ function! s:_getCflags(ft, ck, opts) " {{{2
let flags = get(a:opts, 'main_flags', '') let flags = get(a:opts, 'main_flags', '')
endif endif
let flags .= ' ' . s:_getCheckerVar('g', a:ft, a:ck, 'compiler_options', '') . ' ' . s:_getIncludeDirs(a:ft) let flags .= ' ' . s:_get_checker_var('g', a:ft, a:ck, 'compiler_options', '') . ' ' . s:_get_include_dirs(a:ft)
" check if the user manually set some cflags " check if the user manually set some cflags
let b_cflags = s:_getCheckerVar('b', a:ft, a:ck, 'cflags', '') let b_cflags = s:_get_checker_var('b', a:ft, a:ck, 'cflags', '')
if b_cflags == '' if b_cflags == ''
" check whether to search for include files at all " check whether to search for include files at all
if !s:_getCheckerVar('g', a:ft, a:ck, 'no_include_search', 0) if !s:_get_checker_var('g', a:ft, a:ck, 'no_include_search', 0)
if a:ft ==# 'c' || a:ft ==# 'cpp' if a:ft ==# 'c' || a:ft ==# 'cpp'
" refresh the include file search if desired " refresh the include file search if desired
if s:_getCheckerVar('g', a:ft, a:ck, 'auto_refresh_includes', 0) if s:_get_checker_var('g', a:ft, a:ck, 'auto_refresh_includes', 0)
let flags .= ' ' . s:_searchHeaders() let flags .= ' ' . s:_search_headers()
else else
" search for header includes if not cached already " search for header includes if not cached already
if !exists('b:syntastic_' . a:ft . '_includes') if !exists('b:syntastic_' . a:ft . '_includes')
let b:syntastic_{a:ft}_includes = s:_searchHeaders() let b:syntastic_{a:ft}_includes = s:_search_headers()
endif endif
let flags .= ' ' . b:syntastic_{a:ft}_includes let flags .= ' ' . b:syntastic_{a:ft}_includes
endif endif
@ -169,7 +245,7 @@ function! s:_getCflags(ft, ck, opts) " {{{2
endif endif
" add optional config file parameters " add optional config file parameters
let config_file = s:_getCheckerVar('g', a:ft, a:ck, 'config_file', '.syntastic_' . a:ft . '_config') let config_file = s:_get_checker_var('g', a:ft, a:ck, 'config_file', '.syntastic_' . a:ft . '_config')
let flags .= ' ' . syntastic#c#ReadConfig(config_file) let flags .= ' ' . syntastic#c#ReadConfig(config_file)
return flags return flags
@ -177,7 +253,7 @@ endfunction " }}}2
" get the gcc include directory argument depending on the default " get the gcc include directory argument depending on the default
" includes and the optional user-defined 'g:syntastic_c_include_dirs' " includes and the optional user-defined 'g:syntastic_c_include_dirs'
function! s:_getIncludeDirs(filetype) " {{{2 function! s:_get_include_dirs(filetype) " {{{2
let include_dirs = [] let include_dirs = []
if a:filetype =~# '\v^%(c|cpp|objc|objcpp)$' && if a:filetype =~# '\v^%(c|cpp|objc|objcpp)$' &&
@ -195,7 +271,7 @@ endfunction " }}}2
" search the first 100 lines for include statements that are " search the first 100 lines for include statements that are
" given in the handlers dictionary " given in the handlers dictionary
function! s:_searchHeaders() " {{{2 function! s:_search_headers() " {{{2
let includes = '' let includes = ''
let files = [] let files = []
let found = [] let found = []
@ -221,7 +297,7 @@ function! s:_searchHeaders() " {{{2
" search included headers " search included headers
for hfile in files for hfile in files
if hfile != '' if hfile != ''
let filename = expand('%:p:h') . syntastic#util#Slash() . hfile let filename = expand('%:p:h', 1) . syntastic#util#Slash() . hfile
try try
let lines = readfile(filename, '', 100) let lines = readfile(filename, '', 100)
@ -250,69 +326,6 @@ function! s:_searchHeaders() " {{{2
return includes return includes
endfunction " }}}2 endfunction " }}}2
" try to find library with 'pkg-config'
" search possible libraries from first to last given
" argument until one is found
function! s:_check_pkg(name, ...) " {{{2
if executable('pkg-config')
if !has_key(s:cflags, a:name)
for pkg in a:000
let pkg_flags = system('pkg-config --cflags ' . pkg)
" since we cannot necessarily trust the pkg-config exit code
" we have to check for an error output as well
if v:shell_error == 0 && pkg_flags !~? 'not found'
let pkg_flags = ' ' . substitute(pkg_flags, "\n", '', '')
let s:cflags[a:name] = pkg_flags
return pkg_flags
endif
endfor
else
return s:cflags[a:name]
endif
endif
return ''
endfunction " }}}2
" try to find PHP includes with 'php-config'
function! s:_check_php() " {{{2
if executable('php-config')
if !has_key(s:cflags, 'php')
let s:cflags['php'] = system('php-config --includes')
let s:cflags['php'] = ' ' . substitute(s:cflags['php'], "\n", '', '')
endif
return s:cflags['php']
endif
return ''
endfunction " }}}2
" try to find the ruby headers with 'rbconfig'
function! s:_check_ruby() " {{{2
if executable('ruby')
if !has_key(s:cflags, 'ruby')
let s:cflags['ruby'] = system('ruby -r rbconfig -e ' .
\ '''puts RbConfig::CONFIG["rubyhdrdir"] || RbConfig::CONFIG["archdir"]''')
let s:cflags['ruby'] = substitute(s:cflags['ruby'], "\n", '', '')
let s:cflags['ruby'] = ' -I' . s:cflags['ruby']
endif
return s:cflags['ruby']
endif
return ''
endfunction " }}}2
" try to find the python headers with distutils
function! s:_check_python() " {{{2
if executable('python')
if !has_key(s:cflags, 'python')
let s:cflags['python'] = system('python -c ''from distutils import ' .
\ 'sysconfig; import sys; sys.stdout.write(sysconfig.get_python_inc())''')
let s:cflags['python'] = substitute(s:cflags['python'], "\n", '', '')
let s:cflags['python'] = ' -I' . s:cflags['python']
endif
return s:cflags['python']
endif
return ''
endfunction " }}}2
" }}}1 " }}}1
" default include directories " default include directories

View file

@ -61,11 +61,11 @@ endfunction " }}}2
" @vimlint(EVL102, 0, l:OLD_VAR) " @vimlint(EVL102, 0, l:OLD_VAR)
function! syntastic#log#debug(level, msg, ...) " {{{2 function! syntastic#log#debug(level, msg, ...) " {{{2
if !s:isDebugEnabled(a:level) if !s:_isDebugEnabled(a:level)
return return
endif endif
let leader = s:_logTimestamp() let leader = s:_log_timestamp()
call s:_logRedirect(1) call s:_logRedirect(1)
if a:0 > 0 if a:0 > 0
@ -81,11 +81,11 @@ function! syntastic#log#debug(level, msg, ...) " {{{2
endfunction " }}}2 endfunction " }}}2
function! syntastic#log#debugShowOptions(level, names) " {{{2 function! syntastic#log#debugShowOptions(level, names) " {{{2
if !s:isDebugEnabled(a:level) if !s:_isDebugEnabled(a:level)
return return
endif endif
let leader = s:_logTimestamp() let leader = s:_log_timestamp()
call s:_logRedirect(1) call s:_logRedirect(1)
let vlist = copy(type(a:names) == type("") ? [a:names] : a:names) let vlist = copy(type(a:names) == type("") ? [a:names] : a:names)
@ -97,16 +97,16 @@ function! syntastic#log#debugShowOptions(level, names) " {{{2
endfunction " }}}2 endfunction " }}}2
function! syntastic#log#debugShowVariables(level, names) " {{{2 function! syntastic#log#debugShowVariables(level, names) " {{{2
if !s:isDebugEnabled(a:level) if !s:_isDebugEnabled(a:level)
return return
endif endif
let leader = s:_logTimestamp() let leader = s:_log_timestamp()
call s:_logRedirect(1) call s:_logRedirect(1)
let vlist = type(a:names) == type("") ? [a:names] : a:names let vlist = type(a:names) == type("") ? [a:names] : a:names
for name in vlist for name in vlist
let msg = s:_formatVariable(name) let msg = s:_format_variable(name)
if msg != '' if msg != ''
echomsg leader . msg echomsg leader . msg
endif endif
@ -116,7 +116,7 @@ function! syntastic#log#debugShowVariables(level, names) " {{{2
endfunction " }}}2 endfunction " }}}2
function! syntastic#log#debugDump(level) " {{{2 function! syntastic#log#debugDump(level) " {{{2
if !s:isDebugEnabled(a:level) if !s:_isDebugEnabled(a:level)
return return
endif endif
@ -136,14 +136,14 @@ function! s:_isDebugEnabled_dumb(level) " {{{2
return (g:syntastic_debug / a:level) % 2 return (g:syntastic_debug / a:level) % 2
endfunction " }}}2 endfunction " }}}2
let s:isDebugEnabled = function(exists('*and') ? 's:_isDebugEnabled_smart' : 's:_isDebugEnabled_dumb') let s:_isDebugEnabled = function(exists('*and') ? 's:_isDebugEnabled_smart' : 's:_isDebugEnabled_dumb')
lockvar s:isDebugEnabled lockvar s:_isDebugEnabled
function! s:_logRedirect(on) " {{{2 function! s:_logRedirect(on) " {{{2
if exists("g:syntastic_debug_file") if exists("g:syntastic_debug_file")
if a:on if a:on
try try
execute 'redir >> ' . fnameescape(expand(g:syntastic_debug_file)) execute 'redir >> ' . fnameescape(expand(g:syntastic_debug_file, 1))
catch /\m^Vim\%((\a\+)\)\=:/ catch /\m^Vim\%((\a\+)\)\=:/
silent! redir END silent! redir END
unlet g:syntastic_debug_file unlet g:syntastic_debug_file
@ -154,11 +154,15 @@ function! s:_logRedirect(on) " {{{2
endif endif
endfunction " }}}2 endfunction " }}}2
function! s:_logTimestamp() " {{{2 " }}}1
" Utilities {{{1
function! s:_log_timestamp() " {{{2
return 'syntastic: ' . split(reltimestr(reltime(g:_SYNTASTIC_START)))[0] . ': ' return 'syntastic: ' . split(reltimestr(reltime(g:_SYNTASTIC_START)))[0] . ': '
endfunction " }}}2 endfunction " }}}2
function! s:_formatVariable(name) " {{{2 function! s:_format_variable(name) " {{{2
let vals = [] let vals = []
if exists('g:syntastic_' . a:name) if exists('g:syntastic_' . a:name)
call add(vals, 'g:syntastic_' . a:name . ' = ' . strtrans(string(g:syntastic_{a:name}))) call add(vals, 'g:syntastic_' . a:name . ' = ' . strtrans(string(g:syntastic_{a:name})))

View file

@ -30,7 +30,7 @@ endfunction " }}}2
function! syntastic#preprocess#checkstyle(errors) " {{{2 function! syntastic#preprocess#checkstyle(errors) " {{{2
let out = [] let out = []
let fname = expand('%') let fname = expand('%', 1)
for err in a:errors for err in a:errors
if match(err, '\m<error\>') > -1 if match(err, '\m<error\>') > -1
let line = str2nr(matchstr(err, '\m\<line="\zs\d\+\ze"')) let line = str2nr(matchstr(err, '\m\<line="\zs\d\+\ze"'))
@ -59,6 +59,70 @@ function! syntastic#preprocess#cppcheck(errors) " {{{2
return map(copy(a:errors), 'substitute(v:val, ''\v^\[[^]]+\]\zs( -\> \[[^]]+\])+\ze:'', "", "")') return map(copy(a:errors), 'substitute(v:val, ''\v^\[[^]]+\]\zs( -\> \[[^]]+\])+\ze:'', "", "")')
endfunction " }}}2 endfunction " }}}2
" @vimlint(EVL102, 1, l:true)
" @vimlint(EVL102, 1, l:false)
" @vimlint(EVL102, 1, l:null)
function! syntastic#preprocess#flow(errors) " {{{2
" JSON artifacts
let true = 1
let false = 0
let null = ''
" A hat tip to Marc Weber for this trick
" http://stackoverflow.com/questions/17751186/iterating-over-a-string-in-vimscript-or-parse-a-json-file/19105763#19105763
try
let errs = eval(join(a:errors, ''))
catch
let errs = {}
endtry
let out = []
if type(errs) == type({}) && has_key(errs, 'errors') && type(errs['errors']) == type([])
for e in errs['errors']
if type(e) == type({}) && has_key(e, 'message') && type(e['message']) == type([]) && len(e['message'])
let m = e['message'][0]
let t = e['message'][1:]
try
let msg =
\ m['path'] . ':' .
\ m['line'] . ':' .
\ m['start'] . ':' .
\ (m['line'] ==# m['endline'] ? m['end'] . ':' : '') .
\ ' ' . m['descr']
if len(t)
let msg .= ' ' . join(map(t,
\ 'v:val["descr"] . " (" . v:val["path"] . ":" . v:val["line"] . ":" . v:val["start"] . ' .
\ '"," . (v:val["line"] !=# v:val["endline"] ? v:val["endline"] . ":" : "") . ' .
\ 'v:val["end"] . ")"'))
endif
let msg = substitute(msg, '\r', '', 'g')
let msg = substitute(msg, '\n', ' ', 'g')
call add(out, msg)
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker javascript/flow: unknown error format')
let out = []
break
endtry
else
call syntastic#log#warn('checker javascript/flow: unknown error format')
let out = []
break
endif
endfor
else
call syntastic#log#warn('checker javascript/flow: unknown error format')
endif
return out
endfunction " }}}2
" @vimlint(EVL102, 0, l:true)
" @vimlint(EVL102, 0, l:false)
" @vimlint(EVL102, 0, l:null)
function! syntastic#preprocess#killEmpty(errors) " {{{2 function! syntastic#preprocess#killEmpty(errors) " {{{2
return filter(copy(a:errors), 'v:val != ""') return filter(copy(a:errors), 'v:val != ""')
endfunction " }}}2 endfunction " }}}2
@ -67,7 +131,7 @@ function! syntastic#preprocess#perl(errors) " {{{2
let out = [] let out = []
for e in a:errors for e in a:errors
let parts = matchlist(e, '\v^(.*)\sat\s(.*)\sline\s(\d+)(.*)$') let parts = matchlist(e, '\v^(.*)\sat\s(.{-})\sline\s(\d+)(.*)$')
if !empty(parts) if !empty(parts)
call add(out, parts[2] . ':' . parts[3] . ':' . parts[1] . parts[4]) call add(out, parts[2] . ':' . parts[3] . ':' . parts[1] . parts[4])
endif endif
@ -76,6 +140,9 @@ function! syntastic#preprocess#perl(errors) " {{{2
return syntastic#util#unique(out) return syntastic#util#unique(out)
endfunction " }}}2 endfunction " }}}2
" @vimlint(EVL102, 1, l:true)
" @vimlint(EVL102, 1, l:false)
" @vimlint(EVL102, 1, l:null)
function! syntastic#preprocess#prospector(errors) " {{{2 function! syntastic#preprocess#prospector(errors) " {{{2
" JSON artifacts " JSON artifacts
let true = 1 let true = 1
@ -125,6 +192,9 @@ function! syntastic#preprocess#prospector(errors) " {{{2
return out return out
endfunction " }}}2 endfunction " }}}2
" @vimlint(EVL102, 0, l:true)
" @vimlint(EVL102, 0, l:false)
" @vimlint(EVL102, 0, l:null)
function! syntastic#preprocess#rparse(errors) " {{{2 function! syntastic#preprocess#rparse(errors) " {{{2
let errlist = copy(a:errors) let errlist = copy(a:errors)

View file

@ -47,6 +47,13 @@ function! syntastic#util#tmpdir() " {{{2
else else
let tempdir = '/tmp/vim-syntastic-' . getpid() let tempdir = '/tmp/vim-syntastic-' . getpid()
endif endif
try
call mkdir(tempdir, 'p', 0700)
catch /\m^Vim\%((\a\+)\)\=:E739/
call syntastic#log#error(v:exception)
let tempdir = '.'
endtry
endif endif
return tempdir return tempdir
@ -54,6 +61,11 @@ endfunction " }}}2
" Recursively remove a directory " Recursively remove a directory
function! syntastic#util#rmrf(what) " {{{2 function! syntastic#util#rmrf(what) " {{{2
" try to make sure we don't delete directories we didn't create
if a:what !~? 'vim-syntastic-'
return
endif
if getftype(a:what) ==# 'dir' if getftype(a:what) ==# 'dir'
if !exists('s:rmrf') if !exists('s:rmrf')
let s:rmrf = let s:rmrf =
@ -141,14 +153,14 @@ endfunction " }}}2
" strwidth() was added in Vim 7.3; if it doesn't exist, we use strlen() " strwidth() was added in Vim 7.3; if it doesn't exist, we use strlen()
" and hope for the best :) " and hope for the best :)
let s:width = function(exists('*strwidth') ? 'strwidth' : 'strlen') let s:_width = function(exists('*strwidth') ? 'strwidth' : 'strlen')
lockvar s:width lockvar s:_width
function! syntastic#util#screenWidth(str, tabstop) " {{{2 function! syntastic#util#screenWidth(str, tabstop) " {{{2
let chunks = split(a:str, "\t", 1) let chunks = split(a:str, "\t", 1)
let width = s:width(chunks[-1]) let width = s:_width(chunks[-1])
for c in chunks[:-2] for c in chunks[:-2]
let cwidth = s:width(c) let cwidth = s:_width(c)
let width += cwidth + a:tabstop - cwidth % a:tabstop let width += cwidth + a:tabstop - cwidth % a:tabstop
endfor endfor
return width return width
@ -166,7 +178,7 @@ function! syntastic#util#wideMsg(msg) " {{{2
"convert tabs to spaces so that the tabs count towards the window "convert tabs to spaces so that the tabs count towards the window
"width as the proper amount of characters "width as the proper amount of characters
let chunks = split(msg, "\t", 1) let chunks = split(msg, "\t", 1)
let msg = join(map(chunks[:-2], 'v:val . repeat(" ", &tabstop - s:width(v:val) % &tabstop)'), '') . chunks[-1] let msg = join(map(chunks[:-2], 'v:val . repeat(" ", &tabstop - s:_width(v:val) % &tabstop)'), '') . chunks[-1]
let msg = strpart(msg, 0, &columns - 1) let msg = strpart(msg, 0, &columns - 1)
set noruler noshowcmd set noruler noshowcmd
@ -212,7 +224,7 @@ function! syntastic#util#findInParent(what, where) " {{{2
let old = '' let old = ''
while here != '' while here != ''
let p = split(globpath(here, a:what), '\n') let p = split(globpath(here, a:what, 1), '\n')
if !empty(p) if !empty(p)
return fnamemodify(p[0], ':p') return fnamemodify(p[0], ':p')
@ -249,8 +261,19 @@ function! syntastic#util#shescape(string) " {{{2
endfunction " }}}2 endfunction " }}}2
" A less noisy shellescape(expand()) " A less noisy shellescape(expand())
function! syntastic#util#shexpand(string) " {{{2 function! syntastic#util#shexpand(string, ...) " {{{2
return syntastic#util#shescape(expand(a:string)) return syntastic#util#shescape(a:0 ? expand(a:string, a:1) : expand(a:string, 1))
endfunction " }}}2
" Escape arguments
function! syntastic#util#argsescape(opt) " {{{2
if type(a:opt) == type('') && a:opt != ''
return [a:opt]
elseif type(a:opt) == type([])
return map(copy(a:opt), 'syntastic#util#shescape(v:val)')
endif
return []
endfunction " }}}2 endfunction " }}}2
" decode XML entities " decode XML entities
@ -311,16 +334,38 @@ function! s:_translateFilter(filters) " {{{2
endfunction " }}}2 endfunction " }}}2
function! s:_translateElement(key, term) " {{{2 function! s:_translateElement(key, term) " {{{2
if a:key ==? 'level' let fkey = a:key
let ret = 'v:val["type"] !=? ' . string(a:term[0]) if fkey[0] == '!'
elseif a:key ==? 'type' let fkey = fkey[1:]
let ret = a:term ==? 'style' ? 'get(v:val, "subtype", "") !=? "style"' : 'has_key(v:val, "subtype")' let not = 1
elseif a:key ==? 'regex'
let ret = 'v:val["text"] !~? ' . string(a:term)
elseif a:key ==? 'file'
let ret = 'bufname(str2nr(v:val["bufnr"])) !~# ' . string(a:term)
else else
call syntastic#log#warn('quiet_messages: ignoring invalid key ' . strtrans(string(a:key))) let not = 0
endif
if fkey ==? 'level'
let op = not ? ' ==? ' : ' !=? '
let ret = 'v:val["type"]' . op . string(a:term[0])
elseif fkey ==? 'type'
if a:term ==? 'style'
let op = not ? ' ==? ' : ' !=? '
let ret = 'get(v:val, "subtype", "")' . op . '"style"'
else
let op = not ? '!' : ''
let ret = op . 'has_key(v:val, "subtype")'
endif
elseif fkey ==? 'regex'
let op = not ? ' =~? ' : ' !~? '
let ret = 'v:val["text"]' . op . string(a:term)
elseif fkey ==? 'file' || fkey[:4] ==? 'file:'
let op = not ? ' =~# ' : ' !~# '
let ret = 'bufname(str2nr(v:val["bufnr"]))'
let mod = fkey[4:]
if mod != ''
let ret = 'fnamemodify(' . ret . ', ' . string(mod) . ')'
endif
let ret .= op . string(a:term)
else
call syntastic#log#warn('quiet_messages: ignoring invalid key ' . strtrans(string(fkey)))
let ret = "1" let ret = "1"
endif endif
return ret return ret
@ -332,7 +377,11 @@ function! s:_rmrf(what) " {{{2
endif endif
if getftype(a:what) ==# 'dir' if getftype(a:what) ==# 'dir'
for f in split(globpath(a:what, '*'), "\n") if filewritable(a:what) != 2
return
endif
for f in split(globpath(a:what, '*', 1), "\n")
call s:_rmrf(f) call s:_rmrf(f)
endfor endfor
silent! call system(s:rmdir . ' ' . syntastic#util#shescape(a:what)) silent! call system(s:rmdir . ' ' . syntastic#util#shescape(a:what))

View file

@ -21,6 +21,7 @@ CONTENTS *syntastic-contents*
1.Intro........................................|syntastic-intro| 1.Intro........................................|syntastic-intro|
1.1.Quick start............................|syntastic-quickstart| 1.1.Quick start............................|syntastic-quickstart|
1.2.Recommended settings...................|syntastic-recommended|
2.Functionality provided.......................|syntastic-functionality| 2.Functionality provided.......................|syntastic-functionality|
2.1.The statusline flag....................|syntastic-statusline-flag| 2.1.The statusline flag....................|syntastic-statusline-flag|
2.2.Error signs............................|syntastic-error-signs| 2.2.Error signs............................|syntastic-error-signs|
@ -85,13 +86,35 @@ You can see the list of checkers available for the current filetype with the
You probably want to override the configured list of checkers for the You probably want to override the configured list of checkers for the
filetypes you use, and also change the arguments passed to specific checkers filetypes you use, and also change the arguments passed to specific checkers
to suit your needs. See |syntastic-checker-options| for details. to suit your needs. See |syntastic-checker-options| below for details.
Use |:SyntasticCheck| to manually check right now. Use |:Errors| to open the Use |:SyntasticCheck| to manually check right now. Use |:Errors| to open the
|location-list| window, and |:lclose| to close it. You can clear the error |location-list| window, and |:lclose| to close it. You can clear the error
list with |:SyntasticReset|, and you can use |:SyntasticToggleMode| to switch list with |:SyntasticReset|, and you can use |:SyntasticToggleMode| to switch
between active (checking on writing the buffer) and passive (manual) checking. between active (checking on writing the buffer) and passive (manual) checking.
You don't have to switch focus to the |location-list| window to jump to the
different errors. Vim provides several built-in commands for this, for
example |:lnext| and |:lprevious|. You may want to add shortcut mappings for
these commands, or perhaps install a plugin such as Tim Pope's 'unimpaired'
(see https://github.com/tpope/vim-unimpaired) that provides such mappings.
------------------------------------------------------------------------------
1.2. Recommended settings *syntastic-recommended*
Syntastic has a large number of options that can be configured, and the
defaults are not particularly well suitable for new users. It is recommended
that you start by adding the following lines to your vimrc, and return to them
later as needed: >
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
<
============================================================================== ==============================================================================
2. Functionality provided *syntastic-functionality* 2. Functionality provided *syntastic-functionality*
@ -163,8 +186,9 @@ Example: >
You can use the |:Errors| command to display the errors for the current buffer You can use the |:Errors| command to display the errors for the current buffer
in the |location-list|. in the |location-list|.
Note that when you use |:Errors|, the current location list is overwritten Note that when you use |:Errors| the current location list is overwritten with
with Syntastic's own location list. Syntastic's own location list. The location list is also overwritten when
|syntastic_auto_jump| is non-zero and the cursor has to jump to an issue.
By default syntastic doesn't fill the |location-list| with the errors found by By default syntastic doesn't fill the |location-list| with the errors found by
the checkers, in order to reduce clashes with other plugins. Consequently, if the checkers, in order to reduce clashes with other plugins. Consequently, if
@ -382,12 +406,17 @@ when saving or opening a file.
When set to 0 the cursor won't jump automatically. > When set to 0 the cursor won't jump automatically. >
let g:syntastic_auto_jump = 0 let g:syntastic_auto_jump = 0
< <
When set to 1 the cursor will always jump to the first issue detected. > When set to 1 the cursor will always jump to the first issue detected,
regardless of type. >
let g:syntastic_auto_jump = 1 let g:syntastic_auto_jump = 1
< <
When set to 2 the cursor will jump to the first issue detected, but only if When set to 2 the cursor will jump to the first issue detected, but only if
this issue is an error. > this issue is an error. >
let g:syntastic_auto_jump = 2 let g:syntastic_auto_jump = 2
<
When set to 3 the cursor will jump to the first error detected, if any. If
all issues detected are warnings, the cursor won't jump. >
let g:syntastic_auto_jump = 3
< <
*'syntastic_auto_loc_list'* *'syntastic_auto_loc_list'*
Default: 2 Default: 2
@ -424,8 +453,9 @@ Default: {}
Use this option to map non-standard filetypes to standard ones. Corresponding Use this option to map non-standard filetypes to standard ones. Corresponding
checkers are mapped accordingly, which allows syntastic to check files with checkers are mapped accordingly, which allows syntastic to check files with
non-standard filetypes: > non-standard filetypes: >
let g:syntastic_filetype_map = { "latex": "tex", let g:syntastic_filetype_map = {
\ "gentoo-metadata": "xml" } \ "latex": "tex",
\ "gentoo-metadata": "xml" }
< <
Composite filetypes can also be mapped to simple types, which disables the Composite filetypes can also be mapped to simple types, which disables the
default behaviour of running both checkers against the input file: > default behaviour of running both checkers against the input file: >
@ -440,9 +470,10 @@ done).
The option should be set to something like: > The option should be set to something like: >
let g:syntastic_mode_map = { "mode": "active", let g:syntastic_mode_map = {
\ "active_filetypes": ["ruby", "php"], \ "mode": "active",
\ "passive_filetypes": ["puppet"] } \ "active_filetypes": ["ruby", "php"],
\ "passive_filetypes": ["puppet"] }
< <
"mode" can be mapped to one of two values - "active" or "passive". When set "mode" can be mapped to one of two values - "active" or "passive". When set
to "active", syntastic does automatic checking whenever a buffer is saved or to "active", syntastic does automatic checking whenever a buffer is saved or
@ -458,30 +489,49 @@ the "passive_filetypes" array ("active_filetypes" is ignored).
If any of "mode", "active_filetypes", or "passive_filetypes" are left If any of "mode", "active_filetypes", or "passive_filetypes" are left
unspecified, they default to values above. unspecified, they default to values above.
If local variable |'b:syntastic_mode'| is defined its value takes precedence
over all calculations involving |'syntastic_mode_map'| for the corresponding
buffer.
At runtime, the |:SyntasticToggleMode| command can be used to switch between At runtime, the |:SyntasticToggleMode| command can be used to switch between
active and passive modes. active and passive modes.
*'b:syntastic_mode'*
Default: unset
Only the local form |'b:syntastic_mode'| is used. When set to either "active"
or "passive", it takes precedence over |'syntastic_mode_map'| when deciding
whether the corresponding buffer should be checked automatically.
*'syntastic_quiet_messages'* *'syntastic_quiet_messages'*
Default: {} Default: {}
Use this option to filter out some of the messages produced by checkers. The Use this option to filter out some of the messages produced by checkers. The
option should be set to something like: > option should be set to something like: >
let g:syntastic_quiet_messages = { "level": "warnings", let g:syntastic_quiet_messages = {
\ "type": "style", \ "!level": "errors",
\ "regex": '\m\[C03\d\d\]', \ "type": "style",
\ "file": ['\m^/usr/include/', '\m\c\.h$'] } \ "regex": '\m\[C03\d\d\]',
\ "file:p": ['\m^/usr/include/', '\m\c\.h$'] }
< <
Each element turns off messages matching the patterns specified by the Each element turns off messages matching the patterns specified by the
corresponding value. Values are lists, but if a list consist of a single corresponding value. Values are lists, but if a list consist of a single
element you can omit adding the brackets (e.g. you can write "style" instead element you may omit the brackets (e.g. you may write "style" instead of
of ["style"]). Elements with values [] or '' are ignored (this is useful for ["style"]). Elements with values [] or '' are ignored (this is useful for
overriding filters, cf. |filter-overrides|). overriding filters, cf. |filter-overrides|).
"level" - takes one of two values, "warnings" or "errors" "level" - takes one of two values, "warnings" or "errors"
"type" - can be either "syntax" or "style" "type" - can be either "syntax" or "style"
"regex" - is matched against the messages' text as a case insensitive "regex" - is matched against the messages' text as a case insensitive
|regular-expression| |regular-expression|
"file" - is matched against the filename the error refers to, as a case "file" - is matched against the filenames the messages refer to, as a
sensitive |regular-expression|. case sensitive |regular-expression|.
If a key is prefixed by an exclamation mark "!", the corresponding filter is
negated (i.e. the above example silences all messages that are NOT errors).
The "file" key may be followed by one or more filename modifiers (see
|filename-modifiers|). The modifiers are applied to the filenames the messages
refer to before matching against the value (i.e. in the above example the full
path of the issues are matched against '\m^/usr/include/' and '\m\c\.h$').
If |'syntastic_id_checkers'| is set, filters are applied before error messages If |'syntastic_id_checkers'| is set, filters are applied before error messages
are labeled with the names of the checkers that created them. are labeled with the names of the checkers that created them.
@ -685,8 +735,9 @@ options that can be set, these are usually documented in the wiki:
In the same vein, 'g:syntastic_<filetype>_<checker-name>_quiet_messages' can In the same vein, 'g:syntastic_<filetype>_<checker-name>_quiet_messages' can
be used to restrict message filters to messages produced by specific checkers. be used to restrict message filters to messages produced by specific checkers.
Example: > Example: >
let g:syntastic_python_pylama_quiet_messages = { "type": "style", let g:syntastic_python_pylama_quiet_messages = {
\ "regex": '\m\[C03\d\d\]' } \ "type": "style",
\ "regex": '\m\[C03\d\d\]' }
< <
See |syntastic_quiet_messages| for the syntax. See |syntastic_quiet_messages| for the syntax.

View file

@ -19,7 +19,7 @@ if has('reltime')
lockvar! g:_SYNTASTIC_START lockvar! g:_SYNTASTIC_START
endif endif
let g:_SYNTASTIC_VERSION = '3.5.0-72' let g:_SYNTASTIC_VERSION = '3.5.0-148'
lockvar g:_SYNTASTIC_VERSION lockvar g:_SYNTASTIC_VERSION
" Sanity checks {{{1 " Sanity checks {{{1
@ -154,7 +154,7 @@ let s:modemap = g:SyntasticModeMap.Instance()
" @vimlint(EVL103, 1, a:argLead) " @vimlint(EVL103, 1, a:argLead)
function! s:CompleteCheckerName(argLead, cmdLine, cursorPos) " {{{2 function! s:CompleteCheckerName(argLead, cmdLine, cursorPos) " {{{2
let checker_names = [] let checker_names = []
for ft in s:resolveFiletypes() for ft in s:_resolve_filetypes([])
call extend(checker_names, s:registry.getNamesOfAvailableCheckers(ft)) call extend(checker_names, s:registry.getNamesOfAvailableCheckers(ft))
endfor endfor
return join(checker_names, "\n") return join(checker_names, "\n")
@ -174,28 +174,56 @@ endfunction " }}}2
" @vimlint(EVL103, 0, a:cmdLine) " @vimlint(EVL103, 0, a:cmdLine)
" @vimlint(EVL103, 0, a:argLead) " @vimlint(EVL103, 0, a:argLead)
command! SyntasticToggleMode call s:ToggleMode() command! -nargs=* -complete=custom,s:CompleteCheckerName SyntasticCheck call SyntasticCheck(<f-args>)
command! -nargs=* -complete=custom,s:CompleteCheckerName SyntasticCheck command! -nargs=? -complete=custom,s:CompleteFiletypes SyntasticInfo call SyntasticInfo(<f-args>)
\ call s:UpdateErrors(0, <f-args>) <bar> command! Errors call SyntasticErrors()
\ call syntastic#util#redraw(g:syntastic_full_redraws) command! SyntasticReset call SyntasticReset()
command! Errors call s:ShowLocList() command! SyntasticToggleMode call SyntasticToggleMode()
command! -nargs=? -complete=custom,s:CompleteFiletypes SyntasticInfo command! SyntasticSetLoclist call SyntasticSetLoclist()
\ call s:modemap.modeInfo(<f-args>) <bar>
\ call s:registry.echoInfoFor(s:resolveFiletypes(<f-args>)) <bar>
\ call s:explainSkip(<f-args>)
command! SyntasticReset
\ call s:ClearCache() <bar>
\ call s:notifiers.refresh(g:SyntasticLoclist.New([]))
command! SyntasticSetLoclist call g:SyntasticLoclist.current().setloclist()
" }}}1 " }}}1
" Autocommands and hooks {{{1 " Public API {{{1
function! SyntasticCheck(...) " {{{2
call s:UpdateErrors(0, a:000)
call syntastic#util#redraw(g:syntastic_full_redraws)
endfunction " }}}2
function! SyntasticInfo(...) " {{{2
call s:modemap.modeInfo(a:000)
call s:registry.echoInfoFor(s:_resolve_filetypes(a:000))
call s:_explain_skip(a:000)
endfunction " }}}2
function! SyntasticErrors() " {{{2
call g:SyntasticLoclist.current().show()
endfunction " }}}2
function! SyntasticReset() " {{{2
call s:ClearCache()
call s:notifiers.refresh(g:SyntasticLoclist.New([]))
endfunction " }}}2
function! SyntasticToggleMode() " {{{2
call s:modemap.toggleMode()
call s:ClearCache()
call s:notifiers.refresh(g:SyntasticLoclist.New([]))
call s:modemap.echoMode()
endfunction " }}}2
function! SyntasticSetLoclist() " {{{2
call g:SyntasticLoclist.current().setloclist()
endfunction " }}}2
" }}}1
" Autocommands {{{1
augroup syntastic augroup syntastic
autocmd BufReadPost * call s:BufReadPostHook() autocmd BufReadPost * call s:BufReadPostHook()
autocmd BufWritePost * call s:BufWritePostHook() autocmd BufWritePost * call s:BufWritePostHook()
autocmd BufEnter * call s:BufEnterHook() autocmd BufEnter * call s:BufEnterHook()
augroup END augroup END
if v:version > 703 || (v:version == 703 && has('patch544')) if v:version > 703 || (v:version == 703 && has('patch544'))
@ -209,14 +237,14 @@ function! s:BufReadPostHook() " {{{2
if g:syntastic_check_on_open if g:syntastic_check_on_open
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_AUTOCOMMANDS, call syntastic#log#debug(g:_SYNTASTIC_DEBUG_AUTOCOMMANDS,
\ 'autocmd: BufReadPost, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr(""))))) \ 'autocmd: BufReadPost, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr("")))))
call s:UpdateErrors(1) call s:UpdateErrors(1, [])
endif endif
endfunction " }}}2 endfunction " }}}2
function! s:BufWritePostHook() " {{{2 function! s:BufWritePostHook() " {{{2
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_AUTOCOMMANDS, call syntastic#log#debug(g:_SYNTASTIC_DEBUG_AUTOCOMMANDS,
\ 'autocmd: BufWritePost, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr(""))))) \ 'autocmd: BufWritePost, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr("")))))
call s:UpdateErrors(1) call s:UpdateErrors(1, [])
endfunction " }}}2 endfunction " }}}2
function! s:BufEnterHook() " {{{2 function! s:BufEnterHook() " {{{2
@ -232,7 +260,7 @@ function! s:BufEnterHook() " {{{2
let loclist = filter(copy(getloclist(0)), 'v:val["valid"] == 1') let loclist = filter(copy(getloclist(0)), 'v:val["valid"] == 1')
let owner = str2nr(getbufvar(bufnr(""), 'syntastic_owner_buffer')) let owner = str2nr(getbufvar(bufnr(""), 'syntastic_owner_buffer'))
let buffers = syntastic#util#unique(map(loclist, 'v:val["bufnr"]') + (owner ? [owner] : [])) let buffers = syntastic#util#unique(map(loclist, 'v:val["bufnr"]') + (owner ? [owner] : []))
if !empty(loclist) && empty(filter( buffers, 'syntastic#util#bufIsActive(v:val)' )) if get(w:, 'syntastic_loclist_set', 0) && !empty(loclist) && empty(filter( buffers, 'syntastic#util#bufIsActive(v:val)' ))
call SyntasticLoclistHide() call SyntasticLoclistHide()
endif endif
endif endif
@ -242,7 +270,9 @@ function! s:QuitPreHook() " {{{2
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_AUTOCOMMANDS, call syntastic#log#debug(g:_SYNTASTIC_DEBUG_AUTOCOMMANDS,
\ 'autocmd: QuitPre, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr(""))))) \ 'autocmd: QuitPre, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr("")))))
let b:syntastic_skip_checks = get(b:, 'syntastic_skip_checks', 0) || !syntastic#util#var('check_on_wq') let b:syntastic_skip_checks = get(b:, 'syntastic_skip_checks', 0) || !syntastic#util#var('check_on_wq')
call SyntasticLoclistHide() if get(w:, 'syntastic_loclist_set', 0)
call SyntasticLoclistHide()
endif
endfunction " }}}2 endfunction " }}}2
" }}}1 " }}}1
@ -250,30 +280,36 @@ endfunction " }}}2
" Main {{{1 " Main {{{1
"refresh and redraw all the error info for this buf when saving or reading "refresh and redraw all the error info for this buf when saving or reading
function! s:UpdateErrors(auto_invoked, ...) " {{{2 function! s:UpdateErrors(auto_invoked, checker_names) " {{{2
call syntastic#log#debugShowVariables(g:_SYNTASTIC_DEBUG_TRACE, 'version') call syntastic#log#debugShowVariables(g:_SYNTASTIC_DEBUG_TRACE, 'version')
call syntastic#log#debugShowOptions(g:_SYNTASTIC_DEBUG_TRACE, s:_DEBUG_DUMP_OPTIONS) call syntastic#log#debugShowOptions(g:_SYNTASTIC_DEBUG_TRACE, s:_DEBUG_DUMP_OPTIONS)
call syntastic#log#debugDump(g:_SYNTASTIC_DEBUG_VARIABLES) call syntastic#log#debugDump(g:_SYNTASTIC_DEBUG_VARIABLES)
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'UpdateErrors' . (a:auto_invoked ? ' (auto)' : '') . call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'UpdateErrors' . (a:auto_invoked ? ' (auto)' : '') .
\ ': ' . (a:0 ? join(a:000) : 'default checkers')) \ ': ' . (len(a:checker_names) ? join(a:checker_names) : 'default checkers'))
if s:skipFile() if s:_skip_file()
return return
endif endif
call s:modemap.synch() call s:modemap.synch()
let run_checks = !a:auto_invoked || s:modemap.allowsAutoChecking(&filetype) let run_checks = !a:auto_invoked || s:modemap.doAutoChecking()
if run_checks if run_checks
call s:CacheErrors(a:000) call s:CacheErrors(a:checker_names)
endif endif
let loclist = g:SyntasticLoclist.current() let loclist = g:SyntasticLoclist.current()
if exists('*SyntasticCheckHook')
call SyntasticCheckHook(loclist.getRaw())
endif
" populate loclist and jump {{{3 " populate loclist and jump {{{3
let do_jump = syntastic#util#var('auto_jump') let do_jump = syntastic#util#var('auto_jump') + 0
if do_jump == 2 if do_jump == 2
let first = loclist.getFirstIssue() let do_jump = loclist.getFirstError(1)
let type = get(first, 'type', '') elseif do_jump == 3
let do_jump = type ==? 'E' let do_jump = loclist.getFirstError()
elseif 0 > do_jump || do_jump > 3
let do_jump = 0
endif endif
let w:syntastic_loclist_set = 0 let w:syntastic_loclist_set = 0
@ -283,7 +319,7 @@ function! s:UpdateErrors(auto_invoked, ...) " {{{2
let w:syntastic_loclist_set = 1 let w:syntastic_loclist_set = 1
if run_checks && do_jump && !loclist.isEmpty() if run_checks && do_jump && !loclist.isEmpty()
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'loclist: jump') call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'loclist: jump')
silent! lrewind execute 'silent! lrewind ' . do_jump
" XXX: Vim doesn't call autocmd commands in a predictible " XXX: Vim doesn't call autocmd commands in a predictible
" order, which can lead to missing filetype when jumping " order, which can lead to missing filetype when jumping
@ -312,13 +348,13 @@ function! s:CacheErrors(checker_names) " {{{2
call s:ClearCache() call s:ClearCache()
let newLoclist = g:SyntasticLoclist.New([]) let newLoclist = g:SyntasticLoclist.New([])
if !s:skipFile() if !s:_skip_file()
" debug logging {{{3 " debug logging {{{3
call syntastic#log#debugShowVariables(g:_SYNTASTIC_DEBUG_TRACE, 'aggregate_errors') call syntastic#log#debugShowVariables(g:_SYNTASTIC_DEBUG_TRACE, 'aggregate_errors')
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'getcwd() = ' . getcwd()) call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'getcwd() = ' . getcwd())
" }}}3 " }}}3
let filetypes = s:resolveFiletypes() let filetypes = s:_resolve_filetypes([])
let aggregate_errors = syntastic#util#var('aggregate_errors') || len(filetypes) > 1 let aggregate_errors = syntastic#util#var('aggregate_errors') || len(filetypes) > 1
let decorate_errors = aggregate_errors && syntastic#util#var('id_checkers') let decorate_errors = aggregate_errors && syntastic#util#var('id_checkers')
let sort_aggregated_errors = aggregate_errors && syntastic#util#var('sort_aggregated_errors') let sort_aggregated_errors = aggregate_errors && syntastic#util#var('sort_aggregated_errors')
@ -397,18 +433,6 @@ function! s:CacheErrors(checker_names) " {{{2
call newLoclist.deploy() call newLoclist.deploy()
endfunction " }}}2 endfunction " }}}2
function! s:ToggleMode() " {{{2
call s:modemap.toggleMode()
call s:ClearCache()
call s:notifiers.refresh(g:SyntasticLoclist.New([]))
call s:modemap.echoMode()
endfunction " }}}2
"display the cached errors for this buf in the location list
function! s:ShowLocList() " {{{2
call g:SyntasticLoclist.current().show()
endfunction " }}}2
"Emulates the :lmake command. Sets up the make environment according to the "Emulates the :lmake command. Sets up the make environment according to the
"options given, runs make, resets the environment, returns the location list "options given, runs make, resets the environment, returns the location list
" "
@ -440,7 +464,7 @@ function! SyntasticMake(options) " {{{2
let old_lc_all = $LC_ALL let old_lc_all = $LC_ALL
" }}}3 " }}}3
call s:bashHack() call s:_bash_hack()
if has_key(a:options, 'errorformat') if has_key(a:options, 'errorformat')
let &errorformat = a:options['errorformat'] let &errorformat = a:options['errorformat']
@ -519,7 +543,7 @@ function! SyntasticMake(options) " {{{2
let &shellredir = old_shellredir let &shellredir = old_shellredir
" }}}3 " }}}3
if !s:_running_windows && (s:uname() =~ "FreeBSD" || s:uname() =~ "OpenBSD") if !s:_running_windows && (s:_os_name() =~ "FreeBSD" || s:_os_name() =~ "OpenBSD")
call syntastic#util#redraw(g:syntastic_full_redraws) call syntastic#util#redraw(g:syntastic_full_redraws)
endif endif
@ -530,12 +554,12 @@ function! SyntasticMake(options) " {{{2
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_LOCLIST, 'raw loclist:', errors) call syntastic#log#debug(g:_SYNTASTIC_DEBUG_LOCLIST, 'raw loclist:', errors)
if has_key(a:options, 'defaults') if has_key(a:options, 'defaults')
call s:addToErrors(errors, a:options['defaults']) call s:_add_to_errors(errors, a:options['defaults'])
endif endif
" Add subtype info if present. " Add subtype info if present.
if has_key(a:options, 'subtype') if has_key(a:options, 'subtype')
call s:addToErrors(errors, { 'subtype': a:options['subtype'] }) call s:_add_to_errors(errors, { 'subtype': a:options['subtype'] })
endif endif
if has_key(a:options, 'Postprocess') && !empty(a:options['Postprocess']) if has_key(a:options, 'Postprocess') && !empty(a:options['Postprocess'])
@ -566,12 +590,12 @@ endfunction " }}}2
" Utilities {{{1 " Utilities {{{1
function! s:resolveFiletypes(...) " {{{2 function! s:_resolve_filetypes(filetypes) " {{{2
let type = a:0 ? a:1 : &filetype let type = len(a:filetypes) ? a:filetypes[0] : &filetype
return split( get(g:syntastic_filetype_map, type, type), '\m\.' ) return split( get(g:syntastic_filetype_map, type, type), '\m\.' )
endfunction " }}}2 endfunction " }}}2
function! s:ignoreFile(filename) " {{{2 function! s:_ignore_file(filename) " {{{2
let fname = fnamemodify(a:filename, ':p') let fname = fnamemodify(a:filename, ':p')
for pattern in g:syntastic_ignore_files for pattern in g:syntastic_ignore_files
if fname =~# pattern if fname =~# pattern
@ -582,22 +606,22 @@ function! s:ignoreFile(filename) " {{{2
endfunction " }}}2 endfunction " }}}2
" Skip running in special buffers " Skip running in special buffers
function! s:skipFile() " {{{2 function! s:_skip_file() " {{{2
let fname = expand('%') let fname = expand('%', 1)
let skip = get(b:, 'syntastic_skip_checks', 0) || (&buftype != '') || let skip = get(b:, 'syntastic_skip_checks', 0) || (&buftype != '') ||
\ !filereadable(fname) || getwinvar(0, '&diff') || s:ignoreFile(fname) || \ !filereadable(fname) || getwinvar(0, '&diff') || s:_ignore_file(fname) ||
\ fnamemodify(fname, ':e') =~? g:syntastic_ignore_extensions \ fnamemodify(fname, ':e') =~? g:syntastic_ignore_extensions
if skip if skip
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'skipFile: skipping') call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, '_skip_file: skipping checks')
endif endif
return skip return skip
endfunction " }}}2 endfunction " }}}2
" Explain why checks will be skipped for the current file " Explain why checks will be skipped for the current file
function! s:explainSkip(...) " {{{2 function! s:_explain_skip(filetypes) " {{{2
if !a:0 && s:skipFile() if empty(a:filetypes) && s:_skip_file()
let why = [] let why = []
let fname = expand('%') let fname = expand('%', 1)
if get(b:, 'syntastic_skip_checks', 0) if get(b:, 'syntastic_skip_checks', 0)
call add(why, 'b:syntastic_skip_checks set') call add(why, 'b:syntastic_skip_checks set')
@ -611,7 +635,7 @@ function! s:explainSkip(...) " {{{2
if getwinvar(0, '&diff') if getwinvar(0, '&diff')
call add(why, 'diff mode') call add(why, 'diff mode')
endif endif
if s:ignoreFile(fname) if s:_ignore_file(fname)
call add(why, 'filename matching g:syntastic_ignore_files') call add(why, 'filename matching g:syntastic_ignore_files')
endif endif
if fnamemodify(fname, ':e') =~? g:syntastic_ignore_extensions if fnamemodify(fname, ':e') =~? g:syntastic_ignore_extensions
@ -623,7 +647,7 @@ function! s:explainSkip(...) " {{{2
endfunction " }}}2 endfunction " }}}2
" Take a list of errors and add default values to them from a:options " Take a list of errors and add default values to them from a:options
function! s:addToErrors(errors, options) " {{{2 function! s:_add_to_errors(errors, options) " {{{2
for err in a:errors for err in a:errors
for key in keys(a:options) for key in keys(a:options)
if !has_key(err, key) || empty(err[key]) if !has_key(err, key) || empty(err[key])
@ -638,12 +662,12 @@ endfunction " }}}2
" XXX: Is this still needed? " XXX: Is this still needed?
" The script changes &shellredir to stop the screen " The script changes &shellredir to stop the screen
" flicking when shelling out to syntax checkers. " flicking when shelling out to syntax checkers.
function! s:bashHack() " {{{2 function! s:_bash_hack() " {{{2
if g:syntastic_bash_hack if g:syntastic_bash_hack
if !exists('s:shell_is_bash') if !exists('s:shell_is_bash')
let s:shell_is_bash = let s:shell_is_bash =
\ !s:_running_windows && \ !s:_running_windows &&
\ (s:uname() !~# "FreeBSD") && (s:uname() !~# "OpenBSD") && \ (s:_os_name() !~# "FreeBSD") && (s:_os_name() !~# "OpenBSD") &&
\ &shell =~# '\m\<bash$' \ &shell =~# '\m\<bash$'
endif endif
@ -653,7 +677,7 @@ function! s:bashHack() " {{{2
endif endif
endfunction " }}}2 endfunction " }}}2
function! s:uname() " {{{2 function! s:_os_name() " {{{2
if !exists('s:_uname') if !exists('s:_uname')
let s:_uname = system('uname') let s:_uname = system('uname')
lockvar s:_uname lockvar s:_uname

View file

@ -22,10 +22,10 @@ endfunction " }}}2
" Update the error balloons " Update the error balloons
function! g:SyntasticBalloonsNotifier.refresh(loclist) " {{{2 function! g:SyntasticBalloonsNotifier.refresh(loclist) " {{{2
unlet! b:syntastic_balloons unlet! b:syntastic_private_balloons
if self.enabled() && !a:loclist.isEmpty() if self.enabled() && !a:loclist.isEmpty()
let b:syntastic_balloons = a:loclist.balloons() let b:syntastic_private_balloons = a:loclist.balloons()
if !empty(b:syntastic_balloons) if !empty(b:syntastic_private_balloons)
set ballooneval balloonexpr=SyntasticBalloonsExprNotifier() set ballooneval balloonexpr=SyntasticBalloonsExprNotifier()
endif endif
endif endif
@ -34,10 +34,10 @@ endfunction " }}}2
" Reset the error balloons " Reset the error balloons
" @vimlint(EVL103, 1, a:loclist) " @vimlint(EVL103, 1, a:loclist)
function! g:SyntasticBalloonsNotifier.reset(loclist) " {{{2 function! g:SyntasticBalloonsNotifier.reset(loclist) " {{{2
let b:syntastic_balloons = {} let b:syntastic_private_balloons = {}
if has('balloon_eval') if has('balloon_eval')
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'balloons: reset') call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'balloons: reset')
unlet! b:syntastic_balloons unlet! b:syntastic_private_balloons
set noballooneval set noballooneval
endif endif
endfunction " }}}2 endfunction " }}}2
@ -48,10 +48,10 @@ endfunction " }}}2
" Private functions {{{1 " Private functions {{{1
function! SyntasticBalloonsExprNotifier() " {{{2 function! SyntasticBalloonsExprNotifier() " {{{2
if !exists('b:syntastic_balloons') if !exists('b:syntastic_private_balloons')
return '' return ''
endif endif
return get(b:syntastic_balloons, v:beval_lnum, '') return get(b:syntastic_private_balloons, v:beval_lnum, '')
endfunction " }}}2 endfunction " }}}2
" }}}1 " }}}1

View file

@ -30,7 +30,7 @@ function! g:SyntasticChecker.New(args) " {{{2
if exists('*' . prefix . 'IsAvailable') if exists('*' . prefix . 'IsAvailable')
let newObj._isAvailableFunc = function(prefix . 'IsAvailable') let newObj._isAvailableFunc = function(prefix . 'IsAvailable')
else else
let newObj._isAvailableFunc = function('SyntasticCheckerIsAvailableDefault') let newObj._isAvailableFunc = function('s:_isAvailableDefault')
endif endif
if exists('*' . prefix . 'GetHighlightRegex') if exists('*' . prefix . 'GetHighlightRegex')
@ -51,7 +51,7 @@ endfunction " }}}2
function! g:SyntasticChecker.getExec() " {{{2 function! g:SyntasticChecker.getExec() " {{{2
return return
\ expand( exists('b:syntastic_' . self._name . '_exec') ? b:syntastic_{self._name}_exec : \ expand( exists('b:syntastic_' . self._name . '_exec') ? b:syntastic_{self._name}_exec :
\ syntastic#util#var(self._filetype . '_' . self._name . '_exec', self._exec) ) \ syntastic#util#var(self._filetype . '_' . self._name . '_exec', self._exec), 1 )
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticChecker.getExecEscaped() " {{{2 function! g:SyntasticChecker.getExecEscaped() " {{{2
@ -162,28 +162,18 @@ endfunction " }}}2
function! g:SyntasticChecker._getOpt(opts, basename, name, default) " {{{2 function! g:SyntasticChecker._getOpt(opts, basename, name, default) " {{{2
let ret = [] let ret = []
call extend( ret, self._shescape(get(a:opts, a:name . '_before', '')) ) call extend( ret, syntastic#util#argsescape(get(a:opts, a:name . '_before', '')) )
call extend( ret, self._shescape(syntastic#util#var( a:basename . a:name, get(a:opts, a:name, a:default) )) ) call extend( ret, syntastic#util#argsescape(syntastic#util#var( a:basename . a:name, get(a:opts, a:name, a:default) )) )
call extend( ret, self._shescape(get(a:opts, a:name . '_after', '')) ) call extend( ret, syntastic#util#argsescape(get(a:opts, a:name . '_after', '')) )
return ret return ret
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticChecker._shescape(opt) " {{{2
if type(a:opt) == type('') && a:opt != ''
return [a:opt]
elseif type(a:opt) == type([])
return map(copy(a:opt), 'syntastic#util#shescape(v:val)')
endif
return []
endfunction " }}}2
" }}}1 " }}}1
" Non-method functions {{{1 " Private functions {{{1
function! SyntasticCheckerIsAvailableDefault() dict " {{{2 function! s:_isAvailableDefault() dict " {{{2
return executable(self.getExec()) return executable(self.getExec())
endfunction " }}}2 endfunction " }}}2

View file

@ -19,8 +19,8 @@ endfunction " }}}2
function! g:SyntasticCursorNotifier.refresh(loclist) " {{{2 function! g:SyntasticCursorNotifier.refresh(loclist) " {{{2
if self.enabled() && !a:loclist.isEmpty() if self.enabled() && !a:loclist.isEmpty()
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'cursor: refresh') call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'cursor: refresh')
let b:syntastic_messages = copy(a:loclist.messages(bufnr(''))) let b:syntastic_private_messages = copy(a:loclist.messages(bufnr('')))
let b:syntastic_line = -1 let b:syntastic_private_line = -1
let b:syntastic_cursor_columns = a:loclist.getCursorColumns() let b:syntastic_cursor_columns = a:loclist.getCursorColumns()
autocmd! syntastic CursorMoved autocmd! syntastic CursorMoved
autocmd syntastic CursorMoved * call SyntasticRefreshCursor() autocmd syntastic CursorMoved * call SyntasticRefreshCursor()
@ -31,26 +31,26 @@ endfunction " }}}2
function! g:SyntasticCursorNotifier.reset(loclist) " {{{2 function! g:SyntasticCursorNotifier.reset(loclist) " {{{2
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'cursor: reset') call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'cursor: reset')
autocmd! syntastic CursorMoved autocmd! syntastic CursorMoved
unlet! b:syntastic_messages unlet! b:syntastic_private_messages
let b:syntastic_line = -1 let b:syntastic_private_line = -1
endfunction " }}}2 endfunction " }}}2
" @vimlint(EVL103, 0, a:loclist) " @vimlint(EVL103, 0, a:loclist)
" }}}1 " }}}1
" Private methods {{{1 " Private functions {{{1
function! SyntasticRefreshCursor() " {{{2 function! SyntasticRefreshCursor() " {{{2
if !exists('b:syntastic_messages') || empty(b:syntastic_messages) if !exists('b:syntastic_private_messages') || empty(b:syntastic_private_messages)
" file not checked " file not checked
return return
endif endif
if !exists('b:syntastic_line') if !exists('b:syntastic_private_line')
let b:syntastic_line = -1 let b:syntastic_private_line = -1
endif endif
let l = line('.') let l = line('.')
let current_messages = get(b:syntastic_messages, l, {}) let current_messages = get(b:syntastic_private_messages, l, {})
if !exists('b:syntastic_cursor_columns') if !exists('b:syntastic_cursor_columns')
let b:syntastic_cursor_columns = g:syntastic_cursor_columns let b:syntastic_cursor_columns = g:syntastic_cursor_columns
@ -58,28 +58,28 @@ function! SyntasticRefreshCursor() " {{{2
if b:syntastic_cursor_columns if b:syntastic_cursor_columns
let c = virtcol('.') let c = virtcol('.')
if !exists('b:syntastic_idx') if !exists('b:syntastic_private_idx')
let b:syntastic_idx = -1 let b:syntastic_private_idx = -1
endif endif
if s:_isSameIndex(l, b:syntastic_line, c, b:syntastic_idx, current_messages) if s:_is_same_index(l, b:syntastic_private_line, c, b:syntastic_private_idx, current_messages)
return return
else else
let b:syntastic_line = l let b:syntastic_private_line = l
endif endif
if !empty(current_messages) if !empty(current_messages)
let b:syntastic_idx = s:_findIndex(c, current_messages) let b:syntastic_private_idx = s:_find_index(c, current_messages)
call syntastic#util#wideMsg(current_messages[b:syntastic_idx].text) call syntastic#util#wideMsg(current_messages[b:syntastic_private_idx].text)
else else
let b:syntastic_idx = -1 let b:syntastic_private_idx = -1
echo echo
endif endif
else else
if l == b:syntastic_line if l == b:syntastic_private_line
return return
endif endif
let b:syntastic_line = l let b:syntastic_private_line = l
if !empty(current_messages) if !empty(current_messages)
call syntastic#util#wideMsg(current_messages[0].text) call syntastic#util#wideMsg(current_messages[0].text)
@ -91,9 +91,9 @@ endfunction " }}}2
" }}}1 " }}}1
" Private functions {{{1 " Utilities {{{1
function! s:_isSameIndex(line, old_line, column, idx, messages) " {{{2 function! s:_is_same_index(line, old_line, column, idx, messages) " {{{2
if a:old_line >= 0 && a:line == a:old_line && a:idx >= 0 if a:old_line >= 0 && a:line == a:old_line && a:idx >= 0
if len(a:messages) <= 1 if len(a:messages) <= 1
return 1 return 1
@ -113,7 +113,7 @@ function! s:_isSameIndex(line, old_line, column, idx, messages) " {{{2
endif endif
endfunction " }}}2 endfunction " }}}2
function! s:_findIndex(column, messages) " {{{2 function! s:_find_index(column, messages) " {{{2
let max = len(a:messages) - 1 let max = len(a:messages) - 1
if max == 0 if max == 0
return 0 return 0

View file

@ -43,10 +43,10 @@ endfunction " }}}2
function! g:SyntasticLoclist.sort() " {{{2 function! g:SyntasticLoclist.sort() " {{{2
if !self._sorted if !self._sorted
for e in self._rawLoclist for e in self._rawLoclist
call s:_setScreenColumn(e) call s:_set_screen_column(e)
endfor endfor
call sort(self._rawLoclist, self._columns ? 's:_compareErrorItemsByColumns' : 's:_compareErrorItemsByLines') call sort(self._rawLoclist, self._columns ? 's:_compare_error_items_by_columns' : 's:_compare_error_items_by_lines')
let self._sorted = 1 let self._sorted = 1
endif endif
@ -133,8 +133,19 @@ function! g:SyntasticLoclist.getStatuslineFlag() " {{{2
return self._stl_flag return self._stl_flag
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticLoclist.getFirstIssue() " {{{2 function! g:SyntasticLoclist.getFirstError(...) " {{{2
return get(self._rawLoclist, 0, {}) let max_issues = len(self._rawLoclist)
if a:0 && a:1 < max_issues
let max_issues = a:1
endif
for idx in range(max_issues)
if get(self._rawLoclist[idx], 'type', '') ==? 'E'
return idx + 1
endif
endfor
return 0
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticLoclist.getName() " {{{2 function! g:SyntasticLoclist.getName() " {{{2
@ -243,9 +254,9 @@ function! g:SyntasticLoclist.messages(buf) " {{{2
for l in keys(self._cachedMessages[b]) for l in keys(self._cachedMessages[b])
if len(self._cachedMessages[b][l]) > 1 if len(self._cachedMessages[b][l]) > 1
for e in self._cachedMessages[b][l] for e in self._cachedMessages[b][l]
call s:_setScreenColumn(e) call s:_set_screen_column(e)
endfor endfor
call sort(self._cachedMessages[b][l], 's:_compareErrorItemsByColumns') call sort(self._cachedMessages[b][l], 's:_compare_error_items_by_columns')
endif endif
endfor endfor
endfor endfor
@ -253,7 +264,7 @@ function! g:SyntasticLoclist.messages(buf) " {{{2
for b in keys(self._cachedMessages) for b in keys(self._cachedMessages)
for l in keys(self._cachedMessages[b]) for l in keys(self._cachedMessages[b])
call s:_removeShadowedItems(self._cachedMessages[b][l]) call s:_remove_shadowed_items(self._cachedMessages[b][l])
endfor endfor
endfor endfor
endif endif
@ -320,7 +331,7 @@ endfunction " }}}2
" }}}1 " }}}1
" Non-method functions {{{1 " Public functions {{{1
function! SyntasticLoclistHide() " {{{2 function! SyntasticLoclistHide() " {{{2
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'loclist: hide') call syntastic#log#debug(g:_SYNTASTIC_DEBUG_NOTIFICATIONS, 'loclist: hide')
@ -329,13 +340,13 @@ endfunction " }}}2
" }}}1 " }}}1
" Private functions {{{1 " Utilities {{{1
function! s:_translate(key, val) " {{{2 function! s:_translate(key, val) " {{{2
return 'get(v:val, ' . string(a:key) . ', "") ==? ' . string(a:val) return 'get(v:val, ' . string(a:key) . ', "") ==? ' . string(a:val)
endfunction " }}}2 endfunction " }}}2
function! s:_setScreenColumn(item) " {{{2 function! s:_set_screen_column(item) " {{{2
if !has_key(a:item, 'scol') if !has_key(a:item, 'scol')
let col = get(a:item, 'col', 0) let col = get(a:item, 'col', 0)
if col != 0 && get(a:item, 'vcol', 0) == 0 if col != 0 && get(a:item, 'vcol', 0) == 0
@ -352,7 +363,7 @@ function! s:_setScreenColumn(item) " {{{2
endif endif
endfunction " }}}2 endfunction " }}}2
function! s:_removeShadowedItems(errors) " {{{2 function! s:_remove_shadowed_items(errors) " {{{2
" keep only the first message at a given column " keep only the first message at a given column
let i = 0 let i = 0
while i < len(a:errors) - 1 while i < len(a:errors) - 1
@ -384,7 +395,7 @@ function! s:_removeShadowedItems(errors) " {{{2
endwhile endwhile
endfunction " }}}2 endfunction " }}}2
function! s:_compareErrorItemsByColumns(a, b) " {{{2 function! s:_compare_error_items_by_columns(a, b) " {{{2
if a:a['bufnr'] != a:b['bufnr'] if a:a['bufnr'] != a:b['bufnr']
" group by file " group by file
return a:a['bufnr'] - a:b['bufnr'] return a:a['bufnr'] - a:b['bufnr']
@ -402,7 +413,7 @@ function! s:_compareErrorItemsByColumns(a, b) " {{{2
endif endif
endfunction " }}}2 endfunction " }}}2
function! s:_compareErrorItemsByLines(a, b) " {{{2 function! s:_compare_error_items_by_lines(a, b) " {{{2
if a:a['bufnr'] != a:b['bufnr'] if a:a['bufnr'] != a:b['bufnr']
" group by file " group by file
return a:a['bufnr'] - a:b['bufnr'] return a:a['bufnr'] - a:b['bufnr']

View file

@ -38,6 +38,15 @@ function! g:SyntasticModeMap.allowsAutoChecking(filetype) " {{{2
endif endif
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticModeMap.doAutoChecking() " {{{2
let local_mode = get(b:, 'syntastic_mode', '')
if local_mode ==# 'active' || local_mode ==# 'passive'
return local_mode ==# 'active'
endif
return self.allowsAutoChecking(&filetype)
endfunction " }}}2
function! g:SyntasticModeMap.isPassive() " {{{2 function! g:SyntasticModeMap.isPassive() " {{{2
return self._mode ==# 'passive' return self._mode ==# 'passive'
endfunction " }}}2 endfunction " }}}2
@ -62,13 +71,13 @@ function! g:SyntasticModeMap.echoMode() " {{{2
echo "Syntastic: " . self._mode . " mode enabled" echo "Syntastic: " . self._mode . " mode enabled"
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticModeMap.modeInfo(...) " {{{2 function! g:SyntasticModeMap.modeInfo(filetypes) " {{{2
echomsg 'Syntastic version: ' . g:_SYNTASTIC_VERSION echomsg 'Syntastic version: ' . g:_SYNTASTIC_VERSION
let type = a:0 ? a:1 : &filetype let type = len(a:filetypes) ? a:filetypes[0] : &filetype
echomsg 'Info for filetype: ' . type echomsg 'Info for filetype: ' . type
call self.synch() call self.synch()
echomsg 'Mode: ' . self._mode echomsg 'Global mode: ' . self._mode
if self._mode ==# 'active' if self._mode ==# 'active'
if len(self._passiveFiletypes) if len(self._passiveFiletypes)
let plural = len(self._passiveFiletypes) != 1 ? 's' : '' let plural = len(self._passiveFiletypes) != 1 ? 's' : ''
@ -81,6 +90,14 @@ function! g:SyntasticModeMap.modeInfo(...) " {{{2
endif endif
endif endif
echomsg 'Filetype ' . type . ' is ' . (self.allowsAutoChecking(type) ? 'active' : 'passive') echomsg 'Filetype ' . type . ' is ' . (self.allowsAutoChecking(type) ? 'active' : 'passive')
if !len(a:filetypes)
if exists('b:syntastic_mode') && (b:syntastic_mode ==# 'active' || b:syntastic_mode ==# 'passive')
echomsg 'Local mode: ' . b:syntastic_mode
endif
echomsg 'The current file will ' . (self.doAutoChecking() ? '' : 'not ') . 'be checked automatically'
endif
endfunction " }}}2 endfunction " }}}2
" }}}1 " }}}1

View file

@ -34,12 +34,12 @@ function! g:SyntasticNotifiers.refresh(loclist) " {{{2
if !has_key(g:{class}, 'enabled') || self._notifier[type].enabled() if !has_key(g:{class}, 'enabled') || self._notifier[type].enabled()
if index(s:_PERSISTENT_NOTIFIERS, type) > -1 if index(s:_PERSISTENT_NOTIFIERS, type) > -1
" refresh only if loclist has changed since last call " refresh only if loclist has changed since last call
if !exists('b:syntastic_' . type . '_stamp') if !exists('b:syntastic_private_' . type . '_stamp')
let b:syntastic_{type}_stamp = [] let b:syntastic_private_{type}_stamp = []
endif endif
if a:loclist.isNewerThan(b:syntastic_{type}_stamp) || a:loclist.isEmpty() if a:loclist.isNewerThan(b:syntastic_private_{type}_stamp) || a:loclist.isEmpty()
call self._notifier[type].refresh(a:loclist) call self._notifier[type].refresh(a:loclist)
let b:syntastic_{type}_stamp = syntastic#util#stamp() let b:syntastic_private_{type}_stamp = syntastic#util#stamp()
endif endif
else else
call self._notifier[type].refresh(a:loclist) call self._notifier[type].refresh(a:loclist)
@ -62,7 +62,7 @@ function! g:SyntasticNotifiers.reset(loclist) " {{{2
" also reset stamps " also reset stamps
if index(s:_PERSISTENT_NOTIFIERS, type) > -1 if index(s:_PERSISTENT_NOTIFIERS, type) > -1
let b:syntastic_{type}_stamp = [] let b:syntastic_private_{type}_stamp = []
endif endif
endfor endfor
endfunction " }}}2 endfunction " }}}2

View file

@ -9,7 +9,6 @@ let s:_DEFAULT_CHECKERS = {
\ 'actionscript':['mxmlc'], \ 'actionscript':['mxmlc'],
\ 'ada': ['gcc'], \ 'ada': ['gcc'],
\ 'applescript': ['osacompile'], \ 'applescript': ['osacompile'],
\ 'arduino': ['avrgcc'],
\ 'asciidoc': ['asciidoc'], \ 'asciidoc': ['asciidoc'],
\ 'asm': ['gcc'], \ 'asm': ['gcc'],
\ 'bro': ['bro'], \ 'bro': ['bro'],
@ -92,7 +91,7 @@ let s:_DEFAULT_CHECKERS = {
\ 'yaml': ['jsyaml'], \ 'yaml': ['jsyaml'],
\ 'z80': ['z80syntaxchecker'], \ 'z80': ['z80syntaxchecker'],
\ 'zpt': ['zptlint'], \ 'zpt': ['zptlint'],
\ 'zsh': ['zsh', 'shellcheck'] \ 'zsh': ['zsh', 'shellcheck'],
\ } \ }
lockvar! s:_DEFAULT_CHECKERS lockvar! s:_DEFAULT_CHECKERS
@ -108,6 +107,25 @@ let s:_DEFAULT_FILETYPE_MAP = {
\ } \ }
lockvar! s:_DEFAULT_FILETYPE_MAP lockvar! s:_DEFAULT_FILETYPE_MAP
let s:_ECLIM_TYPES = [
\ 'c',
\ 'cpp',
\ 'html',
\ 'java',
\ 'php',
\ 'python',
\ 'ruby',
\ ]
lockvar! s:_ECLIM_TYPES
let s:_YCM_TYPES = [
\ 'c',
\ 'cpp',
\ 'objc',
\ 'objcpp',
\ ]
lockvar! s:_YCM_TYPES
let g:SyntasticRegistry = {} let g:SyntasticRegistry = {}
" }}}1 " }}}1
@ -138,7 +156,7 @@ endfunction " }}}2
" not checked for availability (that is, the corresponding IsAvailable() are " not checked for availability (that is, the corresponding IsAvailable() are
" not run). " not run).
function! g:SyntasticRegistry.getCheckers(ftalias, hints_list) " {{{2 function! g:SyntasticRegistry.getCheckers(ftalias, hints_list) " {{{2
let ft = s:_normaliseFiletype(a:ftalias) let ft = s:_normalise_filetype(a:ftalias)
call self._loadCheckersFor(ft) call self._loadCheckersFor(ft)
let checkers_map = self._checkerMap[ft] let checkers_map = self._checkerMap[ft]
@ -181,13 +199,13 @@ function! g:SyntasticRegistry.getKnownFiletypes() " {{{2
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticRegistry.getNamesOfAvailableCheckers(ftalias) " {{{2 function! g:SyntasticRegistry.getNamesOfAvailableCheckers(ftalias) " {{{2
let ft = s:_normaliseFiletype(a:ftalias) let ft = s:_normalise_filetype(a:ftalias)
call self._loadCheckersFor(ft) call self._loadCheckersFor(ft)
return keys(filter( copy(self._checkerMap[ft]), 'v:val.isAvailable()' )) return keys(filter( copy(self._checkerMap[ft]), 'v:val.isAvailable()' ))
endfunction " }}}2 endfunction " }}}2
function! g:SyntasticRegistry.echoInfoFor(ftalias_list) " {{{2 function! g:SyntasticRegistry.echoInfoFor(ftalias_list) " {{{2
let ft_list = syntastic#util#unique(map( copy(a:ftalias_list), 's:_normaliseFiletype(v:val)' )) let ft_list = syntastic#util#unique(map( copy(a:ftalias_list), 's:_normalise_filetype(v:val)' ))
if len(ft_list) != 1 if len(ft_list) != 1
let available = [] let available = []
let active = [] let active = []
@ -211,6 +229,30 @@ function! g:SyntasticRegistry.echoInfoFor(ftalias_list) " {{{2
let plural = cnt != 1 ? 's' : '' let plural = cnt != 1 ? 's' : ''
let cklist = cnt ? join(active) : '-' let cklist = cnt ? join(active) : '-'
echomsg 'Currently enabled checker' . plural . ': ' . cklist echomsg 'Currently enabled checker' . plural . ': ' . cklist
" Eclim feels entitled to mess with syntastic's variables {{{3
if exists(':EclimValidate') && get(g:, 'EclimFileTypeValidate', 1)
let disabled = filter(copy(ft_list), 's:_disabled_by_eclim(v:val)')
let cnt = len(disabled)
if cnt
let plural = cnt != 1 ? 's' : ''
let cklist = join(disabled, ', ')
echomsg 'Checkers for filetype' . plural . ' ' . cklist . ' possibly disabled by Eclim'
endif
endif
" }}}3
" So does YouCompleteMe {{{3
if exists('g:loaded_youcompleteme') && get(g:, 'ycm_show_diagnostics_ui', get(g:, 'ycm_register_as_syntastic_checker', 1))
let disabled = filter(copy(ft_list), 's:_disabled_by_ycm(v:val)')
let cnt = len(disabled)
if cnt
let plural = cnt != 1 ? 's' : ''
let cklist = join(disabled, ', ')
echomsg 'Checkers for filetype' . plural . ' ' . cklist . ' possibly disabled by YouCompleteMe'
endif
endif
" }}}3
endfunction " }}}2 endfunction " }}}2
" }}}1 " }}}1
@ -257,17 +299,31 @@ endfunction " }}}2
" }}}1 " }}}1
" Private functions {{{1 " Utilities {{{1
"resolve filetype aliases, and replace - with _ otherwise we cant name "resolve filetype aliases, and replace - with _ otherwise we cant name
"syntax checker functions legally for filetypes like "gentoo-metadata" "syntax checker functions legally for filetypes like "gentoo-metadata"
function! s:_normaliseFiletype(ftalias) " {{{2 function! s:_normalise_filetype(ftalias) " {{{2
let ft = get(s:_DEFAULT_FILETYPE_MAP, a:ftalias, a:ftalias) let ft = get(s:_DEFAULT_FILETYPE_MAP, a:ftalias, a:ftalias)
let ft = get(g:syntastic_filetype_map, ft, ft) let ft = get(g:syntastic_filetype_map, ft, ft)
let ft = substitute(ft, '\m-', '_', 'g') let ft = substitute(ft, '\m-', '_', 'g')
return ft return ft
endfunction " }}}2 endfunction " }}}2
function! s:_disabled_by_eclim(filetype) " {{{2
if index(s:_ECLIM_TYPES, a:filetype) >= 0
let lang = toupper(a:filetype[0]) . a:filetype[1:]
let ft = a:filetype !=# 'cpp' ? lang : 'C'
return get(g:, 'Eclim' . lang . 'Validate', 1) && !get(g:, 'Eclim' . ft . 'SyntasticEnabled', 0)
endif
return 0
endfunction " }}}2
function! s:_disabled_by_ycm(filetype) " {{{2
return index(s:_YCM_TYPES, a:filetype) >= 0
endfunction " }}}2
" }}}1 " }}}1
" vim: set sw=4 sts=4 et fdm=marker: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -127,10 +127,10 @@ endfunction " }}}2
" Get all the ids of the SyntaxError signs in the buffer " Get all the ids of the SyntaxError signs in the buffer
function! g:SyntasticSignsNotifier._bufSignIds() " {{{2 function! g:SyntasticSignsNotifier._bufSignIds() " {{{2
if !exists("b:syntastic_sign_ids") if !exists("b:syntastic_private_sign_ids")
let b:syntastic_sign_ids = [] let b:syntastic_private_sign_ids = []
endif endif
return b:syntastic_sign_ids return b:syntastic_private_sign_ids
endfunction " }}}2 endfunction " }}}2
" }}}1 " }}}1

View file

@ -64,4 +64,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -23,7 +23,7 @@ function! SyntaxCheckers_ada_gcc_IsAvailable() dict
if !exists('g:syntastic_ada_compiler') if !exists('g:syntastic_ada_compiler')
let g:syntastic_ada_compiler = self.getExec() let g:syntastic_ada_compiler = self.getExec()
endif endif
return executable(expand(g:syntastic_ada_compiler)) return executable(expand(g:syntastic_ada_compiler, 1))
endfunction endfunction
function! SyntaxCheckers_ada_gcc_GetLocList() dict function! SyntaxCheckers_ada_gcc_GetLocList() dict
@ -44,4 +44,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -46,4 +46,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -1,26 +0,0 @@
"============================================================================
"File: avrgcc.vim
"Description: Syntax checking plugin for syntastic.vim
"Maintainer: Karel <karelishere at gmail dot com>
"License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute
" it and/or modify it under the terms of the Do What The Fuck You
" Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
if exists('g:loaded_syntastic_arduino_avrgcc_checker')
finish
endif
let g:loaded_syntastic_arduino_avrgcc_checker = 1
runtime! syntax_checkers/c/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'arduino',
\ 'name': 'avrgcc',
\ 'exec': 'avr-gcc',
\ 'redirect': 'c/avrgcc'})
" vim: set et sts=4 sw=4:

View file

@ -44,4 +44,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -22,14 +22,14 @@ endif
let s:save_cpo = &cpo let s:save_cpo = &cpo
set cpo&vim set cpo&vim
function! SyntaxCheckers_asm_gcc_IsAvailable() dict function! SyntaxCheckers_asm_gcc_IsAvailable() dict " {{{1
if !exists('g:syntastic_asm_compiler') if !exists('g:syntastic_asm_compiler')
let g:syntastic_asm_compiler = self.getExec() let g:syntastic_asm_compiler = self.getExec()
endif endif
return executable(expand(g:syntastic_asm_compiler)) return executable(expand(g:syntastic_asm_compiler, 1))
endfunction endfunction " }}}1
function! SyntaxCheckers_asm_gcc_GetLocList() dict function! SyntaxCheckers_asm_gcc_GetLocList() dict " {{{1
return syntastic#c#GetLocList('asm', 'gcc', { return syntastic#c#GetLocList('asm', 'gcc', {
\ 'errorformat': \ 'errorformat':
\ '%-G%f:%s:,' . \ '%-G%f:%s:,' .
@ -37,12 +37,16 @@ function! SyntaxCheckers_asm_gcc_GetLocList() dict
\ '%f:%l:%c: %tarning: %m,' . \ '%f:%l:%c: %tarning: %m,' .
\ '%f:%l: %m', \ '%f:%l: %m',
\ 'main_flags': '-x assembler -fsyntax-only -masm=' . s:GetDialect() }) \ 'main_flags': '-x assembler -fsyntax-only -masm=' . s:GetDialect() })
endfunction endfunction " }}}1
function! s:GetDialect() " Utilities {{{1
function! s:GetDialect() " {{{2
return exists('g:syntastic_asm_dialect') ? g:syntastic_asm_dialect : return exists('g:syntastic_asm_dialect') ? g:syntastic_asm_dialect :
\ expand('%:e') ==? 'asm' ? 'intel' : 'att' \ expand('%:e', 1) ==? 'asm' ? 'intel' : 'att'
endfunction endfunction " }}}2
" }}}1
call g:SyntasticRegistry.CreateAndRegisterChecker({ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'asm', \ 'filetype': 'asm',
@ -51,4 +55,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -32,4 +32,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -57,4 +57,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -54,4 +54,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -57,4 +57,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -58,4 +58,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -58,4 +58,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -8,13 +8,6 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
"============================================================================ "============================================================================
"
" The setting 'g:syntastic_cppcheck_config_file' allows you to define a file
" that contains additional compiler arguments like include directories or
" CFLAGS. The file is expected to contain one option per line. If none is
" given the filename defaults to '.syntastic_cppcheck_config':
"
" let g:syntastic_cppcheck_config_file = '.config'
if exists("g:loaded_syntastic_c_cppcheck_checker") if exists("g:loaded_syntastic_c_cppcheck_checker")
finish finish
@ -66,4 +59,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -27,7 +27,7 @@ function! SyntaxCheckers_c_gcc_IsAvailable() dict
let g:syntastic_c_compiler = executable(self.getExec()) ? self.getExec() : 'clang' let g:syntastic_c_compiler = executable(self.getExec()) ? self.getExec() : 'clang'
endif endif
call self.log('g:syntastic_c_compiler =', g:syntastic_c_compiler) call self.log('g:syntastic_c_compiler =', g:syntastic_c_compiler)
return executable(expand(g:syntastic_c_compiler)) return executable(expand(g:syntastic_c_compiler, 1))
endfunction endfunction
function! SyntaxCheckers_c_gcc_GetLocList() dict function! SyntaxCheckers_c_gcc_GetLocList() dict
@ -56,4 +56,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -58,4 +58,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -8,13 +8,6 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
"============================================================================ "============================================================================
"
" The setting 'g:syntastic_oclint_config_file' allows you to define a file
" that contains additional compiler arguments like include directories or
" CFLAGS. The file is expected to contain one option per line. If none is
" given the filename defaults to '.syntastic_oclint_config':
"
" let g:syntastic_oclint_config_file = '.config'
if exists("g:loaded_syntastic_c_oclint_checker") if exists("g:loaded_syntastic_c_oclint_checker")
finish finish
@ -69,4 +62,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -63,4 +63,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -8,13 +8,6 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
"============================================================================ "============================================================================
"
" The setting 'g:syntastic_sparse_config_file' allows you to define a file
" that contains additional compiler arguments like include directories or
" CFLAGS. The file is expected to contain one option per line. If none is
" given the filename defaults to '.syntastic_sparse_config':
"
" let g:syntastic_sparse_config_file = '.config'
if exists("g:loaded_syntastic_c_sparse_checker") if exists("g:loaded_syntastic_c_sparse_checker")
finish finish
@ -33,13 +26,15 @@ function! SyntaxCheckers_c_sparse_GetLocList() dict
\ 'args': syntastic#c#ReadConfig(g:syntastic_sparse_config_file), \ 'args': syntastic#c#ReadConfig(g:syntastic_sparse_config_file),
\ 'args_after': '-ftabstop=' . &ts }) \ 'args_after': '-ftabstop=' . &ts })
let errorformat = '%f:%l:%v: %trror: %m,%f:%l:%v: %tarning: %m,' let errorformat =
\ '%f:%l:%v: %trror: %m,' .
\ '%f:%l:%v: %tarning: %m,'
let loclist = SyntasticMake({ let loclist = SyntasticMake({
\ 'makeprg': makeprg, \ 'makeprg': makeprg,
\ 'errorformat': errorformat, \ 'errorformat': errorformat,
\ 'defaults': {'bufnr': bufnr("")}, \ 'defaults': {'bufnr': bufnr("")},
\ 'returns': [0] }) \ 'returns': [0, 1] })
return loclist return loclist
endfunction endfunction
@ -50,4 +45,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -8,13 +8,6 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
"============================================================================ "============================================================================
"
" The setting 'g:syntastic_splint_config_file' allows you to define a file
" that contains additional compiler arguments like include directories or
" CFLAGS. The file is expected to contain one option per line. If none is
" given the filename defaults to '.syntastic_splint_config':
"
" let g:syntastic_splint_config_file = '.config'
if exists("g:loaded_syntastic_c_splint_checker") if exists("g:loaded_syntastic_c_splint_checker")
finish finish
@ -59,4 +52,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -40,7 +40,7 @@ function! SyntaxCheckers_cabal_cabal_GetLocList() dict
return SyntasticMake({ return SyntasticMake({
\ 'makeprg': makeprg, \ 'makeprg': makeprg,
\ 'errorformat': errorformat, \ 'errorformat': errorformat,
\ 'cwd': expand('%:p:h'), \ 'cwd': expand('%:p:h', 1),
\ 'preprocess': 'cabal', \ 'preprocess': 'cabal',
\ 'defaults': {'bufnr': bufnr('')} }) \ 'defaults': {'bufnr': bufnr('')} })
endfunction endfunction
@ -52,4 +52,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -36,4 +36,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -44,4 +44,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -28,7 +28,7 @@ function! SyntaxCheckers_cobol_cobc_IsAvailable() dict
let g:syntastic_cobol_compiler = self.getExec() let g:syntastic_cobol_compiler = self.getExec()
endif endif
call self.log('g:syntastic_cobol_compiler =', g:syntastic_cobol_compiler) call self.log('g:syntastic_cobol_compiler =', g:syntastic_cobol_compiler)
return executable(expand(g:syntastic_cobol_compiler)) return executable(expand(g:syntastic_cobol_compiler, 1))
endfunction endfunction
function! SyntaxCheckers_cobol_cobc_GetLocList() dict function! SyntaxCheckers_cobol_cobc_GetLocList() dict
@ -44,4 +44,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -58,4 +58,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -46,4 +46,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -37,4 +37,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -22,4 +22,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'exec': 'clang-check', \ 'exec': 'clang-check',
\ 'redirect': 'c/clang_check'}) \ 'redirect': 'c/clang_check'})
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -22,4 +22,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'exec': 'clang-tidy', \ 'exec': 'clang-tidy',
\ 'redirect': 'c/clang_tidy'}) \ 'redirect': 'c/clang_tidy'})
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -8,13 +8,6 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
"============================================================================ "============================================================================
"
" The setting 'g:syntastic_cppcheck_config_file' allows you to define a file
" that contains additional compiler arguments like include directories or
" CFLAGS. The file is expected to contain one option per line. If none is
" given the filename defaults to '.syntastic_cppcheck_config':
"
" let g:syntastic_cppcheck_config_file = '.config'
if exists("g:loaded_syntastic_cpp_cppcheck_checker") if exists("g:loaded_syntastic_cpp_cppcheck_checker")
finish finish
@ -28,4 +21,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'name': 'cppcheck', \ 'name': 'cppcheck',
\ 'redirect': 'c/cppcheck'}) \ 'redirect': 'c/cppcheck'})
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -9,18 +9,6 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
" "
"============================================================================ "============================================================================
"
" For details about cpplint see:
" https://code.google.com/p/google-styleguide/
"
" Checker options:
"
" - g:syntastic_cpp_cpplint_thres (integer; default: 5)
" error threshold: policy violations with a severity above this
" value are highlighted as errors, the others are warnings
"
" - g:syntastic_cpp_cpplint_args (string; default: '--verbose=3')
" command line options to pass to cpplint
if exists("g:loaded_syntastic_cpp_cpplint_checker") if exists("g:loaded_syntastic_cpp_cpplint_checker")
finish finish
@ -61,4 +49,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -27,7 +27,7 @@ function! SyntaxCheckers_cpp_gcc_IsAvailable() dict
let g:syntastic_cpp_compiler = executable(self.getExec()) ? self.getExec() : 'clang++' let g:syntastic_cpp_compiler = executable(self.getExec()) ? self.getExec() : 'clang++'
endif endif
call self.log('g:syntastic_cpp_compiler =', g:syntastic_cpp_compiler) call self.log('g:syntastic_cpp_compiler =', g:syntastic_cpp_compiler)
return executable(expand(g:syntastic_cpp_compiler)) return executable(expand(g:syntastic_cpp_compiler, 1))
endfunction endfunction
function! SyntaxCheckers_cpp_gcc_GetLocList() dict function! SyntaxCheckers_cpp_gcc_GetLocList() dict
@ -53,4 +53,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -8,13 +8,6 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
"============================================================================ "============================================================================
"
" The setting 'g:syntastic_oclint_config_file' allows you to define a file
" that contains additional compiler arguments like include directories or
" CFLAGS. The file is expected to contain one option per line. If none is
" given the filename defaults to '.syntastic_oclint_config':
"
" let g:syntastic_oclint_config_file = '.config'
if exists("g:loaded_syntastic_cpp_oclint_checker") if exists("g:loaded_syntastic_cpp_oclint_checker")
finish finish
@ -28,4 +21,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'name': 'oclint', \ 'name': 'oclint',
\ 'redirect': 'c/oclint'}) \ 'redirect': 'c/oclint'})
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -23,4 +23,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'exec': 'lint-nt', \ 'exec': 'lint-nt',
\ 'redirect': 'c/pc_lint'}) \ 'redirect': 'c/pc_lint'})
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -36,4 +36,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -8,11 +8,6 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
"============================================================================ "============================================================================
"
" Specify additional options to csslint with this option. e.g. to disable
" warnings:
"
" let g:syntastic_csslint_options = '--warnings=none'
if exists('g:loaded_syntastic_css_csslint_checker') if exists('g:loaded_syntastic_css_csslint_checker')
finish finish
@ -49,4 +44,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -9,10 +9,6 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
" "
"============================================================================ "============================================================================
"
" See here for details of phpcs
" - phpcs (see http://pear.php.net/package/PHP_CodeSniffer)
"
if exists("g:loaded_syntastic_css_phpcs_checker") if exists("g:loaded_syntastic_css_phpcs_checker")
finish finish
@ -26,4 +22,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'name': 'phpcs', \ 'name': 'phpcs',
\ 'redirect': 'php/phpcs'}) \ 'redirect': 'php/phpcs'})
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -9,11 +9,6 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
" "
"============================================================================ "============================================================================
"
" For details about PrettyCSS see:
"
" - http://fidian.github.io/PrettyCSS/
" - https://github.com/fidian/PrettyCSS
if exists("g:loaded_syntastic_css_prettycss_checker") if exists("g:loaded_syntastic_css_prettycss_checker")
finish finish
@ -63,4 +58,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -23,4 +23,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'name': 'recess', \ 'name': 'recess',
\ 'redirect': 'less/recess'}) \ 'redirect': 'less/recess'})
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -39,4 +39,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -6,18 +6,6 @@
" "
"============================================================================ "============================================================================
" in order to also check header files add this to your .vimrc:
" (this creates an empty .syntastic_dummy.cu file in your source directory)
"
" let g:syntastic_cuda_check_header = 1
" By default, nvcc and thus syntastic, defaults to the most basic architecture.
" This can produce false errors if the developer intends to compile for newer
" hardware and use newer features, eg. double precision numbers. To pass a
" specific target arch to nvcc, e.g. add the following to your .vimrc:
"
" let g:syntastic_cuda_arch = "sm_20"
if exists("g:loaded_syntastic_cuda_nvcc_checker") if exists("g:loaded_syntastic_cuda_nvcc_checker")
finish finish
endif endif
@ -53,7 +41,7 @@ function! SyntaxCheckers_cuda_nvcc_GetLocList() dict
\ '%DMaking %*\a in %f,'. \ '%DMaking %*\a in %f,'.
\ '%f|%l| %m' \ '%f|%l| %m'
if expand('%') =~? '\m\%(.h\|.hpp\|.cuh\)$' if expand('%', 1) =~? '\m\%(.h\|.hpp\|.cuh\)$'
if exists('g:syntastic_cuda_check_header') if exists('g:syntastic_cuda_check_header')
let makeprg = let makeprg =
\ 'echo > .syntastic_dummy.cu ; ' . \ 'echo > .syntastic_dummy.cu ; ' .
@ -75,4 +63,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -32,7 +32,7 @@ function! SyntaxCheckers_d_dmd_IsAvailable() dict
let g:syntastic_d_compiler = self.getExec() let g:syntastic_d_compiler = self.getExec()
endif endif
call self.log('g:syntastic_d_compiler =', g:syntastic_d_compiler) call self.log('g:syntastic_d_compiler =', g:syntastic_d_compiler)
return executable(expand(g:syntastic_d_compiler)) return executable(expand(g:syntastic_d_compiler, 1))
endfunction endfunction
function! SyntaxCheckers_d_dmd_GetLocList() dict function! SyntaxCheckers_d_dmd_GetLocList() dict
@ -57,4 +57,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -53,7 +53,7 @@ function! SyntaxCheckers_dart_dartanalyzer_GetLocList() dict
let loclist = SyntasticMake({ let loclist = SyntasticMake({
\ 'makeprg': makeprg, \ 'makeprg': makeprg,
\ 'errorformat': errorformat, \ 'errorformat': errorformat,
\ 'returns': [0, 1, 2] }) \ 'returns': [0, 1, 2, 3] })
for e in loclist for e in loclist
let e['text'] = substitute(e['text'], '\m\\\([\\|]\)', '\1', 'g') let e['text'] = substitute(e['text'], '\m\\\([\\|]\)', '\1', 'g')
@ -73,4 +73,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -52,4 +52,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -22,4 +22,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'name': 'xmllint', \ 'name': 'xmllint',
\ 'redirect': 'xml/xmllint'}) \ 'redirect': 'xml/xmllint'})
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -35,4 +35,4 @@ call SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -35,7 +35,7 @@ function! SyntaxCheckers_elixir_elixir_GetLocList() dict
let make_options = {} let make_options = {}
let compile_command = 'elixir' let compile_command = 'elixir'
let mix_file = syntastic#util#findInParent('mix.exs', expand('%:p:h')) let mix_file = syntastic#util#findInParent('mix.exs', expand('%:p:h', 1))
if filereadable(mix_file) if filereadable(mix_file)
let compile_command = 'mix compile' let compile_command = 'mix compile'
@ -56,4 +56,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -19,13 +19,13 @@ if !exists('g:syntastic_erlc_include_path')
let g:syntastic_erlc_include_path = '' let g:syntastic_erlc_include_path = ''
endif endif
let s:check_file = syntastic#util#shescape(expand('<sfile>:p:h') . syntastic#util#Slash() . 'erlang_check_file.erl') let s:check_file = syntastic#util#shescape(expand('<sfile>:p:h', 1) . syntastic#util#Slash() . 'erlang_check_file.erl')
let s:save_cpo = &cpo let s:save_cpo = &cpo
set cpo&vim set cpo&vim
function! SyntaxCheckers_erlang_escript_GetLocList() dict function! SyntaxCheckers_erlang_escript_GetLocList() dict
if expand('%:e') ==# 'hrl' if expand('%:e', 1) ==# 'hrl'
return [] return []
endif endif
@ -58,4 +58,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -39,4 +39,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -27,7 +27,7 @@ function! SyntaxCheckers_eruby_ruby_IsAvailable() dict
endfunction endfunction
function! SyntaxCheckers_eruby_ruby_GetLocList() dict function! SyntaxCheckers_eruby_ruby_GetLocList() dict
let fname = "'" . escape(expand('%'), "\\'") . "'" let fname = "'" . escape(expand('%', 1), "\\'") . "'"
" TODO: encodings became useful in ruby 1.9 :) " TODO: encodings became useful in ruby 1.9 :)
if syntastic#util#versionIsAtLeast(syntastic#util#getVersion(self.getExecEscaped(). ' --version'), [1, 9]) if syntastic#util#versionIsAtLeast(syntastic#util#getVersion(self.getExecEscaped(). ' --version'), [1, 9])
@ -75,4 +75,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -27,7 +27,7 @@ function! SyntaxCheckers_fortran_gfortran_IsAvailable() dict
let g:syntastic_fortran_compiler = self.getExec() let g:syntastic_fortran_compiler = self.getExec()
endif endif
call self.log('g:syntastic_fortran_compiler = ', g:syntastic_fortran_compiler) call self.log('g:syntastic_fortran_compiler = ', g:syntastic_fortran_compiler)
return executable(expand(g:syntastic_fortran_compiler)) return executable(expand(g:syntastic_fortran_compiler, 1))
endfunction endfunction
function! SyntaxCheckers_fortran_gfortran_GetLocList() dict function! SyntaxCheckers_fortran_gfortran_GetLocList() dict
@ -49,4 +49,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -27,7 +27,7 @@ let s:glsl_extensions = {
let s:save_cpo = &cpo let s:save_cpo = &cpo
set cpo&vim set cpo&vim
function! SyntaxCheckers_glsl_cgc_GetLocList() dict function! SyntaxCheckers_glsl_cgc_GetLocList() dict " {{{1
let makeprg = self.makeprgBuild({ let makeprg = self.makeprgBuild({
\ 'args_before': '-oglsl -profile ' . s:GetProfile(), \ 'args_before': '-oglsl -profile ' . s:GetProfile(),
\ 'args': (exists('g:syntastic_glsl_options') ? ' ' . g:syntastic_glsl_options : '') }) \ 'args': (exists('g:syntastic_glsl_options') ? ' ' . g:syntastic_glsl_options : '') })
@ -39,9 +39,11 @@ function! SyntaxCheckers_glsl_cgc_GetLocList() dict
return SyntasticMake({ return SyntasticMake({
\ 'makeprg': makeprg, \ 'makeprg': makeprg,
\ 'errorformat': errorformat }) \ 'errorformat': errorformat })
endfunction endfunction " }}}1
function! s:GetProfile() " Utilities {{{1
function! s:GetProfile() " {{{2
let save_view = winsaveview() let save_view = winsaveview()
let old_foldenable = &foldenable let old_foldenable = &foldenable
let old_lazyredraw = &lazyredraw let old_lazyredraw = &lazyredraw
@ -61,11 +63,13 @@ function! s:GetProfile()
let profile = matchstr(getline(line), magic . '\zs.*') let profile = matchstr(getline(line), magic . '\zs.*')
else else
let extensions = exists('g:syntastic_glsl_extensions') ? g:syntastic_glsl_extensions : s:glsl_extensions let extensions = exists('g:syntastic_glsl_extensions') ? g:syntastic_glsl_extensions : s:glsl_extensions
let profile = get(extensions, tolower(expand('%:e')), 'gpu_vert') let profile = get(extensions, tolower(expand('%:e', 1)), 'gpu_vert')
endif endif
return profile return profile
endfunction endfunction " }}}2
" }}}1
call g:SyntasticRegistry.CreateAndRegisterChecker({ call g:SyntasticRegistry.CreateAndRegisterChecker({
\'filetype': 'glsl', \'filetype': 'glsl',
@ -74,4 +78,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -8,10 +8,11 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
" "
"============================================================================
"
" This syntax checker does not reformat your source code. " This syntax checker does not reformat your source code.
" Use a BufWritePre autocommand to that end: " Use a BufWritePre autocommand to that end:
" autocmd FileType go autocmd BufWritePre <buffer> Fmt " autocmd FileType go autocmd BufWritePre <buffer> Fmt
"============================================================================
if exists("g:loaded_syntastic_go_go_checker") if exists("g:loaded_syntastic_go_go_checker")
finish finish
@ -22,7 +23,7 @@ let s:save_cpo = &cpo
set cpo&vim set cpo&vim
function! SyntaxCheckers_go_go_IsAvailable() dict function! SyntaxCheckers_go_go_IsAvailable() dict
return executable('go') && executable('gofmt') return executable(self.getExec()) && executable('gofmt')
endfunction endfunction
function! SyntaxCheckers_go_go_GetLocList() dict function! SyntaxCheckers_go_go_GetLocList() dict
@ -48,13 +49,17 @@ function! SyntaxCheckers_go_go_GetLocList() dict
" Test files, i.e. files with a name ending in `_test.go`, are not " Test files, i.e. files with a name ending in `_test.go`, are not
" compiled by `go build`, therefore `go test` must be called for those. " compiled by `go build`, therefore `go test` must be called for those.
if match(expand('%'), '\m_test\.go$') == -1 if match(expand('%', 1), '\m_test\.go$') == -1
let makeprg = 'go build ' . syntastic#c#NullOutput() let cmd = 'build'
let opts = syntastic#util#var('go_go_build_args')
let cleanup = 0 let cleanup = 0
else else
let makeprg = 'go test -c ' . syntastic#c#NullOutput() let cmd = 'test -c'
let opts = syntastic#util#var('go_go_test_args')
let cleanup = 1 let cleanup = 1
endif endif
let opt_str = (type(opts) != type('') || opts != '') ? join(syntastic#util#argsescape(opts)) : opts
let makeprg = self.getExec() . ' ' . cmd . ' ' . opt_str . ' ' . syntastic#c#NullOutput()
" The first pattern is for warnings from C compilers. " The first pattern is for warnings from C compilers.
let errorformat = let errorformat =
@ -71,11 +76,11 @@ function! SyntaxCheckers_go_go_GetLocList() dict
let errors = SyntasticMake({ let errors = SyntasticMake({
\ 'makeprg': makeprg, \ 'makeprg': makeprg,
\ 'errorformat': errorformat, \ 'errorformat': errorformat,
\ 'cwd': expand('%:p:h'), \ 'cwd': expand('%:p:h', 1),
\ 'defaults': {'type': 'e'} }) \ 'defaults': {'type': 'e'} })
if cleanup if cleanup
call delete(expand('%:p:h') . syntastic#util#Slash() . expand('%:p:h:t') . '.test') call delete(expand('%:p:h', 1) . syntastic#util#Slash() . expand('%:p:h:t', 1) . '.test')
endif endif
return errors return errors
@ -88,4 +93,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -8,10 +8,11 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
" "
"============================================================================
"
" This syntax checker does not reformat your source code. " This syntax checker does not reformat your source code.
" Use a BufWritePre autocommand to that end: " Use a BufWritePre autocommand to that end:
" autocmd FileType go autocmd BufWritePre <buffer> Fmt " autocmd FileType go autocmd BufWritePre <buffer> Fmt
"============================================================================
if exists("g:loaded_syntastic_go_gofmt_checker") if exists("g:loaded_syntastic_go_gofmt_checker")
finish finish
@ -41,4 +42,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -28,6 +28,7 @@ function! SyntaxCheckers_go_golint_GetLocList() dict
return SyntasticMake({ return SyntasticMake({
\ 'makeprg': makeprg, \ 'makeprg': makeprg,
\ 'errorformat': errorformat, \ 'errorformat': errorformat,
\ 'defaults': {'type': 'w'},
\ 'subtype': 'Style' }) \ 'subtype': 'Style' })
endfunction endfunction
@ -38,4 +39,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -32,7 +32,7 @@ function! SyntaxCheckers_go_gotype_GetLocList() dict
return SyntasticMake({ return SyntasticMake({
\ 'makeprg': makeprg, \ 'makeprg': makeprg,
\ 'errorformat': errorformat, \ 'errorformat': errorformat,
\ 'cwd': expand('%:p:h'), \ 'cwd': expand('%:p:h', 1),
\ 'defaults': {'type': 'e'} }) \ 'defaults': {'type': 'e'} })
endfunction endfunction
@ -43,4 +43,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -19,11 +19,11 @@ let s:save_cpo = &cpo
set cpo&vim set cpo&vim
function! SyntaxCheckers_go_govet_IsAvailable() dict function! SyntaxCheckers_go_govet_IsAvailable() dict
return executable('go') return executable(self.getExec())
endfunction endfunction
function! SyntaxCheckers_go_govet_GetLocList() dict function! SyntaxCheckers_go_govet_GetLocList() dict
let makeprg = 'go vet' let makeprg = self.getExec() . ' vet'
let errorformat = let errorformat =
\ '%Evet: %.%\+: %f:%l:%c: %m,' . \ '%Evet: %.%\+: %f:%l:%c: %m,' .
@ -37,15 +37,16 @@ function! SyntaxCheckers_go_govet_GetLocList() dict
return SyntasticMake({ return SyntasticMake({
\ 'makeprg': makeprg, \ 'makeprg': makeprg,
\ 'errorformat': errorformat, \ 'errorformat': errorformat,
\ 'cwd': expand('%:p:h'), \ 'cwd': expand('%:p:h', 1),
\ 'defaults': {'type': 'w'} }) \ 'defaults': {'type': 'w'} })
endfunction endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'go', \ 'filetype': 'go',
\ 'name': 'govet'}) \ 'name': 'govet',
\ 'exec': 'go' })
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -43,4 +43,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -34,4 +34,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -40,4 +40,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -30,10 +30,10 @@ function! SyntaxCheckers_haskell_ghc_mod_IsAvailable() dict
" know the version in order to know how to find out the version. :) " know the version in order to know how to find out the version. :)
" Try "ghc-mod version". " Try "ghc-mod version".
let ver = filter(split(system(self.getExecEscaped() . ' version'), '\n'), 'v:val =~# ''\m^ghc-mod version''') let ver = filter(split(system(self.getExecEscaped() . ' version'), '\n'), 'v:val =~# ''\m\sversion''')
if !len(ver) if !len(ver)
" That didn't work. Try "ghc-mod" alone. " That didn't work. Try "ghc-mod" alone.
let ver = filter(split(system(self.getExecEscaped()), '\n'), 'v:val =~# ''\m^ghc-mod version''') let ver = filter(split(system(self.getExecEscaped()), '\n'), 'v:val =~# ''\m\sversion''')
endif endif
if len(ver) if len(ver)
@ -80,4 +80,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -53,4 +53,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -36,4 +36,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -40,4 +40,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -24,7 +24,7 @@ function! SyntaxCheckers_haxe_haxe_GetLocList() dict
elseif exists('g:vaxe_hxml') elseif exists('g:vaxe_hxml')
let hxml = g:vaxe_hxml let hxml = g:vaxe_hxml
else else
let hxml = syntastic#util#findInParent('*.hxml', expand('%:p:h')) let hxml = syntastic#util#findInParent('*.hxml', expand('%:p:h', 1))
endif endif
let hxml = fnamemodify(hxml, ':p') let hxml = fnamemodify(hxml, ':p')
@ -60,4 +60,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -35,4 +35,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -51,4 +51,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -17,23 +17,17 @@
" "
" HTML Tidy for HTML5 can be used without changes by this checker, just install " HTML Tidy for HTML5 can be used without changes by this checker, just install
" it and point g:syntastic_html_tidy_exec to the executable. " it and point g:syntastic_html_tidy_exec to the executable.
"
" Checker options:
"
" - g:syntastic_html_tidy_ignore_errors (list; default: [])
" list of errors to ignore
" - g:syntastic_html_tidy_blocklevel_tags (list; default: [])
" list of additional blocklevel tags, to be added to "--new-blocklevel-tags"
" - g:syntastic_html_tidy_inline_tags (list; default: [])
" list of additional inline tags, to be added to "--new-inline-tags"
" - g:syntastic_html_tidy_empty_tags (list; default: [])
" list of additional empty tags, to be added to "--new-empty-tags"
if exists("g:loaded_syntastic_html_tidy_checker") if exists("g:loaded_syntastic_html_tidy_checker")
finish finish
endif endif
let g:loaded_syntastic_html_tidy_checker = 1 let g:loaded_syntastic_html_tidy_checker = 1
let s:save_cpo = &cpo
set cpo&vim
" Checker options {{{1
if !exists('g:syntastic_html_tidy_ignore_errors') if !exists('g:syntastic_html_tidy_ignore_errors')
let g:syntastic_html_tidy_ignore_errors = [] let g:syntastic_html_tidy_ignore_errors = []
endif endif
@ -50,27 +44,9 @@ if !exists('g:syntastic_html_tidy_empty_tags')
let g:syntastic_html_tidy_empty_tags = [] let g:syntastic_html_tidy_empty_tags = []
endif endif
let s:save_cpo = &cpo " }}}1
set cpo&vim
" TODO: join this with xhtml.vim for DRY's sake? " Constants {{{1
function! s:TidyEncOptByFenc()
let TIDY_OPTS = {
\ 'utf-8': '-utf8',
\ 'ascii': '-ascii',
\ 'latin1': '-latin1',
\ 'iso-2022-jp': '-iso-2022',
\ 'cp1252': '-win1252',
\ 'macroman': '-mac',
\ 'utf-16le': '-utf16le',
\ 'utf-16': '-utf16',
\ 'big5': '-big5',
\ 'cp932': '-shiftjis',
\ 'sjis': '-shiftjis',
\ 'cp850': '-ibm858',
\ }
return get(TIDY_OPTS, &fileencoding, '-utf8')
endfunction
let s:IGNORE_ERRORS = [ let s:IGNORE_ERRORS = [
\ "<table> lacks \"summary\" attribute", \ "<table> lacks \"summary\" attribute",
@ -163,29 +139,9 @@ let s:EMPTY_TAGS = [
\ ] \ ]
lockvar! s:EMPTY_TAGS lockvar! s:EMPTY_TAGS
function! s:IgnoreError(text) " }}}1
for item in s:IGNORE_ERRORS + g:syntastic_html_tidy_ignore_errors
if stridx(a:text, item) != -1
return 1
endif
endfor
return 0
endfunction
function! s:NewTags(name) function! SyntaxCheckers_html_tidy_GetLocList() dict " {{{1
return syntastic#util#shescape(join( s:{toupper(a:name)} + g:syntastic_html_tidy_{a:name}, ',' ))
endfunction
function! s:Args()
let args = s:TidyEncOptByFenc() .
\ ' --new-blocklevel-tags ' . s:NewTags('blocklevel_tags') .
\ ' --new-inline-tags ' . s:NewTags('inline_tags') .
\ ' --new-empty-tags ' . s:NewTags('empty_tags') .
\ ' -e'
return args
endfunction
function! SyntaxCheckers_html_tidy_GetLocList() dict
let makeprg = self.makeprgBuild({ 'args_after': s:Args() }) let makeprg = self.makeprgBuild({ 'args_after': s:Args() })
let errorformat = let errorformat =
@ -207,7 +163,52 @@ function! SyntaxCheckers_html_tidy_GetLocList() dict
endfor endfor
return loclist return loclist
endfunction endfunction " }}}1
" Utilities {{{1
" TODO: join this with xhtml.vim for DRY's sake?
function! s:TidyEncOptByFenc() " {{{2
let TIDY_OPTS = {
\ 'utf-8': '-utf8',
\ 'ascii': '-ascii',
\ 'latin1': '-latin1',
\ 'iso-2022-jp': '-iso-2022',
\ 'cp1252': '-win1252',
\ 'macroman': '-mac',
\ 'utf-16le': '-utf16le',
\ 'utf-16': '-utf16',
\ 'big5': '-big5',
\ 'cp932': '-shiftjis',
\ 'sjis': '-shiftjis',
\ 'cp850': '-ibm858',
\ }
return get(TIDY_OPTS, &fileencoding, '-utf8')
endfunction " }}}2
function! s:IgnoreError(text) " {{{2
for item in s:IGNORE_ERRORS + g:syntastic_html_tidy_ignore_errors
if stridx(a:text, item) != -1
return 1
endif
endfor
return 0
endfunction " }}}2
function! s:NewTags(name) " {{{2
return syntastic#util#shescape(join( s:{toupper(a:name)} + g:syntastic_html_tidy_{a:name}, ',' ))
endfunction " }}}2
function! s:Args() " {{{2
let args = s:TidyEncOptByFenc() .
\ ' --new-blocklevel-tags ' . s:NewTags('blocklevel_tags') .
\ ' --new-inline-tags ' . s:NewTags('inline_tags') .
\ ' --new-empty-tags ' . s:NewTags('empty_tags') .
\ ' -e'
return args
endfunction " }}}2
" }}}1
call g:SyntasticRegistry.CreateAndRegisterChecker({ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'html', \ 'filetype': 'html',
@ -216,4 +217,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -9,24 +9,6 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
" "
"============================================================================ "============================================================================
"
" For detail;s about validator see: http://about.validator.nu/
"
" Checker options:
"
" - g:syntastic_html_validator_api (string; default: 'http://validator.nu/')
" URL of the service to use for checking; leave it to the default to run the
" checks against http://validator.nu/, or set it to 'http://localhost:8888/'
" if you're running a local service as per http://about.validator.nu/#src
"
" - g:syntastic_html_validator_parser (string; default: empty)
" parser to use; legal values are: xml, xmldtd, html, html5, html4, html4tr;
" set it to 'html5' to check HTML5 files; see the wiki for reference:
" http://wiki.whatwg.org/wiki/Validator.nu_Common_Input_Parameters#parser
"
" - g:syntastic_html_validator_nsfilter (string; default: empty)
" sets the nsfilter for the parser; see the wiki for details:
" http://wiki.whatwg.org/wiki/Validator.nu_Common_Input_Parameters#nsfilter
if exists("g:loaded_syntastic_html_validator_checker") if exists("g:loaded_syntastic_html_validator_checker")
finish finish
@ -50,7 +32,7 @@ set cpo&vim
function! SyntaxCheckers_html_validator_GetLocList() dict function! SyntaxCheckers_html_validator_GetLocList() dict
let fname = syntastic#util#shexpand('%') let fname = syntastic#util#shexpand('%')
let makeprg = self.getExecEscaped() . ' -s --compressed -F out=gnu -F asciiquotes=yes' . let makeprg = self.getExecEscaped() . ' -q -s --compressed -F out=gnu -F asciiquotes=yes' .
\ (g:syntastic_html_validator_parser != '' ? ' -F parser=' . g:syntastic_html_validator_parser : '') . \ (g:syntastic_html_validator_parser != '' ? ' -F parser=' . g:syntastic_html_validator_parser : '') .
\ (g:syntastic_html_validator_nsfilter != '' ? ' -F nsfilter=' . g:syntastic_html_validator_nsfilter : '') . \ (g:syntastic_html_validator_nsfilter != '' ? ' -F nsfilter=' . g:syntastic_html_validator_nsfilter : '') .
\ ' -F doc=@' . fname . '\;type=text/html\;filename=' . fname . ' ' . g:syntastic_html_validator_api \ ' -F doc=@' . fname . '\;type=text/html\;filename=' . fname . ' ' . g:syntastic_html_validator_api
@ -84,4 +66,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -9,13 +9,6 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
" "
"============================================================================ "============================================================================
"
" Checker option:
"
" - g:syntastic_html_w3_api (string; default: 'http://validator.w3.org/check')
" URL of the service to use for checking; leave it to the default to run the
" checks against http://validator.w3.org/, or set it to
" 'http://localhost/w3c-validator/check' if you're running a local service
if exists("g:loaded_syntastic_html_w3_checker") if exists("g:loaded_syntastic_html_w3_checker")
finish finish
@ -30,7 +23,7 @@ let s:save_cpo = &cpo
set cpo&vim set cpo&vim
function! SyntaxCheckers_html_w3_GetLocList() dict function! SyntaxCheckers_html_w3_GetLocList() dict
let makeprg = self.getExecEscaped() . ' -s -F output=json ' . let makeprg = self.getExecEscaped() . ' -q -s -F output=json ' .
\ '-F uploaded_file=@' . syntastic#util#shexpand('%:p') . '\;type=text/html ' . \ '-F uploaded_file=@' . syntastic#util#shexpand('%:p') . '\;type=text/html ' .
\ g:syntastic_html_w3_api \ g:syntastic_html_w3_api
@ -66,4 +59,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -32,8 +32,8 @@ function! SyntaxCheckers_java_checkstyle_IsAvailable() dict
return 0 return 0
endif endif
let classpath = expand(g:syntastic_java_checkstyle_classpath) let classpath = expand(g:syntastic_java_checkstyle_classpath, 1)
let conf_file = expand(g:syntastic_java_checkstyle_conf_file) let conf_file = expand(g:syntastic_java_checkstyle_conf_file, 1)
call self.log( call self.log(
\ 'filereadable(' . string(classpath) . ') = ' . filereadable(classpath) . ', ' . \ 'filereadable(' . string(classpath) . ') = ' . filereadable(classpath) . ', ' .
\ 'filereadable(' . string(conf_file) . ') = ' . filereadable(conf_file)) \ 'filereadable(' . string(conf_file) . ') = ' . filereadable(conf_file))
@ -43,7 +43,7 @@ endfunction
function! SyntaxCheckers_java_checkstyle_GetLocList() dict function! SyntaxCheckers_java_checkstyle_GetLocList() dict
let fname = syntastic#util#shescape( expand('%:p:h') . syntastic#util#Slash() . expand('%:t') ) let fname = syntastic#util#shescape( expand('%:p:h', 1) . syntastic#util#Slash() . expand('%:t', 1) )
if has('win32unix') if has('win32unix')
let fname = substitute(system('cygpath -m ' . fname), '\m\%x00', '', 'g') let fname = substitute(system('cygpath -m ' . fname), '\m\%x00', '', 'g')
@ -51,9 +51,9 @@ function! SyntaxCheckers_java_checkstyle_GetLocList() dict
let makeprg = self.makeprgBuild({ let makeprg = self.makeprgBuild({
\ 'args_after': [ \ 'args_after': [
\ '-cp', expand(g:syntastic_java_checkstyle_classpath), \ '-cp', expand(g:syntastic_java_checkstyle_classpath, 1),
\ 'com.puppycrawl.tools.checkstyle.Main', \ 'com.puppycrawl.tools.checkstyle.Main',
\ '-c', expand(g:syntastic_java_checkstyle_conf_file), \ '-c', expand(g:syntastic_java_checkstyle_conf_file, 1),
\ '-f', 'xml'], \ '-f', 'xml'],
\ 'fname': fname }) \ 'fname': fname })
@ -74,4 +74,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -18,7 +18,11 @@ let g:syntastic_java_javac_maven_pom_tags = ['build', 'properties']
let g:syntastic_java_javac_maven_pom_properties = {} let g:syntastic_java_javac_maven_pom_properties = {}
let s:has_maven = 0 let s:has_maven = 0
" Global Options let s:save_cpo = &cpo
set cpo&vim
" Checker options {{{1
if !exists('g:syntastic_java_javac_executable') if !exists('g:syntastic_java_javac_executable')
let g:syntastic_java_javac_executable = 'javac' let g:syntastic_java_javac_executable = 'javac'
endif endif
@ -43,17 +47,6 @@ if !exists('g:syntastic_java_javac_delete_output')
let g:syntastic_java_javac_delete_output = 1 let g:syntastic_java_javac_delete_output = 1
endif endif
let s:save_cpo = &cpo
set cpo&vim
function! s:CygwinPath(path)
return substitute(system('cygpath -m ' . syntastic#util#shescape(a:path)), "\n", '', 'g')
endfunction
if !exists('g:syntastic_java_javac_temp_dir')
let g:syntastic_java_javac_temp_dir = syntastic#util#tmpdir()
endif
if !exists('g:syntastic_java_javac_autoload_maven_classpath') if !exists('g:syntastic_java_javac_autoload_maven_classpath')
let g:syntastic_java_javac_autoload_maven_classpath = 1 let g:syntastic_java_javac_autoload_maven_classpath = 1
endif endif
@ -78,32 +71,144 @@ if !exists('g:syntastic_java_javac_maven_pom_classpath')
let g:syntastic_java_javac_maven_pom_classpath = {} let g:syntastic_java_javac_maven_pom_classpath = {}
endif endif
function! s:RemoveCarriageReturn(line) " }}}1
command! SyntasticJavacEditClasspath call s:EditClasspath()
if g:syntastic_java_javac_config_file_enabled
command! SyntasticJavacEditConfig call s:EditConfig()
endif
function! SyntaxCheckers_java_javac_IsAvailable() dict " {{{1
let s:has_maven = executable(expand(g:syntastic_java_maven_executable, 1))
return executable(expand(g:syntastic_java_javac_executable, 1))
endfunction " }}}1
function! SyntaxCheckers_java_javac_GetLocList() dict " {{{1
let javac_opts = g:syntastic_java_javac_options
let output_dir = ''
if g:syntastic_java_javac_delete_output
let output_dir = syntastic#util#tmpdir()
let javac_opts .= ' -d ' . syntastic#util#shescape(output_dir)
endif
" load classpath from config file
if g:syntastic_java_javac_config_file_enabled
call s:LoadConfigFile()
endif
" add classpathes to javac_classpath {{{2
let javac_classpath = ''
for path in split(g:syntastic_java_javac_classpath, s:ClassSep())
if path != ''
try
let ps = glob(path, 1, 1)
catch
let ps = split(glob(path, 1), "\n")
endtry
if type(ps) == type([])
for p in ps
let javac_classpath = s:AddToClasspath(javac_classpath, p)
endfor
else
let javac_classpath = s:AddToClasspath(javac_classpath, ps)
endif
endif
endfor
if s:has_maven && g:syntastic_java_javac_autoload_maven_classpath
if !g:syntastic_java_javac_delete_output
let javac_opts .= ' -d ' . syntastic#util#shescape(s:MavenOutputDirectory())
endif
let javac_classpath = s:AddToClasspath(javac_classpath, s:GetMavenClasspath())
endif
" }}}2
" load custom classpath {{{2
if g:syntastic_java_javac_custom_classpath_command != ''
let lines = system(g:syntastic_java_javac_custom_classpath_command)
if syntastic#util#isRunningWindows() || has('win32unix')
let lines = substitute(lines, "\r\n", "\n", 'g')
endif
for l in split(lines, "\n")
let javac_classpath = s:AddToClasspath(javac_classpath, l)
endfor
endif
if javac_classpath != ''
let javac_opts .= ' -cp ' . syntastic#util#shexpand(javac_classpath)
endif
" }}}2
let fname = expand('%:p:h', 1) . syntastic#util#Slash() . expand ('%:t', 1)
if has('win32unix')
let fname = s:CygwinPath(fname)
endif
let makeprg = self.makeprgBuild({
\ 'args': javac_opts,
\ 'fname': syntastic#util#shescape(fname) })
" unashamedly stolen from *errorformat-javac* (quickfix.txt) and modified to include error types
let errorformat =
\ '%E%f:%l:\ error:\ %m,'.
\ '%W%f:%l:\ warning:\ %m,'.
\ '%A%f:%l:\ %m,'.
\ '%+Z%p^,'.
\ '%+C%.%#,'.
\ '%-G%.%#'
if output_dir != ''
silent! call mkdir(output_dir, 'p')
endif
let errors = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'postprocess': ['cygwinRemoveCR'] })
if output_dir != ''
call syntastic#util#rmrf(output_dir)
endif
return errors
endfunction " }}}1
" Utilities {{{1
function! s:CygwinPath(path) " {{{2
return substitute(system('cygpath -m ' . syntastic#util#shescape(a:path)), "\n", '', 'g')
endfunction " }}}2
function! s:RemoveCarriageReturn(line) " {{{2
return substitute(a:line, "\r", '', 'g') return substitute(a:line, "\r", '', 'g')
endfunction endfunction " }}}2
function! s:ClassSep() function! s:ClassSep() " {{{2
return (syntastic#util#isRunningWindows() || has('win32unix')) ? ';' : ':' return (syntastic#util#isRunningWindows() || has('win32unix')) ? ';' : ':'
endfunction endfunction " }}}2
function! s:AddToClasspath(classpath, path) function! s:AddToClasspath(classpath, path) " {{{2
if a:path == '' if a:path == ''
return a:classpath return a:classpath
endif endif
return (a:classpath != '') ? a:classpath . s:ClassSep() . a:path : a:path return (a:classpath != '') ? a:classpath . s:ClassSep() . a:path : a:path
endfunction endfunction " }}}2
function! s:SplitClasspath(classpath) function! s:SplitClasspath(classpath) " {{{2
return split(a:classpath, s:ClassSep()) return split(a:classpath, s:ClassSep())
endfunction endfunction " }}}2
function! s:LoadConfigFile() function! s:LoadConfigFile() " {{{2
if filereadable(expand(g:syntastic_java_javac_config_file)) if filereadable(expand(g:syntastic_java_javac_config_file, 1))
exe 'source ' . fnameescape(expand(g:syntastic_java_javac_config_file)) exe 'source ' . fnameescape(expand(g:syntastic_java_javac_config_file, 1))
endif endif
endfunction endfunction " }}}2
function! s:SaveClasspath() function! s:SaveClasspath() " {{{2
" build classpath from lines " build classpath from lines
let path = '' let path = ''
let lines = getline(1, line('$')) let lines = getline(1, line('$'))
@ -112,9 +217,9 @@ function! s:SaveClasspath()
endfor endfor
" save classpath to config file " save classpath to config file
if g:syntastic_java_javac_config_file_enabled if g:syntastic_java_javac_config_file_enabled
if filereadable(expand(g:syntastic_java_javac_config_file)) if filereadable(expand(g:syntastic_java_javac_config_file, 1))
" load lines from config file " load lines from config file
let lines = readfile(expand(g:syntastic_java_javac_config_file)) let lines = readfile(expand(g:syntastic_java_javac_config_file, 1))
" strip g:syntastic_java_javac_classpath options from config file lines " strip g:syntastic_java_javac_classpath options from config file lines
let i = 0 let i = 0
while i < len(lines) while i < len(lines)
@ -130,14 +235,14 @@ function! s:SaveClasspath()
" add new g:syntastic_java_javac_classpath option to config " add new g:syntastic_java_javac_classpath option to config
call add(lines, 'let g:syntastic_java_javac_classpath = ' . string(path)) call add(lines, 'let g:syntastic_java_javac_classpath = ' . string(path))
" save config file lines " save config file lines
call writefile(lines, expand(g:syntastic_java_javac_config_file)) call writefile(lines, expand(g:syntastic_java_javac_config_file, 1))
endif endif
" set new classpath " set new classpath
let g:syntastic_java_javac_classpath = path let g:syntastic_java_javac_classpath = path
let &modified = 0 let &modified = 0
endfunction endfunction " }}}2
function! s:EditClasspath() function! s:EditClasspath() " {{{2
let command = 'syntastic javac classpath' let command = 'syntastic javac classpath'
let winnr = bufwinnr('^' . command . '$') let winnr = bufwinnr('^' . command . '$')
if winnr < 0 if winnr < 0
@ -160,25 +265,25 @@ function! s:EditClasspath()
else else
execute winnr . 'wincmd w' execute winnr . 'wincmd w'
endif endif
endfunction endfunction " }}}2
function! s:SaveConfig() function! s:SaveConfig() " {{{2
" get lines " get lines
let lines = getline(1, line('$')) let lines = getline(1, line('$'))
if g:syntastic_java_javac_config_file_enabled if g:syntastic_java_javac_config_file_enabled
" save config file lines " save config file lines
call writefile(lines, expand(g:syntastic_java_javac_config_file)) call writefile(lines, expand(g:syntastic_java_javac_config_file, 1))
endif endif
let &modified = 0 let &modified = 0
endfunction endfunction " }}}2
function! s:EditConfig() function! s:EditConfig() " {{{2
let command = 'syntastic javac config' let command = 'syntastic javac config'
let winnr = bufwinnr('^' . command . '$') let winnr = bufwinnr('^' . command . '$')
if winnr < 0 if winnr < 0
let lines = [] let lines = []
if filereadable(expand(g:syntastic_java_javac_config_file)) if filereadable(expand(g:syntastic_java_javac_config_file, 1))
let lines = readfile(expand(g:syntastic_java_javac_config_file)) let lines = readfile(expand(g:syntastic_java_javac_config_file, 1))
endif endif
execute (len(lines) + 5) . 'sp ' . fnameescape(command) execute (len(lines) + 5) . 'sp ' . fnameescape(command)
@ -194,9 +299,9 @@ function! s:EditConfig()
else else
execute winnr . 'wincmd w' execute winnr . 'wincmd w'
endif endif
endfunction endfunction " }}}2
function! s:GetMavenProperties() function! s:GetMavenProperties() " {{{2
let mvn_properties = {} let mvn_properties = {}
let pom = findfile('pom.xml', '.;') let pom = findfile('pom.xml', '.;')
if s:has_maven && filereadable(pom) if s:has_maven && filereadable(pom)
@ -230,15 +335,9 @@ function! s:GetMavenProperties()
return g:syntastic_java_javac_maven_pom_properties[pom] return g:syntastic_java_javac_maven_pom_properties[pom]
endif endif
return mvn_properties return mvn_properties
endfunction endfunction " }}}2
command! SyntasticJavacEditClasspath call s:EditClasspath() function! s:GetMavenClasspath() " {{{2
if g:syntastic_java_javac_config_file_enabled
command! SyntasticJavacEditConfig call s:EditConfig()
endif
function! s:GetMavenClasspath()
let pom = findfile('pom.xml', '.;') let pom = findfile('pom.xml', '.;')
if s:has_maven && filereadable(pom) if s:has_maven && filereadable(pom)
if !has_key(g:syntastic_java_javac_maven_pom_ftime, pom) || g:syntastic_java_javac_maven_pom_ftime[pom] != getftime(pom) if !has_key(g:syntastic_java_javac_maven_pom_ftime, pom) || g:syntastic_java_javac_maven_pom_ftime[pom] != getftime(pom)
@ -279,14 +378,9 @@ function! s:GetMavenClasspath()
return g:syntastic_java_javac_maven_pom_classpath[pom] return g:syntastic_java_javac_maven_pom_classpath[pom]
endif endif
return '' return ''
endfunction endfunction " }}}2
function! SyntaxCheckers_java_javac_IsAvailable() dict function! s:MavenOutputDirectory() " {{{2
let s:has_maven = executable(expand(g:syntastic_java_maven_executable))
return executable(expand(g:syntastic_java_javac_executable))
endfunction
function! s:MavenOutputDirectory()
let pom = findfile('pom.xml', '.;') let pom = findfile('pom.xml', '.;')
if s:has_maven && filereadable(pom) if s:has_maven && filereadable(pom)
let mvn_properties = s:GetMavenProperties() let mvn_properties = s:GetMavenProperties()
@ -294,13 +388,13 @@ function! s:MavenOutputDirectory()
if has_key(mvn_properties, 'project.properties.build.dir') if has_key(mvn_properties, 'project.properties.build.dir')
let output_dir = mvn_properties['project.properties.build.dir'] let output_dir = mvn_properties['project.properties.build.dir']
endif endif
if stridx(expand( '%:p:h' ), 'src.main.java') >= 0 if stridx(expand('%:p:h', 1), 'src.main.java') >= 0
let output_dir .= '/target/classes' let output_dir .= '/target/classes'
if has_key(mvn_properties, 'project.build.outputDirectory') if has_key(mvn_properties, 'project.build.outputDirectory')
let output_dir = mvn_properties['project.build.outputDirectory'] let output_dir = mvn_properties['project.build.outputDirectory']
endif endif
endif endif
if stridx(expand( '%:p:h' ), 'src.test.java') >= 0 if stridx(expand('%:p:h', 1), 'src.test.java') >= 0
let output_dir .= '/target/test-classes' let output_dir .= '/target/test-classes'
if has_key(mvn_properties, 'project.build.testOutputDirectory') if has_key(mvn_properties, 'project.build.testOutputDirectory')
let output_dir = mvn_properties['project.build.testOutputDirectory'] let output_dir = mvn_properties['project.build.testOutputDirectory']
@ -313,97 +407,9 @@ function! s:MavenOutputDirectory()
return output_dir return output_dir
endif endif
return '.' return '.'
endfunction endfunction " }}}2
function! SyntaxCheckers_java_javac_GetLocList() dict " }}}1
let javac_opts = g:syntastic_java_javac_options
let output_dir = ''
if g:syntastic_java_javac_delete_output
let output_dir = g:syntastic_java_javac_temp_dir
let javac_opts .= ' -d ' . syntastic#util#shescape(output_dir)
endif
" load classpath from config file
if g:syntastic_java_javac_config_file_enabled
call s:LoadConfigFile()
endif
let javac_classpath = ''
" add classpathes to javac_classpath
for path in split(g:syntastic_java_javac_classpath, s:ClassSep())
if path != ''
try
let ps = glob(path, 0, 1)
catch
let ps = split(glob(path, 0), "\n")
endtry
if type(ps) == type([])
for p in ps
let javac_classpath = s:AddToClasspath(javac_classpath, p)
endfor
else
let javac_classpath = s:AddToClasspath(javac_classpath, ps)
endif
endif
endfor
if s:has_maven && g:syntastic_java_javac_autoload_maven_classpath
if !g:syntastic_java_javac_delete_output
let javac_opts .= ' -d ' . syntastic#util#shescape(s:MavenOutputDirectory())
endif
let javac_classpath = s:AddToClasspath(javac_classpath, s:GetMavenClasspath())
endif
" load custom classpath
if g:syntastic_java_javac_custom_classpath_command != ''
let lines = system(g:syntastic_java_javac_custom_classpath_command)
if syntastic#util#isRunningWindows() || has('win32unix')
let lines = substitute(lines, "\r\n", "\n", 'g')
endif
for l in split(lines, "\n")
let javac_classpath = s:AddToClasspath(javac_classpath, l)
endfor
endif
if javac_classpath != ''
let javac_opts .= ' -cp ' . syntastic#util#shexpand(javac_classpath)
endif
let fname = expand('%:p:h') . syntastic#util#Slash() . expand ('%:t')
if has('win32unix')
let fname = s:CygwinPath(fname)
endif
let makeprg = self.makeprgBuild({
\ 'args': javac_opts,
\ 'fname': syntastic#util#shescape(fname) })
" unashamedly stolen from *errorformat-javac* (quickfix.txt) and modified to include error types
let errorformat =
\ '%E%f:%l:\ error:\ %m,'.
\ '%W%f:%l:\ warning:\ %m,'.
\ '%A%f:%l:\ %m,'.
\ '%+Z%p^,'.
\ '%+C%.%#,'.
\ '%-G%.%#'
if g:syntastic_java_javac_delete_output
silent! call mkdir(output_dir, 'p')
endif
let errors = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'postprocess': ['cygwinRemoveCR'] })
if g:syntastic_java_javac_delete_output
call syntastic#util#rmrf(output_dir)
endif
return errors
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'java', \ 'filetype': 'java',
@ -412,4 +418,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -32,7 +32,7 @@ function! SyntaxCheckers_javascript_closurecompiler_IsAvailable() dict
let cp = get(g:, 'syntastic_javascript_closurecompiler_path', '') let cp = get(g:, 'syntastic_javascript_closurecompiler_path', '')
call self.log('g:syntastic_javascript_closurecompiler_path =', cp) call self.log('g:syntastic_javascript_closurecompiler_path =', cp)
let jar = expand(cp) let jar = expand(cp, 1)
call self.log('filereadable(' . string(jar) . ') = ' . filereadable(jar)) call self.log('filereadable(' . string(jar) . ') = ' . filereadable(jar))
return filereadable(jar) return filereadable(jar)
@ -42,15 +42,15 @@ function! SyntaxCheckers_javascript_closurecompiler_GetLocList() dict
call syntastic#log#deprecationWarn('javascript_closure_compiler_options', 'javascript_closurecompiler_args') call syntastic#log#deprecationWarn('javascript_closure_compiler_options', 'javascript_closurecompiler_args')
call syntastic#log#deprecationWarn('javascript_closure_compiler_file_list', 'javascript_closurecompiler_file_list') call syntastic#log#deprecationWarn('javascript_closure_compiler_file_list', 'javascript_closurecompiler_file_list')
let flist = expand(get(g:, 'syntastic_javascript_closurecompiler_file_list', '')) let flist = expand(get(g:, 'syntastic_javascript_closurecompiler_file_list', ''), 1)
if filereadable(flist) if filereadable(flist)
let file_list = map( readfile(flist), 'expand(v:var)' ) let file_list = map( readfile(flist), 'expand(v:var, 1)' )
else else
let file_list = [expand('%')] let file_list = [expand('%', 1)]
endif endif
let makeprg = self.makeprgBuild({ let makeprg = self.makeprgBuild({
\ 'exe_after': (s:has_script ? [] : ['-jar', expand(g:syntastic_javascript_closurecompiler_path)]), \ 'exe_after': (s:has_script ? [] : ['-jar', expand(g:syntastic_javascript_closurecompiler_path, 1)]),
\ 'args_after': '--js', \ 'args_after': '--js',
\ 'fname': file_list }) \ 'fname': file_list })
@ -73,4 +73,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -61,4 +61,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -0,0 +1,56 @@
"============================================================================
"File: flow.vim
"Description: Javascript syntax checker - using flow
"Maintainer: Michael Robinson <mike@pagesofinterest.net>
"License: This program is free software. It comes without any warranty,
" to the extent permitted by applicable law. You can redistribute
" it and/or modify it under the terms of the Do What The Fuck You
" Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"============================================================================
if exists('g:loaded_syntastic_javascript_flow_checker')
finish
endif
let g:loaded_syntastic_javascript_flow_checker = 1
if !exists('g:syntastic_javascript_flow_sort')
let g:syntastic_javascript_flow_sort = 1
endif
let s:save_cpo = &cpo
set cpo&vim
function! SyntaxCheckers_javascript_flow_GetLocList() dict
let makeprg = self.makeprgBuild({
\ 'exe_after': 'check',
\ 'args_after': '--show-all-errors --json' })
let errorformat =
\ '%f:%l:%c:%n: %m,' .
\ '%f:%l:%c: %m'
let loclist = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'preprocess': 'flow',
\ 'defaults': {'type': 'E'} })
for e in loclist
if get(e, 'col', 0) && get(e, 'nr', 0)
let e['hl'] = '\%>' . (e['col'] - 1) . 'c\%<' . (e['nr'] + 1) . 'c'
let e['nr'] = 0
endif
endfor
return loclist
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'javascript',
\ 'name': 'flow'})
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: set sw=4 sts=4 et fdm=marker:

View file

@ -42,4 +42,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -41,4 +41,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -61,4 +61,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -45,4 +45,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -8,8 +8,8 @@
" Want To Public License, Version 2, as published by Sam Hocevar. " Want To Public License, Version 2, as published by Sam Hocevar.
" See http://sam.zoy.org/wtfpl/COPYING for more details. " See http://sam.zoy.org/wtfpl/COPYING for more details.
" "
"Tested with jslint 0.1.4.
"============================================================================ "============================================================================
if exists("g:loaded_syntastic_javascript_jslint_checker") if exists("g:loaded_syntastic_javascript_jslint_checker")
finish finish
endif endif
@ -48,4 +48,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -48,4 +48,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -40,4 +40,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

View file

@ -38,4 +38,4 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: set et sts=4 sw=4: " vim: set sw=4 sts=4 et fdm=marker:

Some files were not shown because too many files have changed in this diff Show more