Updated plugins

pull/104/head
amix 8 years ago
parent c3ba0f3c06
commit e7a01094b6
  1. 1
      .gitignore
  2. 89
      sources_non_forked/goyo.vim/plugin/goyo.vim
  3. 9
      sources_non_forked/nerdtree/lib/nerdtree/path.vim
  4. 136
      sources_non_forked/syntastic/README.markdown
  5. 211
      sources_non_forked/syntastic/autoload/syntastic/c.vim
  6. 30
      sources_non_forked/syntastic/autoload/syntastic/log.vim
  7. 74
      sources_non_forked/syntastic/autoload/syntastic/preprocess.vim
  8. 85
      sources_non_forked/syntastic/autoload/syntastic/util.vim
  9. 89
      sources_non_forked/syntastic/doc/syntastic.txt
  10. 154
      sources_non_forked/syntastic/plugin/syntastic.vim
  11. 14
      sources_non_forked/syntastic/plugin/syntastic/balloons.vim
  12. 24
      sources_non_forked/syntastic/plugin/syntastic/checker.vim
  13. 42
      sources_non_forked/syntastic/plugin/syntastic/cursor.vim
  14. 37
      sources_non_forked/syntastic/plugin/syntastic/loclist.vim
  15. 23
      sources_non_forked/syntastic/plugin/syntastic/modemap.vim
  16. 10
      sources_non_forked/syntastic/plugin/syntastic/notifiers.vim
  17. 70
      sources_non_forked/syntastic/plugin/syntastic/registry.vim
  18. 6
      sources_non_forked/syntastic/plugin/syntastic/signs.vim
  19. 2
      sources_non_forked/syntastic/syntax_checkers/actionscript/mxmlc.vim
  20. 4
      sources_non_forked/syntastic/syntax_checkers/ada/gcc.vim
  21. 2
      sources_non_forked/syntastic/syntax_checkers/applescript/osacompile.vim
  22. 26
      sources_non_forked/syntastic/syntax_checkers/arduino/avrgcc.vim
  23. 2
      sources_non_forked/syntastic/syntax_checkers/asciidoc/asciidoc.vim
  24. 22
      sources_non_forked/syntastic/syntax_checkers/asm/gcc.vim
  25. 2
      sources_non_forked/syntastic/syntax_checkers/bemhtml/bemhtmllint.vim
  26. 2
      sources_non_forked/syntastic/syntax_checkers/bro/bro.vim
  27. 2
      sources_non_forked/syntastic/syntax_checkers/c/avrgcc.vim
  28. 2
      sources_non_forked/syntastic/syntax_checkers/c/checkpatch.vim
  29. 2
      sources_non_forked/syntastic/syntax_checkers/c/clang_check.vim
  30. 2
      sources_non_forked/syntastic/syntax_checkers/c/clang_tidy.vim
  31. 9
      sources_non_forked/syntastic/syntax_checkers/c/cppcheck.vim
  32. 4
      sources_non_forked/syntastic/syntax_checkers/c/gcc.vim
  33. 2
      sources_non_forked/syntastic/syntax_checkers/c/make.vim
  34. 9
      sources_non_forked/syntastic/syntax_checkers/c/oclint.vim
  35. 2
      sources_non_forked/syntastic/syntax_checkers/c/pc_lint.vim
  36. 15
      sources_non_forked/syntastic/syntax_checkers/c/sparse.vim
  37. 9
      sources_non_forked/syntastic/syntax_checkers/c/splint.vim
  38. 4
      sources_non_forked/syntastic/syntax_checkers/cabal/cabal.vim
  39. 2
      sources_non_forked/syntastic/syntax_checkers/chef/foodcritic.vim
  40. 2
      sources_non_forked/syntastic/syntax_checkers/co/coco.vim
  41. 4
      sources_non_forked/syntastic/syntax_checkers/cobol/cobc.vim
  42. 2
      sources_non_forked/syntastic/syntax_checkers/coffee/coffee.vim
  43. 2
      sources_non_forked/syntastic/syntax_checkers/coffee/coffeelint.vim
  44. 2
      sources_non_forked/syntastic/syntax_checkers/coq/coqtop.vim
  45. 2
      sources_non_forked/syntastic/syntax_checkers/cpp/clang_check.vim
  46. 2
      sources_non_forked/syntastic/syntax_checkers/cpp/clang_tidy.vim
  47. 9
      sources_non_forked/syntastic/syntax_checkers/cpp/cppcheck.vim
  48. 14
      sources_non_forked/syntastic/syntax_checkers/cpp/cpplint.vim
  49. 4
      sources_non_forked/syntastic/syntax_checkers/cpp/gcc.vim
  50. 9
      sources_non_forked/syntastic/syntax_checkers/cpp/oclint.vim
  51. 2
      sources_non_forked/syntastic/syntax_checkers/cpp/pc_lint.vim
  52. 2
      sources_non_forked/syntastic/syntax_checkers/cs/mcs.vim
  53. 7
      sources_non_forked/syntastic/syntax_checkers/css/csslint.vim
  54. 6
      sources_non_forked/syntastic/syntax_checkers/css/phpcs.vim
  55. 7
      sources_non_forked/syntastic/syntax_checkers/css/prettycss.vim
  56. 2
      sources_non_forked/syntastic/syntax_checkers/css/recess.vim
  57. 2
      sources_non_forked/syntastic/syntax_checkers/cucumber/cucumber.vim
  58. 16
      sources_non_forked/syntastic/syntax_checkers/cuda/nvcc.vim
  59. 4
      sources_non_forked/syntastic/syntax_checkers/d/dmd.vim
  60. 4
      sources_non_forked/syntastic/syntax_checkers/dart/dartanalyzer.vim
  61. 2
      sources_non_forked/syntastic/syntax_checkers/docbk/igor.vim
  62. 2
      sources_non_forked/syntastic/syntax_checkers/docbk/xmllint.vim
  63. 2
      sources_non_forked/syntastic/syntax_checkers/dustjs/swiffer.vim
  64. 4
      sources_non_forked/syntastic/syntax_checkers/elixir/elixir.vim
  65. 6
      sources_non_forked/syntastic/syntax_checkers/erlang/escript.vim
  66. 2
      sources_non_forked/syntastic/syntax_checkers/erlang/syntaxerl.vim
  67. 4
      sources_non_forked/syntastic/syntax_checkers/eruby/ruby.vim
  68. 4
      sources_non_forked/syntastic/syntax_checkers/fortran/gfortran.vim
  69. 16
      sources_non_forked/syntastic/syntax_checkers/glsl/cgc.vim
  70. 21
      sources_non_forked/syntastic/syntax_checkers/go/go.vim
  71. 5
      sources_non_forked/syntastic/syntax_checkers/go/gofmt.vim
  72. 3
      sources_non_forked/syntastic/syntax_checkers/go/golint.vim
  73. 4
      sources_non_forked/syntastic/syntax_checkers/go/gotype.vim
  74. 11
      sources_non_forked/syntastic/syntax_checkers/go/govet.vim
  75. 2
      sources_non_forked/syntastic/syntax_checkers/haml/haml.vim
  76. 2
      sources_non_forked/syntastic/syntax_checkers/haml/haml_lint.vim
  77. 2
      sources_non_forked/syntastic/syntax_checkers/handlebars/handlebars.vim
  78. 6
      sources_non_forked/syntastic/syntax_checkers/haskell/ghc-mod.vim
  79. 2
      sources_non_forked/syntastic/syntax_checkers/haskell/hdevtools.vim
  80. 2
      sources_non_forked/syntastic/syntax_checkers/haskell/hlint.vim
  81. 2
      sources_non_forked/syntastic/syntax_checkers/haskell/scan.vim
  82. 4
      sources_non_forked/syntastic/syntax_checkers/haxe/haxe.vim
  83. 2
      sources_non_forked/syntastic/syntax_checkers/hss/hss.vim
  84. 2
      sources_non_forked/syntastic/syntax_checkers/html/jshint.vim
  85. 111
      sources_non_forked/syntastic/syntax_checkers/html/tidy.vim
  86. 22
      sources_non_forked/syntastic/syntax_checkers/html/validator.vim
  87. 11
      sources_non_forked/syntastic/syntax_checkers/html/w3.vim
  88. 12
      sources_non_forked/syntastic/syntax_checkers/java/checkstyle.vim
  89. 300
      sources_non_forked/syntastic/syntax_checkers/java/javac.vim
  90. 12
      sources_non_forked/syntastic/syntax_checkers/javascript/closurecompiler.vim
  91. 2
      sources_non_forked/syntastic/syntax_checkers/javascript/eslint.vim
  92. 56
      sources_non_forked/syntastic/syntax_checkers/javascript/flow.vim
  93. 2
      sources_non_forked/syntastic/syntax_checkers/javascript/gjslint.vim
  94. 2
      sources_non_forked/syntastic/syntax_checkers/javascript/jscs.vim
  95. 2
      sources_non_forked/syntastic/syntax_checkers/javascript/jshint.vim
  96. 2
      sources_non_forked/syntastic/syntax_checkers/javascript/jsl.vim
  97. 4
      sources_non_forked/syntastic/syntax_checkers/javascript/jslint.vim
  98. 2
      sources_non_forked/syntastic/syntax_checkers/javascript/jsxhint.vim
  99. 2
      sources_non_forked/syntastic/syntax_checkers/json/jsonlint.vim
  100. 2
      sources_non_forked/syntastic/syntax_checkers/json/jsonval.vim
  101. Some files were not shown because too many files have changed in this diff Show More

1
.gitignore vendored

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

@ -1,4 +1,4 @@
" Copyright (c) 2013 Junegunn Choi
" Copyright (c) 2014 Junegunn Choi
"
" 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)
endfunction
function! s:blank()
let main = bufwinnr(t:goyo_master)
if main != -1
execute main . 'wincmd w'
else
function! s:blank(repel)
if bufwinnr(t:goyo_pads.r) <= bufwinnr(t:goyo_pads.l) + 1
\ || bufwinnr(t:goyo_pads.b) <= bufwinnr(t:goyo_pads.t) + 3
call s:goyo_off()
endif
execute 'wincmd' a:repel
endfunction
function! s:init_pad(command)
@ -59,12 +58,12 @@ function! s:init_pad(command)
return bufnr
endfunction
function! s:setup_pad(bufnr, vert, size)
function! s:setup_pad(bufnr, vert, size, repel)
let win = bufwinnr(a:bufnr)
execute win . 'wincmd w'
execute (a:vert ? 'vertical ' : '') . 'resize ' . max([0, a:size])
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()
augroup END
@ -86,17 +85,21 @@ function! s:hmargin()
endfunction
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 tmargin = get(g:, 'goyo_margin_top', 4)
let bmargin = get(g:, 'goyo_margin_bottom', 4)
augroup goyop
autocmd!
augroup END
call s:setup_pad(t:goyo_pads.t, 0, tmargin - 1)
call s:setup_pad(t:goyo_pads.b, 0, bmargin - 2)
call s:setup_pad(t:goyo_pads.l, 1, hmargin / 2 - 1)
call s:setup_pad(t:goyo_pads.r, 1, hmargin / 2 - 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, t:goyo_margin_bottom - 2, 'k')
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, 'h')
let t:goyo_width = winwidth(0)
endfunction
function! s:tranquilize()
@ -119,6 +122,41 @@ function! s:hide_statusline()
let &l:statusline = repeat(' ', winwidth(0))
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)
let s:orig_tab = tabpagenr()
@ -127,6 +165,8 @@ function! s:goyo_on(width)
let t:goyo_master = winbufnr(0)
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_revert =
\ { 'laststatus': &laststatus,
@ -140,6 +180,7 @@ function! s:goyo_on(width)
\ 'sidescroll': &sidescroll,
\ 'sidescrolloff': &sidescrolloff
\ }
let t:goyo_maps = extend(s:maps_nop(), s:maps_resize())
if has('gui_running')
let t:goyo_revert.guioptions = &guioptions
endif
@ -177,16 +218,7 @@ function! s:goyo_on(width)
silent! call lightline#disable()
endif
if !get(g:, 'goyo_linenr', 0)
setlocal nonu
if exists('&rnu')
setlocal nornu
endif
endif
if exists('&colorcolumn')
setlocal colorcolumn=
endif
call s:hide_linenr()
" Global options
let &winheight = max([&winminheight, 1])
set winminheight=1
@ -217,11 +249,11 @@ function! s:goyo_on(width)
augroup goyo
autocmd!
autocmd BufWinLeave <buffer> call s:goyo_off()
autocmd TabLeave * call s:goyo_off()
autocmd VimResized * call s:resize_pads()
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
call s:hide_statusline()
@ -251,6 +283,10 @@ function! s:goyo_off()
augroup END
augroup! goyop
for c in t:goyo_maps
execute 'nunmap <c-w>'.escape(c, '|')
endfor
let goyo_revert = t:goyo_revert
let goyo_disabled_gitgutter = t:goyo_disabled_gitgutter
let goyo_disabled_signify = t:goyo_disabled_signify
@ -268,6 +304,7 @@ function! s:goyo_off()
tabclose
execute 'normal! '.s:orig_tab.'gt'
if winbufnr(0) == goyo_orig_buffer
" Doesn't work if window closed with `q`
execute printf('normal! %dG%d|', line, col)
endif

@ -623,8 +623,13 @@ function! s:Path.str(...)
if has_key(options, 'truncateTo')
let limit = options['truncateTo']
if len(toReturn) > limit
let toReturn = "<" . strpart(toReturn, len(toReturn) - limit + 1)
if 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

@ -18,10 +18,27 @@
- - -
1\. [Introduction](#introduction)
2\. [Installation](#installation)
3\. [FAQ](#faq)
4\. [Other resources](#otherresources)
1. [Introduction](#introduction)
2. [Installation](#installation)
2.1. [Requirements](#requirements)
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>
@ -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.
At the time of this writing, syntax checking plugins exist for ActionScript,
Ada, AppleScript, Arduino, AsciiDoc, ASM, BEMHTML, Bro, Bourne shell, C,
C++, C#, Cabal, Chef, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart,
DocBook, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata, GLSL, Go,
Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON, JSX, LESS,
Lex, Limbo, LISP, LLVM intermediate language, Lua, Markdown, MATLAB, NASM,
Objective-C, Objective-C++, OCaml, Perl, Perl POD, PHP, gettext Portable
Object, OS X and iOS property lists, Puppet, Python, R, Racket, Relax NG,
reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, Tcl, TeX, Texinfo,
Twig, TypeScript, Vala, Verilog, VHDL, VimL, xHtml, XML, XSLT, YACC, YAML,
z80, Zope page templates, and zsh. See the [wiki][3] for details about the
corresponding supported checkers.
Ada, AppleScript, AsciiDoc, ASM, BEMHTML, Bro, Bourne shell, C, C++, C#, Cabal,
Chef, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart, DocBook, Dust,
Elixir, Erlang, eRuby, Fortran, Gentoo metadata, GLSL, Go, Haml, Haskell,
Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON, JSX, LESS, Lex, Limbo,
LISP, LLVM intermediate language, Lua, Markdown, MATLAB, NASM, Objective-C,
Objective-C++, OCaml, Perl, Perl POD, PHP, gettext Portable Object, OS X and
iOS property lists, Puppet, Python, R, Racket, Relax NG, reStructuredText, RPM
spec, Ruby, SASS/SCSS, Scala, Slim, Tcl, TeX, Texinfo, Twig, TypeScript, Vala,
Verilog, VHDL, VimL, xHtml, XML, XSLT, YACC, YAML, z80, Zope page templates,
and zsh. See the [wiki][3] for details about the corresponding supported
checkers.
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
@ -128,18 +145,36 @@ If you get an error when you do this, then you probably didn't install
following:
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`
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>
## 3\. FAQ
## 4\. FAQ
<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
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>
__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
Python 2, e.g:
@ -163,9 +198,27 @@ Python 2, e.g:
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>
__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
__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
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`,
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
let g:syntastic_enable_perl_checker = 1
```
<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 recent version of the Rust compiler, the checker should be picked up
@ -189,27 +242,27 @@ automatically by syntastic.
<a name="faqloclist"></a>
__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 a checker and the location list is not updated...__
__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`
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
your vimrc:
your `vimrc`:
```vim
let g:syntastic_always_populate_loc_list = 1
```
<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
that do can be configured using global variables. The general form of the
global `args` variables is `syntastic_<filetype>_<checker>_args`.
So, If you wanted to pass "--my --args --here" to the ruby mri checker you
would add this line to your vimrc:
So, If you wanted to pass `--my --args --here` to the ruby mri checker you
would add this line to your `vimrc`:
```vim
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>
__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?__
A. Stick a line like this in your vimrc:
A. Stick a line like this in your `vimrc`:
```vim
let g:syntastic_<filetype>_checkers = ['<checker-name>']
```
@ -259,7 +312,7 @@ filetype of the current file is `php`).
<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
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>
__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?__
A. Set `g:syntastic_aggregate_errors` to 1 in your vimrc:
A. Set `g:syntastic_aggregate_errors` to 1 in your `vimrc`:
```vim
let g:syntastic_aggregate_errors = 1
```
@ -301,19 +354,19 @@ See `:help syntastic-aggregating-errors` for more details.
<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?__
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
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).
<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?__
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
```
<a name="otherresources"></a>
## 4\. Other resources
## 5\. Resources
The preferred place for posting suggestions, reporting bugs, and general
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
[16]: https://github.com/junegunn/vim-plug/
[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:

@ -18,9 +18,17 @@ endfunction " }}}2
" read additional compiler flags from the given configuration file
" the file format and its parsing mechanism is inspired by clang_complete
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, '.;')
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 ''
endif
@ -31,6 +39,7 @@ function! syntastic#c#ReadConfig(file) " {{{2
try
let lines = readfile(config)
catch /\m^Vim\%((\a\+)\)\=:E48[45]/
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: error reading file')
return ''
endtry
@ -62,7 +71,7 @@ endfunction " }}}2
" GetLocList() for C-like compilers
function! syntastic#c#GetLocList(filetype, subchecker, options) " {{{2
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$/
return []
endtry
@ -70,9 +79,9 @@ function! syntastic#c#GetLocList(filetype, subchecker, options) " {{{2
let makeprg = syntastic#util#shexpand(g:syntastic_{a:filetype}_compiler) .
\ ' ' . 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'] : []
" process makeprg
@ -91,25 +100,25 @@ function! s:_init() " {{{2
let s:handlers = []
let s:cflags = {}
call s:_regHandler('\m\<cairo', 's:_check_pkg', ['cairo', 'cairo'])
call s:_regHandler('\m\<freetype', 's:_check_pkg', ['freetype', 'freetype2', 'freetype'])
call s:_regHandler('\m\<glade', 's:_check_pkg', ['glade', 'libglade-2.0', 'libglade'])
call s:_regHandler('\m\<glib', 's:_check_pkg', ['glib', 'glib-2.0', 'glib'])
call s:_regHandler('\m\<gtk', 's:_check_pkg', ['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:_regHandler('\m\<libxml', 's:_check_pkg', ['libxml', 'libxml-2.0', 'libxml'])
call s:_regHandler('\m\<pango', 's:_check_pkg', ['pango', 'pango'])
call s:_regHandler('\m\<SDL', 's:_check_pkg', ['sdl', 'sdl'])
call s:_regHandler('\m\<opengl', 's:_check_pkg', ['opengl', 'gl'])
call s:_regHandler('\m\<webkit', 's:_check_pkg', ['webkit', 'webkit-1.0'])
call s:_regHandler('\m\<php\.h\>', 's:_check_php', [])
call s:_regHandler('\m\<Python\.h\>', 's:_check_python', [])
call s:_regHandler('\m\<ruby', 's:_check_ruby', [])
call s:_registerHandler('\m\<cairo', 's:_checkPackage', ['cairo', 'cairo'])
call s:_registerHandler('\m\<freetype', 's:_checkPackage', ['freetype', 'freetype2', 'freetype'])
call s:_registerHandler('\m\<glade', 's:_checkPackage', ['glade', 'libglade-2.0', 'libglade'])
call s:_registerHandler('\m\<glib', 's:_checkPackage', ['glib', 'glib-2.0', 'glib'])
call s:_registerHandler('\m\<gtk', 's:_checkPackage', ['gtk', 'gtk+-2.0', 'gtk+', 'glib-2.0', 'glib'])
call s:_registerHandler('\m\<libsoup', 's:_checkPackage', ['libsoup', 'libsoup-2.4', 'libsoup-2.2'])
call s:_registerHandler('\m\<libxml', 's:_checkPackage', ['libxml', 'libxml-2.0', 'libxml'])
call s:_registerHandler('\m\<pango', 's:_checkPackage', ['pango', 'pango'])
call s:_registerHandler('\m\<SDL', 's:_checkPackage', ['sdl', 'sdl'])
call s:_registerHandler('\m\<opengl', 's:_checkPackage', ['opengl', 'gl'])
call s:_registerHandler('\m\<webkit', 's:_checkPackage', ['webkit', 'webkit-1.0'])
call s:_registerHandler('\m\<php\.h\>', 's:_checkPhp', [])
call s:_registerHandler('\m\<Python\.h\>', 's:_checkPython', [])
call s:_registerHandler('\m\<ruby', 's:_checkRuby', [])
endfunction " }}}2
" return a handler dictionary object
function! s:_regHandler(regex, function, args) " {{{2
" register a handler dictionary object
function! s:_registerHandler(regex, function, args) " {{{2
let handler = {}
let handler["regex"] = a:regex
let handler["func"] = function(a:function)
@ -117,8 +126,75 @@ function! s:_regHandler(regex, function, args) " {{{2
call add(s:handlers, handler)
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
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_'
if exists(prefix . 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
" 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
if has_key(a:opts, 'header_names') && expand('%') =~? a:opts['header_names']
if s:_getCheckerVar('g', a:ft, a:ck, 'check_header', 0)
if has_key(a:opts, 'header_names') && expand('%', 1) =~? a:opts['header_names']
if s:_get_checker_var('g', a:ft, a:ck, 'check_header', 0)
let flags = get(a:opts, 'header_flags', '') . ' -c ' . syntastic#c#NullOutput()
else
" 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', '')
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
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 == ''
" 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'
" refresh the include file search if desired
if s:_getCheckerVar('g', a:ft, a:ck, 'auto_refresh_includes', 0)
let flags .= ' ' . s:_searchHeaders()
if s:_get_checker_var('g', a:ft, a:ck, 'auto_refresh_includes', 0)
let flags .= ' ' . s:_search_headers()
else
" search for header includes if not cached already
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
let flags .= ' ' . b:syntastic_{a:ft}_includes
endif
@ -169,7 +245,7 @@ function! s:_getCflags(ft, ck, opts) " {{{2
endif
" 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)
return flags
@ -177,7 +253,7 @@ endfunction " }}}2
" get the gcc include directory argument depending on the default
" 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 = []
if a:filetype =~# '\v^%(c|cpp|objc|objcpp)$' &&
@ -195,7 +271,7 @@ endfunction " }}}2
" search the first 100 lines for include statements that are
" given in the handlers dictionary
function! s:_searchHeaders() " {{{2
function! s:_search_headers() " {{{2
let includes = ''
let files = []
let found = []
@ -221,7 +297,7 @@ function! s:_searchHeaders() " {{{2
" search included headers
for hfile in files
if hfile != ''
let filename = expand('%:p:h') . syntastic#util#Slash() . hfile
let filename = expand('%:p:h', 1) . syntastic#util#Slash() . hfile
try
let lines = readfile(filename, '', 100)
@ -250,69 +326,6 @@ function! s:_searchHeaders() " {{{2
return includes
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
" default include directories

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

@ -30,7 +30,7 @@ endfunction " }}}2
function! syntastic#preprocess#checkstyle(errors) " {{{2
let out = []
let fname = expand('%')
let fname = expand('%', 1)
for err in a:errors
if match(err, '\m<error\>') > -1
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:'', "", "")')
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
return filter(copy(a:errors), 'v:val != ""')
endfunction " }}}2
@ -67,7 +131,7 @@ function! syntastic#preprocess#perl(errors) " {{{2
let out = []
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)
call add(out, parts[2] . ':' . parts[3] . ':' . parts[1] . parts[4])
endif
@ -76,6 +140,9 @@ function! syntastic#preprocess#perl(errors) " {{{2
return syntastic#util#unique(out)
endfunction " }}}2
" @vimlint(EVL102, 1, l:true)
" @vimlint(EVL102, 1, l:false)
" @vimlint(EVL102, 1, l:null)
function! syntastic#preprocess#prospector(errors) " {{{2
" JSON artifacts
let true = 1
@ -125,6 +192,9 @@ function! syntastic#preprocess#prospector(errors) " {{{2
return out
endfunction " }}}2
" @vimlint(EVL102, 0, l:true)
" @vimlint(EVL102, 0, l:false)
" @vimlint(EVL102, 0, l:null)
function! syntastic#preprocess#rparse(errors) " {{{2
let errlist = copy(a:errors)

@ -47,6 +47,13 @@ function! syntastic#util#tmpdir() " {{{2
else
let tempdir = '/tmp/vim-syntastic-' . getpid()
endif
try
call mkdir(tempdir, 'p', 0700)
catch /\m^Vim\%((\a\+)\)\=:E739/
call syntastic#log#error(v:exception)
let tempdir = '.'
endtry
endif
return tempdir
@ -54,6 +61,11 @@ endfunction " }}}2
" Recursively remove a directory
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 !exists('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()
" and hope for the best :)
let s:width = function(exists('*strwidth') ? 'strwidth' : 'strlen')
lockvar s:width
let s:_width = function(exists('*strwidth') ? 'strwidth' : 'strlen')
lockvar s:_width
function! syntastic#util#screenWidth(str, tabstop) " {{{2
let chunks = split(a:str, "\t", 1)
let width = s:width(chunks[-1])
let width = s:_width(chunks[-1])
for c in chunks[:-2]
let cwidth = s:width(c)
let cwidth = s:_width(c)
let width += cwidth + a:tabstop - cwidth % a:tabstop
endfor
return width
@ -166,7 +178,7 @@ function! syntastic#util#wideMsg(msg) " {{{2
"convert tabs to spaces so that the tabs count towards the window
"width as the proper amount of characters
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)
set noruler noshowcmd
@ -212,7 +224,7 @@ function! syntastic#util#findInParent(what, where) " {{{2
let old = ''
while here != ''
let p = split(globpath(here, a:what), '\n')
let p = split(globpath(here, a:what, 1), '\n')
if !empty(p)
return fnamemodify(p[0], ':p')
@ -249,8 +261,19 @@ function! syntastic#util#shescape(string) " {{{2
endfunction " }}}2
" A less noisy shellescape(expand())
function! syntastic#util#shexpand(string) " {{{2
return syntastic#util#shescape(expand(a:string))
function! syntastic#util#shexpand(string, ...) " {{{2
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
" decode XML entities
@ -311,16 +334,38 @@ function! s:_translateFilter(filters) " {{{2
endfunction " }}}2
function! s:_translateElement(key, term) " {{{2
if a:key ==? 'level'
let ret = 'v:val["type"] !=? ' . string(a:term[0])
elseif a:key ==? 'type'
let ret = a:term ==? 'style' ? 'get(v:val, "subtype", "") !=? "style"' : 'has_key(v:val, "subtype")'
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)
let fkey = a:key
if fkey[0] == '!'
let fkey = fkey[1:]
let not = 1
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"
endif
return ret
@ -332,7 +377,11 @@ function! s:_rmrf(what) " {{{2
endif
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)
endfor
silent! call system(s:rmdir . ' ' . syntastic#util#shescape(a:what))

@ -21,6 +21,7 @@ CONTENTS *syntastic-contents*
1.Intro........................................|syntastic-intro|
1.1.Quick start............................|syntastic-quickstart|
1.2.Recommended settings...................|syntastic-recommended|
2.Functionality provided.......................|syntastic-functionality|
2.1.The statusline flag....................|syntastic-statusline-flag|
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
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
|location-list| window, and |:lclose| to close it. You can clear the error
list with |:SyntasticReset|, and you can use |:SyntasticToggleMode| to switch
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*
@ -163,8 +186,9 @@ Example: >
You can use the |:Errors| command to display the errors for the current buffer
in the |location-list|.
Note that when you use |:Errors|, the current location list is overwritten
with Syntastic's own location list.
Note that when you use |:Errors| the current location list is overwritten with
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
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. >
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
<
When set to 2 the cursor will jump to the first issue detected, but only if
this issue is an error. >
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