diff --git a/bundle/syntastic/CONTRIBUTING.md b/bundle/syntastic/CONTRIBUTING.md
index 764ffffc..2eac8325 100644
--- a/bundle/syntastic/CONTRIBUTING.md
+++ b/bundle/syntastic/CONTRIBUTING.md
@@ -29,7 +29,7 @@ Following the coding conventions/styles used in the syntastic core:
* Use 4 space indents.
* Don't use abbreviated keywords - e.g. use `endfunction`, not `endfun` (there's always room for more fun!).
* Don't use `l:` prefixes for variables unless actually required (i.e. almost never).
-* Code for maintainability. We would rather a function be a couple of lines longer and have (for example) some [explaining variables](http://www.refactoring.com/catalog/introduceExplainingVariable.html) to aid readability.
+* Code for maintainability. We would rather a function be a couple of lines longer and have (for example) some [explaining variables](http://www.refactoring.com/catalog/extractVariable.html) to aid readability.
# Syntax checker style notes
diff --git a/bundle/syntastic/README.markdown b/bundle/syntastic/README.markdown
index c88cdfd9..653bd7c6 100644
--- a/bundle/syntastic/README.markdown
+++ b/bundle/syntastic/README.markdown
@@ -17,31 +17,39 @@
\_____________________________________________/
-
-
-Syntastic is a syntax checking plugin that runs files through external syntax
-checkers and displays any resulting errors to the user. This can be done on
-demand, or automatically as files are saved. If syntax errors 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 Ada,
-AppleScript, AsciiDoc, Bourne shell, C, C++, C#, Chef, CoffeeScript, Coco,
-Coq, CSS, Cucumber, CUDA, D, Dart, DocBook, Dust, Elixir, Erlang, eRuby,
-Fortran, Gentoo metadata, Go, Haml, Haskell, Haxe, Handlebars, HSS, HTML,
-Java, JavaScript, JSON, LESS, LISP, LLVM intermediate language, Lua, MATLAB,
-NASM, Objective-C, Objective-C++, OCaml, Perl, Perl POD, PHP, Puppet, Python,
-reStructuredText, Ruby, Rust, SASS/SCSS, Scala, Slim, Tcl, TeX, Twig,
-TypeScript, Vala, Verilog, VHDL, xHtml, XML, XSLT, YAML, z80, Zope page
-templates, zsh.
-
-## Screenshot
+- - -
+1\. [Introduction](#introduction)
+2\. [Installation](#installation)
+3\. [FAQ](#faq)
+4\. [Other resources](#otherresources)
+- - -
+
+
+
+## 1\. Introduction
+
+Syntastic is a syntax checking plugin for Vim that runs files through external
+syntax checkers and displays any resulting errors to the user. This can be done
+on demand, or automatically as files are saved. If syntax errors 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, AsciiDoc, ASM, BEMHTML, Bourne shell, C, C++, C#, 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, MATLAB, NASM, Objective-C, Objective-C++,
+OCaml, Perl, Perl POD, PHP, gettext Portable Object, Puppet, Python, Racket,
+reStructuredText, Ruby, Rust, SASS/SCSS, Scala, Slim, Tcl, TeX, Texinfo, Twig,
+TypeScript, Vala, Verilog, VHDL, VimL, xHtml, XML, XSLT, YACC, YAML, z80, Zope
+page templates, and zsh.
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
enabled.
-![Screenshot 1](https://github.com/scrooloose/syntastic/raw/master/_assets/screenshot_1.png)
+![Screenshot 1][0]
1. Errors are loaded into the location list for the corresponding window.
2. When the cursor is on a line containing an error, the error message is echoed in the command window.
@@ -50,126 +58,195 @@ enabled.
5. Hover the mouse over a line containing an error and the error message is displayed as a balloon.
6. (not shown) Highlighting errors with syntax highlighting. Erroneous parts of lines can be highlighted.
-## Installation
-
-Installing syntastic is easy but first you need to have the pathogen plugin installed. If you already
-have pathogen working then skip Step 1 and go to Step 2.
+
-### Step 1: Install pathogen.vim
+## 2\. Installation
-First I'll show you how to install tpope's [pathogen.vim](https://github.com/tpope/vim-pathogen) so that
-it's easy to install syntastic. Do this in your Terminal so that you get the pathogen.vim file
-and the directories it needs:
+Installing syntastic is easy but first you need to have the [pathogen][1]
+plugin installed. If you already have [pathogen][1] working then skip
+[Step 1](#step1) and go to [Step 2](#step2).
- mkdir -p ~/.vim/autoload ~/.vim/bundle; \
- curl -so ~/.vim/autoload/pathogen.vim \
- https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim
-Next you *need to add this* to your ~/.vimrc:
+
- execute pathogen#infect()
+### 2.1\. Step 1: Install pathogen.vim
-### Step 2: Install syntastic as a pathogen bundle
+First I'll show you how to install Tim Pope's [pathogen][1] so that it's easy to
+install syntastic. Do this in your terminal so that you get the `pathogen.vim`
+file and the directories it needs:
+```sh
+mkdir -p ~/.vim/autoload ~/.vim/bundle; \
+curl -so ~/.vim/autoload/pathogen.vim \
+ https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim
+```
+Next you *need* to add this to your `~/.vimrc`:
+```vim
+execute pathogen#infect()
+```
-You now have pathogen installed and can put syntastic into ~/.vim/bundle like this:
-
+
- cd ~/.vim/bundle
- git clone https://github.com/scrooloose/syntastic.git
+### 2.2\. Step 2: Install syntastic as a pathogen bundle
+You now have pathogen installed and can put syntastic into `~/.vim/bundle` like
+this:
+```sh
+cd ~/.vim/bundle
+git clone https://github.com/scrooloose/syntastic.git
+```
Quit vim and start it back up to reload it, then type:
+```vim
+:Helptags
+```
+If you get an error when you do this, then you probably didn't install
+[pathogen][1] right. Go back to [Step 1](#step1) and make sure you did the following:
- :Helptags
-
-If you get an error when you do this, then you probably didn't install pathogen right. Go back to
-step 1 and make sure you did the following:
-
-1. Created both the ~/.vim/autoload and ~/.vim/bundle directories.
-2. Added the "call pathogen#infect()" line to your ~/.vimrc file
-3. Did the git clone of syntastic inside ~/.vim/bundle
+1. Created both the `~/.vim/autoload` and `~/.vim/bundle` directories.
+2. Added the `call 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.
-## Google group
+
-To get information or make suggestions check out the [google group](https://groups.google.com/group/vim-syntastic).
-
-
-## FAQ
+## 3\. FAQ
__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: python requires either `flake8`, `pyflakes` or `pylint` to be installed and in `$PATH`. To see which executables are supported, just look in `syntax_checkers//*.vim`. Note that aliases do not work; the actual executable must be available in your `$PATH`. Symbolic links are okay. You can see syntastic's idea of available checkers by running `:SyntasticInfo`.
-
-Another reason it could fail is that either the command line options or the error output for a syntax checker may have changed. In this case, make sure you have the latest version of the syntax checker installed. If it still fails then create an issue - or better yet, create a pull request.
-
-__Q. Recently some of my syntax checker options have stopped working...__
-
-A. The options are still there, they have just been renamed. Recently, almost all syntax checkers were refactored to use the new `syntastic#makeprg#build()` function. This made a lot of the old explicit options redundant - as they are now implied. The new implied options usually have slightly different names to the old options.
-
-e.g. Previously there was `g:syntastic_phpcs_conf`, now you must use `g:syntastic_php_phpcs_args`. This completely overrides the arguments of the checker, including any defaults, so you may need to look up the default arguments of the checker and add these in.
-
-See `:help syntastic-checker-options` for more information.
+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
+`pylint` to be installed and in your `$PATH`. To see which executables are
+supported, look at the [wiki][3]. Note that aliases do not work; the actual
+executables must be available in your `$PATH`. Symbolic links are okay though.
+You can see syntastic's idea of available checkers by running `:SyntasticInfo`.
+
+Another reason it could fail is that either the command line options or the
+error output for a syntax checker may have changed. In this case, make sure you
+have the latest version of the syntax checker installed. If it still fails then
+create an issue - or better yet, create a pull request.
+
+__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`
+statements in your file (cf. [perlrun][10]). This is probably fine if you
+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, set `g:syntastic_enable_perl_checker` to 1 in your vimrc:
+```vim
+let g:syntastic_enable_perl_checker = 1
+```
__Q. I run a checker and the location list is not updated...__
-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:
+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:
```vim
-let g:syntastic_always_populate_loc_list=1
+let g:syntastic_always_populate_loc_list = 1
```
__Q. How can I pass additional arguments to a checker?__
-A. Almost all syntax checkers use the `syntastic#makeprg#build()` function. Those checkers that do can be configured using global variables. The general form of the global args variables are:
-```vim
-syntastic___args
-```
+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___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"
+let g:syntastic_ruby_mri_args = "--my --args --here"
```
See `:help syntastic-checker-options` for more information.
-__Q. Syntastic supports several checkers for my filetype - how do I tell it which one(s) to use?__
+__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:
```vim
-let g:syntastic__checkers=['']
+let g:syntastic__checkers = ['']
```
-To see the list of checkers for your filetype, look in `syntax_checkers//`.
+To see the list of supported checkers for your filetype look at the
+[wiki][3].
-e.g. Python has the following checkers: `flake8`, `pyflakes`, `pylint` and a native `python` checker.
+e.g. Python has the following checkers, among others: `flake8`, `pyflakes`,
+`pylint` and a native `python` checker.
To tell syntastic to use `pylint`, you would use this setting:
```vim
-let g:syntastic_python_checkers=['pylint']
+let g:syntastic_python_checkers = ['pylint']
```
-Some filetypes, like PHP, have style checkers as well as syntax checkers. These can be chained together like this:
+Some filetypes, like PHP, have style checkers as well as syntax checkers. These
+can be chained together like this:
```vim
-let g:syntastic_php_checkers=['php', 'phpcs', 'phpmd']
+let g:syntastic_php_checkers = ['php', 'phpcs', 'phpmd']
```
-This is telling syntastic to run the `php` checker first, and if no errors are found, run `phpcs`, and then `phpmd`.
+This is telling syntastic to run the `php` checker first, and if no errors are
+found, run `phpcs`, and then `phpmd`.
-__Q. How can I jump between the different errors without using the location list at the bottom of the window?__
+__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`.
+A. Vim provides several built in commands for this. See `:help :lnext` and
+`:help :lprev`.
-If you use these commands a lot then you may want to add shortcut mappings to your vimrc, or install something like [unimpaired](https://github.com/tpope/vim-unimpaired), which provides such mappings (among other things).
+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
+mappings (among other things).
__Q. A syntax checker is giving me unwanted/strange style tips?__
-A. Some filetypes (e.g. php) have style checkers as well as syntax checkers. You can usually configure the options that are passed to the style checkers, or just disable them. Take a look at the [wiki](https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers) to see what options are available.
+A. Some filetypes (e.g. php) have style checkers as well as syntax
+checkers. You can usually configure the options that are passed to the style
+checkers, or just disable them. Take a look at the [wiki][3] to see what
+options are available.
-__Q. The error window is closed automatically when I :quit the current buffer but not when I :bdelete it?__
+Alternatively, you can use `g:syntastic_quiet_messages` to filter out the
+messages you don't want to see. e.g. To turn off all style messages:
+```vim
+let g:syntastic_quiet_messages = { "type": "style" }
+```
+See `:help syntastic_quiet_messages` for details.
+
+__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 work around it:
+A. There is no safe way to handle that situation automatically, but you can
+work around it:
```vim
nnoremap :lclose:bdelete
cabbrev bd lclose\|bdelete
```
+
+
+
+
+## 4\. Other resources
+
+The preferred place for posting suggestions, reporting bugs, and general
+discussions related to syntastic is the [issue tracker at GitHub][4]. There
+are also a [google group][5], and a [syntastic tag at StackOverflow][6].
+
+Syntastic aims to provide a common interface to syntax checkers for as many
+languages as possible. For particular languages, there are, of course, other
+plugins that provide more functionality than syntastic. You might want to take
+a look at [jedi-vim][7], [python-mode][8], or [YouCompleteMe][9].
+
+[0]: https://github.com/scrooloose/syntastic/raw/master/_assets/screenshot_1.png
+[1]: https://github.com/tpope/vim-pathogen
+[2]: https://github.com/tpope/vim-unimpaired
+[3]: https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers
+[4]: https://github.com/scrooloose/syntastic/issues
+[5]: https://groups.google.com/group/vim-syntastic
+[6]: http://stackoverflow.com/questions/tagged/syntastic
+[7]: https://github.com/davidhalter/jedi-vim
+[8]: https://github.com/klen/python-mode
+[9]: https://github.com/Valloric/YouCompleteMe
+[10]: http://perldoc.perl.org/perlrun.html#*-c*
diff --git a/bundle/syntastic/autoload/syntastic/c.vim b/bundle/syntastic/autoload/syntastic/c.vim
index a1c5c7ef..4bd79472 100644
--- a/bundle/syntastic/autoload/syntastic/c.vim
+++ b/bundle/syntastic/autoload/syntastic/c.vim
@@ -1,4 +1,4 @@
-if exists("g:loaded_syntastic_c_autoload")
+if exists("g:loaded_syntastic_c_autoload") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_c_autoload = 1
@@ -10,14 +10,14 @@ set cpo&vim
" convenience function to determine the 'null device' parameter
" based on the current operating system
-function! syntastic#c#NullOutput()
- let known_os = has('win32') || has('unix') || has('mac')
+function! syntastic#c#NullOutput() " {{{2
+ let known_os = has('unix') || has('mac') || syntastic#util#isRunningWindows()
return known_os ? '-o ' . syntastic#util#DevNull() : ''
-endfunction
+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)
+function! syntastic#c#ReadConfig(file) " {{{2
" search in the current file's directory upwards
let config = findfile(a:file, '.;')
if config == '' || !filereadable(config)
@@ -30,7 +30,7 @@ function! syntastic#c#ReadConfig(file)
" try to read config file
try
let lines = readfile(config)
- catch /^Vim\%((\a\+)\)\=:E484/
+ catch /\m^Vim\%((\a\+)\)\=:E48[45]/
return ''
endtry
@@ -43,35 +43,36 @@ function! syntastic#c#ReadConfig(file)
let parameters = []
for line in lines
- let matches = matchlist(line, '\m\C^\s*-I\s*\(\S\+\)')
- if matches != [] && matches[1] != ''
+ let matches = matchstr(line, '\m\C^\s*-I\s*\zs.\+')
+ if matches != ''
" this one looks like an absolute path
- if match(matches[1], '\m^\%(/\|\a:\)') != -1
- call add(parameters, '-I' . matches[1])
+ if match(matches, '\m^\%(/\|\a:\)') != -1
+ call add(parameters, '-I' . matches)
else
- call add(parameters, '-I' . filepath . syntastic#util#Slash() . matches[1])
+ call add(parameters, '-I' . filepath . syntastic#util#Slash() . matches)
endif
else
call add(parameters, line)
endif
endfor
- return join(map(parameters, 'syntastic#util#shescape(fnameescape(v:val))'), ' ')
-endfunction
+ return join(map(parameters, 'syntastic#util#shescape(v:val)'))
+endfunction " }}}2
" GetLocList() for C-like compilers
-function! syntastic#c#GetLocList(filetype, subchecker, options)
+function! syntastic#c#GetLocList(filetype, subchecker, options) " {{{2
try
- let flags = s:GetCflags(a:filetype, a:subchecker, a:options)
+ let flags = s:getCflags(a:filetype, a:subchecker, a:options)
catch /\m\C^Syntastic: skip checks$/
return []
endtry
- let makeprg = g:syntastic_{a:filetype}_compiler . ' ' . flags . ' ' . syntastic#util#shexpand('%')
+ 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:getCheckerVar('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:getCheckerVar('g', a:filetype, a:subchecker, 'remove_include_errors', 0) ?
\ ['filterForeignErrors'] : []
" process makeprg
@@ -79,34 +80,45 @@ function! syntastic#c#GetLocList(filetype, subchecker, options)
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'postprocess': postprocess })
-endfunction
+endfunction " }}}2
+
+" }}}1
" Private functions {{{1
" initialize c/cpp syntax checker handlers
-function! s:Init()
+function! s:init() " {{{2
let s:handlers = []
let s:cflags = {}
- call s:RegHandler('cairo', 'syntastic#c#CheckPKG', ['cairo', 'cairo'])
- call s:RegHandler('freetype', 'syntastic#c#CheckPKG', ['freetype', 'freetype2', 'freetype'])
- call s:RegHandler('glade', 'syntastic#c#CheckPKG', ['glade', 'libglade-2.0', 'libglade'])
- call s:RegHandler('glib', 'syntastic#c#CheckPKG', ['glib', 'glib-2.0', 'glib'])
- call s:RegHandler('gtk', 'syntastic#c#CheckPKG', ['gtk', 'gtk+-2.0', 'gtk+', 'glib-2.0', 'glib'])
- call s:RegHandler('libsoup', 'syntastic#c#CheckPKG', ['libsoup', 'libsoup-2.4', 'libsoup-2.2'])
- call s:RegHandler('libxml', 'syntastic#c#CheckPKG', ['libxml', 'libxml-2.0', 'libxml'])
- call s:RegHandler('pango', 'syntastic#c#CheckPKG', ['pango', 'pango'])
- call s:RegHandler('SDL', 'syntastic#c#CheckPKG', ['sdl', 'sdl'])
- call s:RegHandler('opengl', 'syntastic#c#CheckPKG', ['opengl', 'gl'])
- call s:RegHandler('webkit', 'syntastic#c#CheckPKG', ['webkit', 'webkit-1.0'])
-
- call s:RegHandler('php\.h', 'syntastic#c#CheckPhp', [])
- call s:RegHandler('Python\.h', 'syntastic#c#CheckPython', [])
- call s:RegHandler('ruby', 'syntastic#c#CheckRuby', [])
-endfunction
+ call s:regHandler('\m\', 'syntastic#c#checkPHP', [])
+ call s:regHandler('\m\', 'syntastic#c#checkPython', [])
+ call s:regHandler('\m\"
+ echohl ErrorMsg
+ echomsg "syntastic: error: " . a:msg
+ echohl None
+endfunction " }}}2
+
+function! syntastic#log#deprecationWarn(msg) " {{{2
+ if index(s:deprecation_notices_issued, a:msg) >= 0
+ return
+ endif
+
+ call add(s:deprecation_notices_issued, a:msg)
+ call syntastic#log#warn(a:msg)
+endfunction " }}}2
+
+function! syntastic#log#debug(level, msg, ...) " {{{2
+ if !s:isDebugEnabled(a:level)
+ return
+ endif
+
+ let leader = s:logTimestamp()
+ call s:logRedirect(1)
+
+ if a:0 > 0
+ " filter out dictionary functions
+ echomsg leader . a:msg . ' ' .
+ \ strtrans(string(type(a:1) == type({}) || type(a:1) == type([]) ?
+ \ filter(copy(a:1), 'type(v:val) != type(function("tr"))') : a:1))
+ else
+ echomsg leader . a:msg
+ endif
+
+ call s:logRedirect(0)
+endfunction " }}}2
+
+function! syntastic#log#debugShowOptions(level, names) " {{{2
+ if !s:isDebugEnabled(a:level)
+ return
+ endif
+
+ let leader = s:logTimestamp()
+ call s:logRedirect(1)
+
+ let vlist = copy(type(a:names) == type("") ? [a:names] : a:names)
+ if !empty(vlist)
+ call map(vlist, "'&' . v:val . ' = ' . strtrans(string(eval('&' . v:val)))")
+ echomsg leader . join(vlist, ', ')
+ endif
+ call s:logRedirect(0)
+endfunction " }}}2
+
+function! syntastic#log#debugShowVariables(level, names) " {{{2
+ if !s:isDebugEnabled(a:level)
+ return
+ endif
+
+ let leader = s:logTimestamp()
+ call s:logRedirect(1)
+
+ let vlist = type(a:names) == type("") ? [a:names] : a:names
+ for name in vlist
+ let msg = s:formatVariable(name)
+ if msg != ''
+ echomsg leader . msg
+ endif
+ endfor
+
+ call s:logRedirect(0)
+endfunction " }}}2
+
+function! syntastic#log#debugDump(level) " {{{2
+ if !s:isDebugEnabled(a:level)
+ return
+ endif
+
+ call syntastic#log#debugShowVariables( a:level, sort(keys(g:syntastic_defaults)) )
+endfunction " }}}2
+
+" }}}1
+
+" Private functions {{{1
+
+function! s:isDebugEnabled_smart(level) " {{{2
+ return and(g:syntastic_debug, a:level)
+endfunction " }}}2
+
+function! s:isDebugEnabled_dumb(level) " {{{2
+ " poor man's bit test for bit N, assuming a:level == 2**N
+ return (g:syntastic_debug / a:level) % 2
+endfunction " }}}2
+
+let s:isDebugEnabled = function(exists('*and') ? 's:isDebugEnabled_smart' : 's:isDebugEnabled_dumb')
+
+function! s:logRedirect(on) " {{{2
+ if exists("g:syntastic_debug_file")
+ if a:on
+ try
+ execute 'redir >> ' . fnameescape(expand(g:syntastic_debug_file))
+ catch /\m^Vim\%((\a\+)\)\=:/
+ silent! redir END
+ unlet g:syntastic_debug_file
+ endtry
+ else
+ silent! redir END
+ endif
+ endif
+endfunction " }}}2
+
+function! s:logTimestamp_smart() " {{{2
+ return 'syntastic: ' . split(reltimestr(reltime(g:syntastic_start)))[0] . ': '
+endfunction " }}}2
+
+function! s:logTimestamp_dumb() " {{{2
+ return 'syntastic: debug: '
+endfunction " }}}2
+
+let s:logTimestamp = function(has('reltime') ? 's:logTimestamp_smart' : 's:logTimestamp_dumb')
+
+function! s:formatVariable(name) " {{{2
+ let vals = []
+ if exists('g:syntastic_' . a:name)
+ call add(vals, 'g:syntastic_' . a:name . ' = ' . strtrans(string(g:syntastic_{a:name})))
+ endif
+ if exists('b:syntastic_' . a:name)
+ call add(vals, 'b:syntastic_' . a:name . ' = ' . strtrans(string(b:syntastic_{a:name})))
+ endif
+
+ return join(vals, ', ')
+endfunction " }}}2
+
+" }}}1
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/autoload/syntastic/makeprg.vim b/bundle/syntastic/autoload/syntastic/makeprg.vim
deleted file mode 100644
index 4d7a0331..00000000
--- a/bundle/syntastic/autoload/syntastic/makeprg.vim
+++ /dev/null
@@ -1,50 +0,0 @@
-if exists("g:loaded_syntastic_makeprg_autoload")
- finish
-endif
-let g:loaded_syntastic_makeprg_autoload = 1
-
-"Returns a makeprg of the form
-"
-"[exe] [args] [filename] [post_args] [tail]
-"
-"A (made up) example:
-" ruby -a -b -c test_file.rb --more --args > /tmp/output
-"
-"To generate this you would call:
-"
-" let makeprg = syntastic#makeprg#build({
-" \ 'exe': 'ruby',
-" \ 'args': '-a -b -c',
-" \ 'post_args': '--more --args',
-" \ 'tail': '> /tmp/output',
-" \ 'filetype': 'ruby',
-" \ 'subchecker': 'mri' })
-"
-"Note that the current filename is added by default - but can be overridden by
-"passing in an 'fname' arg.
-"
-"Arguments 'filetype' and 'subchecker' are mandatory, handling of composite
-"types and user-defined variables breaks if you omit them.
-"
-"All other options can be overriden by the user with global variables - even
-"when not specified by the checker in syntastic#makeprg#build().
-"
-"E.g. They could override the checker exe with
-"
-" let g:syntastic_ruby_mri_exe="another_ruby_checker_exe.rb"
-"
-"The general form of the override option is:
-" syntastic_[filetype]_[subchecker]_[option-name]
-"
-function! syntastic#makeprg#build(opts)
- let builder = g:SyntasticMakeprgBuilder.New(
- \ get(a:opts, 'exe', ''),
- \ get(a:opts, 'args', ''),
- \ get(a:opts, 'fname', ''),
- \ get(a:opts, 'post_args', ''),
- \ get(a:opts, 'tail', ''),
- \ get(a:opts, 'filetype', ''),
- \ get(a:opts, 'subchecker', '') )
-
- return builder.makeprg()
-endfunction
diff --git a/bundle/syntastic/autoload/syntastic/postprocess.vim b/bundle/syntastic/autoload/syntastic/postprocess.vim
index e1f62e8a..1558f0f8 100644
--- a/bundle/syntastic/autoload/syntastic/postprocess.vim
+++ b/bundle/syntastic/autoload/syntastic/postprocess.vim
@@ -1,4 +1,4 @@
-if exists("g:loaded_syntastic_postprocess_autoload")
+if exists("g:loaded_syntastic_postprocess_autoload") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_postprocess_autoload = 1
@@ -6,7 +6,9 @@ let g:loaded_syntastic_postprocess_autoload = 1
let s:save_cpo = &cpo
set cpo&vim
-function! s:compareErrorItems(a, b)
+" Public functions {{{1
+
+function! s:compareErrorItems(a, b) " {{{2
if a:a['bufnr'] != a:b['bufnr']
" group by files
return a:a['bufnr'] - a:b['bufnr']
@@ -16,61 +18,54 @@ function! s:compareErrorItems(a, b)
" errors take precedence over warnings
return a:a['type'] ==? 'e' ? -1 : 1
else
- return get(a:a, 'col') - get(a:b, 'col')
+ return get(a:a, 'col', 0) - get(a:b, 'col', 0)
endif
-endfunction
+endfunction " }}}2
" natural sort
-function! syntastic#postprocess#sort(errors)
- return sort(a:errors, 's:compareErrorItems')
-endfunction
-
-function syntastic#postprocess#compressWhitespace(errors)
- let llist = []
+function! syntastic#postprocess#sort(errors) " {{{2
+ return sort(copy(a:errors), 's:compareErrorItems')
+endfunction " }}}2
+" merge consecutive blanks
+function! syntastic#postprocess#compressWhitespace(errors) " {{{2
for e in a:errors
let e['text'] = substitute(e['text'], "\001", '', 'g')
let e['text'] = substitute(e['text'], '\n', ' ', 'g')
let e['text'] = substitute(e['text'], '\m\s\{2,}', ' ', 'g')
- call add(llist, e)
endfor
- return llist
-endfunction
+ return a:errors
+endfunction " }}}2
" remove spurious CR under Cygwin
-function! syntastic#postprocess#cygwinRemoveCR(errors)
+function! syntastic#postprocess#cygwinRemoveCR(errors) " {{{2
if has('win32unix')
- let llist = []
-
for e in a:errors
let e['text'] = substitute(e['text'], '\r', '', 'g')
- call add(llist, e)
endfor
- else
- let llist = a:errors
endif
- return llist
-endfunction
+ return a:errors
+endfunction " }}}2
" decode XML entities
-function! syntastic#postprocess#decodeXMLEntities(errors)
- let llist = []
-
+function! syntastic#postprocess#decodeXMLEntities(errors) " {{{2
for e in a:errors
let e['text'] = syntastic#util#decodeXMLEntities(e['text'])
- call add(llist, e)
endfor
- return llist
-endfunction
+ return a:errors
+endfunction " }}}2
" filter out errors referencing other files
-function! syntastic#postprocess#filterForeignErrors(errors)
+function! syntastic#postprocess#filterForeignErrors(errors) " {{{2
return filter(copy(a:errors), 'get(v:val, "bufnr") == ' . bufnr(''))
-endfunction
+endfunction " }}}2
+
+" }}}1
let &cpo = s:save_cpo
unlet s:save_cpo
-" vim: set et sts=4 sw=4:
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/autoload/syntastic/preprocess.vim b/bundle/syntastic/autoload/syntastic/preprocess.vim
new file mode 100644
index 00000000..f1af35be
--- /dev/null
+++ b/bundle/syntastic/autoload/syntastic/preprocess.vim
@@ -0,0 +1,79 @@
+if exists("g:loaded_syntastic_preprocess_autoload") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_preprocess_autoload = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+" Public functions {{{1
+
+function! syntastic#preprocess#checkstyle(errors) " {{{2
+ let out = []
+ let fname = expand('%')
+ for err in a:errors
+ if match(err, '\m') > -1
+ let line = str2nr(matchstr(err, '\m\ \[[^]]+\])+\ze:'', "", "")')
+endfunction " }}}2
+
+function! syntastic#preprocess#killEmpty(errors) " {{{2
+ return filter(copy(a:errors), 'v:val != ""')
+endfunction " }}}2
+
+function! syntastic#preprocess#perl(errors) " {{{2
+ let out = []
+
+ for e in a:errors
+ 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
+ endfor
+
+ return syntastic#util#unique(out)
+endfunction " }}}2
+
+function! syntastic#preprocess#validator(errors) " {{{2
+ let out = []
+ for e in a:errors
+ let parts = matchlist(e, '\v^"([^"]+)"(.+)')
+ if len(parts) >= 3
+ " URL decode, except leave alone any "+"
+ let parts[1] = substitute(parts[1], '\m%\(\x\x\)', '\=nr2char("0x".submatch(1))', 'g')
+ let parts[1] = substitute(parts[1], '\m\\"', '"', 'g')
+ let parts[1] = substitute(parts[1], '\m\\\\', '\\', 'g')
+ call add(out, '"' . parts[1] . '"' . parts[2])
+ endif
+ endfor
+ return out
+endfunction " }}}2
+
+" }}}1
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/autoload/syntastic/util.vim b/bundle/syntastic/autoload/syntastic/util.vim
index 10c01303..d1dc2618 100644
--- a/bundle/syntastic/autoload/syntastic/util.vim
+++ b/bundle/syntastic/autoload/syntastic/util.vim
@@ -1,4 +1,4 @@
-if exists("g:loaded_syntastic_util_autoload")
+if exists('g:loaded_syntastic_util_autoload') || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_util_autoload = 1
@@ -6,42 +6,23 @@ let g:loaded_syntastic_util_autoload = 1
let s:save_cpo = &cpo
set cpo&vim
-if !exists("g:syntastic_debug")
- let g:syntastic_debug = 0
-endif
-
-if !exists("g:syntastic_delayed_redraws")
- let g:syntastic_delayed_redraws = 0
-endif
+" Public functions {{{1
-let s:deprecationNoticesIssued = []
-let s:redraw_delayed = 0
-let s:redraw_full = 0
-
-if g:syntastic_delayed_redraws
- " CursorHold / CursorHoldI events are triggered if user doesn't press a
- " key for &updatetime ms. We change it only if current value is the default
- " value, that is 4000 ms.
- if &updatetime == 4000
- let &updatetime = 500
- endif
+function! syntastic#util#isRunningWindows() " {{{2
+ return has('win16') || has('win32') || has('win64')
+endfunction " }}}2
- augroup syntastic
- autocmd CursorHold,CursorHoldI * call syntastic#util#redrawHandler()
- augroup END
-endif
-
-function! syntastic#util#DevNull()
- if has('win32')
+function! syntastic#util#DevNull() " {{{2
+ if syntastic#util#isRunningWindows()
return 'NUL'
endif
return '/dev/null'
-endfunction
+endfunction " }}}2
" Get directory separator
-function! syntastic#util#Slash() abort
- return !exists("+shellslash") || &shellslash ? '/' : '\'
-endfunction
+function! syntastic#util#Slash() abort " {{{2
+ return (!exists("+shellslash") || &shellslash) ? '/' : '\'
+endfunction " }}}2
"search the first 5 lines of the file for a magic number and return a map
"containing the args and the executable
@@ -53,30 +34,38 @@ endfunction
"returns
"
"{'exe': '/usr/bin/perl', 'args': ['-f', '-bar']}
-function! syntastic#util#parseShebang()
+function! syntastic#util#parseShebang() " {{{2
for lnum in range(1,5)
let line = getline(lnum)
if line =~ '^#!'
let exe = matchstr(line, '\m^#!\s*\zs[^ \t]*')
let args = split(matchstr(line, '\m^#!\s*[^ \t]*\zs.*'))
- return {'exe': exe, 'args': args}
+ return { 'exe': exe, 'args': args }
endif
endfor
- return {'exe': '', 'args': []}
-endfunction
+ return { 'exe': '', 'args': [] }
+endfunction " }}}2
+
+" Get the value of a variable. Allow local variables to override global ones.
+function! syntastic#util#var(name, ...) " {{{2
+ return
+ \ exists('b:syntastic_' . a:name) ? b:syntastic_{a:name} :
+ \ exists('g:syntastic_' . a:name) ? g:syntastic_{a:name} :
+ \ a:0 > 0 ? a:1 : ''
+endfunction " }}}2
" Parse a version string. Return an array of version components.
-function! syntastic#util#parseVersion(version)
+function! syntastic#util#parseVersion(version) " {{{2
return split(matchstr( a:version, '\v^\D*\zs\d+(\.\d+)+\ze' ), '\m\.')
-endfunction
+endfunction " }}}2
" Run 'command' in a shell and parse output as a version string.
" Returns an array of version components.
-function! syntastic#util#getVersion(command)
+function! syntastic#util#getVersion(command) " {{{2
return syntastic#util#parseVersion(system(a:command))
-endfunction
+endfunction " }}}2
" Verify that the 'installed' version is at least the 'required' version.
"
@@ -84,53 +73,48 @@ endfunction
" the "missing" elements will be assumed to be 0 for the purposes of checking.
"
" See http://semver.org for info about version numbers.
-function! syntastic#util#versionIsAtLeast(installed, required)
- for index in range(max([len(a:installed), len(a:required)]))
- if len(a:installed) <= index
- let installed_element = 0
- else
- let installed_element = a:installed[index]
- endif
- if len(a:required) <= index
- let required_element = 0
- else
- let required_element = a:required[index]
- endif
+function! syntastic#util#versionIsAtLeast(installed, required) " {{{2
+ for idx in range(max([len(a:installed), len(a:required)]))
+ let installed_element = get(a:installed, idx, 0)
+ let required_element = get(a:required, idx, 0)
if installed_element != required_element
return installed_element > required_element
endif
endfor
" Everything matched, so it is at least the required version.
return 1
-endfunction
+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')
"print as much of a:msg as possible without "Press Enter" prompt appearing
-function! syntastic#util#wideMsg(msg)
+function! syntastic#util#wideMsg(msg) " {{{2
let old_ruler = &ruler
let old_showcmd = &showcmd
- "convert tabs to spaces so that the tabs count towards the window width
- "as the proper amount of characters
- let msg = substitute(a:msg, "\t", repeat(" ", &tabstop), "g")
- let msg = strpart(msg, 0, winwidth(0)-1)
+ "This is here because it is possible for some error messages to
+ "begin with \n which will cause a "press enter" prompt.
+ let msg = substitute(a:msg, "\n", "", "g")
- "This is here because it is possible for some error messages to begin with
- "\n which will cause a "press enter" prompt. I have noticed this in the
- "javascript:jshint checker and have been unable to figure out why it
- "happens
- let msg = substitute(msg, "\n", "", "g")
+ "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(" ", &ts - s:width(v:val) % &ts)'), '') . chunks[-1]
+ let msg = strpart(msg, 0, &columns - 1)
set noruler noshowcmd
call syntastic#util#redraw(0)
echo msg
- let &ruler=old_ruler
- let &showcmd=old_showcmd
-endfunction
+ let &ruler = old_ruler
+ let &showcmd = old_showcmd
+endfunction " }}}2
" Check whether a buffer is loaded, listed, and not hidden
-function! syntastic#util#bufIsActive(buffer)
+function! syntastic#util#bufIsActive(buffer) " {{{2
" convert to number, or hell breaks loose
let buf = str2nr(a:buffer)
@@ -146,32 +130,43 @@ function! syntastic#util#bufIsActive(buffer)
endfor
return 0
-endfunction
+endfunction " }}}2
" start in directory a:where and walk up the parent folders until it
" finds a file matching a:what; return path to that file
-function! syntastic#util#findInParent(what, where)
+function! syntastic#util#findInParent(what, where) " {{{2
let here = fnamemodify(a:where, ':p')
- while !empty(here)
+ let root = syntastic#util#Slash()
+ if syntastic#util#isRunningWindows() && here[1] == ':'
+ " The drive letter is an ever-green source of fun. That's because
+ " we don't care about running syntastic on Amiga these days. ;)
+ let root = fnamemodify(root, ':p')
+ let root = here[0] . root[1:]
+ endif
+
+ let old = ''
+ while here != ''
let p = split(globpath(here, a:what), '\n')
if !empty(p)
return fnamemodify(p[0], ':p')
- elseif here == '/'
+ elseif here ==? root || here ==? old
break
endif
+ let old = here
+
" we use ':h:h' rather than ':h' since ':p' adds a trailing '/'
" if 'here' is a directory
let here = fnamemodify(here, ':p:h:h')
endwhile
return ''
-endfunction
+endfunction " }}}2
" Returns unique elements in a list
-function! syntastic#util#unique(list)
+function! syntastic#util#unique(list) " {{{2
let seen = {}
let uniques = []
for e in a:list
@@ -181,20 +176,20 @@ function! syntastic#util#unique(list)
endif
endfor
return uniques
-endfunction
+endfunction " }}}2
" A less noisy shellescape()
-function! syntastic#util#shescape(string)
+function! syntastic#util#shescape(string) " {{{2
return a:string =~ '\m^[A-Za-z0-9_/.-]\+$' ? a:string : shellescape(a:string)
-endfunction
+endfunction " }}}2
" A less noisy shellescape(expand())
-function! syntastic#util#shexpand(string)
+function! syntastic#util#shexpand(string) " {{{2
return syntastic#util#shescape(expand(a:string))
-endfunction
+endfunction " }}}2
" decode XML entities
-function! syntastic#util#decodeXMLEntities(string)
+function! syntastic#util#decodeXMLEntities(string) " {{{2
let str = a:string
let str = substitute(str, '\m<', '<', 'g')
let str = substitute(str, '\m>', '>', 'g')
@@ -202,76 +197,66 @@ function! syntastic#util#decodeXMLEntities(string)
let str = substitute(str, '\m'', "'", 'g')
let str = substitute(str, '\m&', '\&', 'g')
return str
-endfunction
-
-" On older Vim versions calling redraw while a popup is visible can make
-" Vim segfault, so move redraws to a CursorHold / CursorHoldI handler.
-function! syntastic#util#redraw(full)
- if !g:syntastic_delayed_redraws || !pumvisible()
- call s:Redraw(a:full)
- let s:redraw_delayed = 0
- let s:redraw_full = 0
- else
- let s:redraw_delayed = 1
- let s:redraw_full = s:redraw_full || a:full
- endif
-endfunction
+endfunction " }}}2
-function! syntastic#util#redrawHandler()
- if s:redraw_delayed && !pumvisible()
- call s:Redraw(s:redraw_full)
- let s:redraw_delayed = 0
- let s:redraw_full = 0
- endif
-endfunction
-
-function! syntastic#util#debug(msg)
- if g:syntastic_debug
- echomsg "syntastic: debug: " . a:msg
- endif
-endfunction
-
-function! syntastic#util#info(msg)
- echomsg "syntastic: info: " . a:msg
-endfunction
-
-function! syntastic#util#warn(msg)
- echohl WarningMsg
- echomsg "syntastic: warning: " . a:msg
- echohl None
-endfunction
-
-function! syntastic#util#error(msg)
- execute "normal \"
- echohl ErrorMsg
- echomsg "syntastic: error: " . a:msg
- echohl None
-endfunction
-
-function! syntastic#util#deprecationWarn(msg)
- if index(s:deprecationNoticesIssued, a:msg) >= 0
- return
- endif
-
- call add(s:deprecationNoticesIssued, a:msg)
- call syntastic#util#warn(a:msg)
-endfunction
-
-"Redraw in a way that doesnt make the screen flicker or leave anomalies behind.
-"
-"Some terminal versions of vim require `redraw!` - otherwise there can be
-"random anomalies left behind.
-"
-"However, on some versions of gvim using `redraw!` causes the screen to
-"flicker - so use redraw.
-function! s:Redraw(full)
+function! syntastic#util#redraw(full) " {{{2
if a:full
redraw!
else
redraw
endif
-endfunction
+endfunction " }}}2
+
+function! syntastic#util#dictFilter(errors, filter) " {{{2
+ let rules = s:translateFilter(a:filter)
+ " call syntastic#log#debug(g:SyntasticDebugFilters, "applying filter:", rules)
+ try
+ call filter(a:errors, rules)
+ catch /\m^Vim\%((\a\+)\)\=:E/
+ let msg = matchstr(v:exception, '\m^Vim\%((\a\+)\)\=:\zs.*')
+ call syntastic#log#error('quiet_messages: ' . msg)
+ endtry
+endfunction " }}}2
+
+" }}}1
+
+" Private functions {{{1
+
+function! s:translateFilter(filters) " {{{2
+ let conditions = []
+ for k in keys(a:filters)
+ if type(a:filters[k]) == type([])
+ call extend(conditions, map(copy(a:filters[k]), 's:translateElement(k, v:val)'))
+ else
+ call add(conditions, s:translateElement(k, a:filters[k]))
+ endif
+ endfor
+
+ if conditions == []
+ let conditions = ["1"]
+ endif
+ return len(conditions) == 1 ? conditions[0] : join(map(conditions, '"(" . v:val . ")"'), ' && ')
+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)
+ else
+ call syntastic#log#warn('quiet_messages: ignoring invalid key ' . strtrans(string(a:key)))
+ let ret = "1"
+ endif
+ return ret
+endfunction " }}}2
+
+" }}}1
let &cpo = s:save_cpo
unlet s:save_cpo
-" vim: set et sts=4 sw=4:
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/doc/syntastic.txt b/bundle/syntastic/doc/syntastic.txt
index 4fd0c056..86a5ed2b 100644
--- a/bundle/syntastic/doc/syntastic.txt
+++ b/bundle/syntastic/doc/syntastic.txt
@@ -20,17 +20,25 @@
CONTENTS *syntastic-contents*
1.Intro........................................|syntastic-intro|
+ 1.1.Quick start............................|syntastic-quickstart|
2.Functionality provided.......................|syntastic-functionality|
2.1.The statusline flag....................|syntastic-statusline-flag|
2.2.Error signs............................|syntastic-error-signs|
2.3.Error window...........................|syntastic-error-window|
+ 2.4.Error highlighting.....................|syntastic-highlighting|
+ 2.5.Aggregating errors.....................|syntastic-aggregating-errors|
+ 2.6.Filtering errors.......................|syntastic-filtering-errors|
3.Commands.....................................|syntastic-commands|
4.Global Options...............................|syntastic-global-options|
5.Checker Options..............................|syntastic-checker-options|
+ 5.1.Choosing which checkers to use.........|syntastic-filetype-checkers|
+ 5.2.Choosing the executable................|syntastic-config-exec|
+ 5.3.Configuring specific checkers..........|syntastic-config-makeprg|
6.Notes........................................|syntastic-notes|
6.1.Handling of composite filetypes........|syntastic-composite|
6.2.Interaction with python-mode...........|syntastic-pymode|
6.3.Interaction with the fish shell........|syntastic-fish|
+ 6.4.Using syntastic with the fizsh shell...|syntastic-fizsh|
7.About........................................|syntastic-about|
8.License......................................|syntastic-license|
@@ -38,11 +46,6 @@ CONTENTS *syntastic-contents*
==============================================================================
1. Intro *syntastic-intro*
-Note: This doc only deals with using syntastic. To learn how to write syntax
-checker integrations, see the guide on the github wiki:
-
- https://github.com/scrooloose/syntastic/wiki/Syntax-Checker-Guide
-
Syntastic is a syntax checking plugin that runs files through external syntax
checkers. This can be done on demand, or automatically as files are saved and
opened. If syntax errors are detected, the user is notified and is happy
@@ -54,15 +57,38 @@ syntax checker plugins are defined on a per-filetype basis where each one wraps
up an external syntax checking program. The core script delegates off to these
plugins and uses their output to provide the syntastic functionality.
-Take a look in the syntax_checkers directory for a list of supported filetypes
-and checkers.
+Take a look at the wiki for a list of supported filetypes and checkers:
+ https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers
+
+Note: This doc only deals with using syntastic. To learn how to write syntax
+checker integrations, see the guide on the github wiki:
+
+ https://github.com/scrooloose/syntastic/wiki/Syntax-Checker-Guide
+
+------------------------------------------------------------------------------
+1.1. Quick start *syntastic-quickstart*
+
+Syntastic comes preconfigured with a default list of enabled checkers per
+filetype. This list is kept reasonably short to prevent slowing down Vim or
+trying to use conflicting checkers.
+
+You can see the list checkers available for the current filetype with the
+|:SyntasticInfo| command.
+
+If you want to override the configured list of checkers for a filetype then
+see |syntastic-checker-options| for details. You can also change the arguments
+passed to a specific checker as well.
+
+Use |:SyntasticCheck| to manually check right now. Use |:SyntasticToggleMode|
+to switch between active (checking on writting the buffer) and passive (manual)
+checking.
==============================================================================
2. Functionality provided *syntastic-functionality*
Syntax checking can be done automatically or on demand (see
-|'syntastic_mode_map'| for configuring this).
+|'syntastic_mode_map'| and |:SyntasticToggleMode| for configuring this).
When syntax checking is done, the features below can be used to notify the
user of errors. See |syntastic-options| for how to configure and
@@ -71,12 +97,13 @@ activate/deactivate these features.
* A statusline flag
* Signs beside lines with errors
* The |location-list| can be populated with the errors for the associated
- buffer.
+ buffer
* Erroneous parts of lines can be highlighted (this functionality is only
- provided by some syntax checkers).
- * Balloons (if compiled in) can be used to display error messages for
- erroneous lines when hovering the mouse over them.
-
+ provided by some syntax checkers)
+ * Balloons (if the |+balloon_eval| feature is compiled in) can be used to
+ display error messages for erroneous lines when hovering the mouse over
+ them
+ * Error messages from multiple checkers can be aggregated in a single list
------------------------------------------------------------------------------
2.1. The statusline flag *syntastic-statusline-flag*
@@ -90,7 +117,8 @@ Something like this could be more useful: >
set statusline+=%*
<
When syntax errors are detected a flag will be shown. The content of the flag
-is derived from the |syntastic_stl_format| option
+is derived from the |syntastic_stl_format| option.
+
------------------------------------------------------------------------------
2.2. Error signs *syntastic-error-signs*
@@ -121,9 +149,8 @@ following highlight groups:
Example: >
highlight SyntasticErrorLine guibg=#2f0000
<
-
------------------------------------------------------------------------------
-2.3. The error window *:Errors* *syntastic-error-window*
+2.3. The error window *:Errors* *syntastic-error-window*
You can use the :Errors command to display the errors for the current buffer
in the |location-list|.
@@ -131,6 +158,44 @@ in the |location-list|.
Note that when you use :Errors, the current location list is overwritten with
Syntastic's own location list.
+------------------------------------------------------------------------------
+2.4. Error highlighting *syntastic-highlighting*
+
+Some checkers provide enough information for syntastic to be able to highlight
+errors. By default the SpellBad syntax highlight group is used to color errors,
+and the SpellCap group is used for warnings. If you wish to customize the
+colors for highlighting you can use the following groups:
+ SyntasticError - Links to 'SpellBad' by default
+ SyntasticWarning - Links to 'SpellCap' by default
+
+Example: >
+ highlight SyntasticError guibg=#2f0000
+<
+------------------------------------------------------------------------------
+2.5. Aggregating errors *syntastic-aggregating-errors*
+
+By default, namely if |'syntastic_aggregate_errors'| is unset, syntastic runs
+in turn the checkers corresponding to the filetype of the current file (see
+|syntastic-filetype-checkers|), and stops as soon as a checker reports any
+errors. It then notifies you of the errors using the notification mechanisms
+above. In this mode error lists are always produced by a single checker, and,
+if you open the error window, the name of the checker that generated the errors
+is shown on the statusline of the error window.
+
+If |'syntastic_aggregate_errors'| is set, syntastic runs all checkers that
+apply (still cf. |syntastic-filetype-checkers|), then aggregates errors found
+by all checkers in a single list, and notifies you. In this mode each error
+message is labeled with the name of the checker that generated it, but you can
+disable these labels by unsetting '|syntastic_id_checkers|'.
+
+------------------------------------------------------------------------------
+2.6 Filtering errors *syntastic-filtering-errors*
+
+You can selectively disable some of the errors found by checkers either
+using |'syntastic_quiet_messages'|, or by specifying a list of patterns in
+|'syntastic_ignore_files'|.
+
+See also: |'syntastic___quiet_messages'|.
==============================================================================
3. Commands *syntastic-commands*
@@ -140,27 +205,45 @@ Syntastic's own location list.
When errors have been detected, use this command to pop up the |location-list|
and display the error messages.
-
:SyntasticToggleMode *:SyntasticToggleMode*
Toggles syntastic between active and passive mode. See |'syntastic_mode_map'|
for more info.
-
:SyntasticCheck *:SyntasticCheck*
-Manually cause a syntax check to be done. Useful in passive mode, or if the
-current filetype is set to passive. See |'syntastic_mode_map'| for more info.
+Manually cause a syntax check to be done. By default the checkers in the
+|'g:syntastic__checkers'| or |'b:syntastic_checkers'| lists are run,
+cf. |syntastic-filetype-checkers|. If |syntastic_aggregate_errors| is unset
+(which is the default), checking stops the first time a checker reports any
+errors; if |syntastic_aggregate_errors| is set, all checkers that apply are run
+in turn, and all errors found are aggregated in a single list.
+The command may be followed by a (space separated) list of checkers. In this
+case |'g:syntastic__checkers'| and |'b:syntastic_checkers'| are
+ignored, and the checkers named by the command's arguments are run instead, in
+the order specified. The rules of |syntastic_aggregate_errors| still apply.
+
+Example: >
+ :SyntasticCheck flake8 pylint
+<
:SyntasticInfo *:SyntasticInfo*
-Output info about what checkers are available and in use for the current
-filetype.
+The command takes an optional argument, and outputs information about the
+checkers available for the filetype named by said argument, or for the current
+filetype if no argument was provided.
:SyntasticReset *:SyntasticReset*
Resets the list of errors and turns off all error notifiers.
+:SyntasticSetLoclist *:SyntasticSetLoclist*
+
+If |'syntastic_always_populate_loc_list'| is not set, the |location-list| is
+not filled in automatically with the list of errors detected by the checkers.
+This is useful if you run syntastic along with other plugins that use location
+lists. The |:SyntasticSetLoclist| command allows you to stick the errors into
+the location list explicitly.
==============================================================================
4. Global Options *syntastic-global-options*
@@ -170,61 +253,64 @@ Resets the list of errors and turns off all error notifiers.
Default: 0
If enabled, syntastic will do syntax checks when buffers are first loaded as
well as on saving >
- let g:syntastic_check_on_open=1
+ let g:syntastic_check_on_open = 1
<
-
*'syntastic_check_on_wq'*
Default: 1
Normally syntastic runs syntax checks whenever buffers are written to disk.
If you want to skip these checks when you issue |:wq|, |:x|, and |:ZZ|, set this
variable to 0. >
- let g:syntastic_check_on_wq=0
+ let g:syntastic_check_on_wq = 0
<
-
*'syntastic_aggregate_errors'*
Default: 0
-When enabled, |:SyntasticCheck| runs all checkers that apply, then aggregates
-errors found by all checkers and displays them. When disabled,
-|:SyntasticCheck| runs each checker in turn, and stops to display the results
-the first time a checker finds any errors. >
- let g:syntastic_aggregate_errors=1
+When enabled, syntastic runs all checkers that apply to the current filetype,
+then aggregates errors found by all checkers and displays them. When disabled,
+syntastic runs each checker in turn, and stops to display the results the first
+time a checker finds any errors. >
+ let g:syntastic_aggregate_errors = 1
+<
+ *'syntastic_id_checkers'*
+Default: 1
+When results from multiple checkers are aggregated in a single error list
+(that is either when |syntastic_aggregate_errors| is enabled, or when checking
+a file with a composite filetype), it might not be immediately obvious which
+checker has produced a given error message. This variable instructs syntastic
+to label error messages with the names of the checkers that created them. >
+ let g:syntastic_id_checkers = 0
<
-
*'syntastic_echo_current_error'*
Default: 1
If enabled, syntastic will echo the error associated with the current line to
the command window. If multiple errors are found, the first will be used. >
- let g:syntastic_echo_current_error=1
+ let g:syntastic_echo_current_error = 1
<
-
*'syntastic_enable_signs'*
Default: 1
Use this option to tell syntastic whether to use the |:sign| interface to mark
syntax errors: >
- let g:syntastic_enable_signs=1
+ let g:syntastic_enable_signs = 1
<
-
*'syntastic_error_symbol'* *'syntastic_style_error_symbol'*
*'syntastic_warning_symbol'* *'syntastic_style_warning_symbol'*
Use this option to control what the syntastic |:sign| text contains. Several
-error symobls can be customized:
+error symbols can be customized:
syntastic_error_symbol - For syntax errors, defaults to '>>'
syntastic_style_error_symbol - For style errors, defaults to 'S>'
syntastic_warning_symbol - For syntax warnings, defaults to '>>'
syntastic_style_warning_symbol - For style warnings, defaults to 'S>'
Example: >
- let g:syntastic_error_symbol='✗'
- let g:syntastic_warning_symbol='âš '
+ let g:syntastic_error_symbol = '✗'
+ let g:syntastic_warning_symbol = 'âš '
<
-
*'syntastic_enable_balloons'*
Default: 1
Use this option to tell syntastic whether to display error messages in balloons
when the mouse is hovered over erroneous lines: >
let g:syntastic_enable_balloons = 1
<
-Note that vim must be compiled with |+balloon_eval|.
+Note that Vim must be compiled with |+balloon_eval|.
*'syntastic_enable_highlighting'*
Default: 1
@@ -232,55 +318,57 @@ Use this option to tell syntastic whether to use syntax highlighting to mark
errors (where possible). Highlighting can be turned off with the following >
let g:syntastic_enable_highlighting = 0
<
-
*'syntastic_always_populate_loc_list'*
Default: 0
Enable this option to tell syntastic to always stick any detected errors into
-the loclist: >
- let g:syntastic_always_populate_loc_list=1
+the |location-list|: >
+ let g:syntastic_always_populate_loc_list = 1
<
*'syntastic_auto_jump'*
Default: 0
-Enable this option if you want the cursor to jump to the first detected error
-when saving or opening a file: >
- let g:syntastic_auto_jump=1
-<
+Enable this option if you want the cursor to jump to the first detected issue
+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. >
+ 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
+<
*'syntastic_auto_loc_list'*
Default: 2
Use this option to tell syntastic to automatically open and/or close the
|location-list| (see |syntastic-error-window|).
When set to 0 the error window will not be opened or closed automatically. >
- let g:syntastic_auto_loc_list=0
+ let g:syntastic_auto_loc_list = 0
<
-
When set to 1 the error window will be automatically opened when errors are
detected, and closed when none are detected. >
- let g:syntastic_auto_loc_list=1
+ let g:syntastic_auto_loc_list = 1
<
When set to 2 the error window will be automatically closed when no errors are
detected, but not opened automatically. >
- let g:syntastic_auto_loc_list=2
+ let g:syntastic_auto_loc_list = 2
<
-
*'syntastic_loc_list_height'*
Default: 10
Use this option to specify the height of the location lists that syntastic
opens. >
- let g:syntastic_loc_list_height=5
+ let g:syntastic_loc_list_height = 5
<
-
*'syntastic_ignore_files'*
Default: []
-Use this option to specify files that syntastic should neither check, nor
-include in error lists. It has to be a list of |regular-expression| patterns.
-The full paths of files (see |::p|) are matched against these patterns, and
-the matches are case sensitive. Use |\c| if you need case insensitive
-patterns. >
- let g:syntastic_ignore_files=['^/usr/include/', '\c\.h$']
+Use this option to specify files that syntastic should never check. It's a
+list of |regular-expression| patterns. The full paths of files (see |::p|) are
+matched against these patterns, and the matches are case sensitive. Use |\c|
+to specify case insensitive patterns. Example: >
+ let g:syntastic_ignore_files = ['\m^/usr/include/', '\m\c\.h$']
<
-
*'syntastic_filetype_map'*
Default: {}
Use this option to map non-standard filetypes to standard ones. Corresponding
@@ -289,12 +377,10 @@ non-standard filetypes: >
let g:syntastic_filetype_map = { 'latex': 'tex',
\ 'gentoo-metadata': 'xml' }
<
-
Composite filetypes can also be mapped to simple types, which disables the
default behaviour of running both checkers against the input file: >
let g:syntastic_filetype_map = { 'handlebars.html': 'handlebars' }
<
-
*'syntastic_mode_map'*
Default: { "mode": "active",
"active_filetypes": [],
@@ -309,7 +395,6 @@ The option should be set to something like: >
\ 'active_filetypes': ['ruby', 'php'],
\ 'passive_filetypes': ['puppet'] }
<
-
"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
initially opened. When set to "passive" syntastic only checks when the user
@@ -327,21 +412,50 @@ active and passive mode.
If any of "mode", "active_filetypes", or "passive_filetypes" are not specified
then they will default to their default value as above.
- *'syntastic_quiet_warnings'*
+ *'syntastic_quiet_messages'*
+Default: {}
-Use this option if you only care about syntax errors, not warnings. When set,
-this option has the following effects:
- * no |signs| appear unless there is at least one error, whereupon both
- errors and warnings are displayed
- * the |'syntastic_auto_loc_list'| option only pops up the error window if
- there's at least one error, whereupon both errors and warnings are
- displayed
->
- let g:syntastic_quiet_warnings=1
+Use this option to filter out some of the messages produced by checkers. The
+option should be set to something like: >
+ let g:syntastic_quiet_messages = { "level": "warnings",
+ \ "type": "style",
+ \ "regex": '\m\[C03\d\d\]',
+ \ "file": ['\m^/usr/include/', '\m\c\.h$'] }
+<
+Each element turns off messages matching the patterns specified by the
+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
+of ["style"]). Elements with values [] or '' are ignored (this is useful for
+overriding filters, cf. |filter-overrides|).
+
+ "level" - takes one of two values, "warnings" or "errors"
+ "type" - can be either "syntax" or "style"
+ "regex" - is matched against the messages' text as a case insensitive
+ |regular-expression|
+ "file" - is matched against the filename the error refers to, as a case
+ sensitive |regular-expression|.
+
+If |'syntastic_id_checkers'| is set, filters are applied before error messages
+are labeled with the names of the checkers that created them.
+
+There are also checker-specific variants of this option, providing finer
+control. They are named |'syntastic___quiet_messages'|.
+
+For a particular checker, if both a |'syntastic_quiet_messages'| filter and
+a checker-specific filter are present, they are both applied (to the list of
+errors produced by the said checker). In case of conflicting values for the
+same keys, the values of the checker-specific filters take precedence.
+
+ *filter-overrides*
+Since filter elements with values [] or '' are ignored, you can disable global
+filters for particular checkers, by setting the values of the corresponding
+elements in |'syntastic___quiet_messages'| to [] or ''. For
+example, the following setting will silence all warnings, except for the
+ones produced by 'pylint': >
+ let g:syntastic_quiet_messages = { "level": "warnings" }
+ let g:syntastic_python_pylint_quiet_messages = { "level" : [] }
<
-
*'syntastic_stl_format'*
-
Default: [Syntax: line:%F (%t)]
Use this option to control what the syntastic statusline text contains. Several
magic flags are available to insert information:
@@ -357,7 +471,7 @@ Several additional flags are available to hide text under certain conditions:
%W{...} - hide the text in the brackets unless there are warnings
%B{...} - hide the text in the brackets unless there are both warnings AND
errors
-These flags cant be nested.
+These flags can't be nested.
Example: >
let g:syntastic_stl_format = '[%E{Err: %fe #%e}%B{, }%W{Warn: %fw #%w}]'
@@ -377,94 +491,129 @@ Changing it can in principle make screen redraws smoother, but it can also
cause screen to flicker, or cause ghost characters. Leaving it to the default
should be safe.
- *'syntastic_delayed_redraws'*
-Default: 0
-On older Vims, calling redraw when a popup menu is visible can cause Vim to
-segfault. If your version of Vim is affected, the solution is of course to
-upgrade Vim. If upgrading is not immediately feasible however, setting this
-variable to 1 might help, by delaying redraws until they are safe.
-
*'syntastic_debug'*
Default: 0
-Set this to 1 to enable debugging: >
+Set this to the sum of one or more of the following flags to enable
+debugging:
+
+ 1 - trace checker calls
+ 2 - dump location lists
+ 4 - trace notifiers
+ 8 - trace autocommands
+ 16 - dump options
+
+Example: >
let g:syntastic_debug = 1
<
-Checkers will then add debugging messages to Vim's |message-history|. You can
+Syntastic will then add debugging messages to Vim's |message-history|. You can
examine these messages with |:mes|.
+ *'syntastic_debug_file'*
+Default: unset
+When set, debugging messages are written to the file named by its value, in
+addition to being added to Vim's |message-history|: >
+ let g:syntastic_debug_file = '~/syntastic.log'
+<
+ *'syntastic_extra_filetypes'*
+Default: []
+List of filetypes handled by checkers external to syntastic. If you have a Vim
+plugin that adds a checker for syntastic, and if the said checker deals with a
+filetype that is unknown to syntastic, you might consider adding that filetype
+to this list: >
+ let g:syntastic_extra_filetypes = [ 'make', 'gitcommit' ]
+<
+This will allow |:SyntasticInfo| to do proper tab completion for the new
+filetypes.
==============================================================================
5. Checker Options *syntastic-checker-options*
------------------------------------------------------------------------------
-5.1 Telling syntastic which checker to use.
+5.1 Choosing which checkers to use *syntastic-filetype-checkers*
-Stick a line like this in your vimrc: >
- let g:syntastic__checkers = ['']
-<
-e.g. >
- let g:syntastic_python_checkers = ['flake8']
+ *'g:syntastic__checkers'*
+You can tell syntastic which checkers to run for a given filetype by setting a
+variable 'g:syntastic__checkers' to a list of checkers, e.g. >
+ let g:syntastic_php_checkers = ['php', 'phpcs', 'phpmd']
<
-
-There's also a per-buffer version of this setting, b:syntastic_checkers. Use
-this in an autocmd to configure specific checkers for particular paths: >
+ *'b:syntastic_checkers'*
+There is also a per-buffer version of this setting, 'b:syntastic_checkers'.
+When set, it takes precedence over |'g:syntastic__checkers'|. You can
+use this in an autocmd to configure specific checkers for particular paths: >
autocmd FileType python if stridx(expand('%:p'), '/some/path/') == 0 |
\ let b:syntastic_checkers = ['pylint'] | endif
<
+If neither |'g:syntastic__checkers'| nor |'b:syntastic_checkers'|
+is set, a default list of checker is used. Beware however that this list
+deliberately kept minimal, for performance reasons.
-To see the list of available checkers for your filetype, look in
-`syntax_checkers//`. The names of the files here correspond to
-'' above.
+Take a look at the wiki to find out what checkers and filetypes are supported
+by syntastic:
-e.g. Python has the following checkers: flake8, pyflakes, pylint and a
-native python checker.
+ https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers
-Some filetypes, like PHP, have style checkers as well as syntax checkers. These
-can be chained together like this: >
- let g:syntastic_php_checkers=['php', 'phpcs', 'phpmd']`
-<
-This is telling syntastic to run the 'php' checker first, and if no errors are
-found, run 'phpcs', and then 'phpmd'.
+Use |:SyntasticInfo| to see which checkers are available for a given filetype.
------------------------------------------------------------------------------
-5.2 Configuring specific checkers *syntastic-config-makeprg*
+5.2 Choosing the executable *syntastic-config-exec*
+
+ *'syntastic___exec'*
+The executable used by a checker is normally defined automatically, when the
+checkers is registered. You can however override it by setting the variable
+'g:syntastic___exec': >
+ let g:syntastic_ruby_mri_exec = '~/bin/ruby2'
+<
+------------------------------------------------------------------------------
+5.3 Configuring specific checkers *syntastic-config-makeprg*
-Most checkers use the 'syntastic#makeprg#build()' function and provide many
-options by default - in fact you can customise every part of the command
-that gets called.
+Most checkers use the 'makeprgBuild()' function and provide many options by
+default - in fact you can customise every part of the command that gets called.
-Checkers that use 'syntastic#makeprg#build()' look like this: >
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'ruby',
+ *'syntastic___'*
+Checkers that use 'makeprgBuild()' construct a 'makeprg' like this: >
+ let makeprg = self.makeprgBuild({
+ \ 'exe': self.getExec(),
\ 'args': '-a -b -c',
\ 'post_args': '--more --args',
- \ 'tail': '> /tmp/output',
- \ 'filetype': 'ruby',
- \ 'subchecker': 'mri' })
+ \ 'tail': '> /tmp/output' })
<
+The result is a 'makeprg' of the form: >
+
+<
+ *'syntastic___exe'*
+All arguments above are optional, and can be overridden by setting global
+variables 'g:syntastic___' - even
+parameters not specified in the call to makeprgBuild(). These variables also
+have local versions 'b:syntastic___',
+which take precedence over the global ones in the corresponding buffers.
-The 'filetype' and 'subchecker' parameters are mandatory. All of the other
-parameters above are optional (well, you probably need at least 'exe'), and
-can be overriden by setting global variables - even parameters not specified
-in the call to syntastic#makeprg#build().
-
-E.g. To override the checker exe above, you could do this: >
- let g:syntastic_ruby_mri_exe="another_ruby_checker_exe.rb"
+The 'exe' is normally the same as the 'exec' attribute described above, in
+which case it may be omitted. However, you can use it to add environment
+variables or additional parameters, e.g. to tell the mri checker to use KANJI
+encoding you could do something like this: >
+ let g:syntastic_ruby_mri_exe = 'RUBYOPT="-Ke" ruby'
<
To override the args and the tail: >
- let g:syntastic_ruby_mri_args="--my --args --here"
- let g:syntastic_ruby_mri_tail="> /tmp/my-output-file-biatch"
+ let g:syntastic_ruby_mri_args = "--my --args --here"
+ let g:syntastic_ruby_mri_tail = "> /tmp/my-output-file-biatch"
<
-
The general form of the override options is: >
- syntastic_[filetype]_[subchecker]_[option-name]
+ syntastic___
<
+For checkers that do not use the 'makeprgBuild()' function you will have to
+look at the source code of the checker in question. If there are specific
+options that can be set, these are usually documented in the wiki:
-For checkers that do not use the 'syntastic#makeprg#build()' function you
-will have to look at the source code of the checker in question. If there are
-specific options that can be set, these are usually documented in the wiki:
+ https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers
- https://github.com/scrooloose/syntastic/wiki/Syntaxcheckers
+ *'syntastic___quiet_messages'*
+In the same vein, 'g:syntastic___quiet_messages' can
+be used to restrict message filters to messages produced by specific checkers.
+Example: >
+ let g:syntastic_python_pylama_quiet_messages = { "type": "style",
+ \ "regex": '\m\[C03\d\d\]' }
+<
+See |syntastic_quiet_messages| for the syntax.
==============================================================================
6. Notes *syntastic-notes*
@@ -479,7 +628,6 @@ If this behaviour is not desirable, you can disable it by mapping the
composite filetypes to a simple ones using |syntastic_filetype_map|, e.g.: >
let g:syntastic_filetype_map = { 'handlebars.html': 'handlebars' }
<
-
------------------------------------------------------------------------------
6.2 Interaction with python-mode *syntastic-pymode*
@@ -491,7 +639,6 @@ for python in syntastic (see |syntastic_mode_map|), or disable lint checks in
python-mode, by setting |pymode_lint_write| to 0. E.g.: >
let g:pymode_lint_write = 0
<
-
------------------------------------------------------------------------------
6.3 Interaction with the fish shell *syntastic-fish*
@@ -501,9 +648,21 @@ can't be used together with syntastic. You don't need to change your login
shell to address this problem, but you do have to point Vim's 'shell' to a more
traditional shell, such as 'zsh', 'bash', 'ksh', or even the original Bourne
'sh': >
- set shell = 'bash'
+ set shell=bash
<
+------------------------------------------------------------------------------
+6.4. Using syntastic with the fizsh shell *syntastic-fizsh*
+Using syntastic with the 'fizsh' shell (see https://github.com/zsh-users/fizsh)
+is possible, but potentially problematic. In order to do it you'll need to set
+'shellredir' like this: >
+ set shellredir=>%s\ 2>&1
+<
+Please keep in mind however that Vim can't take advantage of any of the
+interactive features of 'fizsh'. Using a more traditional shell such as 'zsh',
+'bash', 'ksh', or the original Bourne 'sh' might be a better choice: >
+ set shell=zsh
+<
==============================================================================
7. About *syntastic-about*
@@ -512,7 +671,7 @@ The core maintainers of syntastic are:
Gregor Uhlenheuer (github: kongo2002)
LCD 047 (github: lcd047)
-Find the latest version of syntastic here:
+Find the latest version of syntastic at:
http://github.com/scrooloose/syntastic
diff --git a/bundle/syntastic/plugin/syntastic.vim b/bundle/syntastic/plugin/syntastic.vim
index a9d2c00c..28f26381 100644
--- a/bundle/syntastic/plugin/syntastic.vim
+++ b/bundle/syntastic/plugin/syntastic.vim
@@ -1,7 +1,6 @@
"============================================================================
"File: syntastic.vim
"Description: Vim plugin for on the fly syntax checking.
-"Version: 3.2.0-pre
"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
@@ -15,112 +14,164 @@ if exists("g:loaded_syntastic_plugin")
endif
let g:loaded_syntastic_plugin = 1
-runtime! plugin/syntastic/*.vim
+if has('reltime')
+ let g:syntastic_start = reltime()
+endif
-let s:running_windows = has("win16") || has("win32")
+let g:syntastic_version = '3.4.0'
-for feature in ['autocmd', 'eval', 'modify_fname', 'quickfix', 'user_commands']
- if !has(feature)
- call syntastic#util#error("need Vim compiled with feature " . feature)
+" Sanity checks {{{1
+
+for s:feature in ['autocmd', 'eval', 'modify_fname', 'quickfix', 'user_commands']
+ if !has(s:feature)
+ call syntastic#log#error("need Vim compiled with feature " . s:feature)
finish
endif
endfor
+let s:running_windows = syntastic#util#isRunningWindows()
if !s:running_windows && executable('uname')
try
let s:uname = system('uname')
- catch /^Vim\%((\a\+)\)\=:E484/
- call syntastic#util#error("your shell " . &shell . " doesn't use traditional UNIX syntax for redirections")
+ catch /\m^Vim\%((\a\+)\)\=:E484/
+ call syntastic#log#error("your shell " . &shell . " doesn't use traditional UNIX syntax for redirections")
finish
endtry
endif
-if !exists("g:syntastic_always_populate_loc_list")
- let g:syntastic_always_populate_loc_list = 0
-endif
-
-if !exists("g:syntastic_auto_jump")
- let g:syntastic_auto_jump = 0
-endif
-
-if !exists("g:syntastic_quiet_warnings")
- let g:syntastic_quiet_warnings = 0
-endif
-
-if !exists("g:syntastic_stl_format")
- let g:syntastic_stl_format = '[Syntax: line:%F (%t)]'
-endif
-
-if !exists("g:syntastic_check_on_open")
- let g:syntastic_check_on_open = 0
-endif
-
-if !exists("g:syntastic_check_on_wq")
- let g:syntastic_check_on_wq = 1
-endif
-
-if !exists("g:syntastic_aggregate_errors")
- let g:syntastic_aggregate_errors = 0
-endif
+" }}}1
+
+" Defaults {{{1
+
+let g:syntastic_defaults = {
+ \ 'aggregate_errors': 0,
+ \ 'always_populate_loc_list': 0,
+ \ 'auto_jump': 0,
+ \ 'auto_loc_list': 2,
+ \ 'bash_hack': 1,
+ \ 'check_on_open': 0,
+ \ 'check_on_wq': 1,
+ \ 'debug': 0,
+ \ 'echo_current_error': 1,
+ \ 'enable_balloons': 1,
+ \ 'enable_highlighting': 1,
+ \ 'enable_signs': 1,
+ \ 'error_symbol': '>>',
+ \ 'filetype_map': {},
+ \ 'full_redraws': !(has('gui_running') || has('gui_macvim')),
+ \ 'id_checkers': 1,
+ \ 'ignore_files': [],
+ \ 'loc_list_height': 10,
+ \ 'quiet_messages': {},
+ \ 'reuse_loc_lists': (v:version >= 704),
+ \ 'stl_format': '[Syntax: line:%F (%t)]',
+ \ 'style_error_symbol': 'S>',
+ \ 'style_warning_symbol': 'S>',
+ \ 'warning_symbol': '>>'
+ \ }
+
+for s:key in keys(g:syntastic_defaults)
+ if !exists('g:syntastic_' . s:key)
+ let g:syntastic_{s:key} = g:syntastic_defaults[s:key]
+ endif
+endfor
-if !exists("g:syntastic_loc_list_height")
- let g:syntastic_loc_list_height = 10
+if exists("g:syntastic_quiet_warnings")
+ call syntastic#log#deprecationWarn("variable g:syntastic_quiet_warnings is deprecated, please use let g:syntastic_quiet_messages = {'level': 'warnings'} instead")
+ if g:syntastic_quiet_warnings
+ let s:quiet_warnings = get(g:syntastic_quiet_messages, 'type', [])
+ if type(s:quiet_warnings) != type([])
+ let s:quiet_warnings = [s:quiet_warnings]
+ endif
+ call add(s:quiet_warnings, 'warnings')
+ let g:syntastic_quiet_messages['type'] = s:quiet_warnings
+ endif
endif
-if !exists("g:syntastic_ignore_files")
- let g:syntastic_ignore_files = []
+" }}}1
+
+" Debug {{{1
+
+let s:debug_dump_options = [
+ \ 'shell',
+ \ 'shellcmdflag',
+ \ 'shellpipe',
+ \ 'shellquote',
+ \ 'shellredir',
+ \ 'shellslash',
+ \ 'shelltemp',
+ \ 'shellxquote'
+ \ ]
+if v:version > 703 || (v:version == 703 && has('patch446'))
+ call add(s:debug_dump_options, 'shellxescape')
endif
-if !exists("g:syntastic_filetype_map")
- let g:syntastic_filetype_map = {}
-endif
+" debug constants
+let g:SyntasticDebugTrace = 1
+let g:SyntasticDebugLoclist = 2
+let g:SyntasticDebugNotifications = 4
+let g:SyntasticDebugAutocommands = 8
+let g:SyntasticDebugVariables = 16
-if !exists("g:syntastic_full_redraws")
- let g:syntastic_full_redraws = !(has('gui_running') || has('gui_macvim'))
-endif
+" }}}1
-" TODO: not documented
-if !exists("g:syntastic_reuse_loc_lists")
- " a relevant bug has been fixed in one of the pre-releases of Vim 7.4
- let g:syntastic_reuse_loc_lists = (v:version >= 704)
-endif
+runtime! plugin/syntastic/*.vim
let s:registry = g:SyntasticRegistry.Instance()
let s:notifiers = g:SyntasticNotifiers.Instance()
let s:modemap = g:SyntasticModeMap.Instance()
-function! s:CompleteCheckerName(argLead, cmdLine, cursorPos)
+" Commands {{{1
+
+" @vimlint(EVL103, 1, a:cursorPos)
+" @vimlint(EVL103, 1, a:cmdLine)
+" @vimlint(EVL103, 1, a:argLead)
+function! s:CompleteCheckerName(argLead, cmdLine, cursorPos) " {{{2
let checker_names = []
- for ft in s:CurrentFiletypes()
- for checker in s:registry.availableCheckersFor(ft)
- call add(checker_names, checker.getName())
- endfor
+ for ft in s:resolveFiletypes()
+ call extend(checker_names, keys(s:registry.getCheckersMap(ft)))
endfor
return join(checker_names, "\n")
-endfunction
+endfunction " }}}2
+" @vimlint(EVL103, 0, a:cursorPos)
+" @vimlint(EVL103, 0, a:cmdLine)
+" @vimlint(EVL103, 0, a:argLead)
+
+
+" @vimlint(EVL103, 1, a:cursorPos)
+" @vimlint(EVL103, 1, a:cmdLine)
+" @vimlint(EVL103, 1, a:argLead)
+function! s:CompleteFiletypes(argLead, cmdLine, cursorPos) " {{{2
+ return join(s:registry.getKnownFiletypes(), "\n")
+endfunction " }}}2
+" @vimlint(EVL103, 0, a:cursorPos)
+" @vimlint(EVL103, 0, a:cmdLine)
+" @vimlint(EVL103, 0, a:argLead)
command! SyntasticToggleMode call s:ToggleMode()
-command! -nargs=? -complete=custom,s:CompleteCheckerName SyntasticCheck
+command! -nargs=* -complete=custom,s:CompleteCheckerName SyntasticCheck
\ call s:UpdateErrors(0, )
\ call syntastic#util#redraw(g:syntastic_full_redraws)
command! Errors call s:ShowLocList()
-command! SyntasticInfo
+command! -nargs=? -complete=custom,s:CompleteFiletypes SyntasticInfo
\ call s:modemap.echoMode() |
- \ call s:registry.echoInfoFor(s:CurrentFiletypes())
+ \ call s:registry.echoInfoFor(s:resolveFiletypes())
command! SyntasticReset
\ call s:ClearCache() |
\ call s:notifiers.refresh(g:SyntasticLoclist.New([]))
+command! SyntasticSetLoclist call g:SyntasticLoclist.current().setloclist()
-highlight link SyntasticError SpellBad
-highlight link SyntasticWarning SpellCap
+" }}}1
+
+" Autocommands and hooks {{{1
augroup syntastic
- autocmd BufReadPost * if g:syntastic_check_on_open | call s:UpdateErrors(1) | endif
- autocmd BufWritePost * call s:UpdateErrors(1)
+ autocmd BufReadPost * call s:BufReadPostHook()
+ autocmd BufWritePost * call s:BufWritePostHook()
autocmd BufWinEnter * call s:BufWinEnterHook()
- " TODO: the next autocmd should be "autocmd BufWinLeave * if empty(&bt) | lclose | endif"
+ " TODO: the next autocmd should be "autocmd BufWinLeave * if &buftype == '' | lclose | endif"
" but in recent versions of Vim lclose can no longer be called from BufWinLeave
autocmd BufEnter * call s:BufEnterHook()
augroup END
@@ -132,223 +183,191 @@ if v:version > 703 || (v:version == 703 && has('patch544'))
augroup END
endif
+function! s:BufReadPostHook() " {{{2
+ if g:syntastic_check_on_open
+ call syntastic#log#debug(g:SyntasticDebugAutocommands,
+ \ 'autocmd: BufReadPost, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr("")))))
+ call s:UpdateErrors(1)
+ endif
+endfunction " }}}2
-function! s:BufWinEnterHook()
- if empty(&bt)
- let loclist = g:SyntasticLoclist.current()
- call s:notifiers.refresh(loclist)
+function! s:BufWritePostHook() " {{{2
+ call syntastic#log#debug(g:SyntasticDebugAutocommands,
+ \ 'autocmd: BufWritePost, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr("")))))
+ call s:UpdateErrors(1)
+endfunction " }}}2
+
+function! s:BufWinEnterHook() " {{{2
+ call syntastic#log#debug(g:SyntasticDebugAutocommands,
+ \ 'autocmd: BufWinEnter, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr("")))) .
+ \ ', &buftype = ' . string(&buftype))
+ if &buftype == ''
+ call s:notifiers.refresh(g:SyntasticLoclist.current())
endif
-endfunction
+endfunction " }}}2
-function! s:BufEnterHook()
+function! s:BufEnterHook() " {{{2
+ call syntastic#log#debug(g:SyntasticDebugAutocommands,
+ \ 'autocmd: BufEnter, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr("")))) .
+ \ ', &buftype = ' . string(&buftype))
" TODO: at this point there is no b:syntastic_loclist
let loclist = filter(getloclist(0), 'v:val["valid"] == 1')
let buffers = syntastic#util#unique(map( loclist, 'v:val["bufnr"]' ))
- if &bt=='quickfix' && !empty(loclist) && empty(filter( buffers, 'syntastic#util#bufIsActive(v:val)' ))
+ if &buftype == 'quickfix' && !empty(loclist) && empty(filter( buffers, 'syntastic#util#bufIsActive(v:val)' ))
call g:SyntasticLoclistHide()
endif
-endfunction
+endfunction " }}}2
-function! s:QuitPreHook()
+function! s:QuitPreHook() " {{{2
+ call syntastic#log#debug(g:SyntasticDebugAutocommands,
+ \ 'autocmd: QuitPre, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr("")))))
let b:syntastic_skip_checks = !g:syntastic_check_on_wq
call g:SyntasticLoclistHide()
-endfunction
+endfunction " }}}2
+
+" }}}1
+
+" Main {{{1
"refresh and redraw all the error info for this buf when saving or reading
-function! s:UpdateErrors(auto_invoked, ...)
- if s:SkipFile()
+function! s:UpdateErrors(auto_invoked, ...) " {{{2
+ if s:skipFile()
return
endif
call s:modemap.synch()
let run_checks = !a:auto_invoked || s:modemap.allowsAutoChecking(&filetype)
if run_checks
- if a:0 >= 1
- call s:CacheErrors(a:1)
- else
- call s:CacheErrors()
- endif
+ call s:CacheErrors(a:000)
endif
let loclist = g:SyntasticLoclist.current()
+ " populate loclist and jump {{{3
+ let do_jump = syntastic#util#var('auto_jump')
+ if do_jump == 2
+ let first = loclist.getFirstIssue()
+ let type = get(first, 'type', '')
+ let do_jump = type ==? 'E'
+ endif
+
let w:syntastic_loclist_set = 0
- if g:syntastic_always_populate_loc_list || g:syntastic_auto_jump
- call setloclist(0, loclist.filteredRaw())
+ if syntastic#util#var('always_populate_loc_list') || do_jump
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'loclist: setloclist (new)')
+ call setloclist(0, loclist.getRaw())
let w:syntastic_loclist_set = 1
- if run_checks && g:syntastic_auto_jump && loclist.hasErrorsOrWarningsToDisplay()
+ if run_checks && do_jump && !loclist.isEmpty()
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'loclist: jump')
silent! lrewind
+
+ " XXX: Vim doesn't call autocmd commands in a predictible
+ " order, which can lead to missing filetype when jumping
+ " to a new file; the following is a workaround for the
+ " resulting brain damage
+ if &filetype == ''
+ silent! filetype detect
+ endif
endif
endif
+ " }}}3
call s:notifiers.refresh(loclist)
-endfunction
+endfunction " }}}2
"clear the loc list for the buffer
-function! s:ClearCache()
+function! s:ClearCache() " {{{2
call s:notifiers.reset(g:SyntasticLoclist.current())
unlet! b:syntastic_loclist
-endfunction
-
-function! s:CurrentFiletypes()
- return split( get(g:syntastic_filetype_map, &filetype, &filetype), '\m\.' )
-endfunction
+endfunction " }}}2
"detect and cache all syntax errors in this buffer
-function! s:CacheErrors(...)
+function! s:CacheErrors(checker_names) " {{{2
call s:ClearCache()
let newLoclist = g:SyntasticLoclist.New([])
- if !s:SkipFile()
- let active_checkers = 0
- let names = []
-
- call syntastic#util#debug("CacheErrors: g:syntastic_aggregate_errors = " . g:syntastic_aggregate_errors)
- if exists('b:syntastic_aggregate_errors')
- call syntastic#util#debug("CacheErrors: b:syntastic_aggregate_errors = " . b:syntastic_aggregate_errors)
- endif
+ if !s:skipFile()
+ " debug logging {{{3
+ call syntastic#log#debugShowVariables(g:SyntasticDebugTrace, 'version')
+ call syntastic#log#debugShowOptions(g:SyntasticDebugTrace, s:debug_dump_options)
+ call syntastic#log#debugDump(g:SyntasticDebugVariables)
+ call syntastic#log#debugShowVariables(g:SyntasticDebugTrace, 'aggregate_errors')
+ call syntastic#log#debug(g:SyntasticDebugTrace, 'getcwd() = ' . getcwd())
+ " }}}3
+
+ let filetypes = s:resolveFiletypes()
+ let aggregate_errors = syntastic#util#var('aggregate_errors')
+ let decorate_errors = (aggregate_errors || len(filetypes) > 1) && syntastic#util#var('id_checkers')
+
+ let clist = []
+ for type in filetypes
+ call extend(clist, s:registry.getCheckers(type, a:checker_names))
+ endfor
- for ft in s:CurrentFiletypes()
- if a:0
- let checker = s:registry.getChecker(ft, a:1)
- let checkers = !empty(checker) ? [checker] : []
- else
- let checkers = s:registry.getActiveCheckers(ft)
- endif
+ let names = []
+ for checker in clist
+ let cname = checker.getFiletype() . '/' . checker.getName()
+ call syntastic#log#debug(g:SyntasticDebugTrace, 'CacheErrors: Invoking checker: ' . cname)
- for checker in checkers
- let active_checkers += 1
- call syntastic#util#debug("CacheErrors: Invoking checker: " . checker.getName())
+ let loclist = checker.getLocList()
- let loclist = checker.getLocList()
+ if !loclist.isEmpty()
+ if decorate_errors
+ call loclist.decorate(cname)
+ endif
+ call add(names, cname)
- if !loclist.isEmpty()
- let newLoclist = newLoclist.extend(loclist)
- call add(names, [checker.getName(), checker.getFiletype()])
+ let newLoclist = newLoclist.extend(loclist)
- if !(exists('b:syntastic_aggregate_errors') ? b:syntastic_aggregate_errors : g:syntastic_aggregate_errors)
- break
- endif
+ if !aggregate_errors
+ break
endif
- endfor
+ endif
endfor
+ " set names {{{3
if !empty(names)
- if len(syntastic#util#unique(map(copy(names), 'v:val[1]'))) == 1
- let type = names[0][1]
- let name = join(map(names, 'v:val[0]'), ', ')
+ if len(syntastic#util#unique(map( copy(names), 'substitute(v:val, "\\m/.*", "", "")' ))) == 1
+ let type = substitute(names[0], '\m/.*', '', '')
+ let name = join(map( names, 'substitute(v:val, "\\m.\\{-}/", "", "")' ), ', ')
call newLoclist.setName( name . ' ('. type . ')' )
else
" checkers from mixed types
- call newLoclist.setName(join(map(names, 'v:val[1] . "/" . v:val[0]'), ', '))
+ call newLoclist.setName(join(names, ', '))
endif
endif
-
- if !active_checkers
- if a:0
- call syntastic#util#warn('checker ' . a:1 . ' is not active for filetype ' . &filetype)
+ " }}}3
+
+ " issue warning about no active checkers {{{3
+ if empty(clist)
+ if !empty(a:checker_names)
+ if len(a:checker_names) == 1
+ call syntastic#log#warn('checker ' . a:checker_names[0] . ' is not available')
+ else
+ call syntastic#log#warn('checkers ' . join(a:checker_names, ', ') . ' are not available')
+ endif
else
- call syntastic#util#debug('no active checkers for filetype ' . &filetype)
+ call syntastic#log#debug(g:SyntasticDebugTrace, 'CacheErrors: no checkers available for ' . &filetype)
endif
endif
+ " }}}3
+
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'aggregated:', newLoclist)
endif
let b:syntastic_loclist = newLoclist
-endfunction
+endfunction " }}}2
-function! s:ToggleMode()
+function! s:ToggleMode() " {{{2
call s:modemap.toggleMode()
call s:ClearCache()
call s:UpdateErrors(1)
call s:modemap.echoMode()
-endfunction
+endfunction " }}}2
"display the cached errors for this buf in the location list
-function! s:ShowLocList()
- let loclist = g:SyntasticLoclist.current()
- call loclist.show()
-endfunction
-
-"the script changes &shellredir and &shell to stop the screen flicking when
-"shelling out to syntax checkers. Not all OSs support the hacks though
-function! s:OSSupportsShellredirHack()
- return !s:running_windows && executable('/bin/bash') && (s:uname() !~ "FreeBSD") && (s:uname() !~ "OpenBSD")
-endfunction
-
-function! s:IsRedrawRequiredAfterMake()
- return !s:running_windows && (s:uname() =~ "FreeBSD" || s:uname() =~ "OpenBSD")
-endfunction
-
-function! s:IgnoreFile(filename)
- let fname = fnamemodify(a:filename, ':p')
- for p in g:syntastic_ignore_files
- if fname =~# p
- return 1
- endif
- endfor
- return 0
-endfunction
-
-" Skip running in special buffers
-function! s:SkipFile()
- let force_skip = exists('b:syntastic_skip_checks') ? b:syntastic_skip_checks : 0
- let fname = expand('%')
- return force_skip || !empty(&buftype) || !filereadable(fname) || getwinvar(0, '&diff') || s:IgnoreFile(fname)
-endfunction
-
-function! s:uname()
- if !exists('s:uname')
- let s:uname = system('uname')
- endif
- return s:uname
-endfunction
-
-"return a string representing the state of buffer according to
-"g:syntastic_stl_format
-"
-"return '' if no errors are cached for the buffer
-function! SyntasticStatuslineFlag()
- let loclist = g:SyntasticLoclist.current()
- let issues = loclist.filteredRaw()
- let num_issues = loclist.getLength()
- if loclist.hasErrorsOrWarningsToDisplay()
- let errors = loclist.errors()
- let warnings = loclist.warnings()
-
- let num_errors = len(errors)
- let num_warnings = len(warnings)
-
- let output = g:syntastic_stl_format
-
- "hide stuff wrapped in %E(...) unless there are errors
- let output = substitute(output, '\m\C%E{\([^}]*\)}', num_errors ? '\1' : '' , 'g')
-
- "hide stuff wrapped in %W(...) unless there are warnings
- let output = substitute(output, '\m\C%W{\([^}]*\)}', num_warnings ? '\1' : '' , 'g')
-
- "hide stuff wrapped in %B(...) unless there are both errors and warnings
- let output = substitute(output, '\m\C%B{\([^}]*\)}', (num_warnings && num_errors) ? '\1' : '' , 'g')
-
-
- "sub in the total errors/warnings/both
- let output = substitute(output, '\m\C%w', num_warnings, 'g')
- let output = substitute(output, '\m\C%e', num_errors, 'g')
- let output = substitute(output, '\m\C%t', num_issues, 'g')
-
- "first error/warning line num
- let output = substitute(output, '\m\C%F', num_issues ? issues[0]['lnum'] : '', 'g')
-
- "first error line num
- let output = substitute(output, '\m\C%fe', num_errors ? errors[0]['lnum'] : '', 'g')
-
- "first warning line num
- let output = substitute(output, '\m\C%fw', num_warnings ? warnings[0]['lnum'] : '', 'g')
-
- return output
- else
- return ''
- endif
-endfunction
+function! s:ShowLocList() " {{{2
+ call g:SyntasticLoclist.current().show()
+endfunction " }}}2
"Emulates the :lmake command. Sets up the make environment according to the
"options given, runs make, resets the environment, returns the location list
@@ -367,9 +386,10 @@ endfunction
" 'postprocess' - a list of functions to be applied to the error list
" 'cwd' - change directory to the given path before running the checker
" 'returns' - a list of valid exit codes for the checker
-function! SyntasticMake(options)
- call syntastic#util#debug('SyntasticMake: called with options: '. string(a:options))
+function! SyntasticMake(options) " {{{2
+ call syntastic#log#debug(g:SyntasticDebugTrace, 'SyntasticMake: called with options:', a:options)
+ " save options and locale env variables {{{3
let old_shell = &shell
let old_shellredir = &shellredir
let old_local_errorformat = &l:errorformat
@@ -377,20 +397,16 @@ function! SyntasticMake(options)
let old_cwd = getcwd()
let old_lc_messages = $LC_MESSAGES
let old_lc_all = $LC_ALL
+ " }}}3
- if s:OSSupportsShellredirHack()
- "this is a hack to stop the screen needing to be ':redraw'n when
- "when :lmake is run. Otherwise the screen flickers annoyingly
- let &shellredir = '&>'
- let &shell = '/bin/bash'
- endif
+ call s:bashHack()
if has_key(a:options, 'errorformat')
let &errorformat = a:options['errorformat']
endif
if has_key(a:options, 'cwd')
- exec 'lcd ' . fnameescape(a:options['cwd'])
+ execute 'lcd ' . fnameescape(a:options['cwd'])
endif
let $LC_MESSAGES = 'C'
@@ -399,66 +415,139 @@ function! SyntasticMake(options)
let $LC_ALL = old_lc_all
let $LC_MESSAGES = old_lc_messages
- if has_key(a:options, 'preprocess')
- let err_lines = call(a:options['preprocess'], [err_lines])
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'checker output:', err_lines)
+
+ if has_key(a:options, 'Preprocess')
+ let err_lines = call(a:options['Preprocess'], [err_lines])
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'preprocess (external):', err_lines)
+ elseif has_key(a:options, 'preprocess')
+ let err_lines = call('syntastic#preprocess#' . a:options['preprocess'], [err_lines])
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'preprocess:', err_lines)
endif
lgetexpr err_lines
- let errors = copy(getloclist(0))
+ let errors = deepcopy(getloclist(0))
if has_key(a:options, 'cwd')
- exec 'lcd ' . fnameescape(old_cwd)
+ execute 'lcd ' . fnameescape(old_cwd)
endif
silent! lolder
+
+ " restore options {{{3
let &errorformat = old_errorformat
let &l:errorformat = old_local_errorformat
let &shellredir = old_shellredir
- let &shell=old_shell
+ let &shell = old_shell
+ " }}}3
- if s:IsRedrawRequiredAfterMake()
+ if !s:running_windows && (s:uname() =~ "FreeBSD" || s:uname() =~ "OpenBSD")
call syntastic#util#redraw(g:syntastic_full_redraws)
endif
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'raw loclist:', errors)
+
if has_key(a:options, 'returns') && index(a:options['returns'], v:shell_error) == -1
throw 'Syntastic: checker error'
endif
if has_key(a:options, 'defaults')
- call SyntasticAddToErrors(errors, a:options['defaults'])
+ call s:addToErrors(errors, a:options['defaults'])
endif
- " Apply ignore patterns
- let ignore = {}
- for buf in syntastic#util#unique(map(copy(errors), 'v:val["bufnr"]'))
- let ignore[buf] = s:IgnoreFile(bufname(str2nr(buf)))
- endfor
- call filter(errors, '!ignore[v:val["bufnr"]]')
-
" Add subtype info if present.
if has_key(a:options, 'subtype')
- call SyntasticAddToErrors(errors, {'subtype': a:options['subtype']})
+ call s:addToErrors(errors, { 'subtype': a:options['subtype'] })
endif
- if has_key(a:options, 'postprocess') && !empty(a:options['postprocess'])
+ if has_key(a:options, 'Postprocess') && !empty(a:options['Postprocess'])
+ for rule in a:options['Postprocess']
+ let errors = call(rule, [errors])
+ endfor
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'postprocess (external):', errors)
+ elseif has_key(a:options, 'postprocess') && !empty(a:options['postprocess'])
for rule in a:options['postprocess']
let errors = call('syntastic#postprocess#' . rule, [errors])
endfor
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'postprocess:', errors)
endif
return errors
-endfunction
+endfunction " }}}2
-"take a list of errors and add default values to them from a:options
-function! SyntasticAddToErrors(errors, options)
- for i in range(0, len(a:errors)-1)
+"return a string representing the state of buffer according to
+"g:syntastic_stl_format
+"
+"return '' if no errors are cached for the buffer
+function! SyntasticStatuslineFlag() " {{{2
+ return g:SyntasticLoclist.current().getStatuslineFlag()
+endfunction " }}}2
+
+" }}}1
+
+" Utilities {{{1
+
+function! s:resolveFiletypes(...) " {{{2
+ let type = a:0 ? a:1 : &filetype
+ return split( get(g:syntastic_filetype_map, type, type), '\m\.' )
+endfunction " }}}2
+
+function! s:ignoreFile(filename) " {{{2
+ let fname = fnamemodify(a:filename, ':p')
+ for pattern in g:syntastic_ignore_files
+ if fname =~# pattern
+ return 1
+ endif
+ endfor
+ return 0
+endfunction " }}}2
+
+" Skip running in special buffers
+function! s:skipFile() " {{{2
+ let force_skip = exists('b:syntastic_skip_checks') ? b:syntastic_skip_checks : 0
+ let fname = expand('%')
+ return force_skip || (&buftype != '') || !filereadable(fname) || getwinvar(0, '&diff') || s:ignoreFile(fname)
+endfunction " }}}2
+
+" Take a list of errors and add default values to them from a:options
+function! s:addToErrors(errors, options) " {{{2
+ for err in a:errors
for key in keys(a:options)
- if !has_key(a:errors[i], key) || empty(a:errors[i][key])
- let a:errors[i][key] = a:options[key]
+ if !has_key(err, key) || empty(err[key])
+ let err[key] = a:options[key]
endif
endfor
endfor
+
return a:errors
-endfunction
+endfunction " }}}2
+
+" The script changes &shellredir and &shell to stop the screen flicking when
+" shelling out to syntax checkers. Not all OSs support the hacks though.
+function! s:bashHack() " {{{2
+ if !exists('s:bash')
+ if !s:running_windows && (s:uname() !~# "FreeBSD") && (s:uname() !~# "OpenBSD")
+ let s:bash =
+ \ executable('/usr/local/bin/bash') ? '/usr/local/bin/bash' :
+ \ executable('/bin/bash') ? '/bin/bash' : ''
+ else
+ let s:bash = ''
+ endif
+ endif
+
+ if g:syntastic_bash_hack && s:bash != ''
+ let &shell = s:bash
+ let &shellredir = '&>'
+ endif
+endfunction " }}}2
+
+function! s:uname() " {{{2
+ if !exists('s:uname')
+ let s:uname = system('uname')
+ endif
+ return s:uname
+endfunction " }}}2
+
+" }}}1
-" vim: set et sts=4 sw=4:
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/autoloclist.vim b/bundle/syntastic/plugin/syntastic/autoloclist.vim
index 9a1a018f..5362ad6a 100644
--- a/bundle/syntastic/plugin/syntastic/autoloclist.vim
+++ b/bundle/syntastic/plugin/syntastic/autoloclist.vim
@@ -1,38 +1,38 @@
-if exists("g:loaded_syntastic_notifier_autoloclist")
+if exists("g:loaded_syntastic_notifier_autoloclist") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_notifier_autoloclist = 1
-if !exists("g:syntastic_auto_loc_list")
- let g:syntastic_auto_loc_list = 2
-endif
-
let g:SyntasticAutoloclistNotifier = {}
" Public methods {{{1
"
-function! g:SyntasticAutoloclistNotifier.New()
+function! g:SyntasticAutoloclistNotifier.New() " {{{2
let newObj = copy(self)
return newObj
-endfunction
+endfunction " }}}2
-function! g:SyntasticAutoloclistNotifier.refresh(loclist)
+function! g:SyntasticAutoloclistNotifier.refresh(loclist) " {{{2
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'autoloclist: refresh')
call g:SyntasticAutoloclistNotifier.AutoToggle(a:loclist)
-endfunction
+endfunction " }}}2
-function! g:SyntasticAutoloclistNotifier.AutoToggle(loclist)
- if a:loclist.hasErrorsOrWarningsToDisplay()
- if g:syntastic_auto_loc_list == 1
+function! g:SyntasticAutoloclistNotifier.AutoToggle(loclist) " {{{2
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'autoloclist: toggle')
+ if !a:loclist.isEmpty()
+ if syntastic#util#var('auto_loc_list') == 1
call a:loclist.show()
endif
else
- if g:syntastic_auto_loc_list > 0
+ if syntastic#util#var('auto_loc_list') > 0
"TODO: this will close the loc list window if one was opened by
"something other than syntastic
lclose
endif
endif
-endfunction
+endfunction " }}}2
+
+" }}}1
" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/balloons.vim b/bundle/syntastic/plugin/syntastic/balloons.vim
index f6e60418..c97f7fae 100644
--- a/bundle/syntastic/plugin/syntastic/balloons.vim
+++ b/bundle/syntastic/plugin/syntastic/balloons.vim
@@ -1,12 +1,8 @@
-if exists("g:loaded_syntastic_notifier_balloons")
+if exists("g:loaded_syntastic_notifier_balloons") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_notifier_balloons = 1
-if !exists("g:syntastic_enable_balloons")
- let g:syntastic_enable_balloons = 1
-endif
-
if !has('balloon_eval')
let g:syntastic_enable_balloons = 0
endif
@@ -15,23 +11,22 @@ let g:SyntasticBalloonsNotifier = {}
" Public methods {{{1
-function! g:SyntasticBalloonsNotifier.New()
+function! g:SyntasticBalloonsNotifier.New() " {{{2
let newObj = copy(self)
return newObj
-endfunction
+endfunction " }}}2
-function! g:SyntasticBalloonsNotifier.enabled()
- return
- \ has('balloon_eval') &&
- \ (exists('b:syntastic_enable_balloons') ? b:syntastic_enable_balloons : g:syntastic_enable_balloons)
-endfunction
+function! g:SyntasticBalloonsNotifier.enabled() " {{{2
+ return has('balloon_eval') && syntastic#util#var('enable_balloons')
+endfunction " }}}2
" Update the error balloons
-function! g:SyntasticBalloonsNotifier.refresh(loclist)
+function! g:SyntasticBalloonsNotifier.refresh(loclist) " {{{2
let b:syntastic_balloons = {}
- if self.enabled() && a:loclist.hasErrorsOrWarningsToDisplay()
+ if self.enabled() && !a:loclist.isEmpty()
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'balloons: refresh')
let buf = bufnr('')
- let issues = filter(a:loclist.filteredRaw(), 'v:val["bufnr"] == buf')
+ let issues = filter(a:loclist.copyRaw(), 'v:val["bufnr"] == buf')
if !empty(issues)
for i in issues
if has_key(b:syntastic_balloons, i['lnum'])
@@ -43,22 +38,29 @@ function! g:SyntasticBalloonsNotifier.refresh(loclist)
set beval bexpr=SyntasticBalloonsExprNotifier()
endif
endif
-endfunction
+endfunction " }}}2
" Reset the error balloons
-function! g:SyntasticBalloonsNotifier.reset(loclist)
+" @vimlint(EVL103, 1, a:loclist)
+function! g:SyntasticBalloonsNotifier.reset(loclist) " {{{2
if has('balloon_eval')
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'balloons: reset')
set nobeval
endif
-endfunction
+endfunction " }}}2
+" @vimlint(EVL103, 0, a:loclist)
+
+" }}}1
" Private functions {{{1
-function! SyntasticBalloonsExprNotifier()
+function! SyntasticBalloonsExprNotifier() " {{{2
if !exists('b:syntastic_balloons')
return ''
endif
return get(b:syntastic_balloons, v:beval_lnum, '')
-endfunction
+endfunction " }}}2
+
+" }}}1
" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/checker.vim b/bundle/syntastic/plugin/syntastic/checker.vim
index 3ab1d212..504342d4 100644
--- a/bundle/syntastic/plugin/syntastic/checker.vim
+++ b/bundle/syntastic/plugin/syntastic/checker.vim
@@ -1,4 +1,4 @@
-if exists("g:loaded_syntastic_checker")
+if exists("g:loaded_syntastic_checker") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_checker = 1
@@ -7,73 +7,161 @@ let g:SyntasticChecker = {}
" Public methods {{{1
-function! g:SyntasticChecker.New(args)
+function! g:SyntasticChecker.New(args) " {{{2
let newObj = copy(self)
let newObj._filetype = a:args['filetype']
let newObj._name = a:args['name']
+ let newObj._exec = get(a:args, 'exec', newObj._name)
+ if has_key(a:args, 'redirect')
+ let [filetype, name] = split(a:args['redirect'], '/')
+ let prefix = 'SyntaxCheckers_' . filetype . '_' . name . '_'
+ else
+ let prefix = 'SyntaxCheckers_' . newObj._filetype . '_' . newObj._name . '_'
+ endif
- let prefix = 'SyntaxCheckers_' . newObj._filetype . '_' . newObj._name . '_'
let newObj._locListFunc = function(prefix . 'GetLocList')
- let newObj._isAvailableFunc = function(prefix . 'IsAvailable')
- if exists('*' . prefix . 'GetHighlightRegex')
- let newObj._highlightRegexFunc = function(prefix. 'GetHighlightRegex')
+ if exists('*' . prefix . 'IsAvailable')
+ let newObj._isAvailableFunc = function(prefix . 'IsAvailable')
else
- let newObj._highlightRegexFunc = ''
+ let newObj._isAvailableFunc = function('SyntasticCheckerIsAvailableDefault')
+ endif
+
+ if exists('*' . prefix . 'GetHighlightRegex')
+ let newObj._highlightRegexFunc = function(prefix . 'GetHighlightRegex')
endif
return newObj
-endfunction
+endfunction " }}}2
-function! g:SyntasticChecker.getFiletype()
+function! g:SyntasticChecker.getFiletype() " {{{2
return self._filetype
-endfunction
+endfunction " }}}2
-function! g:SyntasticChecker.getName()
+function! g:SyntasticChecker.getName() " {{{2
return self._name
-endfunction
+endfunction " }}}2
+
+function! g:SyntasticChecker.getExec() " {{{2
+ if exists('g:syntastic_' . self._filetype . '_' . self._name . '_exec')
+ return expand(g:syntastic_{self._filetype}_{self._name}_exec)
+ endif
-function! g:SyntasticChecker.getLocList()
+ return self._exec
+endfunction " }}}2
+
+function! g:SyntasticChecker.getExecEscaped() " {{{2
+ return syntastic#util#shescape(self.getExec())
+endfunction " }}}2
+
+function! g:SyntasticChecker.getLocListRaw() " {{{2
+ let name = self._filetype . '/' . self._name
try
let list = self._locListFunc()
- call syntastic#util#debug('getLocList: checker ' . self._filetype . '/' . self._name . ' returned ' . v:shell_error)
+ call syntastic#log#debug(g:SyntasticDebugTrace, 'getLocList: checker ' . name . ' returned ' . v:shell_error)
catch /\m\C^Syntastic: checker error$/
let list = []
- call syntastic#util#error('checker ' . self._filetype . '/' . self._name . ' returned abnormal status ' . v:shell_error)
+ call syntastic#log#error('checker ' . name . ' returned abnormal status ' . v:shell_error)
endtry
call self._populateHighlightRegexes(list)
- return g:SyntasticLoclist.New(list)
-endfunction
+ call syntastic#log#debug(g:SyntasticDebugLoclist, name . ' raw:', list)
+ call self._quietMessages(list)
+ return list
+endfunction " }}}2
-function! g:SyntasticChecker.getHighlightRegexFor(error)
- if empty(self._highlightRegexFunc)
- return []
- endif
+function! g:SyntasticChecker.getLocList() " {{{2
+ return g:SyntasticLoclist.New(self.getLocListRaw())
+endfunction " }}}2
- return self._highlightRegexFunc(error)
-endfunction
+function! g:SyntasticChecker.makeprgBuild(opts) " {{{2
+ let basename = self._filetype . '_' . self._name . '_'
-function! g:SyntasticChecker.isAvailable()
+ let parts = []
+ call extend(parts, self._getOpt(a:opts, basename, 'exe', self.getExecEscaped()))
+ call extend(parts, self._getOpt(a:opts, basename, 'args', ''))
+ call extend(parts, self._getOpt(a:opts, basename, 'fname', syntastic#util#shexpand('%')))
+ call extend(parts, self._getOpt(a:opts, basename, 'post_args', ''))
+ call extend(parts, self._getOpt(a:opts, basename, 'tail', ''))
+
+ return join(parts)
+endfunction " }}}2
+
+function! g:SyntasticChecker.isAvailable() " {{{2
return self._isAvailableFunc()
-endfunction
+endfunction " }}}2
+
+" }}}1
" Private methods {{{1
-function! g:SyntasticChecker._populateHighlightRegexes(list)
- let list = a:list
- if !empty(self._highlightRegexFunc)
- for i in range(0, len(list)-1)
- if list[i]['valid']
- let term = self._highlightRegexFunc(list[i])
+function! g:SyntasticChecker._quietMessages(errors) " {{{2
+ " wildcard quiet_messages
+ let quiet_filters = copy(syntastic#util#var('quiet_messages', {}))
+ if type(quiet_filters) != type({})
+ call syntastic#log#warn('ignoring invalid syntastic_quiet_messages')
+ unlet quiet_filters
+ let quiet_filters = {}
+ endif
+
+ " per checker quiet_messages
+ let name = self._filetype . '_' . self._name
+ try
+ call extend( quiet_filters, copy(syntastic#util#var(name . '_quiet_messages', {})), 'force' )
+ catch /\m^Vim\%((\a\+)\)\=:E712/
+ call syntastic#log#warn('ignoring invalid syntastic_' . name . '_quiet_messages')
+ endtry
+
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'quiet_messages filter:', quiet_filters)
+
+ if !empty(quiet_filters)
+ call syntastic#util#dictFilter(a:errors, quiet_filters)
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'filtered by quiet_messages:', a:errors)
+ endif
+endfunction " }}}2
+
+function! g:SyntasticChecker._populateHighlightRegexes(errors) " {{{2
+ if has_key(self, '_highlightRegexFunc')
+ for e in a:errors
+ if e['valid']
+ let term = self._highlightRegexFunc(e)
if len(term) > 0
- let list[i]['hl'] = term
+ let e['hl'] = term
endif
endif
endfor
endif
- return list
-endfunction
+endfunction " }}}2
+
+function! g:SyntasticChecker._getOpt(opts, basename, name, default) " {{{2
+ let user_val = syntastic#util#var(a:basename . a:name)
+ let ret = []
+ call extend( ret, self._shescape(get(a:opts, a:name . '_before', '')) )
+ call extend( ret, self._shescape(user_val != '' ? user_val : get(a:opts, a:name, a:default)) )
+ call extend( ret, self._shescape(get(a:opts, a:name . '_after', '')) )
+
+ return ret
+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
+
+" Non-method functions {{{1
+
+function! SyntasticCheckerIsAvailableDefault() dict " {{{2
+ return executable(self.getExec())
+endfunction " }}}2
+
+" }}}1
" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/cursor.vim b/bundle/syntastic/plugin/syntastic/cursor.vim
index 77f97dc5..71492543 100644
--- a/bundle/syntastic/plugin/syntastic/cursor.vim
+++ b/bundle/syntastic/plugin/syntastic/cursor.vim
@@ -1,44 +1,46 @@
-if exists("g:loaded_syntastic_notifier_cursor")
+if exists("g:loaded_syntastic_notifier_cursor") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_notifier_cursor = 1
-if !exists('g:syntastic_echo_current_error')
- let g:syntastic_echo_current_error = 1
-endif
-
let g:SyntasticCursorNotifier = {}
" Public methods {{{1
-function! g:SyntasticCursorNotifier.New()
+function! g:SyntasticCursorNotifier.New() " {{{2
let newObj = copy(self)
return newObj
-endfunction
+endfunction " }}}2
-function! g:SyntasticCursorNotifier.enabled()
- return exists('b:syntastic_echo_current_error') ? b:syntastic_echo_current_error : g:syntastic_echo_current_error
-endfunction
+function! g:SyntasticCursorNotifier.enabled() " {{{2
+ return syntastic#util#var('echo_current_error')
+endfunction " }}}2
-function! g:SyntasticCursorNotifier.refresh(loclist)
- if self.enabled() && a:loclist.hasErrorsOrWarningsToDisplay()
+function! g:SyntasticCursorNotifier.refresh(loclist) " {{{2
+ if self.enabled() && !a:loclist.isEmpty()
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'cursor: refresh')
let b:syntastic_messages = copy(a:loclist.messages(bufnr('')))
let b:oldLine = -1
autocmd! syntastic CursorMoved
autocmd syntastic CursorMoved * call g:SyntasticRefreshCursor()
endif
-endfunction
+endfunction " }}}2
-function! g:SyntasticCursorNotifier.reset(loclist)
+" @vimlint(EVL103, 1, a:loclist)
+function! g:SyntasticCursorNotifier.reset(loclist) " {{{2
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'cursor: reset')
autocmd! syntastic CursorMoved
unlet! b:syntastic_messages
let b:oldLine = -1
-endfunction
+endfunction " }}}2
+" @vimlint(EVL103, 0, a:loclist)
+
+" }}}1
" Private methods {{{1
" The following defensive nonsense is needed because of the nature of autocmd
-function! g:SyntasticRefreshCursor()
+function! g:SyntasticRefreshCursor() " {{{2
if !exists('b:syntastic_messages') || empty(b:syntastic_messages)
" file not checked
return
@@ -58,6 +60,8 @@ function! g:SyntasticRefreshCursor()
else
echo
endif
-endfunction
+endfunction " }}}2
+
+" }}}1
" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/highlighting.vim b/bundle/syntastic/plugin/syntastic/highlighting.vim
index e04e6cc5..997b2e32 100644
--- a/bundle/syntastic/plugin/syntastic/highlighting.vim
+++ b/bundle/syntastic/plugin/syntastic/highlighting.vim
@@ -1,4 +1,4 @@
-if exists("g:loaded_syntastic_notifier_highlighting")
+if exists("g:loaded_syntastic_notifier_highlighting") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_notifier_highlighting = 1
@@ -6,61 +6,88 @@ let g:loaded_syntastic_notifier_highlighting = 1
" Highlighting requires getmatches introduced in 7.1.040
let s:has_highlighting = v:version > 701 || (v:version == 701 && has('patch040'))
-if !exists("g:syntastic_enable_highlighting")
- let g:syntastic_enable_highlighting = 1
-endif
-
let g:SyntasticHighlightingNotifier = {}
+let s:setup_done = 0
+
" Public methods {{{1
-function! g:SyntasticHighlightingNotifier.New()
+function! g:SyntasticHighlightingNotifier.New() " {{{2
let newObj = copy(self)
+
+ if !s:setup_done
+ call self._setup()
+ let s:setup_done = 1
+ endif
+
return newObj
-endfunction
+endfunction " }}}2
-function! g:SyntasticHighlightingNotifier.enabled()
- return
- \ s:has_highlighting &&
- \ (exists('b:syntastic_enable_highlighting') ? b:syntastic_enable_highlighting : g:syntastic_enable_highlighting)
-endfunction
+function! g:SyntasticHighlightingNotifier.enabled() " {{{2
+ return s:has_highlighting && syntastic#util#var('enable_highlighting')
+endfunction " }}}2
" Sets error highlights in the cuirrent window
-function! g:SyntasticHighlightingNotifier.refresh(loclist)
+function! g:SyntasticHighlightingNotifier.refresh(loclist) " {{{2
if self.enabled()
call self.reset(a:loclist)
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'highlighting: refresh')
let buf = bufnr('')
- let issues = filter(a:loclist.filteredRaw(), 'v:val["bufnr"] == buf')
+ let issues = filter(a:loclist.copyRaw(), 'v:val["bufnr"] == buf')
for item in issues
- let group = item['type'] == 'E' ? 'SyntasticError' : 'SyntasticWarning'
+ let group = item['type'] ==? 'E' ? 'SyntasticError' : 'SyntasticWarning'
" The function `Syntastic_{filetype}_{checker}_GetHighlightRegex` is
" used to override default highlighting.
if has_key(item, 'hl')
call matchadd(group, '\%' . item['lnum'] . 'l' . item['hl'])
- elseif get(item, 'col')
- let lastcol = col([item['lnum'], '$'])
+ elseif get(item, 'col', 0)
+ if get(item, 'vcol', 0)
+ let lastcol = virtcol([item['lnum'], '$'])
+ let coltype = 'v'
+ else
+ let lastcol = col([item['lnum'], '$'])
+ let coltype = 'c'
+ endif
let lcol = min([lastcol, item['col']])
- " a bug in vim can sometimes cause there to be no 'vcol' key,
- " so check for its existence
- let coltype = has_key(item, 'vcol') && item['vcol'] ? 'v' : 'c'
-
call matchadd(group, '\%' . item['lnum'] . 'l\%' . lcol . coltype)
endif
endfor
endif
-endfunction
+endfunction " }}}2
" Remove all error highlights from the window
-function! g:SyntasticHighlightingNotifier.reset(loclist)
+" @vimlint(EVL103, 1, a:loclist)
+function! g:SyntasticHighlightingNotifier.reset(loclist) " {{{2
if s:has_highlighting
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'highlighting: reset')
for match in getmatches()
if stridx(match['group'], 'Syntastic') == 0
call matchdelete(match['id'])
endif
endfor
endif
-endfunction
+endfunction " }}}2
+" @vimlint(EVL103, 0, a:loclist)
+
+" }}}1
+
+" Private methods {{{1
+
+" One time setup: define our own highlighting
+function! g:SyntasticHighlightingNotifier._setup() " {{{2
+ if s:has_highlighting
+ if !hlexists('SyntasticError')
+ highlight link SyntasticError SpellBad
+
+ endif
+ if !hlexists('SyntasticWarning')
+ highlight link SyntasticWarning SpellCap
+ endif
+ endif
+endfunction " }}}2
+
+" }}}1
" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/loclist.vim b/bundle/syntastic/plugin/syntastic/loclist.vim
index f1f34eb6..3d3a649e 100644
--- a/bundle/syntastic/plugin/syntastic/loclist.vim
+++ b/bundle/syntastic/plugin/syntastic/loclist.vim
@@ -1,4 +1,4 @@
-if exists("g:loaded_syntastic_loclist")
+if exists("g:loaded_syntastic_loclist") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_loclist = 1
@@ -7,95 +7,144 @@ let g:SyntasticLoclist = {}
" Public methods {{{1
-function! g:SyntasticLoclist.New(rawLoclist)
+function! g:SyntasticLoclist.New(rawLoclist) " {{{2
let newObj = copy(self)
- let newObj._quietWarnings = g:syntastic_quiet_warnings
- let llist = copy(a:rawLoclist)
- let llist = filter(llist, 'v:val["valid"] == 1')
+ let llist = filter(copy(a:rawLoclist), 'v:val["valid"] == 1')
for e in llist
- if empty(e['type'])
+ if get(e, 'type', '') == ''
let e['type'] = 'E'
endif
endfor
let newObj._rawLoclist = llist
- let newObj._hasErrorsOrWarningsToDisplay = -1
-
let newObj._name = ''
return newObj
-endfunction
+endfunction " }}}2
-function! g:SyntasticLoclist.current()
+function! g:SyntasticLoclist.current() " {{{2
if !exists("b:syntastic_loclist")
let b:syntastic_loclist = g:SyntasticLoclist.New([])
endif
return b:syntastic_loclist
-endfunction
+endfunction " }}}2
-function! g:SyntasticLoclist.extend(other)
- let list = self.toRaw()
- call extend(list, a:other.toRaw())
+function! g:SyntasticLoclist.extend(other) " {{{2
+ let list = self.copyRaw()
+ call extend(list, a:other.copyRaw())
return g:SyntasticLoclist.New(list)
-endfunction
+endfunction " }}}2
+
+function! g:SyntasticLoclist.isEmpty() " {{{2
+ return empty(self._rawLoclist)
+endfunction " }}}2
-function! g:SyntasticLoclist.toRaw()
+function! g:SyntasticLoclist.copyRaw() " {{{2
return copy(self._rawLoclist)
-endfunction
+endfunction " }}}2
+
+function! g:SyntasticLoclist.getRaw() " {{{2
+ return self._rawLoclist
+endfunction " }}}2
+
+function! g:SyntasticLoclist.getStatuslineFlag() " {{{2
+ if !exists("self._stl_format")
+ let self._stl_format = ''
+ endif
+ if !exists("self._stl_flag")
+ let self._stl_flag = ''
+ endif
-function! g:SyntasticLoclist.filteredRaw()
- return copy(self._quietWarnings ? self.errors() : self._rawLoclist)
-endfunction
+ if g:syntastic_stl_format !=# self._stl_format
+ let self._stl_format = g:syntastic_stl_format
-function! g:SyntasticLoclist.quietWarnings()
- return self._quietWarnings
-endfunction
+ if !empty(self._rawLoclist)
+ let errors = self.errors()
+ let warnings = self.warnings()
-function! g:SyntasticLoclist.isEmpty()
- return empty(self._rawLoclist)
-endfunction
+ let num_errors = len(errors)
+ let num_warnings = len(warnings)
+ let num_issues = len(self._rawLoclist)
+
+ let output = self._stl_format
+
+ "hide stuff wrapped in %E(...) unless there are errors
+ let output = substitute(output, '\m\C%E{\([^}]*\)}', num_errors ? '\1' : '' , 'g')
+
+ "hide stuff wrapped in %W(...) unless there are warnings
+ let output = substitute(output, '\m\C%W{\([^}]*\)}', num_warnings ? '\1' : '' , 'g')
+
+ "hide stuff wrapped in %B(...) unless there are both errors and warnings
+ let output = substitute(output, '\m\C%B{\([^}]*\)}', (num_warnings && num_errors) ? '\1' : '' , 'g')
+
+ "sub in the total errors/warnings/both
+ let output = substitute(output, '\m\C%w', num_warnings, 'g')
+ let output = substitute(output, '\m\C%e', num_errors, 'g')
+ let output = substitute(output, '\m\C%t', num_issues, 'g')
+
+ "first error/warning line num
+ let output = substitute(output, '\m\C%F', num_issues ? self._rawLoclist[0]['lnum'] : '', 'g')
+
+ "first error line num
+ let output = substitute(output, '\m\C%fe', num_errors ? errors[0]['lnum'] : '', 'g')
+
+ "first warning line num
+ let output = substitute(output, '\m\C%fw', num_warnings ? warnings[0]['lnum'] : '', 'g')
+
+ let self._stl_flag = output
+ else
+ let self._stl_flag = ''
+ endif
+ endif
+
+ return self._stl_flag
+endfunction " }}}2
-function! g:SyntasticLoclist.getLength()
- return len(self._rawLoclist)
-endfunction
+function! g:SyntasticLoclist.getFirstIssue() " {{{2
+ return get(self._rawLoclist, 0, {})
+endfunction " }}}2
-function! g:SyntasticLoclist.getName()
+function! g:SyntasticLoclist.getName() " {{{2
return len(self._name)
-endfunction
+endfunction " }}}2
-function! g:SyntasticLoclist.setName(name)
+function! g:SyntasticLoclist.setName(name) " {{{2
let self._name = a:name
-endfunction
+endfunction " }}}2
-function! g:SyntasticLoclist.hasErrorsOrWarningsToDisplay()
- if self._hasErrorsOrWarningsToDisplay >= 0
- return self._hasErrorsOrWarningsToDisplay
- endif
- let self._hasErrorsOrWarningsToDisplay = empty(self._rawLoclist) ? 0 : (!self._quietWarnings || len(self.errors()))
- return self._hasErrorsOrWarningsToDisplay
-endfunction
+function! g:SyntasticLoclist.decorate(tag) " {{{2
+ for e in self._rawLoclist
+ let e['text'] .= ' [' . a:tag . ']'
+ endfor
+endfunction " }}}2
-function! g:SyntasticLoclist.errors()
+function! g:SyntasticLoclist.errors() " {{{2
if !exists("self._cachedErrors")
let self._cachedErrors = self.filter({'type': "E"})
endif
return self._cachedErrors
-endfunction
+endfunction " }}}2
-function! g:SyntasticLoclist.warnings()
+function! g:SyntasticLoclist.warnings() " {{{2
if !exists("self._cachedWarnings")
let self._cachedWarnings = self.filter({'type': "W"})
endif
return self._cachedWarnings
-endfunction
+endfunction " }}}2
+
+" Legacy function. Syntastic no longer calls it, but we keep it
+" around because other plugins (f.i. powerline) depend on it.
+function! g:SyntasticLoclist.hasErrorsOrWarningsToDisplay() " {{{2
+ return !self.isEmpty()
+endfunction " }}}2
" cache used by EchoCurrentError()
-function! g:SyntasticLoclist.messages(buf)
+function! g:SyntasticLoclist.messages(buf) " {{{2
if !exists("self._cachedMessages")
let self._cachedMessages = {}
- let errors = self.errors() + (self._quietWarnings ? [] : self.warnings())
+ let errors = self.errors() + self.warnings()
for e in errors
let b = e['bufnr']
@@ -112,7 +161,7 @@ function! g:SyntasticLoclist.messages(buf)
endif
return get(self._cachedMessages, a:buf, {})
-endfunction
+endfunction " }}}2
"Filter the list and return new native loclist
"e.g.
@@ -121,37 +170,31 @@ endfunction
"would return all errors for buffer 10.
"
"Note that all comparisons are done with ==?
-function! g:SyntasticLoclist.filter(filters)
- let rv = []
-
- for error in self._rawLoclist
-
- let passes_filters = 1
- for key in keys(a:filters)
- if error[key] !=? a:filters[key]
- let passes_filters = 0
- break
- endif
- endfor
-
- if passes_filters
- call add(rv, error)
- endif
- endfor
- return rv
-endfunction
-
-"display the cached errors for this buf in the location list
-function! g:SyntasticLoclist.show()
+function! g:SyntasticLoclist.filter(filters) " {{{2
+ let conditions = values(map(copy(a:filters), 's:translate(v:key, v:val)'))
+ let filter = len(conditions) == 1 ?
+ \ conditions[0] : join(map(conditions, '"(" . v:val . ")"'), ' && ')
+ return filter(copy(self._rawLoclist), filter)
+endfunction " }}}2
+
+function! g:SyntasticLoclist.setloclist() " {{{2
if !exists('w:syntastic_loclist_set')
let w:syntastic_loclist_set = 0
endif
- call setloclist(0, self.filteredRaw(), g:syntastic_reuse_loc_lists && w:syntastic_loclist_set ? 'r' : ' ')
+ let replace = g:syntastic_reuse_loc_lists && w:syntastic_loclist_set
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'loclist: setloclist ' . (replace ? '(replace)' : '(new)'))
+ call setloclist(0, self.getRaw(), replace ? 'r' : ' ')
let w:syntastic_loclist_set = 1
+endfunction " }}}2
- if self.hasErrorsOrWarningsToDisplay()
+"display the cached errors for this buf in the location list
+function! g:SyntasticLoclist.show() " {{{2
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'loclist: show')
+ call self.setloclist()
+
+ if !self.isEmpty()
let num = winnr()
- exec "lopen " . g:syntastic_loc_list_height
+ execute "lopen " . syntastic#util#var('loc_list_height')
if num != winnr()
wincmd p
endif
@@ -173,12 +216,25 @@ function! g:SyntasticLoclist.show()
endif
endfor
endif
-endfunction
+endfunction " }}}2
+
+" }}}1
" Non-method functions {{{1
-function! g:SyntasticLoclistHide()
+function! g:SyntasticLoclistHide() " {{{2
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'loclist: hide')
silent! lclose
-endfunction
+endfunction " }}}2
+
+" }}}1
+
+" Private functions {{{1
+
+function! s:translate(key, val) " {{{2
+ return 'get(v:val, ' . string(a:key) . ', "") ==? ' . string(a:val)
+endfunction " }}}2
+
+" }}}1
" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/makeprg_builder.vim b/bundle/syntastic/plugin/syntastic/makeprg_builder.vim
deleted file mode 100644
index ef77efa9..00000000
--- a/bundle/syntastic/plugin/syntastic/makeprg_builder.vim
+++ /dev/null
@@ -1,72 +0,0 @@
-if exists("g:loaded_syntastic_makeprg_builder")
- finish
-endif
-let g:loaded_syntastic_makeprg_builder = 1
-
-let g:SyntasticMakeprgBuilder = {}
-
-" Public methods {{{1
-
-function! g:SyntasticMakeprgBuilder.New(exe, args, fname, post_args, tail, filetype, subchecker)
- let newObj = copy(self)
- let newObj._exe = a:exe
- let newObj._args = a:args
- let newObj._fname = a:fname
- let newObj._post_args = a:post_args
- let newObj._tail = a:tail
- let newObj._filetype = empty(a:filetype) ? &filetype : a:filetype
- let newObj._subchecker = a:subchecker
- return newObj
-endfunction
-
-function! g:SyntasticMakeprgBuilder.makeprg()
- return join([self.exe(), self.args(), self.fname(), self.post_args(), self.tail()])
-endfunction
-
-function! g:SyntasticMakeprgBuilder.exe()
- return self._getOpt('exe')
-endfunction
-
-function! g:SyntasticMakeprgBuilder.args()
- return self._getOpt('args')
-endfunction
-
-function! g:SyntasticMakeprgBuilder.fname()
- if empty(self._fname)
- return syntastic#util#shexpand('%')
- else
- return self._fname
- endif
-endfunction
-
-function! g:SyntasticMakeprgBuilder.post_args()
- return self._getOpt('post_args')
-endfunction
-
-function! g:SyntasticMakeprgBuilder.tail()
- return self._getOpt('tail')
-endfunction
-
-" Private methods {{{1
-
-function g:SyntasticMakeprgBuilder._getOpt(name)
- if self._optExists(a:name)
- return {self._optName(a:name)}
- endif
-
- return self['_' . a:name]
-endfunction
-
-function! g:SyntasticMakeprgBuilder._optExists(name)
- return exists(self._optName(a:name))
-endfunction
-
-function! g:SyntasticMakeprgBuilder._optName(name)
- let setting = "g:syntastic_" . self._filetype
- if !empty(self._subchecker)
- let setting .= '_' . self._subchecker
- endif
- return setting . '_' . a:name
-endfunction
-
-" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/modemap.vim b/bundle/syntastic/plugin/syntastic/modemap.vim
index 0c772c77..8f7d3a4e 100644
--- a/bundle/syntastic/plugin/syntastic/modemap.vim
+++ b/bundle/syntastic/plugin/syntastic/modemap.vim
@@ -1,4 +1,4 @@
-if exists("g:loaded_syntastic_modemap")
+if exists("g:loaded_syntastic_modemap") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_modemap = 1
@@ -7,16 +7,16 @@ let g:SyntasticModeMap = {}
" Public methods {{{1
-function! g:SyntasticModeMap.Instance()
+function! g:SyntasticModeMap.Instance() " {{{2
if !exists('s:SyntasticModeMapInstance')
let s:SyntasticModeMapInstance = copy(self)
call s:SyntasticModeMapInstance.synch()
endif
return s:SyntasticModeMapInstance
-endfunction
+endfunction " }}}2
-function! g:SyntasticModeMap.synch()
+function! g:SyntasticModeMap.synch() " {{{2
if exists('g:syntastic_mode_map')
let self._mode = get(g:syntastic_mode_map, 'mode', 'active')
let self._activeFiletypes = get(g:syntastic_mode_map, 'active_filetypes', [])
@@ -26,9 +26,9 @@ function! g:SyntasticModeMap.synch()
let self._activeFiletypes = []
let self._passiveFiletypes = []
endif
-endfunction
+endfunction " }}}2
-function! g:SyntasticModeMap.allowsAutoChecking(filetype)
+function! g:SyntasticModeMap.allowsAutoChecking(filetype) " {{{2
let fts = split(a:filetype, '\m\.')
if self.isPassive()
@@ -36,16 +36,16 @@ function! g:SyntasticModeMap.allowsAutoChecking(filetype)
else
return self._noFiletypesArePassive(fts)
endif
-endfunction
+endfunction " }}}2
-function! g:SyntasticModeMap.isPassive()
- return self._mode == 'passive'
-endfunction
+function! g:SyntasticModeMap.isPassive() " {{{2
+ return self._mode ==# 'passive'
+endfunction " }}}2
-function! g:SyntasticModeMap.toggleMode()
+function! g:SyntasticModeMap.toggleMode() " {{{2
call self.synch()
- if self._mode == 'active'
+ if self._mode ==# 'active'
let self._mode = 'passive'
else
let self._mode = 'active'
@@ -56,20 +56,24 @@ function! g:SyntasticModeMap.toggleMode()
let g:syntastic_mode_map = {}
endif
let g:syntastic_mode_map['mode'] = self._mode
-endfunction
+endfunction " }}}2
-function! g:SyntasticModeMap.echoMode()
+function! g:SyntasticModeMap.echoMode() " {{{2
echo "Syntastic: " . self._mode . " mode enabled"
-endfunction
+endfunction " }}}2
+
+" }}}1
" Private methods {{{1
-function! g:SyntasticModeMap._isOneFiletypeActive(filetypes)
+function! g:SyntasticModeMap._isOneFiletypeActive(filetypes) " {{{2
return !empty(filter(copy(a:filetypes), 'index(self._activeFiletypes, v:val) != -1'))
-endfunction
+endfunction " }}}2
-function! g:SyntasticModeMap._noFiletypesArePassive(filetypes)
+function! g:SyntasticModeMap._noFiletypesArePassive(filetypes) " {{{2
return empty(filter(copy(a:filetypes), 'index(self._passiveFiletypes, v:val) != -1'))
-endfunction
+endfunction " }}}2
+
+" }}}1
" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/notifiers.vim b/bundle/syntastic/plugin/syntastic/notifiers.vim
index 645aa669..c268c19b 100644
--- a/bundle/syntastic/plugin/syntastic/notifiers.vim
+++ b/bundle/syntastic/plugin/syntastic/notifiers.vim
@@ -1,4 +1,4 @@
-if exists("g:loaded_syntastic_notifiers")
+if exists("g:loaded_syntastic_notifiers") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_notifiers = 1
@@ -9,25 +9,27 @@ let s:notifier_types = ['signs', 'balloons', 'highlighting', 'cursor', 'autolocl
" Public methods {{{1
-function! g:SyntasticNotifiers.Instance()
+function! g:SyntasticNotifiers.Instance() " {{{2
if !exists('s:SyntasticNotifiersInstance')
let s:SyntasticNotifiersInstance = copy(self)
call s:SyntasticNotifiersInstance._initNotifiers()
endif
return s:SyntasticNotifiersInstance
-endfunction
+endfunction " }}}2
-function! g:SyntasticNotifiers.refresh(loclist)
+function! g:SyntasticNotifiers.refresh(loclist) " {{{2
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'notifiers: refresh')
for type in self._enabled_types
let class = substitute(type, '\m.*', 'Syntastic\u&Notifier', '')
if !has_key(g:{class}, 'enabled') || self._notifier[type].enabled()
call self._notifier[type].refresh(a:loclist)
endif
endfor
-endfunction
+endfunction " }}}2
-function! g:SyntasticNotifiers.reset(loclist)
+function! g:SyntasticNotifiers.reset(loclist) " {{{2
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'notifiers: reset')
for type in self._enabled_types
let class = substitute(type, '\m.*', 'Syntastic\u&Notifier', '')
@@ -38,11 +40,13 @@ function! g:SyntasticNotifiers.reset(loclist)
call self._notifier[type].reset(a:loclist)
endif
endfor
-endfunction
+endfunction " }}}2
+
+" }}}1
" Private methods {{{1
-function! g:SyntasticNotifiers._initNotifiers()
+function! g:SyntasticNotifiers._initNotifiers() " {{{2
let self._notifier = {}
for type in s:notifier_types
let class = substitute(type, '\m.*', 'Syntastic\u&Notifier', '')
@@ -50,6 +54,8 @@ function! g:SyntasticNotifiers._initNotifiers()
endfor
let self._enabled_types = copy(s:notifier_types)
-endfunction
+endfunction " }}}2
+
+" }}}1
" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/registry.vim b/bundle/syntastic/plugin/syntastic/registry.vim
index 1019ab22..09ca4c90 100644
--- a/bundle/syntastic/plugin/syntastic/registry.vim
+++ b/bundle/syntastic/plugin/syntastic/registry.vim
@@ -1,27 +1,92 @@
-if exists("g:loaded_syntastic_registry")
+if exists("g:loaded_syntastic_registry") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_registry = 1
+" Initialisation {{{1
+
let s:defaultCheckers = {
- \ 'c': ['gcc'],
- \ 'coffee': ['coffee', 'coffeelint'],
- \ 'cpp': ['gcc'],
- \ 'css': ['csslint', 'phpcs'],
- \ 'go': ['go'],
- \ 'html': ['tidy'],
- \ 'java': ['javac'],
- \ 'javascript': ['jshint', 'jslint'],
- \ 'json': ['jsonlint', 'jsonval'],
- \ 'objc': ['gcc'],
- \ 'objcpp': ['gcc'],
- \ 'perl': ['perl', 'perlcritic'],
- \ 'php': ['php', 'phpcs', 'phpmd'],
- \ 'puppet': ['puppet', 'puppetlint'],
- \ 'python': ['python', 'flake8', 'pylint'],
- \ 'ruby': ['mri'],
- \ 'sh': ['sh'],
- \ 'tex': ['lacheck']
+ \ 'actionscript':['mxmlc'],
+ \ 'ada': ['gcc'],
+ \ 'applescript': ['osacompile'],
+ \ 'asciidoc': ['asciidoc'],
+ \ 'asm': ['gcc'],
+ \ 'bemhtml': ['bemhtmllint'],
+ \ 'c': ['gcc'],
+ \ 'chef': ['foodcritic'],
+ \ 'co': ['coco'],
+ \ 'cobol': ['cobc'],
+ \ 'coffee': ['coffee', 'coffeelint'],
+ \ 'coq': ['coqtop'],
+ \ 'cpp': ['gcc'],
+ \ 'cs': ['mcs'],
+ \ 'css': ['csslint'],
+ \ 'cucumber': ['cucumber'],
+ \ 'cuda': ['nvcc'],
+ \ 'd': ['dmd'],
+ \ 'dart': ['dartanalyzer'],
+ \ 'docbk': ['xmllint'],
+ \ 'dustjs': ['swiffer'],
+ \ 'elixir': ['elixir'],
+ \ 'erlang': ['escript'],
+ \ 'eruby': ['ruby'],
+ \ 'fortran': ['gfortran'],
+ \ 'glsl': ['cgc'],
+ \ 'go': ['go'],
+ \ 'haml': ['haml'],
+ \ 'handlebars': ['handlebars'],
+ \ 'haskell': ['ghc_mod', 'hdevtools', 'hlint'],
+ \ 'haxe': ['haxe'],
+ \ 'hss': ['hss'],
+ \ 'html': ['tidy'],
+ \ 'java': ['javac'],
+ \ 'javascript': ['jshint', 'jslint'],
+ \ 'json': ['jsonlint', 'jsonval'],
+ \ 'less': ['lessc'],
+ \ 'lex': ['flex'],
+ \ 'limbo': ['limbo'],
+ \ 'lisp': ['clisp'],
+ \ 'llvm': ['llvm'],
+ \ 'lua': ['luac'],
+ \ 'matlab': ['mlint'],
+ \ 'nasm': ['nasm'],
+ \ 'nroff': ['mandoc'],
+ \ 'objc': ['gcc'],
+ \ 'objcpp': ['gcc'],
+ \ 'ocaml': ['camlp4o'],
+ \ 'perl': ['perlcritic'],
+ \ 'php': ['php', 'phpcs', 'phpmd'],
+ \ 'po': ['msgfmt'],
+ \ 'pod': ['podchecker'],
+ \ 'puppet': ['puppet', 'puppetlint'],
+ \ 'python': ['python', 'flake8', 'pylint'],
+ \ 'racket': ['racket'],
+ \ 'rst': ['rst2pseudoxml'],
+ \ 'ruby': ['mri'],
+ \ 'rust': ['rustc'],
+ \ 'sass': ['sass'],
+ \ 'scala': ['fsc', 'scalac'],
+ \ 'scss': ['sass', 'scss_lint'],
+ \ 'sh': ['sh', 'shellcheck'],
+ \ 'slim': ['slimrb'],
+ \ 'tcl': ['nagelfar'],
+ \ 'tex': ['lacheck', 'chktex'],
+ \ 'texinfo': ['makeinfo'],
+ \ 'text': ['atdtool'],
+ \ 'twig': ['twiglint'],
+ \ 'typescript': ['tsc'],
+ \ 'vala': ['valac'],
+ \ 'verilog': ['verilator'],
+ \ 'vhdl': ['ghdl'],
+ \ 'vim': ['vimlint'],
+ \ 'xhtml': ['tidy'],
+ \ 'xml': ['xmllint'],
+ \ 'xslt': ['xmllint'],
+ \ 'yacc': ['bison'],
+ \ 'yaml': ['jsyaml'],
+ \ 'z80': ['z80syntaxchecker'],
+ \ 'zpt': ['zptlint'],
+ \ 'zsh': ['zsh', 'shellcheck']
\ }
let s:defaultFiletypeMap = {
@@ -32,183 +97,167 @@ let s:defaultFiletypeMap = {
let g:SyntasticRegistry = {}
+" }}}1
+
+" Public methods {{{1
+
" TODO: Handling of filetype aliases: all public methods take aliases as
" parameters, all private methods take normalized filetypes. Public methods
" are thus supposed to normalize filetypes before calling private methods.
-" Public methods {{{1
-
-function! g:SyntasticRegistry.Instance()
+function! g:SyntasticRegistry.Instance() " {{{2
if !exists('s:SyntasticRegistryInstance')
let s:SyntasticRegistryInstance = copy(self)
+ let s:SyntasticRegistryInstance._checkerRaw = {}
let s:SyntasticRegistryInstance._checkerMap = {}
endif
return s:SyntasticRegistryInstance
-endfunction
+endfunction " }}}2
-function! g:SyntasticRegistry.CreateAndRegisterChecker(args)
+function! g:SyntasticRegistry.CreateAndRegisterChecker(args) " {{{2
let checker = g:SyntasticChecker.New(a:args)
let registry = g:SyntasticRegistry.Instance()
- call registry.registerChecker(checker)
-endfunction
-
-function! g:SyntasticRegistry.registerChecker(checker) abort
- let ft = a:checker.getFiletype()
-
- if !has_key(self._checkerMap, ft)
- let self._checkerMap[ft] = []
+ call registry._registerChecker(checker)
+endfunction " }}}2
+
+function! g:SyntasticRegistry.isCheckable(ftalias) " {{{2
+ let ft = s:normaliseFiletype(a:ftalias)
+ call self._loadCheckers(ft)
+ return !empty(self._checkerMap[ft])
+endfunction " }}}2
+
+function! g:SyntasticRegistry.getCheckersMap(ftalias) " {{{2
+ let ft = s:normaliseFiletype(a:ftalias)
+ call self._loadCheckers(ft)
+ return self._checkerMap[ft]
+endfunction " }}}2
+
+function! g:SyntasticRegistry.getCheckers(ftalias, list) " {{{2
+ let checkers_map = self.getCheckersMap(a:ftalias)
+ if empty(checkers_map)
+ return []
endif
- call self._validateUniqueName(a:checker)
+ let ft = s:normaliseFiletype(a:ftalias)
+ call self._checkDeprecation(ft)
- call add(self._checkerMap[ft], a:checker)
-endfunction
+ let names =
+ \ !empty(a:list) ? a:list :
+ \ exists('b:syntastic_checkers') ? b:syntastic_checkers :
+ \ exists('g:syntastic_' . ft . '_checkers') ? g:syntastic_{ft}_checkers :
+ \ get(s:defaultCheckers, ft, 0)
-function! g:SyntasticRegistry.checkable(ftalias)
- return !empty(self.getActiveCheckers(a:ftalias))
-endfunction
+ return type(names) == type([]) ?
+ \ self._filterCheckersByName(checkers_map, names) : [checkers_map[keys(checkers_map)[0]]]
+endfunction " }}}2
-function! g:SyntasticRegistry.getActiveCheckers(ftalias)
- let filetype = s:SyntasticRegistryNormaliseFiletype(a:ftalias)
- let checkers = self.availableCheckersFor(a:ftalias)
+function! g:SyntasticRegistry.getKnownFiletypes() " {{{2
+ let types = keys(s:defaultCheckers)
- if self._userHasFiletypeSettings(filetype)
- return self._filterCheckersByUserSettings(checkers, filetype)
- endif
+ call extend(types, keys(s:defaultFiletypeMap))
- if has_key(s:defaultCheckers, filetype)
- return self._filterCheckersByDefaultSettings(checkers, filetype)
+ if exists('g:syntastic_filetype_map')
+ call extend(types, keys(g:syntastic_filetype_map))
endif
- let checkers = self.availableCheckersFor(filetype)
-
- if !empty(checkers)
- return [checkers[0]]
+ if exists('g:syntastic_extra_filetypes') && type(g:syntastic_extra_filetypes) == type([])
+ call extend(types, g:syntastic_extra_filetypes)
endif
- return []
-endfunction
-
-function! g:SyntasticRegistry.getChecker(ftalias, name)
- for checker in self.availableCheckersFor(a:ftalias)
- if checker.getName() == a:name
- return checker
- endif
- endfor
+ return syntastic#util#unique(types)
+endfunction " }}}2
- return {}
-endfunction
+function! g:SyntasticRegistry.echoInfoFor(ftalias_list) " {{{2
+ echomsg "Syntastic info for filetype: " . join(a:ftalias_list, '.')
-function! g:SyntasticRegistry.availableCheckersFor(ftalias)
- let filetype = s:SyntasticRegistryNormaliseFiletype(a:ftalias)
- let checkers = copy(self._allCheckersFor(filetype))
- return self._filterCheckersByAvailability(checkers)
-endfunction
+ let ft_list = syntastic#util#unique(map( copy(a:ftalias_list), 's:normaliseFiletype(v:val)' ))
+ if len(ft_list) != 1
+ let available = []
+ let active = []
-function! g:SyntasticRegistry.echoInfoFor(ftalias_list)
- echomsg "Syntastic info for filetype: " . join(a:ftalias_list, '.')
+ for ft in ft_list
+ call extend(available, map( keys(self.getCheckersMap(ft)), 'ft . "/" . v:val' ))
+ call extend(active, map( self.getCheckers(ft, []), 'ft . "/" . v:val.getName()' ))
+ endfor
+ else
+ let ft = ft_list[0]
+ let available = keys(self.getCheckersMap(ft))
+ let active = map(self.getCheckers(ft, []), 'v:val.getName()')
+ endif
- let available = []
- let active = []
- for ftalias in a:ftalias_list
- call extend(available, self.availableCheckersFor(ftalias))
- call extend(active, self.getActiveCheckers(ftalias))
- endfor
+ echomsg "Available checker(s): " . join(sort(available))
+ echomsg "Currently enabled checker(s): " . join(active)
+endfunction " }}}2
- echomsg "Available checkers: " . join(syntastic#util#unique(map(available, "v:val.getName()")))
- echomsg "Currently active checker(s): " . join(syntastic#util#unique(map(active, "v:val.getName()")))
-endfunction
+" }}}1
" Private methods {{{1
-function! g:SyntasticRegistry._allCheckersFor(filetype)
- call self._loadCheckers(a:filetype)
- if empty(self._checkerMap[a:filetype])
- return []
+function! g:SyntasticRegistry._registerChecker(checker) abort " {{{2
+ let ft = a:checker.getFiletype()
+
+ if !has_key(self._checkerRaw, ft)
+ let self._checkerRaw[ft] = []
+ let self._checkerMap[ft] = {}
endif
- return self._checkerMap[a:filetype]
-endfunction
+ call self._validateUniqueName(a:checker)
+
+ let name = a:checker.getName()
+ call add(self._checkerRaw[ft], name)
-function! g:SyntasticRegistry._filterCheckersByDefaultSettings(checkers, filetype)
- if has_key(s:defaultCheckers, a:filetype)
- return self._filterCheckersByName(a:checkers, s:defaultCheckers[a:filetype])
+ if a:checker.isAvailable()
+ let self._checkerMap[ft][name] = a:checker
endif
+endfunction " }}}2
- return a:checkers
-endfunction
+function! g:SyntasticRegistry._filterCheckersByName(checkers_map, list) " {{{2
+ return filter( map(copy(a:list), 'get(a:checkers_map, v:val, {})'), '!empty(v:val)' )
+endfunction " }}}2
-function! g:SyntasticRegistry._filterCheckersByUserSettings(checkers, filetype)
- if exists("b:syntastic_checkers")
- let whitelist = b:syntastic_checkers
- else
- let whitelist = g:syntastic_{a:filetype}_checkers
- endif
- return self._filterCheckersByName(a:checkers, whitelist)
-endfunction
-
-function! g:SyntasticRegistry._filterCheckersByName(checkers, list)
- let checkers_by_name = {}
- for c in a:checkers
- let checkers_by_name[c.getName()] = c
- endfor
-
- let filtered = []
- for name in a:list
- if has_key(checkers_by_name, name)
- call add(filtered, checkers_by_name[name])
- endif
- endfor
-
- return filtered
-endfunction
-
-function! g:SyntasticRegistry._filterCheckersByAvailability(checkers)
- return filter(copy(a:checkers), "v:val.isAvailable()")
-endfunction
-
-function! g:SyntasticRegistry._loadCheckers(filetype)
- if self._haveLoadedCheckers(a:filetype)
+function! g:SyntasticRegistry._loadCheckers(filetype) " {{{2
+ if has_key(self._checkerRaw, a:filetype)
return
endif
- exec "runtime! syntax_checkers/" . a:filetype . "/*.vim"
+ execute "runtime! syntax_checkers/" . a:filetype . "/*.vim"
- if !has_key(self._checkerMap, a:filetype)
- let self._checkerMap[a:filetype] = []
+ if !has_key(self._checkerRaw, a:filetype)
+ let self._checkerRaw[a:filetype] = []
+ let self._checkerMap[a:filetype] = {}
endif
-endfunction
+endfunction " }}}2
-function! g:SyntasticRegistry._haveLoadedCheckers(filetype)
- return has_key(self._checkerMap, a:filetype)
-endfunction
+function! g:SyntasticRegistry._validateUniqueName(checker) abort " {{{2
+ let ft = a:checker.getFiletype()
+ let name = a:checker.getName()
+ if index(self._checkerRaw[ft], name) > -1
+ throw 'Syntastic: Duplicate syntax checker name: ' . ft . '/' . name
+ endif
+endfunction " }}}2
-function! g:SyntasticRegistry._userHasFiletypeSettings(filetype)
- if exists("g:syntastic_" . a:filetype . "_checker") && !exists("g:syntastic_" . a:filetype . "_checkers")
+" Check for obsolete variable g:syntastic__checker
+function! g:SyntasticRegistry._checkDeprecation(filetype) " {{{2
+ if exists('g:syntastic_' . a:filetype . '_checker') && !exists('g:syntastic_' . a:filetype . '_checkers')
let g:syntastic_{a:filetype}_checkers = [g:syntastic_{a:filetype}_checker]
- call syntastic#util#deprecationWarn("variable g:syntastic_" . a:filetype . "_checker is deprecated")
+ call syntastic#log#deprecationWarn('variable g:syntastic_' . a:filetype . '_checker is deprecated')
endif
- return exists("b:syntastic_checkers") || exists("g:syntastic_" . a:filetype . "_checkers")
-endfunction
+endfunction " }}}2
-function! g:SyntasticRegistry._validateUniqueName(checker) abort
- for checker in self._allCheckersFor(a:checker.getFiletype())
- if checker.getName() == a:checker.getName()
- throw "Syntastic: Duplicate syntax checker name for: " . a:checker.getName()
- endif
- endfor
-endfunction
+" }}}1
" Private functions {{{1
"resolve filetype aliases, and replace - with _ otherwise we cant name
"syntax checker functions legally for filetypes like "gentoo-metadata"
-function! s:SyntasticRegistryNormaliseFiletype(ftalias)
+function! s:normaliseFiletype(ftalias) " {{{2
let ft = get(s:defaultFiletypeMap, a:ftalias, a:ftalias)
let ft = get(g:syntastic_filetype_map, ft, ft)
let ft = substitute(ft, '\m-', '_', 'g')
return ft
-endfunction
+endfunction " }}}2
+
+" }}}1
" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/plugin/syntastic/signs.vim b/bundle/syntastic/plugin/syntastic/signs.vim
index 067658b1..9c860da2 100644
--- a/bundle/syntastic/plugin/syntastic/signs.vim
+++ b/bundle/syntastic/plugin/syntastic/signs.vim
@@ -1,28 +1,9 @@
-if exists("g:loaded_syntastic_notifier_signs")
+if exists("g:loaded_syntastic_notifier_signs") || !exists("g:loaded_syntastic_plugin")
finish
endif
let g:loaded_syntastic_notifier_signs = 1
-if !exists("g:syntastic_enable_signs")
- let g:syntastic_enable_signs = 1
-endif
-
-if !exists("g:syntastic_error_symbol")
- let g:syntastic_error_symbol = '>>'
-endif
-
-if !exists("g:syntastic_warning_symbol")
- let g:syntastic_warning_symbol = '>>'
-endif
-
-if !exists("g:syntastic_style_error_symbol")
- let g:syntastic_style_error_symbol = 'S>'
-endif
-
-if !exists("g:syntastic_style_warning_symbol")
- let g:syntastic_style_warning_symbol = 'S>'
-endif
-
+" Initialisation {{{1
" start counting sign ids at 5000, start here to hopefully avoid conflicting
" with any other code that places signs (not sure if this precaution is
@@ -34,9 +15,11 @@ let g:SyntasticSignsNotifier = {}
let s:setup_done = 0
+" }}}1
+
" Public methods {{{1
-function! g:SyntasticSignsNotifier.New()
+function! g:SyntasticSignsNotifier.New() " {{{2
let newObj = copy(self)
if !s:setup_done
@@ -45,27 +28,28 @@ function! g:SyntasticSignsNotifier.New()
endif
return newObj
-endfunction
+endfunction " }}}2
-function! g:SyntasticSignsNotifier.enabled()
- return
- \ has('signs') &&
- \ exists('b:syntastic_enable_signs') ? b:syntastic_enable_signs : g:syntastic_enable_signs
-endfunction
+function! g:SyntasticSignsNotifier.enabled() " {{{2
+ return has('signs') && syntastic#util#var('enable_signs')
+endfunction " }}}2
-function! g:SyntasticSignsNotifier.refresh(loclist)
+function! g:SyntasticSignsNotifier.refresh(loclist) " {{{2
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'signs: refresh')
let old_signs = copy(self._bufSignIds())
if self.enabled()
call self._signErrors(a:loclist)
endif
call self._removeSigns(old_signs)
let s:first_sign_id = s:next_sign_id
-endfunction
+endfunction " }}}2
+
+" }}}1
" Private methods {{{1
" One time setup: define our own sign types and highlighting
-function! g:SyntasticSignsNotifier._setup()
+function! g:SyntasticSignsNotifier._setup() " {{{2
if has('signs')
if !hlexists('SyntasticErrorSign')
highlight link SyntasticErrorSign error
@@ -96,19 +80,17 @@ function! g:SyntasticSignsNotifier._setup()
exe 'sign define SyntasticStyleWarning text=' . g:syntastic_style_warning_symbol .
\ ' texthl=SyntasticStyleWarningSign linehl=SyntasticStyleWarningLine'
endif
-endfunction
+endfunction " }}}2
" Place signs by all syntax errors in the buffer
-function! g:SyntasticSignsNotifier._signErrors(loclist)
+function! g:SyntasticSignsNotifier._signErrors(loclist) " {{{2
let loclist = a:loclist
- if loclist.hasErrorsOrWarningsToDisplay()
+ if !loclist.isEmpty()
" errors some first, so that they are not masked by warnings
let buf = bufnr('')
let issues = copy(loclist.errors())
- if !loclist.quietWarnings()
- call extend(issues, loclist.warnings())
- endif
+ call extend(issues, loclist.warnings())
call filter(issues, 'v:val["bufnr"] == buf')
let seen = {}
@@ -120,30 +102,32 @@ function! g:SyntasticSignsNotifier._signErrors(loclist)
let sign_subtype = get(i, 'subtype', '')
let sign_type = 'Syntastic' . sign_subtype . sign_severity
- exec "sign place " . s:next_sign_id . " line=" . i['lnum'] . " name=" . sign_type . " buffer=" . i['bufnr']
+ execute "sign place " . s:next_sign_id . " line=" . i['lnum'] . " name=" . sign_type . " buffer=" . i['bufnr']
call add(self._bufSignIds(), s:next_sign_id)
let s:next_sign_id += 1
endif
endfor
endif
-endfunction
+endfunction " }}}2
" Remove the signs with the given ids from this buffer
-function! g:SyntasticSignsNotifier._removeSigns(ids)
+function! g:SyntasticSignsNotifier._removeSigns(ids) " {{{2
if has('signs')
for i in a:ids
- exec "sign unplace " . i
+ execute "sign unplace " . i
call remove(self._bufSignIds(), index(self._bufSignIds(), i))
endfor
endif
-endfunction
+endfunction " }}}2
" Get all the ids of the SyntaxError signs in the buffer
-function! g:SyntasticSignsNotifier._bufSignIds()
+function! g:SyntasticSignsNotifier._bufSignIds() " {{{2
if !exists("b:syntastic_sign_ids")
let b:syntastic_sign_ids = []
endif
return b:syntastic_sign_ids
-endfunction
+endfunction " }}}2
+
+" }}}1
" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/bundle/syntastic/syntax_checkers/actionscript/mxmlc.vim b/bundle/syntastic/syntax_checkers/actionscript/mxmlc.vim
new file mode 100644
index 00000000..e423aa0d
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/actionscript/mxmlc.vim
@@ -0,0 +1,71 @@
+"============================================================================
+"File: mxmlc.vim
+"Description: ActionScript syntax checker - using mxmlc
+"Maintainer: Andy Earnshaw
+"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_actionscript_mxmlc_checker')
+ finish
+endif
+let g:loaded_syntastic_actionscript_mxmlc_checker = 1
+
+if !exists('g:syntastic_actionscript_mxmlc_conf')
+ let g:syntastic_actionscript_mxmlc_conf = ''
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_actionscript_mxmlc_GetHighlightRegex(item)
+ let term = ''
+
+ if match(a:item['text'], '\mvariable ''') > -1
+ let term = matchstr(a:item['text'], '\m''\zs[^'']\+\ze''')
+
+ elseif match(a:item['text'], 'expected a definition keyword') > -1
+ let term = matchstr(a:item['text'], '\mnot \zs[^.]\+\ze\.')
+
+ elseif match(a:item['text'], '\mundefined \%(property\|method\)') > -1
+ let term = matchstr(a:item['text'], '\mundefined \%(property\|method\) \zs[^. ]\+\ze')
+
+ elseif match(a:item['text'], 'could not be found') > -1
+ let term = matchstr(a:item['text'], '\m \zs\S\+\ze could not be found')
+
+ elseif match(a:item['text'], 'Type was not found') > -1
+ let term = matchstr(a:item['text'], '\m: \zs[^.]\+\zs\.')
+
+ endif
+
+ return term != '' ? '\V\<' . escape(term, '\') . '\>' : ''
+endfunction
+
+function! SyntaxCheckers_actionscript_mxmlc_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_before': (g:syntastic_actionscript_mxmlc_conf != '' ?
+ \ ' -load-config+=' . g:syntastic_actionscript_mxmlc_conf : ''),
+ \ 'args_after': '-output=' . syntastic#util#DevNull() })
+
+ let errorformat =
+ \ '%f(%l): col: %c %trror: %m,' .
+ \ '%f(%l): col: %c %tarning: %m,' .
+ \ '%f: %trror: %m,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'actionscript',
+ \ 'name': 'mxmlc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/ada/gcc.vim b/bundle/syntastic/syntax_checkers/ada/gcc.vim
index 7562d609..14e79a04 100644
--- a/bundle/syntastic/syntax_checkers/ada/gcc.vim
+++ b/bundle/syntastic/syntax_checkers/ada/gcc.vim
@@ -12,22 +12,21 @@ if exists('g:loaded_syntastic_ada_gcc_checker')
endif
let g:loaded_syntastic_ada_gcc_checker = 1
-if !exists('g:syntastic_ada_compiler')
- let g:syntastic_ada_compiler = 'gcc'
+if !exists('g:syntastic_ada_compiler_options')
+ let g:syntastic_ada_compiler_options = ''
endif
-function! SyntaxCheckers_ada_gcc_IsAvailable()
- return executable(g:syntastic_ada_compiler)
-endfunction
-
let s:save_cpo = &cpo
set cpo&vim
-if !exists('g:syntastic_ada_compiler_options')
- let g:syntastic_ada_compiler_options = ''
-endif
+function! SyntaxCheckers_ada_gcc_IsAvailable() dict
+ if !exists('g:syntastic_ada_compiler')
+ let g:syntastic_ada_compiler = self.getExec()
+ endif
+ return executable(expand(g:syntastic_ada_compiler))
+endfunction
-function! SyntaxCheckers_ada_gcc_GetLocList()
+function! SyntaxCheckers_ada_gcc_GetLocList() dict
return syntastic#c#GetLocList('ada', 'gcc', {
\ 'errorformat':
\ '%-G%f:%s:,' .
@@ -40,7 +39,7 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'ada',
- \ 'name': 'gcc'})
+ \ 'name': 'gcc' })
let &cpo = s:save_cpo
unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/applescript/osacompile.vim b/bundle/syntastic/syntax_checkers/applescript/osacompile.vim
index 7567eb08..522e6a27 100644
--- a/bundle/syntastic/syntax_checkers/applescript/osacompile.vim
+++ b/bundle/syntastic/syntax_checkers/applescript/osacompile.vim
@@ -28,23 +28,22 @@
if exists("g:loaded_syntastic_applescript_osacompile_checker")
finish
endif
-let g:loaded_syntastic_applescript_osacompile_checker=1
+let g:loaded_syntastic_applescript_osacompile_checker = 1
-function! SyntaxCheckers_applescript_osacompile_IsAvailable()
- return executable('osacompile')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_applescript_osacompile_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'osacompile',
- \ 'args': '-o ' . tempname() . '.scpt ',
- \ 'filetype': 'applescript',
- \ 'subchecker': 'osacompile' })
+function! SyntaxCheckers_applescript_osacompile_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-o ' . tempname() . '.scpt' })
let errorformat = '%f:%l:%m'
-
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'applescript',
- \ 'name': 'osacompile'})
+ \ 'name': 'osacompile' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/asciidoc/asciidoc.vim b/bundle/syntastic/syntax_checkers/asciidoc/asciidoc.vim
index faa907cb..bec2a49d 100644
--- a/bundle/syntastic/syntax_checkers/asciidoc/asciidoc.vim
+++ b/bundle/syntastic/syntax_checkers/asciidoc/asciidoc.vim
@@ -15,16 +15,11 @@ if exists("g:loaded_syntastic_asciidoc_asciidoc_checker")
endif
let g:loaded_syntastic_asciidoc_asciidoc_checker = 1
-function! SyntaxCheckers_asciidoc_asciidoc_IsAvailable()
- return executable("asciidoc")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_asciidoc_asciidoc_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'asciidoc',
- \ 'args': syntastic#c#NullOutput(),
- \ 'filetype': 'asciidoc',
- \ 'subchecker': 'asciidoc' })
+function! SyntaxCheckers_asciidoc_asciidoc_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': syntastic#c#NullOutput() })
let errorformat =
\ '%Easciidoc: %tRROR: %f: line %l: %m,' .
@@ -45,3 +40,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'asciidoc',
\ 'name': 'asciidoc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/asm/gcc.vim b/bundle/syntastic/syntax_checkers/asm/gcc.vim
new file mode 100644
index 00000000..f5ecebe6
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/asm/gcc.vim
@@ -0,0 +1,54 @@
+"============================================================================
+"File: gcc.vim
+"Description: Syntax checking for at&t and intel assembly files with gcc
+"Maintainer: Josh Rahm
+"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_asm_gcc_checker')
+ finish
+endif
+let g:loaded_syntastic_asm_gcc_checker = 1
+
+if !exists('g:syntastic_asm_compiler_options')
+ let g:syntastic_asm_compiler_options = ''
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_asm_gcc_IsAvailable() dict
+ if !exists('g:syntastic_asm_compiler')
+ let g:syntastic_asm_compiler = self.getExec()
+ endif
+ return executable(expand(g:syntastic_asm_compiler))
+endfunction
+
+function! SyntaxCheckers_asm_gcc_GetLocList() dict
+ return syntastic#c#GetLocList('asm', 'gcc', {
+ \ 'errorformat':
+ \ '%-G%f:%s:,' .
+ \ '%f:%l:%c: %trror: %m,' .
+ \ '%f:%l:%c: %tarning: %m,' .
+ \ '%f:%l: %m',
+ \ 'main_flags': '-x assembler -fsyntax-only -masm=' . s:GetDialect() })
+endfunction
+
+function! s:GetDialect()
+ return exists('g:syntastic_asm_dialect') ? g:syntastic_asm_dialect :
+ \ expand('%:e') ==? 'asm' ? 'intel' : 'att'
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'asm',
+ \ 'name': 'gcc' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/objc/ycm.vim b/bundle/syntastic/syntax_checkers/bemhtml/bemhtmllint.vim
similarity index 53%
rename from bundle/syntastic/syntax_checkers/objc/ycm.vim
rename to bundle/syntastic/syntax_checkers/bemhtml/bemhtmllint.vim
index 40f53fb4..e6582163 100644
--- a/bundle/syntastic/syntax_checkers/objc/ycm.vim
+++ b/bundle/syntastic/syntax_checkers/bemhtml/bemhtmllint.vim
@@ -1,34 +1,34 @@
"============================================================================
-"File: ycm.vim
+"File: bemhtmllint.vim
"Description: Syntax checking plugin for syntastic.vim
-"Maintainer: Val Markovic
+"Maintainer: Sergej Tatarincev
"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_objc_ycm_checker")
+"
+if exists("g:loaded_syntastic_bemhtml_bemhtmllint_checker")
finish
endif
-let g:loaded_syntastic_objc_ycm_checker = 1
-runtime! syntax_checkers/c/*.vim
+let g:loaded_syntastic_bemhtml_bemhtmllint_checker = 1
-function! SyntaxCheckers_objc_ycm_IsAvailable()
- return SyntaxCheckers_c_ycm_IsAvailable()
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-if !exists('g:loaded_youcompleteme')
- finish
-endif
-
-function! SyntaxCheckers_objc_ycm_GetLocList()
- return SyntaxCheckers_c_ycm_GetLocList()
+function SyntaxCheckers_bemhtml_bemhtmllint_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+ let errorformat = '%f:%l:%c: %m'
+ return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
- \ 'filetype': 'objc',
- \ 'name': 'ycm'})
+ \ 'filetype': 'bemhtml',
+ \ 'name': 'bemhtmllint',
+ \ 'exec': 'bemhtml-lint' })
+
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/c/avrgcc.vim b/bundle/syntastic/syntax_checkers/c/avrgcc.vim
new file mode 100644
index 00000000..0efe4722
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/c/avrgcc.vim
@@ -0,0 +1,55 @@
+"============================================================================
+"File: avrgcc.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Karel
+"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_c_avrgcc_checker')
+ finish
+endif
+let g:loaded_syntastic_c_avrgcc_checker = 1
+
+if !exists('g:syntastic_avrgcc_config_file')
+ let g:syntastic_avrgcc_config_file = '.syntastic_avrgcc_config'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_c_avrgcc_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_before': syntastic#c#ReadConfig(g:syntastic_avrgcc_config_file),
+ \ 'args_after': '-x c -fsyntax-only' })
+
+ let errorformat =
+ \ '%-G%f:%s:,' .
+ \ '%-G%f:%l: %#error: %#(Each undeclared identifier is reported only%.%#,' .
+ \ '%-G%f:%l: %#error: %#for each function it appears%.%#,' .
+ \ '%-GIn file included%.%#,' .
+ \ '%-G %#from %f:%l\,,' .
+ \ '%f:%l:%c: %trror: %m,' .
+ \ '%f:%l:%c: %tarning: %m,' .
+ \ '%f:%l:%c: %m,' .
+ \ '%f:%l: %trror: %m,' .
+ \ '%f:%l: %tarning: %m,'.
+ \ '%f:%l: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'postprocess': ['compressWhitespace'] })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'c',
+ \ 'name': 'avrgcc',
+ \ 'exec': 'avr-gcc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/c/checkpatch.vim b/bundle/syntastic/syntax_checkers/c/checkpatch.vim
index f16a7c14..f8601d80 100644
--- a/bundle/syntastic/syntax_checkers/c/checkpatch.vim
+++ b/bundle/syntastic/syntax_checkers/c/checkpatch.vim
@@ -8,6 +8,7 @@
" 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_c_checkpatch_checker")
finish
endif
@@ -20,17 +21,17 @@ elseif executable("./scripts/checkpatch.pl")
let g:syntastic_c_checker_checkpatch_location = './scripts/checkpatch.pl'
endif
-function SyntaxCheckers_c_checkpatch_IsAvailable()
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_c_checkpatch_IsAvailable() dict
return exists("g:syntastic_c_checker_checkpatch_location")
endfunction
-
-function! SyntaxCheckers_c_checkpatch_GetLocList()
- let makeprg = syntastic#makeprg#build({
+function! SyntaxCheckers_c_checkpatch_GetLocList() dict
+ let makeprg = self.makeprgBuild({
\ 'exe': g:syntastic_c_checker_checkpatch_location,
- \ 'args': '--no-summary --no-tree --terse --file',
- \ 'filetype': 'c',
- \ 'subchecker': 'checkpatch' })
+ \ 'args_after': '--no-summary --no-tree --terse --file' })
let errorformat =
\ '%f:%l: %tARNING: %m,' .
@@ -45,4 +46,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'c',
- \ 'name': 'checkpatch'})
+ \ 'name': 'checkpatch',
+ \ 'exec': 'checkpatch.pl'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/c/cppcheck.vim b/bundle/syntastic/syntax_checkers/c/cppcheck.vim
new file mode 100644
index 00000000..e4223cb2
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/c/cppcheck.vim
@@ -0,0 +1,69 @@
+"============================================================================
+"File: cppcheck.vim
+"Description: Syntax checking plugin for syntastic.vim using cppcheck.pl
+"Maintainer: LCD 47
+"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.
+"============================================================================
+"
+" 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")
+ finish
+endif
+let g:loaded_syntastic_c_cppcheck_checker = 1
+
+if !exists('g:syntastic_cppcheck_config_file')
+ let g:syntastic_cppcheck_config_file = '.syntastic_cppcheck_config'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_c_cppcheck_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': syntastic#c#ReadConfig(g:syntastic_cppcheck_config_file),
+ \ 'args_after': '-q --enable=style' })
+
+ let errorformat =
+ \ '[%f:%l]: (%trror) %m,' .
+ \ '[%f:%l]: (%tarning) %m,' .
+ \ '[%f:%l]: (%ttyle) %m,' .
+ \ '[%f:%l]: (%terformance) %m,' .
+ \ '[%f:%l]: (%tortability) %m,' .
+ \ '[%f:%l]: (%tnformation) %m,' .
+ \ '[%f:%l]: (%tnconclusive) %m,' .
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'preprocess': 'cppcheck',
+ \ 'returns': [0] })
+
+ for e in loclist
+ if e['type'] =~? '\m^[SPI]'
+ let e['type'] = 'w'
+ let e['subtype'] = 'Style'
+ endif
+ endfor
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'c',
+ \ 'name': 'cppcheck'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/c/gcc.vim b/bundle/syntastic/syntax_checkers/c/gcc.vim
index 4e6a26b6..4fd19847 100644
--- a/bundle/syntastic/syntax_checkers/c/gcc.vim
+++ b/bundle/syntastic/syntax_checkers/c/gcc.vim
@@ -10,28 +10,26 @@
"
"============================================================================
-
if exists('g:loaded_syntastic_c_gcc_checker')
finish
endif
let g:loaded_syntastic_c_gcc_checker = 1
-if !exists('g:syntastic_c_compiler')
- let g:syntastic_c_compiler = 'gcc'
+if !exists('g:syntastic_c_compiler_options')
+ let g:syntastic_c_compiler_options = '-std=gnu99'
endif
-function! SyntaxCheckers_c_gcc_IsAvailable()
- return executable(g:syntastic_c_compiler)
-endfunction
-
let s:save_cpo = &cpo
set cpo&vim
-if !exists('g:syntastic_c_compiler_options')
- let g:syntastic_c_compiler_options = '-std=gnu99'
-endif
+function! SyntaxCheckers_c_gcc_IsAvailable() dict
+ if !exists('g:syntastic_c_compiler')
+ let g:syntastic_c_compiler = executable(self.getExec()) ? self.getExec() : 'clang'
+ endif
+ return executable(expand(g:syntastic_c_compiler))
+endfunction
-function! SyntaxCheckers_c_gcc_GetLocList()
+function! SyntaxCheckers_c_gcc_GetLocList() dict
return syntastic#c#GetLocList('c', 'gcc', {
\ 'errorformat':
\ '%-G%f:%s:,' .
@@ -52,7 +50,7 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'c',
- \ 'name': 'gcc'})
+ \ 'name': 'gcc' })
let &cpo = s:save_cpo
unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/c/make.vim b/bundle/syntastic/syntax_checkers/c/make.vim
index 5fb2a848..fa27273a 100644
--- a/bundle/syntastic/syntax_checkers/c/make.vim
+++ b/bundle/syntastic/syntax_checkers/c/make.vim
@@ -15,16 +15,11 @@ if exists('g:loaded_syntastic_c_make_checker')
endif
let g:loaded_syntastic_c_make_checker = 1
-function SyntaxCheckers_c_make_IsAvailable()
- return executable('make')
-endfunction
-
let s:save_cpo = &cpo
set cpo&vim
-function! SyntaxCheckers_c_make_GetLocList()
-
- let makeprg = 'make -sk'
+function! SyntaxCheckers_c_make_GetLocList() dict
+ let makeprg = self.getExecEscaped() . ' -sk'
let errorformat =
\ '%-G%f:%s:,' .
@@ -62,3 +57,5 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
let &cpo = s:save_cpo
unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/c/oclint.vim b/bundle/syntastic/syntax_checkers/c/oclint.vim
index e366a7ab..e3dd0ad4 100644
--- a/bundle/syntastic/syntax_checkers/c/oclint.vim
+++ b/bundle/syntastic/syntax_checkers/c/oclint.vim
@@ -21,21 +21,17 @@ if exists("g:loaded_syntastic_c_oclint_checker")
endif
let g:loaded_syntastic_c_oclint_checker = 1
-function! SyntaxCheckers_c_oclint_IsAvailable()
- return executable("oclint")
-endfunction
-
if !exists('g:syntastic_oclint_config_file')
let g:syntastic_oclint_config_file = '.syntastic_oclint_config'
endif
-function! SyntaxCheckers_c_oclint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'oclint',
- \ 'args': '-text',
- \ 'post_args': '-- -c ' . syntastic#c#ReadConfig(g:syntastic_oclint_config_file),
- \ 'filetype': 'c',
- \ 'subchecker': 'oclint' })
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_c_oclint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '-text',
+ \ 'post_args_before': '-- -c ' . syntastic#c#ReadConfig(g:syntastic_oclint_config_file) })
let errorformat =
\ '%E%f:%l:%c: %m P1 ,' .
@@ -50,9 +46,15 @@ function! SyntaxCheckers_c_oclint_GetLocList()
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'subtype': 'Style',
- \ 'postprocess': ['compressWhitespace', 'sort'] })
+ \ 'postprocess': ['compressWhitespace', 'sort'],
+ \ 'returns': [0, 3, 5] })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'c',
\ 'name': 'oclint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/c/sparse.vim b/bundle/syntastic/syntax_checkers/c/sparse.vim
index 0307e324..b7c30a0a 100644
--- a/bundle/syntastic/syntax_checkers/c/sparse.vim
+++ b/bundle/syntastic/syntax_checkers/c/sparse.vim
@@ -21,20 +21,17 @@ if exists("g:loaded_syntastic_c_sparse_checker")
endif
let g:loaded_syntastic_c_sparse_checker = 1
-function! SyntaxCheckers_c_sparse_IsAvailable()
- return executable("sparse")
-endfunction
-
if !exists('g:syntastic_sparse_config_file')
let g:syntastic_sparse_config_file = '.syntastic_sparse_config'
endif
-function! SyntaxCheckers_c_sparse_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'sparse',
- \ 'args': '-ftabstop=' . &ts . ' ' . syntastic#c#ReadConfig(g:syntastic_sparse_config_file),
- \ 'filetype': 'c',
- \ 'subchecker': 'sparse' })
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_c_sparse_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': syntastic#c#ReadConfig(g:syntastic_sparse_config_file),
+ \ 'args_after': '-ftabstop=' . &ts })
let errorformat = '%f:%l:%v: %trror: %m,%f:%l:%v: %tarning: %m,'
@@ -49,3 +46,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'c',
\ 'name': 'sparse'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/c/splint.vim b/bundle/syntastic/syntax_checkers/c/splint.vim
index 6b2a1c1b..991a681b 100644
--- a/bundle/syntastic/syntax_checkers/c/splint.vim
+++ b/bundle/syntastic/syntax_checkers/c/splint.vim
@@ -21,20 +21,17 @@ if exists("g:loaded_syntastic_c_splint_checker")
endif
let g:loaded_syntastic_c_splint_checker = 1
-function! SyntaxCheckers_c_splint_IsAvailable()
- return executable("splint")
-endfunction
-
if !exists('g:syntastic_splint_config_file')
let g:syntastic_splint_config_file = '.syntastic_splint_config'
endif
-function! SyntaxCheckers_c_splint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'splint',
- \ 'post_args': '-showfunc -hints +quiet ' . syntastic#c#ReadConfig(g:syntastic_splint_config_file),
- \ 'filetype': 'c',
- \ 'subchecker': 'splint' })
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_c_splint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': syntastic#c#ReadConfig(g:syntastic_splint_config_file),
+ \ 'args_after': '-showfunc -hints +quiet' })
let errorformat =
\ '%-G%f:%l:%v: %[%#]%[%#]%[%#] Internal Bug %.%#,' .
@@ -55,3 +52,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'c',
\ 'name': 'splint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/chef/foodcritic.vim b/bundle/syntastic/syntax_checkers/chef/foodcritic.vim
index 0808137b..e7773331 100644
--- a/bundle/syntastic/syntax_checkers/chef/foodcritic.vim
+++ b/bundle/syntastic/syntax_checkers/chef/foodcritic.vim
@@ -13,24 +13,27 @@
if exists("g:loaded_syntastic_chef_foodcritic_checker")
finish
endif
-let g:loaded_syntastic_chef_foodcritic_checker=1
+let g:loaded_syntastic_chef_foodcritic_checker = 1
-function! SyntaxCheckers_chef_foodcritic_IsAvailable()
- return executable('foodcritic')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_chef_foodcritic_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'foodcritic',
- \ 'filetype': 'chef',
- \ 'subchecker': 'foodcritic' })
+function! SyntaxCheckers_chef_foodcritic_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
" FC023: Prefer conditional attributes: ./recipes/config.rb:49
let errorformat = 'FC%n: %m: %f:%l'
- return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'chef',
\ 'name': 'foodcritic'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/co/coco.vim b/bundle/syntastic/syntax_checkers/co/coco.vim
index eea98bb8..3ef5d967 100644
--- a/bundle/syntastic/syntax_checkers/co/coco.vim
+++ b/bundle/syntastic/syntax_checkers/co/coco.vim
@@ -9,26 +9,17 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_co_coco_checker")
finish
endif
-let g:loaded_syntastic_co_coco_checker=1
+let g:loaded_syntastic_co_coco_checker = 1
-"bail if the user doesnt have coco installed
-if !executable("coco")
- finish
-endif
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_co_coco_IsAvailable()
- return executable('coco')
-endfunction
-
-function! SyntaxCheckers_co_coco_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'coco',
- \ 'args': '-c -o /tmp',
- \ 'filetype': 'co',
- \ 'subchecker': 'coco' })
+function! SyntaxCheckers_co_coco_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-c -o /tmp' })
let errorformat =
\ '%EFailed at: %f,' .
@@ -36,9 +27,16 @@ function! SyntaxCheckers_co_coco_GetLocList()
\ '%EFailed at: %f,'.
\ '%Z%trror: Parse error on line %l: %m'
- return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'co',
\ 'name': 'coco'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/cobol/cobc.vim b/bundle/syntastic/syntax_checkers/cobol/cobc.vim
index 9399d432..73f5688d 100644
--- a/bundle/syntastic/syntax_checkers/cobol/cobc.vim
+++ b/bundle/syntastic/syntax_checkers/cobol/cobc.vim
@@ -16,22 +16,21 @@ if exists('g:loaded_syntastic_cobol_cobc_checker')
endif
let g:loaded_syntastic_cobol_cobc_checker = 1
-if !exists('g:syntastic_cobol_compiler')
- let g:syntastic_cobol_compiler = 'cobc'
+if !exists('g:syntastic_cobol_compiler_options')
+ let g:syntastic_cobol_compiler_options = ''
endif
-function! SyntaxCheckers_cobol_cobc_IsAvailable()
- return executable(g:syntastic_cobol_compiler)
-endfunction
-
let s:save_cpo = &cpo
set cpo&vim
-if !exists('g:syntastic_cobol_compiler_options')
- let g:syntastic_cobol_compiler_options = ''
-endif
+function! SyntaxCheckers_cobol_cobc_IsAvailable() dict
+ if !exists('g:syntastic_cobol_compiler')
+ let g:syntastic_cobol_compiler = self.getExec()
+ endif
+ return executable(expand(g:syntastic_cobol_compiler))
+endfunction
-function! SyntaxCheckers_cobol_cobc_GetLocList()
+function! SyntaxCheckers_cobol_cobc_GetLocList() dict
return syntastic#c#GetLocList('cobol', 'cobc', {
\ 'errorformat': '%f:%l: %trror: %m',
\ 'main_flags': '-fsyntax-only' })
@@ -39,7 +38,7 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'cobol',
- \ 'name': 'cobc'})
+ \ 'name': 'cobc' })
let &cpo = s:save_cpo
unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/coffee/coffee.vim b/bundle/syntastic/syntax_checkers/coffee/coffee.vim
index 67054df8..543647e3 100644
--- a/bundle/syntastic/syntax_checkers/coffee/coffee.vim
+++ b/bundle/syntastic/syntax_checkers/coffee/coffee.vim
@@ -12,22 +12,23 @@
"
" Note: this script requires CoffeeScript version 1.6.2 or newer.
"
+
if exists("g:loaded_syntastic_coffee_coffee_checker")
finish
endif
-let g:loaded_syntastic_coffee_coffee_checker=1
+let g:loaded_syntastic_coffee_coffee_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_coffee_coffee_IsAvailable()
- return executable("coffee") &&
- \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion('coffee --version 2>' . syntastic#util#DevNull()), [1,6,2])
+function! SyntaxCheckers_coffee_coffee_IsAvailable() dict
+ return executable(self.getExec()) &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(
+ \ self.getExecEscaped() . ' --version 2>' . syntastic#util#DevNull()), [1,6,2])
endfunction
-function! SyntaxCheckers_coffee_coffee_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'coffee',
- \ 'args': '-cp',
- \ 'filetype': 'coffee',
- \ 'subchecker': 'coffee' })
+function! SyntaxCheckers_coffee_coffee_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-cp' })
let errorformat =
\ '%E%f:%l:%c: %trror: %m,' .
@@ -40,9 +41,16 @@ function! SyntaxCheckers_coffee_coffee_GetLocList()
\ '%-Z%p^,' .
\ '%-G%.%#'
- return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'coffee',
\ 'name': 'coffee'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/coffee/coffeelint.vim b/bundle/syntastic/syntax_checkers/coffee/coffeelint.vim
index 2099359c..ccc6349a 100644
--- a/bundle/syntastic/syntax_checkers/coffee/coffeelint.vim
+++ b/bundle/syntastic/syntax_checkers/coffee/coffeelint.vim
@@ -9,21 +9,17 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_coffee_coffeelint_checker")
finish
endif
-let g:loaded_syntastic_coffee_coffeelint_checker=1
+let g:loaded_syntastic_coffee_coffeelint_checker = 1
-function! SyntaxCheckers_coffee_coffeelint_IsAvailable()
- return executable('coffeelint')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_coffee_coffeelint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'coffeelint',
- \ 'args': '--csv',
- \ 'filetype': 'coffee',
- \ 'subchecker': 'coffeelint' })
+function! SyntaxCheckers_coffee_coffeelint_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--csv' })
let errorformat =
\ '%f\,%l\,%\d%#\,%trror\,%m,' .
@@ -41,3 +37,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'coffee',
\ 'name': 'coffeelint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/coq/coqtop.vim b/bundle/syntastic/syntax_checkers/coq/coqtop.vim
index f1efa4d8..292bbaaa 100644
--- a/bundle/syntastic/syntax_checkers/coq/coqtop.vim
+++ b/bundle/syntastic/syntax_checkers/coq/coqtop.vim
@@ -13,18 +13,13 @@
if exists("g:loaded_syntastic_coq_coqtop_checker")
finish
endif
-let g:loaded_syntastic_coq_coqtop_checker=1
+let g:loaded_syntastic_coq_coqtop_checker = 1
-function! SyntaxCheckers_coq_coqtop_IsAvailable()
- return executable('coqtop')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_coq_coqtop_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'coqtop',
- \ 'args': '-noglob -batch -load-vernac-source',
- \ 'filetype': 'coq',
- \ 'subchecker': 'coqtop' })
+function! SyntaxCheckers_coq_coqtop_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-noglob -batch -load-vernac-source' })
let errorformat =
\ '%AFile \"%f\"\, line %l\, characters %c\-%.%#\:,'.
@@ -38,3 +33,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'coq',
\ 'name': 'coqtop'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/cpp/cppcheck.vim b/bundle/syntastic/syntax_checkers/cpp/cppcheck.vim
new file mode 100644
index 00000000..b4b9d344
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/cpp/cppcheck.vim
@@ -0,0 +1,31 @@
+"============================================================================
+"File: cppcheck.vim
+"Description: Syntax checking plugin for syntastic.vim using cppcheck.pl
+"Maintainer: LCD 47
+"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.
+"============================================================================
+"
+" 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")
+ finish
+endif
+let g:loaded_syntastic_cpp_cppcheck_checker = 1
+
+runtime! syntax_checkers/c/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'cpp',
+ \ 'name': 'cppcheck',
+ \ 'redirect': 'c/cppcheck'})
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/cpp/cpplint.vim b/bundle/syntastic/syntax_checkers/cpp/cpplint.vim
index 35e77ccc..60664343 100644
--- a/bundle/syntastic/syntax_checkers/cpp/cpplint.vim
+++ b/bundle/syntastic/syntax_checkers/cpp/cpplint.vim
@@ -31,30 +31,23 @@ if !exists('g:syntastic_cpp_cpplint_thres')
let g:syntastic_cpp_cpplint_thres = 5
endif
-if ! exists('g:syntastic_cpp_cpplint_args')
- let g:syntastic_cpp_cpplint_args = '--verbose=3'
-endif
-
-function! SyntaxCheckers_cpp_cpplint_IsAvailable()
- return executable('cpplint.py')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_cpp_cpplint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'cpplint.py',
- \ 'filetype': 'cpp',
- \ 'subchecker': 'cpplint' })
+function! SyntaxCheckers_cpp_cpplint_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args': '--verbose=3' })
let errorformat = '%A%f:%l: %m [%t],%-G%.%#'
let loclist = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
- \ 'subtype': 'Style' })
+ \ 'subtype': 'Style',
+ \ 'returns': [0, 1] })
" change error types according to the prescribed threshold
- for n in range(len(loclist))
- let loclist[n]['type'] = loclist[n]['type'] < g:syntastic_cpp_cpplint_thres ? 'W' : 'E'
+ for e in loclist
+ let e['type'] = e['type'] < g:syntastic_cpp_cpplint_thres ? 'W' : 'E'
endfor
return loclist
@@ -62,4 +55,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'cpp',
- \ 'name': 'cpplint'})
+ \ 'name': 'cpplint',
+ \ 'exec': 'cpplint.py'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/cpp/gcc.vim b/bundle/syntastic/syntax_checkers/cpp/gcc.vim
index de1fa657..c8d77996 100644
--- a/bundle/syntastic/syntax_checkers/cpp/gcc.vim
+++ b/bundle/syntastic/syntax_checkers/cpp/gcc.vim
@@ -15,22 +15,21 @@ if exists('g:loaded_syntastic_cpp_gcc_checker')
endif
let g:loaded_syntastic_cpp_gcc_checker = 1
-if !exists('g:syntastic_cpp_compiler')
- let g:syntastic_cpp_compiler = 'g++'
+if !exists('g:syntastic_cpp_compiler_options')
+ let g:syntastic_cpp_compiler_options = ''
endif
-function! SyntaxCheckers_cpp_gcc_IsAvailable()
- return executable(g:syntastic_cpp_compiler)
-endfunction
-
let s:save_cpo = &cpo
set cpo&vim
-if !exists('g:syntastic_cpp_compiler_options')
- let g:syntastic_cpp_compiler_options = ''
-endif
+function! SyntaxCheckers_cpp_gcc_IsAvailable() dict
+ if !exists('g:syntastic_cpp_compiler')
+ let g:syntastic_cpp_compiler = executable(self.getExec()) ? self.getExec() : 'clang++'
+ endif
+ return executable(expand(g:syntastic_cpp_compiler))
+endfunction
-function! SyntaxCheckers_cpp_gcc_GetLocList()
+function! SyntaxCheckers_cpp_gcc_GetLocList() dict
return syntastic#c#GetLocList('cpp', 'gcc', {
\ 'errorformat':
\ '%-G%f:%s:,' .
@@ -47,7 +46,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'cpp',
- \ 'name': 'gcc'})
+ \ 'name': 'gcc',
+ \ 'exec': 'g++' })
let &cpo = s:save_cpo
unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/cpp/oclint.vim b/bundle/syntastic/syntax_checkers/cpp/oclint.vim
index 867f15de..b467cd75 100644
--- a/bundle/syntastic/syntax_checkers/cpp/oclint.vim
+++ b/bundle/syntastic/syntax_checkers/cpp/oclint.vim
@@ -21,16 +21,11 @@ if exists("g:loaded_syntastic_cpp_oclint_checker")
endif
let g:loaded_syntastic_cpp_oclint_checker = 1
-function! SyntaxCheckers_cpp_oclint_IsAvailable()
- return SyntaxCheckers_c_oclint_IsAvailable()
-endfunction
-
-function! SyntaxCheckers_cpp_oclint_GetLocList()
- return SyntaxCheckers_c_oclint_GetLocList()
-endfunction
+runtime! syntax_checkers/c/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'cpp',
- \ 'name': 'oclint'})
+ \ 'name': 'oclint',
+ \ 'redirect': 'c/oclint'})
-runtime! syntax_checkers/c/*.vim
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/cs/mcs.vim b/bundle/syntastic/syntax_checkers/cs/mcs.vim
index b3c96a95..d7662a1c 100644
--- a/bundle/syntastic/syntax_checkers/cs/mcs.vim
+++ b/bundle/syntastic/syntax_checkers/cs/mcs.vim
@@ -13,18 +13,13 @@
if exists("g:loaded_syntastic_cs_mcs_checker")
finish
endif
-let g:loaded_syntastic_cs_mcs_checker=1
+let g:loaded_syntastic_cs_mcs_checker = 1
-function! SyntaxCheckers_cs_mcs_IsAvailable()
- return executable('mcs')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_cs_mcs_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'mcs',
- \ 'args': '--parse',
- \ 'filetype': 'cs',
- \ 'subchecker': 'mcs' })
+function! SyntaxCheckers_cs_mcs_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--parse' })
let errorformat = '%f(%l\,%c): %trror %m'
@@ -37,3 +32,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'cs',
\ 'name': 'mcs'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/css/csslint.vim b/bundle/syntastic/syntax_checkers/css/csslint.vim
index 9093d982..fe84aaa1 100644
--- a/bundle/syntastic/syntax_checkers/css/csslint.vim
+++ b/bundle/syntastic/syntax_checkers/css/csslint.vim
@@ -17,26 +17,19 @@
if exists('g:loaded_syntastic_css_csslint_checker')
finish
endif
-let g:loaded_syntastic_css_csslint_checker=1
-
-if !exists('g:syntastic_csslint_exec')
- let g:syntastic_csslint_exec = 'csslint'
-endif
+let g:loaded_syntastic_css_csslint_checker = 1
if !exists('g:syntastic_csslint_options')
let g:syntastic_csslint_options = ''
endif
-function! SyntaxCheckers_css_csslint_IsAvailable()
- return executable(expand(g:syntastic_csslint_exec))
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_css_csslint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': expand(g:syntastic_csslint_exec),
- \ 'args': '--format=compact ' . g:syntastic_csslint_options,
- \ 'filetype': 'css',
- \ 'subchecker': 'csslint' })
+function! SyntaxCheckers_css_csslint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': g:syntastic_csslint_options,
+ \ 'args_after': '--format=compact' })
" Print CSS Lint's error/warning messages from compact format. Ignores blank lines.
let errorformat =
@@ -56,3 +49,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'css',
\ 'name': 'csslint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/css/phpcs.vim b/bundle/syntastic/syntax_checkers/css/phpcs.vim
index ffcb7fee..86aefeb6 100644
--- a/bundle/syntastic/syntax_checkers/css/phpcs.vim
+++ b/bundle/syntastic/syntax_checkers/css/phpcs.vim
@@ -13,21 +13,17 @@
" See here for details of phpcs
" - phpcs (see http://pear.php.net/package/PHP_CodeSniffer)
"
+
if exists("g:loaded_syntastic_css_phpcs_checker")
finish
endif
-let g:loaded_syntastic_css_phpcs_checker=1
-
-function! SyntaxCheckers_css_phpcs_IsAvailable()
- return SyntaxCheckers_php_phpcs_IsAvailable()
-endfunction
+let g:loaded_syntastic_css_phpcs_checker = 1
-function! SyntaxCheckers_css_phpcs_GetLocList()
- return SyntaxCheckers_php_phpcs_GetLocList()
-endfunction
+runtime! syntax_checkers/php/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'css',
- \ 'name': 'phpcs'})
+ \ 'name': 'phpcs',
+ \ 'redirect': 'php/phpcs'})
-runtime! syntax_checkers/php/*.vim
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/css/prettycss.vim b/bundle/syntastic/syntax_checkers/css/prettycss.vim
index efc549a7..10d6af3d 100644
--- a/bundle/syntastic/syntax_checkers/css/prettycss.vim
+++ b/bundle/syntastic/syntax_checkers/css/prettycss.vim
@@ -18,25 +18,21 @@
if exists("g:loaded_syntastic_css_prettycss_checker")
finish
endif
-let g:loaded_syntastic_css_prettycss_checker=1
+let g:loaded_syntastic_css_prettycss_checker = 1
-function! SyntaxCheckers_css_prettycss_IsAvailable()
- return executable('prettycss')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
function! SyntaxCheckers_css_prettycss_GetHighlightRegex(item)
let term = matchstr(a:item["text"], '\m (\zs[^)]\+\ze)$')
if term != ''
- let term = '\V' . term
+ let term = '\V' . escape(term, '\')
endif
return term
endfunction
-function! SyntaxCheckers_css_prettycss_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'prettycss',
- \ 'filetype': 'css',
- \ 'subchecker': 'prettycss' })
+function! SyntaxCheckers_css_prettycss_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
" Print CSS Lint's error/warning messages from compact format. Ignores blank lines.
let errorformat =
@@ -50,8 +46,8 @@ function! SyntaxCheckers_css_prettycss_GetLocList()
\ 'defaults': {'bufnr': bufnr("")},
\ 'postprocess': ['sort'] })
- for n in range(len(loclist))
- let loclist[n]["text"] .= ')'
+ for e in loclist
+ let e["text"] .= ')'
endfor
return loclist
@@ -60,3 +56,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'css',
\ 'name': 'prettycss'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/cucumber/cucumber.vim b/bundle/syntastic/syntax_checkers/cucumber/cucumber.vim
index 4458c78f..c06a06e5 100644
--- a/bundle/syntastic/syntax_checkers/cucumber/cucumber.vim
+++ b/bundle/syntastic/syntax_checkers/cucumber/cucumber.vim
@@ -13,18 +13,13 @@
if exists("g:loaded_syntastic_cucumber_cucumber_checker")
finish
endif
-let g:loaded_syntastic_cucumber_cucumber_checker=1
+let g:loaded_syntastic_cucumber_cucumber_checker = 1
-function! SyntaxCheckers_cucumber_cucumber_IsAvailable()
- return executable('cucumber')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_cucumber_cucumber_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'cucumber',
- \ 'args': '--dry-run --quiet --strict --format pretty',
- \ 'filetype': 'cucumber',
- \ 'subchecker': 'cucumber' })
+function! SyntaxCheckers_cucumber_cucumber_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--dry-run --quiet --strict --format pretty' })
let errorformat =
\ '%f:%l:%c:%m,' .
@@ -40,3 +35,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'cucumber',
\ 'name': 'cucumber'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/cuda/nvcc.vim b/bundle/syntastic/syntax_checkers/cuda/nvcc.vim
index 8f99b0dc..f93332b1 100644
--- a/bundle/syntastic/syntax_checkers/cuda/nvcc.vim
+++ b/bundle/syntastic/syntax_checkers/cuda/nvcc.vim
@@ -18,25 +18,25 @@
"
" let g:syntastic_cuda_arch = "sm_20"
-
if exists("g:loaded_syntastic_cuda_nvcc_checker")
finish
endif
-let g:loaded_syntastic_cuda_nvcc_checker=1
+let g:loaded_syntastic_cuda_nvcc_checker = 1
-function! SyntaxCheckers_cuda_nvcc_IsAvailable()
- return executable('nvcc')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_cuda_nvcc_GetLocList()
+function! SyntaxCheckers_cuda_nvcc_GetLocList() dict
if exists('g:syntastic_cuda_arch')
let arch_flag = '-arch=' . g:syntastic_cuda_arch
else
let arch_flag = ''
endif
let makeprg =
- \ 'nvcc ' . arch_flag . ' --cuda -O0 -I . -Xcompiler -fsyntax-only ' .
+ \ self.getExecEscaped() . ' ' . arch_flag .
+ \ ' --cuda -O0 -I . -Xcompiler -fsyntax-only ' .
\ syntastic#util#shexpand('%') . ' ' . syntastic#c#NullOutput()
+
let errorformat =
\ '%*[^"]"%f"%*\D%l: %m,'.
\ '"%f"%*\D%l: %m,'.
@@ -57,7 +57,8 @@ function! SyntaxCheckers_cuda_nvcc_GetLocList()
if exists('g:syntastic_cuda_check_header')
let makeprg =
\ 'echo > .syntastic_dummy.cu ; ' .
- \ 'nvcc ' . arch_flag . ' --cuda -O0 -I . .syntastic_dummy.cu -Xcompiler -fsyntax-only -include ' .
+ \ self.getExecEscaped() . ' ' . arch_flag .
+ \ ' --cuda -O0 -I . .syntastic_dummy.cu -Xcompiler -fsyntax-only -include ' .
\ syntastic#util#shexpand('%') . ' ' . syntastic#c#NullOutput()
else
return []
@@ -70,3 +71,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'cuda',
\ 'name': 'nvcc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/d/dmd.vim b/bundle/syntastic/syntax_checkers/d/dmd.vim
index 894ec6d7..4f70979b 100644
--- a/bundle/syntastic/syntax_checkers/d/dmd.vim
+++ b/bundle/syntastic/syntax_checkers/d/dmd.vim
@@ -20,22 +20,21 @@ if exists('g:loaded_syntastic_d_dmd_checker')
endif
let g:loaded_syntastic_d_dmd_checker = 1
-if !exists('g:syntastic_d_compiler')
- let g:syntastic_d_compiler = 'dmd'
+if !exists('g:syntastic_d_compiler_options')
+ let g:syntastic_d_compiler_options = ''
endif
-function! SyntaxCheckers_d_dmd_IsAvailable()
- return executable(g:syntastic_d_compiler)
-endfunction
-
let s:save_cpo = &cpo
set cpo&vim
-if !exists('g:syntastic_d_compiler_options')
- let g:syntastic_d_compiler_options = ''
-endif
+function! SyntaxCheckers_d_dmd_IsAvailable() dict
+ if !exists('g:syntastic_d_compiler')
+ let g:syntastic_d_compiler = self.getExec()
+ endif
+ return executable(expand(g:syntastic_d_compiler))
+endfunction
-function! SyntaxCheckers_d_dmd_GetLocList()
+function! SyntaxCheckers_d_dmd_GetLocList() dict
return syntastic#c#GetLocList('d', 'dmd', {
\ 'errorformat':
\ '%-G%f:%s:,%f(%l): %m,' .
@@ -46,7 +45,7 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'd',
- \ 'name': 'dmd'})
+ \ 'name': 'dmd' })
let &cpo = s:save_cpo
unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/dart/dart_analyzer.vim b/bundle/syntastic/syntax_checkers/dart/dart_analyzer.vim
deleted file mode 100644
index a0835c41..00000000
--- a/bundle/syntastic/syntax_checkers/dart/dart_analyzer.vim
+++ /dev/null
@@ -1,66 +0,0 @@
-"============================================================================
-"File: dart_analyzer.vim
-"Description: Dart syntax checker - using dart_analyzer
-"Maintainer: Maksim Ryzhikov
-"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_dart_dart_analyzer_checker")
- finish
-endif
-let g:loaded_syntastic_dart_dart_analyzer_checker=1
-
-if !exists("g:syntastic_dart_analyzer_conf")
- let g:syntastic_dart_analyzer_conf = ''
-endif
-
-function! SyntaxCheckers_dart_dart_analyzer_IsAvailable()
- return executable("dart_analyzer")
-endfunction
-
-function! SyntaxCheckers_dart_dart_analyzer_GetHighlightRegex(error)
- let lcol = a:error['col'] - 1
- let rcol = a:error['nr'] + lcol + 1
-
- return '\%>'.lcol.'c\%<'.rcol.'c'
-endfunction
-
-function! SyntaxCheckers_dart_dart_analyzer_GetLocList()
- let args = !empty(g:syntastic_dart_analyzer_conf) ? ' ' . g:syntastic_dart_analyzer_conf : ''
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'dart_analyzer',
- \ 'args': '--error_format machine',
- \ 'post_args': args,
- \ 'filetype': 'dart',
- \ 'subchecker': 'dart_analyzer' })
-
- " Machine readable format looks like:
- " SEVERITY|TYPE|ERROR_CODE|file:FILENAME|LINE_NUMBER|COLUMN|LENGTH|MESSAGE
- " SEVERITY: (WARNING|ERROR)
- " TYPE: (RESOLVER|STATIC_TYPE|...)
- " ERROR_CODE: (NO_SUCH_TYPE|...)
- " FILENAME: String
- " LINE_NUMBER: int
- " COLUMN: int
- " LENGHT: int
- " MESSAGE: String
-
- " We use %n to grab the error length to be able to access it in the matcher.
- let commonformat = '|%.%#|%.%#|file:%f|%l|%c|%n|%m'
-
- " TODO(amouravski): simply take everything after ERROR|WARNING as a message
- " and then parse it by hand later.
- let errorformat = '%EERROR'.l:commonformat.','.
- \'%WWARNING'.l:commonformat
-
- return SyntasticMake({
- \ 'makeprg': makeprg,
- \ 'errorformat': errorformat })
-endfunction
-
-call g:SyntasticRegistry.CreateAndRegisterChecker({
- \ 'filetype': 'dart',
- \ 'name': 'dart_analyzer'})
diff --git a/bundle/syntastic/syntax_checkers/dart/dartanalyzer.vim b/bundle/syntastic/syntax_checkers/dart/dartanalyzer.vim
new file mode 100644
index 00000000..edf71df3
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/dart/dartanalyzer.vim
@@ -0,0 +1,76 @@
+"============================================================================
+"File: dartanalyzer.vim
+"Description: Dart syntax checker - using dartanalyzer
+"Maintainer: Maksim Ryzhikov
+"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_dart_dartanalyzer_checker")
+ finish
+endif
+let g:loaded_syntastic_dart_dartanalyzer_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_dart_dartanalyzer_GetHighlightRegex(error)
+ if a:error['len']
+ let lcol = a:error['col'] - 1
+ let rcol = a:error['col'] + a:error['len']
+ let ret = '\%>' . lcol . 'c\%<' . rcol . 'c'
+ else
+ let ret = ''
+ endif
+
+ return ret
+endfunction
+
+function! SyntaxCheckers_dart_dartanalyzer_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--machine' })
+
+ " Machine readable format looks like:
+ " SEVERITY|TYPE|ERROR_CODE|FILENAME|LINE_NUMBER|COLUMN|LENGTH|MESSAGE
+ " SEVERITY: (WARNING|ERROR)
+ " TYPE: (RESOLVER|STATIC_TYPE|...)
+ " ERROR_CODE: (NO_SUCH_TYPE|...)
+ " FILENAME: String
+ " LINE_NUMBER: int
+ " COLUMN: int
+ " LENGTH: int
+ " MESSAGE: String
+
+ " We use %n to grab the error length, for the syntax highlighter
+ let commonformat = '|%.%#|%.%#|%f|%l|%c|%n|%m'
+
+ let errorformat =
+ \ '%EERROR' . commonformat . ',' .
+ \ '%WWARNING' . commonformat
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 1, 2] })
+
+ for e in loclist
+ let e['text'] = substitute(e['text'], '\m\\\([\\|]\)', '\1', 'g')
+
+ " Undo the %n hack
+ let e['len'] = e['nr']
+ call remove(e, 'nr')
+ endfor
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'dart',
+ \ 'name': 'dartanalyzer' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/docbk/xmllint.vim b/bundle/syntastic/syntax_checkers/docbk/xmllint.vim
index cc0e3e35..bfb9da0a 100644
--- a/bundle/syntastic/syntax_checkers/docbk/xmllint.vim
+++ b/bundle/syntastic/syntax_checkers/docbk/xmllint.vim
@@ -13,18 +13,13 @@
if exists("g:loaded_syntastic_docbk_xmllint_checker")
finish
endif
-let g:loaded_syntastic_docbk_xmllint_checker=1
+let g:loaded_syntastic_docbk_xmllint_checker = 1
-function! SyntaxCheckers_docbk_xmllint_IsAvailable()
- return SyntaxCheckers_xml_xmllint_IsAvailable()
-endfunction
-
-function! SyntaxCheckers_docbk_xmllint_GetLocList()
- return SyntaxCheckers_xml_xmllint_GetLocList()
-endfunction
+runtime! syntax_checkers/xml/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'docbk',
- \ 'name': 'xmllint'})
+ \ 'name': 'xmllint',
+ \ 'redirect': 'xml/xmllint'})
-runtime! syntax_checkers/xml/*.vim
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/dustjs/swiffer.vim b/bundle/syntastic/syntax_checkers/dustjs/swiffer.vim
index 466a4999..0bdf2813 100644
--- a/bundle/syntastic/syntax_checkers/dustjs/swiffer.vim
+++ b/bundle/syntastic/syntax_checkers/dustjs/swiffer.vim
@@ -15,15 +15,11 @@ endif
let g:loaded_syntastic_dustjs_swiffer_checker = 1
-function! SyntaxCheckers_dustjs_swiffer_IsAvailable()
- return executable('swiffer')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_dustjs_swiffer_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'swiffer',
- \ 'subchecker': 'swiffer',
- \ 'filetype': 'dustjs' })
+function! SyntaxCheckers_dustjs_swiffer_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat = '%E%f - Line %l\, Column %c: %m'
@@ -35,3 +31,8 @@ function! SyntaxCheckers_dustjs_swiffer_GetLocList()
call SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'dustjs',
\ 'name': 'swiffer'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/elixir/elixir.vim b/bundle/syntastic/syntax_checkers/elixir/elixir.vim
index 521e9456..566131d5 100644
--- a/bundle/syntastic/syntax_checkers/elixir/elixir.vim
+++ b/bundle/syntastic/syntax_checkers/elixir/elixir.vim
@@ -9,17 +9,21 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_elixir_elixir_checker")
finish
endif
-let g:loaded_syntastic_elixir_elixir_checker=1
+let g:loaded_syntastic_elixir_elixir_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
" TODO: we should probably split this into separate checkers
-function! SyntaxCheckers_elixir_elixir_IsAvailable()
+function! SyntaxCheckers_elixir_elixir_IsAvailable() dict
return executable('elixir') && executable('mix')
endfunction
-function! SyntaxCheckers_elixir_elixir_GetLocList()
+function! SyntaxCheckers_elixir_elixir_GetLocList() dict
let make_options = {}
let compile_command = 'elixir'
@@ -30,10 +34,7 @@ function! SyntaxCheckers_elixir_elixir_GetLocList()
let make_options['cwd'] = fnamemodify(mix_file, ':p:h')
endif
- let make_options['makeprg'] = syntastic#makeprg#build({
- \ 'exe': compile_command,
- \ 'filetype': 'elixir',
- \ 'subchecker': 'elixir' })
+ let make_options['makeprg'] = self.makeprgBuild({ 'exe': compile_command })
let make_options['errorformat'] = '** %*[^\ ] %f:%l: %m'
@@ -43,3 +44,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'elixir',
\ 'name': 'elixir'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/erlang/erlang_check_file.erl b/bundle/syntastic/syntax_checkers/erlang/erlang_check_file.erl
index 01622d9e..bd94870b 100755
--- a/bundle/syntastic/syntax_checkers/erlang/erlang_check_file.erl
+++ b/bundle/syntastic/syntax_checkers/erlang/erlang_check_file.erl
@@ -2,10 +2,11 @@
-export([main/1]).
main([FileName]) ->
- LibDirs = filelib:wildcard("{lib,deps}/*/ebin"),
+ LibDirs = (["ebin", "include", "src", "test"] ++
+ filelib:wildcard("{apps,deps,lib}/*/{ebin,include}")),
compile(FileName, LibDirs);
-main([FileName | ["-rebar" | [Path | LibDirs]]]) ->
+main([FileName, "-rebar", Path, LibDirs]) ->
{ok, L} = file:consult(Path),
P = dict:from_list(L),
Root = filename:dirname(Path),
@@ -31,23 +32,20 @@ main([FileName | ["-rebar" | [Path | LibDirs]]]) ->
%io:format("~p~n", [LibDirs1]),
compile(FileName, LibDirs1);
-main([FileName | LibDirs]) ->
+main([FileName, LibDirs]) ->
compile(FileName, LibDirs).
compile(FileName, LibDirs) ->
Root = get_root(filename:dirname(FileName)),
ok = code:add_pathsa(LibDirs),
- compile:file(FileName, [warn_obsolete_guard,
- warn_unused_import,
- warn_shadow_vars,
- warn_export_vars,
- strong_validation,
- report,
- {i, filename:join(Root, "include")},
- {i, filename:join(Root, "deps")},
- {i, filename:join(Root, "apps")},
- {i, filename:join(Root, "lib")}
- ]).
+ compile:file(FileName,
+ [warn_obsolete_guard,
+ warn_unused_import,
+ warn_shadow_vars,
+ warn_export_vars,
+ strong_validation,
+ report] ++
+ [{i, filename:join(Root, I)} || I <- LibDirs]).
get_root(Dir) ->
Path = filename:split(filename:absname(Dir)),
diff --git a/bundle/syntastic/syntax_checkers/erlang/escript.vim b/bundle/syntastic/syntax_checkers/erlang/escript.vim
index 9c409a59..ed299ec8 100644
--- a/bundle/syntastic/syntax_checkers/erlang/escript.vim
+++ b/bundle/syntastic/syntax_checkers/erlang/escript.vim
@@ -19,32 +19,28 @@ if !exists('g:syntastic_erlc_include_path')
let g:syntastic_erlc_include_path = ''
endif
-let s:check_file = expand(':p:h') . '/erlang_check_file.erl'
+let s:check_file = syntastic#util#shescape(expand(':p:h') . syntastic#util#Slash() . 'erlang_check_file.erl')
-function! SyntaxCheckers_erlang_escript_IsAvailable()
- return executable('escript')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_erlang_escript_GetLocList()
+function! SyntaxCheckers_erlang_escript_GetLocList() dict
if expand('%:e') ==# 'hrl'
return []
endif
let shebang = syntastic#util#parseShebang()
- if shebang['exe'] ==# 'escript'
+ if shebang['exe'] =~# '\m\
+"File: syntaxerl.vim
+"Description: Syntax checking plugin for syntastic.
+"Maintainer: locojay
"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_objcpp_ycm_checker")
+if exists("g:loaded_syntastic_erlang_syntaxerl_checker")
finish
endif
-let g:loaded_syntastic_objcpp_ycm_checker = 1
-runtime! syntax_checkers/c/*.vim
+let g:loaded_syntastic_erlang_syntaxerl_checker = 1
-function! SyntaxCheckers_objcpp_ycm_IsAvailable()
- return SyntaxCheckers_c_ycm_IsAvailable()
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-if !exists('g:loaded_youcompleteme')
- finish
-endif
-function! SyntaxCheckers_objcpp_ycm_GetLocList()
- return SyntaxCheckers_c_ycm_GetLocList()
+function! SyntaxCheckers_erlang_syntaxerl_GetLocList() dict
+
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat =
+ \ '%W%f:%l: warning: %m,'.
+ \ '%E%f:%l: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
- \ 'filetype': 'objcpp',
- \ 'name': 'ycm'})
+ \ 'filetype': 'erlang',
+ \ 'name': 'syntaxerl'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/eruby/ruby.vim b/bundle/syntastic/syntax_checkers/eruby/ruby.vim
index dc496955..34dc9bdc 100644
--- a/bundle/syntastic/syntax_checkers/eruby/ruby.vim
+++ b/bundle/syntastic/syntax_checkers/eruby/ruby.vim
@@ -13,26 +13,28 @@
if exists("g:loaded_syntastic_eruby_ruby_checker")
finish
endif
-let g:loaded_syntastic_eruby_ruby_checker=1
+let g:loaded_syntastic_eruby_ruby_checker = 1
-if !exists("g:syntastic_ruby_exec")
- let g:syntastic_ruby_exec = "ruby"
-endif
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_eruby_ruby_IsAvailable()
+function! SyntaxCheckers_eruby_ruby_IsAvailable() dict
+ if !exists("g:syntastic_ruby_exec")
+ let g:syntastic_ruby_exec = self.getExec()
+ endif
return executable(expand(g:syntastic_ruby_exec))
endfunction
-function! SyntaxCheckers_eruby_ruby_GetLocList()
- let exe = expand(g:syntastic_ruby_exec)
- if !has('win32')
+function! SyntaxCheckers_eruby_ruby_GetLocList() dict
+ let exe = syntastic#util#shexpand(g:syntastic_ruby_exec)
+ if !syntastic#util#isRunningWindows()
let exe = 'RUBYOPT= ' . exe
endif
let fname = "'" . escape(expand('%'), "\\'") . "'"
" TODO: encodings became useful in ruby 1.9 :)
- if syntastic#util#versionIsAtLeast(syntastic#util#getVersion('ruby --version'), [1, 9])
+ if syntastic#util#versionIsAtLeast(syntastic#util#getVersion(exe . ' --version'), [1, 9])
let enc = &fileencoding != '' ? &fileencoding : &encoding
let encoding_spec = ', :encoding => "' . (enc ==? 'utf-8' ? 'UTF-8' : 'BINARY') . '"'
else
@@ -63,3 +65,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'eruby',
\ 'name': 'ruby'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/fortran/gfortran.vim b/bundle/syntastic/syntax_checkers/fortran/gfortran.vim
index 002ad9c3..ce0d1aa0 100644
--- a/bundle/syntastic/syntax_checkers/fortran/gfortran.vim
+++ b/bundle/syntastic/syntax_checkers/fortran/gfortran.vim
@@ -15,22 +15,21 @@ if exists("g:loaded_syntastic_fortran_gfortran_checker")
endif
let g:loaded_syntastic_fortran_gfortran_checker=1
-if !exists('g:syntastic_fortran_compiler')
- let g:syntastic_fortran_compiler = 'gfortran'
+if !exists('g:syntastic_fortran_compiler_options')
+ let g:syntastic_fortran_compiler_options = ''
endif
-function! SyntaxCheckers_fortran_gfortran_IsAvailable()
- return executable(g:syntastic_fortran_compiler)
-endfunction
-
let s:save_cpo = &cpo
set cpo&vim
-if !exists('g:syntastic_fortran_compiler_options')
- let g:syntastic_fortran_compiler_options = ''
-endif
+function! SyntaxCheckers_fortran_gfortran_IsAvailable() dict
+ if !exists('g:syntastic_fortran_compiler')
+ let g:syntastic_fortran_compiler = self.getExec()
+ endif
+ return executable(expand(g:syntastic_fortran_compiler))
+endfunction
-function! SyntaxCheckers_fortran_gfortran_GetLocList()
+function! SyntaxCheckers_fortran_gfortran_GetLocList() dict
return syntastic#c#GetLocList('fortran', 'gfortran', {
\ 'errorformat':
\ '%-C %#,'.
@@ -44,7 +43,7 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'fortran',
- \ 'name': 'gfortran'})
+ \ 'name': 'gfortran' })
let &cpo = s:save_cpo
unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/glsl/cgc.vim b/bundle/syntastic/syntax_checkers/glsl/cgc.vim
new file mode 100644
index 00000000..43b9069a
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/glsl/cgc.vim
@@ -0,0 +1,77 @@
+"============================================================================
+"File: glsl.vim
+"Description: Syntax checker for OpenGL Shading Language
+"Maintainer: Joshua Rahm
+"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_glsl_cgc_checker")
+ finish
+endif
+let g:loaded_syntastic_glsl_cgc_checker = 1
+
+let s:glsl_extensions = {
+ \ 'glslf': 'gpu_fp',
+ \ 'glslv': 'gpu_vp',
+ \ 'frag': 'gpu_fp',
+ \ 'vert': 'gpu_vp',
+ \ 'fp': 'gpu_fp',
+ \ 'vp': 'gpu_vp'
+ \ }
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_glsl_cgc_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_before': '-oglsl -profile ' . s:GetProfile(),
+ \ 'args': (exists('g:syntastic_glsl_options') ? ' ' . g:syntastic_glsl_options : '') })
+
+ let errorformat =
+ \ "%E%f(%l) : error %m," .
+ \ "%W%f(%l) : warning %m"
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+function! s:GetProfile()
+ let save_view = winsaveview()
+ let old_foldenable = &foldenable
+ let old_lazyredraw = &lazyredraw
+
+ let &lazyredraw = 1
+ let &foldenable = 0
+ call cursor(1, 1)
+
+ let magic = '\m\C^// profile:\s*'
+ let line = search(magic, 'c')
+
+ call winrestview(save_view)
+ let &foldenable = old_foldenable
+ let &lazyredraw = old_lazyredraw
+
+ if line
+ let profile = matchstr(getline(line), magic . '\zs.*')
+ else
+ let extensions = exists('g:syntastic_glsl_extensions') ? g:syntastic_glsl_extensions : s:glsl_extensions
+ let profile = get(extensions, tolower(expand('%:e')), 'gpu_vert')
+ endif
+
+ return profile
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \'filetype': 'glsl',
+ \'name': 'cgc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/go/go.vim b/bundle/syntastic/syntax_checkers/go/go.vim
index aa0427e3..868d7140 100644
--- a/bundle/syntastic/syntax_checkers/go/go.vim
+++ b/bundle/syntastic/syntax_checkers/go/go.vim
@@ -12,25 +12,27 @@
" Use a BufWritePre autocommand to that end:
" autocmd FileType go autocmd BufWritePre Fmt
"============================================================================
+
if exists("g:loaded_syntastic_go_go_checker")
finish
endif
-let g:loaded_syntastic_go_go_checker=1
+let g:loaded_syntastic_go_go_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_go_go_IsAvailable()
- return executable('go')
+function! SyntaxCheckers_go_go_IsAvailable() dict
+ return executable('go') && executable('gofmt')
endfunction
-function! SyntaxCheckers_go_go_GetLocList()
+function! SyntaxCheckers_go_go_GetLocList() dict
" Check with gofmt first, since `go build` and `go test` might not report
" syntax errors in the current file if another file with syntax error is
" compiled first.
- let makeprg = syntastic#makeprg#build({
+ let makeprg = self.makeprgBuild({
\ 'exe': 'gofmt',
\ 'args': '-l',
- \ 'tail': '1>' . syntastic#util#DevNull(),
- \ 'filetype': 'go',
- \ 'subchecker': 'go' })
+ \ 'tail': '> ' . syntastic#util#DevNull() })
let errorformat =
\ '%f:%l:%c: %m,' .
@@ -46,13 +48,17 @@ function! SyntaxCheckers_go_go_GetLocList()
" 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.
- if match(expand('%'), '_test.go$') == -1
+ if match(expand('%'), '\m_test\.go$') == -1
let makeprg = 'go build ' . syntastic#c#NullOutput()
+ let cleanup = 0
else
let makeprg = 'go test -c ' . syntastic#c#NullOutput()
+ let cleanup = 1
endif
+ " The first pattern is for warnings from C compilers.
let errorformat =
+ \ '%W%f:%l: warning: %m,' .
\ '%E%f:%l:%c:%m,' .
\ '%E%f:%l:%m,' .
\ '%C%\s%\+%m,' .
@@ -68,9 +74,18 @@ function! SyntaxCheckers_go_go_GetLocList()
\ 'cwd': expand('%:p:h'),
\ 'defaults': {'type': 'e'} })
+ if cleanup
+ call delete(expand('%:p:h') . syntastic#util#Slash() . expand('%:p:h:t') . '.test')
+ endif
+
return errors
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'go',
\ 'name': 'go'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/go/gofmt.vim b/bundle/syntastic/syntax_checkers/go/gofmt.vim
index b150916f..62b86cbc 100644
--- a/bundle/syntastic/syntax_checkers/go/gofmt.vim
+++ b/bundle/syntastic/syntax_checkers/go/gofmt.vim
@@ -12,22 +12,19 @@
" Use a BufWritePre autocommand to that end:
" autocmd FileType go autocmd BufWritePre Fmt
"============================================================================
+
if exists("g:loaded_syntastic_go_gofmt_checker")
finish
endif
-let g:loaded_syntastic_go_gofmt_checker=1
+let g:loaded_syntastic_go_gofmt_checker = 1
-function! SyntaxCheckers_go_gofmt_IsAvailable()
- return executable('gofmt')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_go_gofmt_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'gofmt',
- \ 'args': '-l',
- \ 'tail': '1>' . syntastic#util#DevNull(),
- \ 'filetype': 'go',
- \ 'subchecker': 'gofmt' })
+function! SyntaxCheckers_go_gofmt_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '-l',
+ \ 'tail_after': '> ' . syntastic#util#DevNull() })
let errorformat = '%f:%l:%c: %m,%-G%.%#'
@@ -40,3 +37,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'go',
\ 'name': 'gofmt'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/go/golint.vim b/bundle/syntastic/syntax_checkers/go/golint.vim
index 954a7c2a..c4107016 100644
--- a/bundle/syntastic/syntax_checkers/go/golint.vim
+++ b/bundle/syntastic/syntax_checkers/go/golint.vim
@@ -9,20 +9,17 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_go_golint_checker")
finish
endif
-let g:loaded_syntastic_go_golint_checker=1
+let g:loaded_syntastic_go_golint_checker = 1
-function! SyntaxCheckers_go_golint_IsAvailable()
- return executable('golint')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_go_golint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'golint',
- \ 'filetype': 'go',
- \ 'subchecker': 'golint' })
+function! SyntaxCheckers_go_golint_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat = '%f:%l:%c: %m,%-G%.%#'
@@ -35,3 +32,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'go',
\ 'name': 'golint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/go/gotype.vim b/bundle/syntastic/syntax_checkers/go/gotype.vim
new file mode 100644
index 00000000..010766e0
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/go/gotype.vim
@@ -0,0 +1,48 @@
+"============================================================================
+"File: gotype.vim
+"Description: Perform syntactic and semantic checking of Go code using 'gotype'
+"Maintainer: luz
+"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_go_gotype_checker")
+ finish
+endif
+let g:loaded_syntastic_go_gotype_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_go_gotype_GetLocList() dict
+ let makeprg = self.getExecEscaped() . ' .'
+
+ let errorformat =
+ \ '%f:%l:%c: %m,' .
+ \ '%-G%.%#'
+
+ " gotype needs the full go package to test types properly. Just cwd to
+ " the package for the same reasons specified in go.vim ("figuring out
+ " the import path is fickle").
+
+ let errors = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'cwd': expand('%:p:h'),
+ \ 'defaults': {'type': 'e'} })
+
+ return errors
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'go',
+ \ 'name': 'gotype'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/go/govet.vim b/bundle/syntastic/syntax_checkers/go/govet.vim
index 4b1d7efb..080204a1 100644
--- a/bundle/syntastic/syntax_checkers/go/govet.vim
+++ b/bundle/syntastic/syntax_checkers/go/govet.vim
@@ -9,16 +9,20 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_go_govet_checker")
finish
endif
-let g:loaded_syntastic_go_govet_checker=1
+let g:loaded_syntastic_go_govet_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_go_govet_IsAvailable()
+function! SyntaxCheckers_go_govet_IsAvailable() dict
return executable('go')
endfunction
-function! SyntaxCheckers_go_govet_GetLocList()
+function! SyntaxCheckers_go_govet_GetLocList() dict
let makeprg = 'go vet'
let errorformat = '%Evet: %.%\+: %f:%l:%c: %m,%W%f:%l: %m,%-G%.%#'
@@ -38,3 +42,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'go',
\ 'name': 'govet'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/haml/haml.vim b/bundle/syntastic/syntax_checkers/haml/haml.vim
index 8371055f..b01143e9 100644
--- a/bundle/syntastic/syntax_checkers/haml/haml.vim
+++ b/bundle/syntastic/syntax_checkers/haml/haml.vim
@@ -13,22 +13,22 @@
if exists('g:loaded_syntastic_haml_haml_checker')
finish
endif
-let g:loaded_syntastic_haml_haml_checker=1
+let g:loaded_syntastic_haml_haml_checker = 1
-if !exists('g:syntastic_haml_interpreter')
- let g:syntastic_haml_interpreter = 'haml'
-endif
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_haml_haml_IsAvailable()
+function! SyntaxCheckers_haml_haml_IsAvailable() dict
+ if !exists('g:syntastic_haml_interpreter')
+ let g:syntastic_haml_interpreter = self.getExec()
+ endif
return executable(expand(g:syntastic_haml_interpreter))
endfunction
-function! SyntaxCheckers_haml_haml_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': expand(g:syntastic_haml_interpreter),
- \ 'args': '-c',
- \ 'filetype': 'haml',
- \ 'subchecker': 'haml' })
+function! SyntaxCheckers_haml_haml_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'exe': syntastic#util#shexpand(g:syntastic_haml_interpreter),
+ \ 'args_after': '-c' })
let errorformat =
\ 'Haml error on line %l: %m,' .
@@ -43,3 +43,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'haml',
\ 'name': 'haml'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/haml/haml_lint.vim b/bundle/syntastic/syntax_checkers/haml/haml_lint.vim
new file mode 100644
index 00000000..160d9a5a
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/haml/haml_lint.vim
@@ -0,0 +1,37 @@
+"============================================================================
+"File: haml_lint.vim
+"Description: HAML style and syntax checker plugin for Syntastic
+"Maintainer: Shane da Silva
+"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_haml_haml_lint_checker")
+ finish
+endif
+let g:loaded_syntastic_haml_haml_lint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_haml_haml_lint_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+ let errorformat = '%f:%l [%t] %m'
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style'})
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'haml',
+ \ 'name': 'haml_lint',
+ \ 'exec': 'haml-lint' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/handlebars/handlebars.vim b/bundle/syntastic/syntax_checkers/handlebars/handlebars.vim
index e55ba43f..93c298f6 100644
--- a/bundle/syntastic/syntax_checkers/handlebars/handlebars.vim
+++ b/bundle/syntastic/syntax_checkers/handlebars/handlebars.vim
@@ -8,21 +8,17 @@
" 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_handlebars_handlebars_checker")
finish
endif
-let g:loaded_syntastic_handlebars_handlebars_checker=1
+let g:loaded_syntastic_handlebars_handlebars_checker = 1
-function! SyntaxCheckers_handlebars_handlebars_IsAvailable()
- return executable('handlebars')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_handlebars_handlebars_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'handlebars',
- \ 'args': '-f ' . syntastic#util#DevNull(),
- \ 'filetype': 'handlebars',
- \ 'subchecker': 'handlebars' })
+function! SyntaxCheckers_handlebars_handlebars_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-f ' . syntastic#util#DevNull() })
let errorformat =
\ '%EError: %m on line %l:,'.
@@ -39,3 +35,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'handlebars',
\ 'name': 'handlebars'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/haskell/ghc-mod.vim b/bundle/syntastic/syntax_checkers/haskell/ghc-mod.vim
index 3dcc6e7e..7a86ffa6 100644
--- a/bundle/syntastic/syntax_checkers/haskell/ghc-mod.vim
+++ b/bundle/syntastic/syntax_checkers/haskell/ghc-mod.vim
@@ -15,15 +15,22 @@ if exists('g:loaded_syntastic_haskell_ghc_mod_checker')
endif
let g:loaded_syntastic_haskell_ghc_mod_checker = 1
-function! SyntaxCheckers_haskell_ghc_mod_IsAvailable()
- return executable('ghc-mod')
+let s:ghc_mod_new = -1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_haskell_ghc_mod_IsAvailable() dict
+ " We need either a Vim version that can handle NULs in system() output,
+ " or a ghc-mod version that has the --boundary option.
+ let exe = self.getExec()
+ let s:ghc_mod_new = executable(exe) ? s:GhcModNew(exe) : -1
+ return (s:ghc_mod_new >= 0) && (v:version >= 704 || s:ghc_mod_new)
endfunction
-function! SyntaxCheckers_haskell_ghc_mod_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'ghc-mod check',
- \ 'filetype': 'haskell',
- \ 'subchecker': 'ghc_mod' })
+function! SyntaxCheckers_haskell_ghc_mod_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'exe': self.getExecEscaped() . ' check' . (s:ghc_mod_new ? ' --boundary=""' : '') })
let errorformat =
\ '%-G%\s%#,' .
@@ -38,9 +45,28 @@ function! SyntaxCheckers_haskell_ghc_mod_GetLocList()
return SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
- \ 'postprocess': ['compressWhitespace'] })
+ \ 'postprocess': ['compressWhitespace'],
+ \ 'returns': [0] })
+endfunction
+
+function! s:GhcModNew(exe)
+ let exe = syntastic#util#shescape(a:exe)
+ try
+ let ghc_mod_version = filter(split(system(exe), '\n'), 'v:val =~# ''\m^ghc-mod version''')[0]
+ let ret = syntastic#util#versionIsAtLeast(syntastic#util#parseVersion(ghc_mod_version), [2, 1, 2])
+ catch /\m^Vim\%((\a\+)\)\=:E684/
+ call syntastic#log#error("checker haskell/ghc_mod: can't parse version string (abnormal termination?)")
+ let ret = -1
+ endtry
+ return ret
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'haskell',
- \ 'name': 'ghc_mod'})
+ \ 'name': 'ghc_mod',
+ \ 'exec': 'ghc-mod' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/haskell/hdevtools.vim b/bundle/syntastic/syntax_checkers/haskell/hdevtools.vim
index 58b015f9..29abca7e 100644
--- a/bundle/syntastic/syntax_checkers/haskell/hdevtools.vim
+++ b/bundle/syntastic/syntax_checkers/haskell/hdevtools.vim
@@ -13,18 +13,15 @@
if exists("g:loaded_syntastic_haskell_hdevtools_checker")
finish
endif
-let g:loaded_syntastic_haskell_hdevtools_checker=1
+let g:loaded_syntastic_haskell_hdevtools_checker = 1
-function! SyntaxCheckers_haskell_hdevtools_IsAvailable()
- return executable('hdevtools')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_haskell_hdevtools_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'hdevtools check',
- \ 'args': get(g:, 'hdevtools_options', ''),
- \ 'filetype': 'haskell',
- \ 'subchecker': 'hdevtools' })
+function! SyntaxCheckers_haskell_hdevtools_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'exe': self.getExecEscaped() . ' check',
+ \ 'args': get(g:, 'hdevtools_options', '') })
let errorformat= '\%-Z\ %#,'.
\ '%W%f:%l:%c:\ Warning:\ %m,'.
@@ -45,3 +42,7 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'haskell',
\ 'name': 'hdevtools'})
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/haskell/hlint.vim b/bundle/syntastic/syntax_checkers/haskell/hlint.vim
index f9f0fcd4..e859d299 100644
--- a/bundle/syntastic/syntax_checkers/haskell/hlint.vim
+++ b/bundle/syntastic/syntax_checkers/haskell/hlint.vim
@@ -10,15 +10,11 @@ if exists('g:loaded_syntastic_haskell_hlint_checker')
endif
let g:loaded_syntastic_haskell_hlint_checker = 1
-function! SyntaxCheckers_haskell_hlint_IsAvailable()
- return executable('hlint')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_haskell_hlint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'hlint',
- \ 'filetype': 'haskell',
- \ 'subchecker': 'hlint' })
+function! SyntaxCheckers_haskell_hlint_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat =
\ '%E%f:%l:%c: Error: %m,' .
@@ -34,3 +30,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'haskell',
\ 'name': 'hlint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/haxe/haxe.vim b/bundle/syntastic/syntax_checkers/haxe/haxe.vim
index 969a9369..90589420 100644
--- a/bundle/syntastic/syntax_checkers/haxe/haxe.vim
+++ b/bundle/syntastic/syntax_checkers/haxe/haxe.vim
@@ -13,13 +13,12 @@
if exists("g:loaded_syntastic_haxe_haxe_checker")
finish
endif
-let g:loaded_syntastic_haxe_haxe_checker=1
+let g:loaded_syntastic_haxe_haxe_checker = 1
-function! SyntaxCheckers_haxe_haxe_IsAvailable()
- return executable('haxe')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_haxe_haxe_GetLocList()
+function! SyntaxCheckers_haxe_haxe_GetLocList() dict
if exists('b:vaxe_hxml')
let hxml = b:vaxe_hxml
elseif exists('g:vaxe_hxml')
@@ -29,19 +28,24 @@ function! SyntaxCheckers_haxe_haxe_GetLocList()
endif
let hxml = fnamemodify(hxml, ':p')
- if !empty(hxml)
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'haxe',
- \ 'fname': syntastic#util#shescape(fnameescape(fnamemodify(hxml, ':t'))),
- \ 'filetype': 'haxe',
- \ 'subchecker': 'haxe' })
+ if hxml != ''
+ let makeprg = self.makeprgBuild({
+ \ 'fname': syntastic#util#shescape(fnamemodify(hxml, ':t')) })
- let errorformat = '%E%f:%l: characters %c-%*[0-9] : %m'
+ let errorformat = '%E%f:%l: characters %c-%n : %m'
- return SyntasticMake({
+ let loclist = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'cwd': fnamemodify(hxml, ':h') })
+
+ for e in loclist
+ let e['hl'] = '\%>' . e['col'] . 'c\%<' . (e['nr'] + 1) . 'c'
+ let e['col'] += 1
+ let e['nr'] = 0
+ endfor
+
+ return loclist
endif
return []
@@ -50,3 +54,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'haxe',
\ 'name': 'haxe'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/hss/hss.vim b/bundle/syntastic/syntax_checkers/hss/hss.vim
index 5d2cf005..0f2ef527 100644
--- a/bundle/syntastic/syntax_checkers/hss/hss.vim
+++ b/bundle/syntastic/syntax_checkers/hss/hss.vim
@@ -13,18 +13,13 @@
if exists("g:loaded_syntastic_hss_hss_checker")
finish
endif
-let g:loaded_syntastic_hss_hss_checker=1
+let g:loaded_syntastic_hss_hss_checker = 1
-function! SyntaxCheckers_hss_hss_IsAvailable()
- return executable('hss')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_hss_hss_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'hss',
- \ 'args' : '-output ' . syntastic#util#DevNull(),
- \ 'filetype': 'hss',
- \ 'subchecker': 'hss' })
+function! SyntaxCheckers_hss_hss_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after' : '-output ' . syntastic#util#DevNull() })
let errorformat = '%E%f:%l: %m'
@@ -36,3 +31,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'hss',
\ 'name': 'hss'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/html/jshint.vim b/bundle/syntastic/syntax_checkers/html/jshint.vim
new file mode 100644
index 00000000..0f3055bc
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/html/jshint.vim
@@ -0,0 +1,56 @@
+"============================================================================
+"File: jshint.vim
+"Description: Javascript syntax checker for HTML - using jshint
+"Maintainer: LCD 47
+"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_html_jshint_checker')
+ finish
+endif
+let g:loaded_syntastic_html_jshint_checker = 1
+
+if !exists('g:syntastic_jshint_exec')
+ let g:syntastic_jshint_exec = 'jshint'
+endif
+
+if !exists('g:syntastic_html_jshint_conf')
+ let g:syntastic_html_jshint_conf = ''
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_html_jshint_IsAvailable() dict
+ let exe = expand(g:syntastic_jshint_exec)
+ return executable(exe) &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(exe . ' --version'), [2,4])
+endfunction
+
+function! SyntaxCheckers_html_jshint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'exe': expand(g:syntastic_jshint_exec),
+ \ 'args': (g:syntastic_html_jshint_conf != '' ? '--config ' . g:syntastic_html_jshint_conf : ''),
+ \ 'args_after': '--verbose --extract always' })
+
+ let errorformat = '%A%f: line %l\, col %v\, %m \(%t%*\d\)'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr('')},
+ \ 'returns': [0, 2] })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'html',
+ \ 'name': 'jshint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/html/tidy.vim b/bundle/syntastic/syntax_checkers/html/tidy.vim
index 27a97613..9c87cf90 100644
--- a/bundle/syntastic/syntax_checkers/html/tidy.vim
+++ b/bundle/syntastic/syntax_checkers/html/tidy.vim
@@ -42,25 +42,24 @@ if !exists('g:syntastic_html_tidy_empty_tags')
let g:syntastic_html_tidy_empty_tags = []
endif
-function! SyntaxCheckers_html_tidy_IsAvailable()
- return executable('tidy')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
" TODO: join this with xhtml.vim for DRY's sake?
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',
+ \'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
@@ -68,7 +67,7 @@ endfunction
let s:ignore_errors = [
\ " lacks \"summary\" attribute",
\ "not approved by W3C",
- \ "attribute \"placeholder\"",
+ \ " proprietary attribute \"placeholder\"",
\ " proprietary attribute \"charset\"",
\ " lacks \"content\" attribute",
\ "inserting \"type\" attribute",
@@ -76,9 +75,45 @@ let s:ignore_errors = [
\ "missing declaration",
\ "inserting implicit ",
\ "inserting missing 'title' element",
- \ "attribute \"[+",
\ "unescaped & or unknown entity",
- \ " attribute \"type\" has invalid value \"search\""
+ \ " attribute \"type\" has invalid value",
+ \ "proprietary attribute \"role\"",
+ \ "proprietary attribute \"aria-activedescendant\"",
+ \ "proprietary attribute \"aria-atomic\"",
+ \ "proprietary attribute \"aria-autocomplete\"",
+ \ "proprietary attribute \"aria-busy\"",
+ \ "proprietary attribute \"aria-checked\"",
+ \ "proprietary attribute \"aria-controls\"",
+ \ "proprietary attribute \"aria-describedby\"",
+ \ "proprietary attribute \"aria-disabled\"",
+ \ "proprietary attribute \"aria-dropeffect\"",
+ \ "proprietary attribute \"aria-expanded\"",
+ \ "proprietary attribute \"aria-flowto\"",
+ \ "proprietary attribute \"aria-grabbed\"",
+ \ "proprietary attribute \"aria-haspopup\"",
+ \ "proprietary attribute \"aria-hidden\"",
+ \ "proprietary attribute \"aria-invalid\"",
+ \ "proprietary attribute \"aria-label\"",
+ \ "proprietary attribute \"aria-labelledby\"",
+ \ "proprietary attribute \"aria-level\"",
+ \ "proprietary attribute \"aria-live\"",
+ \ "proprietary attribute \"aria-multiline\"",
+ \ "proprietary attribute \"aria-multiselectable\"",
+ \ "proprietary attribute \"aria-orientation\"",
+ \ "proprietary attribute \"aria-owns\"",
+ \ "proprietary attribute \"aria-posinset\"",
+ \ "proprietary attribute \"aria-pressed\"",
+ \ "proprietary attribute \"aria-readonly\"",
+ \ "proprietary attribute \"aria-relevant\"",
+ \ "proprietary attribute \"aria-relevant\"",
+ \ "proprietary attribute \"aria-required\"",
+ \ "proprietary attribute \"aria-selected\"",
+ \ "proprietary attribute \"aria-setsize\"",
+ \ "proprietary attribute \"aria-sort\"",
+ \ "proprietary attribute \"aria-valuemax\"",
+ \ "proprietary attribute \"aria-valuemin\"",
+ \ "proprietary attribute \"aria-valuenow\"",
+ \ "proprietary attribute \"aria-valuetext\""
\ ]
let s:blocklevel_tags = [
@@ -86,7 +121,6 @@ let s:blocklevel_tags = [
\ "section",
\ "article",
\ "aside",
- \ "hgroup",
\ "header",
\ "footer",
\ "nav",
@@ -130,7 +164,7 @@ function! s:NewTags(name)
return syntastic#util#shescape(join( s:{a:name} + g:syntastic_html_tidy_{a:name}, ',' ))
endfunction
-function s:Args()
+function! s:Args()
let args = s:TidyEncOptByFenc() .
\ ' --new-blocklevel-tags ' . s:NewTags('blocklevel_tags') .
\ ' --new-inline-tags ' . s:NewTags('inline_tags') .
@@ -139,13 +173,10 @@ function s:Args()
return args
endfunction
-function! SyntaxCheckers_html_tidy_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'tidy',
- \ 'args': s:Args(),
- \ 'tail': '2>&1',
- \ 'filetype': 'html',
- \ 'subchecker': 'tidy' })
+function! SyntaxCheckers_html_tidy_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': s:Args(),
+ \ 'tail': '2>&1' })
let errorformat =
\ '%Wline %l column %v - Warning: %m,' .
@@ -159,9 +190,9 @@ function! SyntaxCheckers_html_tidy_GetLocList()
\ 'returns': [0, 1, 2] })
" filter out valid HTML5 from the errors
- for n in range(len(loclist))
- if loclist[n]['valid'] && s:IgnoreError(loclist[n]['text']) == 1
- let loclist[n]['valid'] = 0
+ for e in loclist
+ if e['valid'] && s:IgnoreError(e['text']) == 1
+ let e['valid'] = 0
endif
endfor
@@ -172,3 +203,7 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'html',
\ 'name': 'tidy'})
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/html/validator.vim b/bundle/syntastic/syntax_checkers/html/validator.vim
index d26f7c0e..6a8e503d 100644
--- a/bundle/syntastic/syntax_checkers/html/validator.vim
+++ b/bundle/syntastic/syntax_checkers/html/validator.vim
@@ -45,30 +45,14 @@ if !exists('g:syntastic_html_validator_nsfilter')
let g:syntastic_html_validator_nsfilter = ''
endif
-function! SyntaxCheckers_html_validator_IsAvailable()
- return executable('curl')
-endfunction
-
-function! SyntaxCheckers_html_validator_Preprocess(errors)
- let out = []
- for e in a:errors
- let parts = matchlist(e, '\v^"([^"]+)"(.+)')
- if len(parts) >= 3
- " URL decode, except leave alone any "+"
- let parts[1] = substitute(parts[1], '\m%\(\x\x\)', '\=nr2char("0x".submatch(1))', 'g')
- let parts[1] = substitute(parts[1], '\m\\"', '"', 'g')
- let parts[1] = substitute(parts[1], '\m\\\\', '\\', 'g')
- call add(out, '"' . parts[1] . '"' . parts[2])
- endif
- endfor
- return out
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_html_validator_GetLocList()
+function! SyntaxCheckers_html_validator_GetLocList() dict
let fname = syntastic#util#shexpand('%')
- let makeprg = 'curl -s --compressed -F out=gnu -F asciiquotes=yes' .
- \ (!empty(g:syntastic_html_validator_parser) ? ' -F parser=' . g:syntastic_html_validator_parser : '') .
- \ (!empty(g:syntastic_html_validator_nsfilter) ? ' -F nsfilter=' . g:syntastic_html_validator_nsfilter : '') .
+ let makeprg = self.getExecEscaped() . ' -s --compressed -F out=gnu -F asciiquotes=yes' .
+ \ (g:syntastic_html_validator_parser != '' ? ' -F parser=' . g:syntastic_html_validator_parser : '') .
+ \ (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
let errorformat =
@@ -88,10 +72,16 @@ function! SyntaxCheckers_html_validator_GetLocList()
return SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
- \ 'preprocess': 'SyntaxCheckers_html_validator_Preprocess',
+ \ 'preprocess': 'validator',
\ 'returns': [0] })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'html',
- \ 'name': 'validator'})
+ \ 'name': 'validator',
+ \ 'exec': 'curl' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/html/w3.vim b/bundle/syntastic/syntax_checkers/html/w3.vim
index 94aa650c..747b7583 100644
--- a/bundle/syntastic/syntax_checkers/html/w3.vim
+++ b/bundle/syntastic/syntax_checkers/html/w3.vim
@@ -26,12 +26,11 @@ if !exists('g:syntastic_html_w3_api')
let g:syntastic_html_w3_api = 'http://validator.w3.org/check'
endif
-function! SyntaxCheckers_html_w3_IsAvailable()
- return executable('curl')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_html_w3_GetLocList()
- let makeprg = 'curl -s -F output=json ' .
+function! SyntaxCheckers_html_w3_GetLocList() dict
+ let makeprg = self.getExecEscaped() . ' -s -F output=json ' .
\ '-F uploaded_file=@' . syntastic#util#shexpand('%:p') . '\;type=text/html ' .
\ g:syntastic_html_w3_api
@@ -52,8 +51,8 @@ function! SyntaxCheckers_html_w3_GetLocList()
\ 'defaults': {'bufnr': bufnr("")},
\ 'returns': [0] })
- for n in range(len(loclist))
- let loclist[n]['text'] = substitute(loclist[n]['text'], '\m\\\([\"]\)', '\1', 'g')
+ for e in loclist
+ let e['text'] = substitute(e['text'], '\m\\\([\"]\)', '\1', 'g')
endfor
return loclist
@@ -61,5 +60,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'html',
- \ 'name': 'w3'})
+ \ 'name': 'w3',
+ \ 'exec': 'curl' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/java/checkstyle.vim b/bundle/syntastic/syntax_checkers/java/checkstyle.vim
index 058d44f9..092d1992 100644
--- a/bundle/syntastic/syntax_checkers/java/checkstyle.vim
+++ b/bundle/syntastic/syntax_checkers/java/checkstyle.vim
@@ -10,10 +10,11 @@
"
" Tested with checkstyle 5.5
"============================================================================
+
if exists("g:loaded_syntastic_java_checkstyle_checker")
finish
endif
-let g:loaded_syntastic_java_checkstyle_checker=1
+let g:loaded_syntastic_java_checkstyle_checker = 1
if !exists("g:syntastic_java_checkstyle_classpath")
let g:syntastic_java_checkstyle_classpath = 'checkstyle-5.5-all.jar'
@@ -23,23 +24,10 @@ if !exists("g:syntastic_java_checkstyle_conf_file")
let g:syntastic_java_checkstyle_conf_file = 'sun_checks.xml'
endif
-function! SyntaxCheckers_java_checkstyle_IsAvailable()
- return executable('java')
-endfunction
-
-function! SyntaxCheckers_java_checkstyle_Preprocess(errors)
- let out = copy(a:errors)
- for n in range(len(out))
- let parts = matchlist(out[n], '\m\(.*.*\)')
- if len(parts) >= 4
- let parts[2] = syntastic#util#decodeXMLEntities(parts[2])
- let out[n] = join(parts[1:3], '')
- endif
- endfor
- return out
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_java_checkstyle_GetLocList()
+function! SyntaxCheckers_java_checkstyle_GetLocList() dict
let fname = syntastic#util#shescape( expand('%:p:h') . '/' . expand('%:t') )
@@ -47,33 +35,27 @@ function! SyntaxCheckers_java_checkstyle_GetLocList()
let fname = substitute(system('cygpath -m ' . fname), '\m\%x00', '', 'g')
endif
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'java',
- \ 'args': '-cp ' . g:syntastic_java_checkstyle_classpath .
- \ ' com.puppycrawl.tools.checkstyle.Main -c ' . g:syntastic_java_checkstyle_conf_file .
- \ ' -f xml',
- \ 'fname': fname,
- \ 'filetype': 'java',
- \ 'subchecker': 'checkstyle' })
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '-cp ' . g:syntastic_java_checkstyle_classpath .
+ \ ' com.puppycrawl.tools.checkstyle.Main -c ' . g:syntastic_java_checkstyle_conf_file .
+ \ ' -f xml',
+ \ 'fname': fname })
- let errorformat =
- \ '%P,' .
- \ '%Q ,' .
- \ '%E ,' .
- \ '%E ,' .
- \ '%E ,' .
- \ '%E ,' .
- \ '%-G%.%#'
+ let errorformat = '%f:%t:%l:%c:%m'
return SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
- \ 'subtype': 'Style',
- \ 'preprocess': 'SyntaxCheckers_java_checkstyle_Preprocess',
- \ 'postprocess': ['cygwinRemoveCR', 'decodeXMLEntities'] })
-
+ \ 'preprocess': 'checkstyle',
+ \ 'subtype': 'Style' })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'java',
- \ 'name': 'checkstyle'})
+ \ 'name': 'checkstyle',
+ \ 'exec': 'java'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/java/javac.vim b/bundle/syntastic/syntax_checkers/java/javac.vim
index e9b14030..7bdd0ebd 100644
--- a/bundle/syntastic/syntax_checkers/java/javac.vim
+++ b/bundle/syntastic/syntax_checkers/java/javac.vim
@@ -8,13 +8,12 @@
" 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_java_javac_checker")
finish
endif
-let g:loaded_syntastic_java_javac_checker=1
+let g:loaded_syntastic_java_javac_checker = 1
let g:syntastic_java_javac_maven_pom_tags = ["build", "properties"]
let g:syntastic_java_javac_maven_pom_properties = {}
let s:has_maven = 0
@@ -40,8 +39,11 @@ if !exists("g:syntastic_java_javac_delete_output")
let g:syntastic_java_javac_delete_output = 1
endif
+let s:save_cpo = &cpo
+set cpo&vim
+
function! s:CygwinPath(path)
- return substitute(system("cygpath -m ".a:path), '\m\%x00', '', 'g')
+ return substitute(system("cygpath -m " . a:path), '\n', '', 'g')
endfunction
if !exists("g:syntastic_java_javac_temp_dir")
@@ -66,6 +68,10 @@ if !exists('g:syntastic_java_javac_config_file')
let g:syntastic_java_javac_config_file = '.syntastic_javac_config'
endif
+if !exists('g:syntastic_java_javac_custom_classpath_command')
+ let g:syntastic_java_javac_custom_classpath_command = ''
+endif
+
if !exists("g:syntastic_java_javac_maven_pom_ftime")
let g:syntastic_java_javac_maven_pom_ftime = {}
endif
@@ -90,7 +96,7 @@ function! s:RemoveDir(dir)
endif
endfunction
-function! s:AddToClasspath(classpath,path)
+function! s:AddToClasspath(classpath, path)
if a:path == ''
return a:classpath
endif
@@ -105,33 +111,53 @@ function! s:AddToClasspath(classpath,path)
endif
endfunction
-function! s:LoadClasspathFromConfigFile()
- if filereadable(g:syntastic_java_javac_config_file)
- let path = ''
- let lines = readfile(g:syntastic_java_javac_config_file)
- for l in lines
- if l != ''
- let path .= l . "\n"
- endif
- endfor
- return path
+function! s:SplitClasspath(classpath)
+ if a:classpath == ''
+ return []
+ endif
+ if has('win32') || has('win32unix') || has('win64')
+ return split(a:classpath, ";")
else
- return ''
+ return split(a:classpath, ":")
+ endif
+endfunction
+
+function! s:LoadConfigFile()
+ if filereadable(g:syntastic_java_javac_config_file)
+ exe 'source '.g:syntastic_java_javac_config_file
endif
endfunction
function! s:SaveClasspath()
+ " build classpath from lines
let path = ''
let lines = getline(1, line('$'))
+ for l in lines
+ let path = s:AddToClasspath(path, l)
+ endfor
" save classpath to config file
if g:syntastic_java_javac_config_file_enabled
- call writefile(lines,g:syntastic_java_javac_config_file)
- endif
- for l in lines
- if l != ''
- let path .= l . "\n"
+ if filereadable(g:syntastic_java_javac_config_file)
+ " load lines from config file
+ let lines = readfile(g:syntastic_java_javac_config_file)
+ " strip g:syntastic_java_javac_classpath options from config file lines
+ let i = 0
+ while i < len(lines)
+ if match(lines[i], 'g:syntastic_java_javac_classpath') != -1
+ call remove(lines, i)
+ let i -= 1
+ endif
+ let i += 1
+ endwhile
+ else
+ let lines = []
endif
- endfor
+ " add new g:syntastic_java_javac_classpath option to config
+ call add(lines, 'let g:syntastic_java_javac_classpath = "'.path.'"')
+ " save config file lines
+ call writefile(lines, g:syntastic_java_javac_config_file)
+ endif
+ " set new classpath
let g:syntastic_java_javac_classpath = path
let &modified = 0
endfunction
@@ -140,17 +166,56 @@ function! s:EditClasspath()
let command = 'syntastic javac classpath'
let winnr = bufwinnr('^' . command . '$')
if winnr < 0
- let pathlist = split(g:syntastic_java_javac_classpath,"\n")
- execute (len(pathlist) + 5) . 'sp ' . fnameescape(command)
+ let path = []
+ let pathlines = split(g:syntastic_java_javac_classpath, "\n")
+ for p in pathlines
+ let path += s:SplitClasspath(p)
+ endfor
+ execute (len(path) + 5) . 'sp ' . fnameescape(command)
augroup syntastic
autocmd BufWriteCmd call s:SaveClasspath() | bwipeout
augroup END
setlocal buftype=acwrite bufhidden=wipe nobuflisted noswapfile nowrap number
- for p in pathlist
+ for p in path
call append(line('$') - 1, p)
endfor
+ let &modified = 0
+ else
+ execute winnr . 'wincmd w'
+ endif
+endfunction
+
+function! s:SaveConfig()
+ " get lines
+ let lines = getline(1, line('$'))
+ if g:syntastic_java_javac_config_file_enabled
+ " save config file lines
+ call writefile(lines, g:syntastic_java_javac_config_file)
+ endif
+ let &modified = 0
+endfunction
+
+function! s:EditConfig()
+ let command = 'syntastic javac config'
+ let winnr = bufwinnr('^' . command . '$')
+ if winnr < 0
+ let lines = []
+ if filereadable(g:syntastic_java_javac_config_file)
+ let lines = readfile(g:syntastic_java_javac_config_file)
+ endif
+ execute (len(lines) + 5) . 'sp ' . fnameescape(command)
+
+ augroup syntastic
+ autocmd BufWriteCmd call s:SaveConfig() | bwipeout
+ augroup END
+
+ setlocal ft=vim buftype=acwrite bufhidden=wipe nobuflisted noswapfile nowrap number
+ for l in lines
+ call append(line('$') - 1, l)
+ endfor
+ let &modified = 0
else
execute winnr . 'wincmd w'
endif
@@ -161,7 +226,7 @@ function! s:GetMavenProperties()
let pom = findfile("pom.xml", ".;")
if s:has_maven && filereadable(pom)
if !has_key(g:syntastic_java_javac_maven_pom_properties, pom)
- let mvn_cmd = g:syntastic_java_maven_executable . ' -f ' . pom
+ let mvn_cmd = syntastic#util#shexpand(g:syntastic_java_maven_executable) . ' -f ' . pom
let mvn_is_managed_tag = 1
let mvn_settings_output = split(system(mvn_cmd . ' help:effective-pom'), "\n")
let current_path = 'project'
@@ -192,11 +257,15 @@ endfunction
command! SyntasticJavacEditClasspath call s:EditClasspath()
+if g:syntastic_java_javac_config_file_enabled
+ command! SyntasticJavacEditConfig call s:EditConfig()
+endif
+
function! s:GetMavenClasspath()
let pom = findfile("pom.xml", ".;")
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)
- let mvn_cmd = g:syntastic_java_maven_executable . ' -f ' . pom
+ let mvn_cmd = syntastic#util#shexpand(g:syntastic_java_maven_executable) . ' -f ' . pom
let mvn_classpath_output = split(system(mvn_cmd . ' dependency:build-classpath'), "\n")
let mvn_classpath = ''
let class_path_next = 0
@@ -206,7 +275,7 @@ function! s:GetMavenClasspath()
let mvn_classpath = s:RemoveCarriageReturn(line)
break
endif
- if match(line,'Dependencies classpath:') >= 0
+ if stridx(line, 'Dependencies classpath:') >= 0
let class_path_next = 1
endif
endfor
@@ -233,9 +302,9 @@ function! s:GetMavenClasspath()
return ''
endfunction
-function! SyntaxCheckers_java_javac_IsAvailable()
- let s:has_maven = executable(g:syntastic_java_maven_executable)
- return executable(g:syntastic_java_javac_executable)
+function! SyntaxCheckers_java_javac_IsAvailable() dict
+ let s:has_maven = executable(expand(g:syntastic_java_maven_executable))
+ return executable(expand(g:syntastic_java_javac_executable))
endfunction
function! s:MavenOutputDirectory()
@@ -246,13 +315,13 @@ function! s:MavenOutputDirectory()
if has_key(mvn_properties, 'project.properties.build.dir')
let output_dir = mvn_properties['project.properties.build.dir']
endif
- if match(expand( '%:p:h' ), "src.main.java") >= 0
+ if stridx(expand( '%:p:h' ), "src.main.java") >= 0
let output_dir .= '/target/classes'
if has_key(mvn_properties, 'project.build.outputDirectory')
let output_dir = mvn_properties['project.build.outputDirectory']
endif
endif
- if match(expand( '%:p:h' ), "src.test.java") >= 0
+ if stridx(expand( '%:p:h' ), "src.test.java") >= 0
let output_dir .= '/target/test-classes'
if has_key(mvn_properties, 'project.build.testOutputDirectory')
let output_dir = mvn_properties['project.build.testOutputDirectory']
@@ -267,10 +336,11 @@ function! s:MavenOutputDirectory()
return '.'
endfunction
-function! SyntaxCheckers_java_javac_GetLocList()
+function! SyntaxCheckers_java_javac_GetLocList() dict
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 ' . output_dir
@@ -278,30 +348,30 @@ function! SyntaxCheckers_java_javac_GetLocList()
" load classpath from config file
if g:syntastic_java_javac_config_file_enabled
- let loaded_classpath = s:LoadClasspathFromConfigFile()
- if loaded_classpath != ''
- let g:syntastic_java_javac_classpath = loaded_classpath
- endif
+ call s:LoadConfigFile()
endif
let javac_classpath = ''
" add classpathes to javac_classpath
- for path in split(g:syntastic_java_javac_classpath,"\n")
+ if has('win32') || has('win32unix') || has('win64')
+ let javac_classpath_split = ';'
+ else
+ let javac_classpath_split = ':'
+ endif
+ for path in split(g:syntastic_java_javac_classpath, javac_classpath_split)
if path != ''
try
- let ps = glob(path,0,1)
+ let ps = glob(path, 0, 1)
catch
- let ps = split(glob(path,0),"\n")
+ let ps = split(glob(path, 0), "\n")
endtry
if type(ps) == type([])
for p in ps
- if p != ''
- let javac_classpath = s:AddToClasspath(javac_classpath,p)
- endif
+ let javac_classpath = s:AddToClasspath(javac_classpath, p)
endfor
else
- let javac_classpath = s:AddToClasspath(javac_classpath,ps)
+ let javac_classpath = s:AddToClasspath(javac_classpath, ps)
endif
endif
endfor
@@ -313,6 +383,17 @@ function! SyntaxCheckers_java_javac_GetLocList()
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 has('win32') || has('win32unix') || has('win64')
+ 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 "' . fnameescape(javac_classpath) . '"'
endif
@@ -330,13 +411,10 @@ function! SyntaxCheckers_java_javac_GetLocList()
let fname = s:CygwinPath(fname)
endif
- let makeprg = syntastic#makeprg#build({
- \ 'exe': g:syntastic_java_javac_executable,
+ let makeprg = self.makeprgBuild({
\ 'args': javac_opts,
\ 'fname': fname,
- \ 'tail': '2>&1',
- \ 'filetype': 'java',
- \ 'subchecker': 'javac' })
+ \ 'tail': '2>&1' })
" unashamedly stolen from *errorformat-javac* (quickfix.txt) and modified to include error types
let errorformat =
@@ -348,7 +426,7 @@ function! SyntaxCheckers_java_javac_GetLocList()
\ '%-G%.%#'
if g:syntastic_java_javac_delete_output
- silent! call mkdir(output_dir,'p')
+ silent! call mkdir(output_dir, 'p')
endif
let errors = SyntasticMake({
\ 'makeprg': makeprg,
@@ -366,3 +444,7 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'java',
\ 'name': 'javac'})
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/javascript/closurecompiler.vim b/bundle/syntastic/syntax_checkers/javascript/closurecompiler.vim
index 6c55f4f2..d23fad05 100644
--- a/bundle/syntastic/syntax_checkers/javascript/closurecompiler.vim
+++ b/bundle/syntastic/syntax_checkers/javascript/closurecompiler.vim
@@ -24,29 +24,34 @@
if exists("g:loaded_syntastic_javascript_closurecompiler_checker")
finish
endif
-let g:loaded_syntastic_javascript_closurecompiler_checker=1
+let g:loaded_syntastic_javascript_closurecompiler_checker = 1
if !exists("g:syntastic_javascript_closure_compiler_options")
let g:syntastic_javascript_closure_compiler_options = ""
endif
-function! SyntaxCheckers_javascript_closurecompiler_IsAvailable()
- return exists("g:syntastic_javascript_closure_compiler_path")
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_javascript_closurecompiler_IsAvailable() dict
+ return
+ \ executable("java") &&
+ \ exists("g:syntastic_javascript_closure_compiler_path") &&
+ \ filereadable(g:syntastic_javascript_closure_compiler_path)
endfunction
-function! SyntaxCheckers_javascript_closurecompiler_GetLocList()
+function! SyntaxCheckers_javascript_closurecompiler_GetLocList() dict
if exists("g:syntastic_javascript_closure_compiler_file_list")
- let file_list = join(readfile(g:syntastic_javascript_closure_compiler_file_list), ' ')
+ let file_list = join(readfile(g:syntastic_javascript_closure_compiler_file_list))
else
let file_list = syntastic#util#shexpand('%')
endif
- let makeprg = syntastic#makeprg#build({
+ let makeprg = self.makeprgBuild({
\ 'exe': 'java -jar ' . g:syntastic_javascript_closure_compiler_path,
- \ 'args': g:syntastic_javascript_closure_compiler_options . ' --js' ,
- \ 'fname': file_list,
- \ 'filetype': 'javascript',
- \ 'subchecker': 'closurecompiler' })
+ \ 'args': g:syntastic_javascript_closure_compiler_options,
+ \ 'args_after': '--js' ,
+ \ 'fname': file_list })
let errorformat =
\ '%-GOK,'.
@@ -62,5 +67,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'javascript',
- \ 'name': 'closurecompiler'})
+ \ 'name': 'closurecompiler',
+ \ 'exec': 'java'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/javascript/eslint.vim b/bundle/syntastic/syntax_checkers/javascript/eslint.vim
new file mode 100644
index 00000000..c23cbbc7
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/javascript/eslint.vim
@@ -0,0 +1,50 @@
+"============================================================================
+"File: eslint.vim
+"Description: Javascript syntax checker - using eslint
+"Maintainer: Maksim Ryzhikov
+"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_eslint_checker')
+ finish
+endif
+let g:loaded_syntastic_javascript_eslint_checker = 1
+
+if !exists('g:syntastic_javascript_eslint_conf')
+ let g:syntastic_javascript_eslint_conf = ''
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_javascript_eslint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': (g:syntastic_javascript_eslint_conf != '' ? '--config ' . g:syntastic_javascript_eslint_conf : '') })
+
+ let errorformat =
+ \ '%E%f: line %l\, col %c\, Error - %m'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'postprocess': ['sort'] })
+
+ for e in loclist
+ let e['col'] += 1
+ endfor
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'javascript',
+ \ 'name': 'eslint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/javascript/gjslint.vim b/bundle/syntastic/syntax_checkers/javascript/gjslint.vim
index 039d0eed..1b171c9c 100644
--- a/bundle/syntastic/syntax_checkers/javascript/gjslint.vim
+++ b/bundle/syntastic/syntax_checkers/javascript/gjslint.vim
@@ -8,25 +8,23 @@
" 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_gjslint_checker")
finish
endif
-let g:loaded_syntastic_javascript_gjslint_checker=1
+let g:loaded_syntastic_javascript_gjslint_checker = 1
if !exists("g:syntastic_javascript_gjslint_conf")
let g:syntastic_javascript_gjslint_conf = ""
endif
-function! SyntaxCheckers_javascript_gjslint_IsAvailable()
- return executable('gjslint')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_javascript_gjslint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'gjslint',
- \ 'args': g:syntastic_javascript_gjslint_conf . " --nosummary --unix_mode --nodebug_indentation --nobeep",
- \ 'filetype': 'javascript',
- \ 'subchecker': 'gjslint' })
+function! SyntaxCheckers_javascript_gjslint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': g:syntastic_javascript_gjslint_conf,
+ \ 'args_after': '--nosummary --unix_mode --nodebug_indentation --nobeep' })
let errorformat =
\ "%f:%l:(New Error -%\\?\%n) %m," .
@@ -44,3 +42,7 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'javascript',
\ 'name': 'gjslint'})
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/javascript/jscs.vim b/bundle/syntastic/syntax_checkers/javascript/jscs.vim
new file mode 100644
index 00000000..c9cb4e95
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/javascript/jscs.vim
@@ -0,0 +1,39 @@
+"============================================================================
+"File: jscs.vim
+"Description: Javascript syntax checker - using jscs
+"Maintainer: LCD 47
+"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_jscs_checker")
+ finish
+endif
+let g:loaded_syntastic_javascript_jscs_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_javascript_jscs_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--no-colors --reporter checkstyle' })
+ let errorformat = '%f:%t:%l:%c:%m'
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style',
+ \ 'preprocess': 'checkstyle',
+ \ 'postprocess': ['sort'],
+ \ 'returns': [0, 2] })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'javascript',
+ \ 'name': 'jscs'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/javascript/jshint.vim b/bundle/syntastic/syntax_checkers/javascript/jshint.vim
index 6e0a47f9..cf0924cc 100644
--- a/bundle/syntastic/syntax_checkers/javascript/jshint.vim
+++ b/bundle/syntastic/syntax_checkers/javascript/jshint.vim
@@ -12,48 +12,50 @@
if exists('g:loaded_syntastic_javascript_jshint_checker')
finish
endif
-let g:loaded_syntastic_javascript_jshint_checker=1
-
-if !exists('g:syntastic_jshint_exec')
- let g:syntastic_jshint_exec = 'jshint'
-endif
+let g:loaded_syntastic_javascript_jshint_checker = 1
if !exists('g:syntastic_javascript_jshint_conf')
let g:syntastic_javascript_jshint_conf = ''
endif
-function! SyntaxCheckers_javascript_jshint_IsAvailable()
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_javascript_jshint_IsAvailable() dict
+ if !exists('g:syntastic_jshint_exec')
+ let g:syntastic_jshint_exec = self.getExec()
+ endif
return executable(expand(g:syntastic_jshint_exec))
endfunction
-function! SyntaxCheckers_javascript_jshint_GetLocList()
- let jshint_new = s:JshintNew()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': expand(g:syntastic_jshint_exec),
- \ 'post_args': (jshint_new ? ' --verbose ' : '') . s:Args(),
- \ 'filetype': 'javascript',
- \ 'subchecker': 'jshint' })
+function! SyntaxCheckers_javascript_jshint_GetLocList() dict
+ let exe = syntastic#util#shexpand(g:syntastic_jshint_exec)
+ if !exists('s:jshint_new')
+ let s:jshint_new =
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(exe . ' --version'), [1, 1])
+ endif
- let errorformat = jshint_new ?
- \ '%f: line %l\, col %c\, %m \(%t%*\d\)' :
- \ '%E%f: line %l\, col %c\, %m'
+ let makeprg = self.makeprgBuild({
+ \ 'exe': exe,
+ \ 'args': (g:syntastic_javascript_jshint_conf != '' ? '--config ' . g:syntastic_javascript_jshint_conf : ''),
+ \ 'args_after': (s:jshint_new ? '--verbose ' : '') })
+
+ let errorformat = s:jshint_new ?
+ \ '%A%f: line %l\, col %v\, %m \(%t%*\d\)' :
+ \ '%E%f: line %l\, col %v\, %m'
return SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
- \ 'defaults': {'bufnr': bufnr('')} })
-endfunction
-
-function s:JshintNew()
- return syntastic#util#versionIsAtLeast(syntastic#util#getVersion(expand(g:syntastic_jshint_exec) . ' --version'), [1, 1])
-endfunction
-
-function s:Args()
- " node-jshint uses .jshintrc as config unless --config arg is present
- return !empty(g:syntastic_javascript_jshint_conf) ? ' --config ' . g:syntastic_javascript_jshint_conf : ''
+ \ 'defaults': {'bufnr': bufnr('')},
+ \ 'returns': [0, 2] })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'javascript',
\ 'name': 'jshint'})
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/javascript/jsl.vim b/bundle/syntastic/syntax_checkers/javascript/jsl.vim
index bef1b89a..0e894bf1 100644
--- a/bundle/syntastic/syntax_checkers/javascript/jsl.vim
+++ b/bundle/syntastic/syntax_checkers/javascript/jsl.vim
@@ -8,33 +8,23 @@
" 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_jsl_checker")
finish
endif
-let g:loaded_syntastic_javascript_jsl_checker=1
+let g:loaded_syntastic_javascript_jsl_checker = 1
if !exists("g:syntastic_javascript_jsl_conf")
let g:syntastic_javascript_jsl_conf = ""
endif
-function s:ConfFlag()
- if !empty(g:syntastic_javascript_jsl_conf)
- return "-conf " . g:syntastic_javascript_jsl_conf
- endif
-
- return ""
-endfunction
-
-function! SyntaxCheckers_javascript_jsl_IsAvailable()
- return executable('jsl')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_javascript_jsl_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'jsl',
- \ 'args': s:ConfFlag() . " -nologo -nofilelisting -nosummary -nocontext -process",
- \ 'filetype': 'javascript',
- \ 'subchecker': 'jsl' })
+function! SyntaxCheckers_javascript_jsl_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': (g:syntastic_javascript_jsl_conf != '' ? '-conf ' . g:syntastic_javascript_jsl_conf : ''),
+ \ 'args_after': '-nologo -nofilelisting -nosummary -nocontext -process' })
let errorformat =
\ '%W%f(%l): lint warning: %m,'.
@@ -54,3 +44,7 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'javascript',
\ 'name': 'jsl'})
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/javascript/jslint.vim b/bundle/syntastic/syntax_checkers/javascript/jslint.vim
index 384b4b85..89d3a802 100644
--- a/bundle/syntastic/syntax_checkers/javascript/jslint.vim
+++ b/bundle/syntastic/syntax_checkers/javascript/jslint.vim
@@ -13,33 +13,25 @@
if exists("g:loaded_syntastic_javascript_jslint_checker")
finish
endif
-let g:loaded_syntastic_javascript_jslint_checker=1
-if !exists("g:syntastic_javascript_jslint_conf")
- let g:syntastic_javascript_jslint_conf = "--white --undef --nomen --regexp --plusplus --bitwise --newcap --sloppy --vars"
-endif
+let g:loaded_syntastic_javascript_jslint_checker = 1
-function! SyntaxCheckers_javascript_jslint_IsAvailable()
- return executable('jslint')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_javascript_jslint_HighlightTerm(error)
- let unexpected = matchstr(a:error['text'], '\mExpected.*and instead saw \'\zs.*\ze\'')
- if len(unexpected) < 1i
- return ''
+function! SyntaxCheckers_javascript_jslint_GetHighlightRegex(item)
+ let term = matchstr(a:item['text'], '\mExpected .* and instead saw ''\zs.*\ze''')
+ if term != ''
+ let term = '\V' . escape(term, '\')
endif
- return '\V'.split(unexpected, "'")[1]
+ return term
endfunction
-function! SyntaxCheckers_javascript_jslint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'jslint',
- \ 'args': g:syntastic_javascript_jslint_conf,
- \ 'filetype': 'javascript',
- \ 'subchecker': 'jslint' })
+function! SyntaxCheckers_javascript_jslint_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args': '--white --nomen --regexp --plusplus --bitwise --newcap --sloppy --vars' })
let errorformat =
- \ '%E %##%n %m,'.
+ \ '%E %##%\d%\+ %m,'.
\ '%-Z%.%#Line %l\, Pos %c,'.
\ '%-G%.%#'
@@ -53,3 +45,7 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'javascript',
\ 'name': 'jslint'})
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/javascript/jsxhint.vim b/bundle/syntastic/syntax_checkers/javascript/jsxhint.vim
new file mode 100644
index 00000000..3a77aba0
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/javascript/jsxhint.vim
@@ -0,0 +1,51 @@
+"============================================================================
+"File: jsxhint.vim
+"Description: Javascript syntax checker - using jsxhint
+"Maintainer: Thomas Boyt
+"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_jsxhint_checker')
+ finish
+endif
+let g:loaded_syntastic_javascript_jsxhint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_javascript_jsxhint_IsAvailable() dict
+ if !executable('jshint') || !syntastic#util#versionIsAtLeast(syntastic#util#getVersion('jshint --version'), [1, 1])
+ return 0
+ endif
+
+ let jsxhint_version = system(self.getExecEscaped() . ' --version')
+ return
+ \ v:shell_error == 0 &&
+ \ jsxhint_version =~# '\m^JSXHint\>' &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#parseVersion(jsxhint_version), [0, 4, 1])
+endfunction
+
+function! SyntaxCheckers_javascript_jsxhint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '--verbose' })
+
+ let errorformat = '%A%f: line %l\, col %v\, %m \(%t%*\d\)'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr('')} })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'javascript',
+ \ 'name': 'jsxhint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/json/jsonlint.vim b/bundle/syntastic/syntax_checkers/json/jsonlint.vim
index 7c6b34d5..2b9ec451 100644
--- a/bundle/syntastic/syntax_checkers/json/jsonlint.vim
+++ b/bundle/syntastic/syntax_checkers/json/jsonlint.vim
@@ -12,18 +12,13 @@
if exists("g:loaded_syntastic_json_jsonlint_checker")
finish
endif
-let g:loaded_syntastic_json_jsonlint_checker=1
+let g:loaded_syntastic_json_jsonlint_checker = 1
-function! SyntaxCheckers_json_jsonlint_IsAvailable()
- return executable('jsonlint')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_json_jsonlint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'jsonlint',
- \ 'post_args': '--compact',
- \ 'filetype': 'json',
- \ 'subchecker': 'jsonlint' })
+function! SyntaxCheckers_json_jsonlint_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'post_args_after': '--compact' })
let errorformat =
\ '%ELine %l:%c,'.
@@ -41,3 +36,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'json',
\ 'name': 'jsonlint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/json/jsonval.vim b/bundle/syntastic/syntax_checkers/json/jsonval.vim
index 4359e86c..16e30091 100644
--- a/bundle/syntastic/syntax_checkers/json/jsonval.vim
+++ b/bundle/syntastic/syntax_checkers/json/jsonval.vim
@@ -12,18 +12,14 @@
if exists("g:loaded_syntastic_json_jsonval_checker")
finish
endif
-let g:loaded_syntastic_json_jsonval_checker=1
+let g:loaded_syntastic_json_jsonval_checker = 1
-function! SyntaxCheckers_json_jsonval_IsAvailable()
- return executable('jsonval')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_json_jsonval_GetLocList()
+function! SyntaxCheckers_json_jsonval_GetLocList() dict
" based on https://gist.github.com/1196345
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'jsonval',
- \ 'filetype': 'json',
- \ 'subchecker': 'jsonval' })
+ let makeprg = self.makeprgBuild({})
let errorformat =
\ '%E%f:\ %m\ at\ line\ %l,' .
@@ -38,3 +34,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'json',
\ 'name': 'jsonval'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/less/lessc.vim b/bundle/syntastic/syntax_checkers/less/lessc.vim
index 05f82527..9b5efa96 100644
--- a/bundle/syntastic/syntax_checkers/less/lessc.vim
+++ b/bundle/syntastic/syntax_checkers/less/lessc.vim
@@ -20,35 +20,40 @@
if exists("g:loaded_syntastic_less_lessc_checker")
finish
endif
-let g:loaded_syntastic_less_lessc_checker=1
+let g:loaded_syntastic_less_lessc_checker = 1
if !exists("g:syntastic_less_options")
- let g:syntastic_less_options = "--no-color"
+ let g:syntastic_less_options = ""
endif
if !exists("g:syntastic_less_use_less_lint")
let g:syntastic_less_use_less_lint = 0
endif
-if g:syntastic_less_use_less_lint
- let s:check_file = 'node ' . expand(':p:h') . '/less-lint.js'
-else
- let s:check_file = 'lessc'
-endif
+let s:save_cpo = &cpo
+set cpo&vim
+
+let s:node_file = 'node ' . syntastic#util#shescape(expand(':p:h') . syntastic#util#Slash() . 'less-lint.js')
-function! SyntaxCheckers_less_lessc_IsAvailable()
- return executable('lessc')
+function! SyntaxCheckers_less_lessc_IsAvailable() dict
+ return g:syntastic_less_use_less_lint ? executable('node') : executable(self.getExec())
endfunction
-function! SyntaxCheckers_less_lessc_GetLocList()
- let makeprg = syntastic#makeprg#build({
+function! SyntaxCheckers_less_lessc_GetLocList() dict
+ if !exists('s:check_file')
+ let s:check_file = g:syntastic_less_use_less_lint ? s:node_file : self.getExecEscaped()
+ endif
+
+ let makeprg = self.makeprgBuild({
\ 'exe': s:check_file,
\ 'args': g:syntastic_less_options,
- \ 'tail': syntastic#util#DevNull(),
- \ 'filetype': 'less',
- \ 'subchecker': 'lessc' })
+ \ 'args_after': '--no-color',
+ \ 'tail': '> ' . syntastic#util#DevNull() })
- let errorformat = '%m in %f:%l:%c'
+ let errorformat =
+ \ '%m in %f on line %l\, column %c:,' .
+ \ '%m in %f:%l:%c,' .
+ \ '%-G%.%#'
return SyntasticMake({
\ 'makeprg': makeprg,
@@ -59,3 +64,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'less',
\ 'name': 'lessc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/lex/flex.vim b/bundle/syntastic/syntax_checkers/lex/flex.vim
new file mode 100644
index 00000000..b8bc6483
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/lex/flex.vim
@@ -0,0 +1,50 @@
+"============================================================================
+"File: lex.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: LCD 47
+"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_lex_flex_checker")
+ finish
+endif
+let g:loaded_syntastic_lex_flex_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_lex_flex_GetHighlightRegex(item)
+ let term = matchstr(a:item['text'],
+ \ '\m^\(unrecognized %option\|bad \|bad character\( class expression\)\=\): \zs.*')
+ if term == ''
+ let term = matchstr(a:item['text'],
+ \ '\m^\(Definition value for\|undefined definition\) \zs{[^}]\+}\ze')
+ endif
+
+ return term != '' ? '\V' . escape(term, '\') : ''
+endfunction
+
+function! SyntaxCheckers_lex_flex_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': syntastic#c#NullOutput() })
+
+ let errorformat = '%f:%l: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'lex',
+ \ 'name': 'flex'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/limbo/limbo.vim b/bundle/syntastic/syntax_checkers/limbo/limbo.vim
new file mode 100644
index 00000000..b501e3c9
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/limbo/limbo.vim
@@ -0,0 +1,46 @@
+"============================================================================
+"File: limbo.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Alex Efros
+"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_limbo_limbo_checker")
+ finish
+endif
+let g:loaded_syntastic_limbo_limbo_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_limbo_limbo_GetLocList() dict
+ let include = $INFERNO_HOME != '' ? '-I$INFERNO_HOME ' : ''
+ " don't generate .dis in current dir while checking syntax,
+ " .dis should be generated by `mk`
+ let output = filereadable('mkfile') ? (' ' . syntastic#c#NullOutput()) : ''
+
+ let makeprg = self.makeprgBuild({ 'args_before': include . '-w' . output })
+
+ let errorformat = '%E%f:%l:%m'
+ if expand('%') =~# '\m\.m$'
+ let errorformat = '%-G%f:%l: near ` EOF ` : no implementation module,' . errorformat
+ endif
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'limbo',
+ \ 'name': 'limbo' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/lisp/clisp.vim b/bundle/syntastic/syntax_checkers/lisp/clisp.vim
index caf094f1..2c3876da 100644
--- a/bundle/syntastic/syntax_checkers/lisp/clisp.vim
+++ b/bundle/syntastic/syntax_checkers/lisp/clisp.vim
@@ -9,22 +9,18 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_lisp_clisp_checker")
finish
endif
-let g:loaded_syntastic_lisp_clisp_checker=1
+let g:loaded_syntastic_lisp_clisp_checker = 1
-function! SyntaxCheckers_lisp_clisp_IsAvailable()
- return executable("clisp")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_lisp_clisp_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'clisp',
- \ 'args': '-q -c',
- \ 'tail': '-o /tmp/clisp-vim-compiled-file',
- \ 'filetype': 'lisp',
- \ 'subchecker': 'clisp' })
+function! SyntaxCheckers_lisp_clisp_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '-q -c ' . syntastic#c#NullOutput() })
let errorformat =
\ '%-G;%.%#,' .
@@ -45,3 +41,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'lisp',
\ 'name': 'clisp'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/llvm/llvm.vim b/bundle/syntastic/syntax_checkers/llvm/llvm.vim
index 61d16fc1..c65a1672 100644
--- a/bundle/syntastic/syntax_checkers/llvm/llvm.vim
+++ b/bundle/syntastic/syntax_checkers/llvm/llvm.vim
@@ -9,21 +9,17 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_llvm_llvm_checker")
finish
endif
-let g:loaded_syntastic_llvm_llvm_checker=1
+let g:loaded_syntastic_llvm_llvm_checker = 1
-function! SyntaxCheckers_llvm_llvm_IsAvailable()
- return executable("llc")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_llvm_llvm_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'llc',
- \ 'args': syntastic#c#NullOutput(),
- \ 'filetype': 'llvm',
- \ 'subchecker': 'llvm' })
+function! SyntaxCheckers_llvm_llvm_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': syntastic#c#NullOutput() })
let errorformat = 'llc: %f:%l:%c: %trror: %m'
@@ -34,5 +30,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'llvm',
- \ 'name': 'llvm'})
+ \ 'name': 'llvm',
+ \ 'exec': 'llc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/lua/luac.vim b/bundle/syntastic/syntax_checkers/lua/luac.vim
index ad4e8baa..012f1490 100644
--- a/bundle/syntastic/syntax_checkers/lua/luac.vim
+++ b/bundle/syntastic/syntax_checkers/lua/luac.vim
@@ -13,42 +13,39 @@
if exists("g:loaded_syntastic_lua_luac_checker")
finish
endif
-let g:loaded_syntastic_lua_luac_checker=1
+let g:loaded_syntastic_lua_luac_checker = 1
-function! SyntaxCheckers_lua_luac_IsAvailable()
- return executable('luac')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
function! SyntaxCheckers_lua_luac_GetHighlightRegex(pos)
- let near = matchstr(a:pos['text'], "\\mnear '[^']\\+'")
let result = ''
- if len(near) > 0
- let near = split(near, "'")[1]
- if near == ''
+ let near = matchstr(a:pos['text'], '\mnear ''\zs[^'']\+\ze''')
+ if near != ''
+ if near ==# ''
let p = getpos('$')
let a:pos['lnum'] = p[1]
let a:pos['col'] = p[2]
- let result = '\%'.p[2].'c'
+ let result = '\%' . p[2] . 'c'
else
- let result = '\V'.near
- endif
- let open = matchstr(a:pos['text'], "\\m(to close '[^']\\+' at line [0-9]\\+)")
- if len(open) > 0
- let oline = split(open, "'")[1:2]
- let line = 0+strpart(oline[1], 9)
- call matchadd('SpellCap', '\%'.line.'l\V'.oline[0])
+ let result = '\V' . escape(near, '\')
endif
+
+ " XXX the following piece of code is evil, and is likely to break
+ " in future versions of syntastic; enable it at your own risk :)
+
+ "let open = matchstr(a:pos['text'], '\m(to close ''\zs[^'']\+\ze'' at line [0-9]\+)')
+ "if open != ''
+ " let line = str2nr(matchstr(a:pos['text'], '\m(to close ''[^'']\+'' at line \zs[0-9]\+\ze)'))
+ " let group = a:pos['type'] ==? 'E' ? 'SyntasticError' : 'SyntasticWarning'
+ " call matchadd(group, '\%' . line . 'l\V' . escape(open, '\'))
+ "endif
endif
return result
endfunction
-
-function! SyntaxCheckers_lua_luac_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'luac',
- \ 'args': '-p',
- \ 'filetype': 'lua',
- \ 'subchecker': 'luac' })
+function! SyntaxCheckers_lua_luac_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-p' })
let errorformat = 'luac: %#%f:%l: %m'
@@ -56,9 +53,13 @@ function! SyntaxCheckers_lua_luac_GetLocList()
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'defaults': { 'bufnr': bufnr(''), 'type': 'E' } })
-
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'lua',
\ 'name': 'luac'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/matlab/mlint.vim b/bundle/syntastic/syntax_checkers/matlab/mlint.vim
index 380d22c8..1b15eeac 100644
--- a/bundle/syntastic/syntax_checkers/matlab/mlint.vim
+++ b/bundle/syntastic/syntax_checkers/matlab/mlint.vim
@@ -13,18 +13,13 @@
if exists("g:loaded_syntastic_matlab_mlint_checker")
finish
endif
-let g:loaded_syntastic_matlab_mlint_checker=1
+let g:loaded_syntastic_matlab_mlint_checker = 1
-function! SyntaxCheckers_matlab_mlint_IsAvailable()
- return executable("mlint")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_matlab_mlint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'mlint',
- \ 'args': '-id $*',
- \ 'filetype': 'matlab',
- \ 'subchecker': 'mlint' })
+function! SyntaxCheckers_matlab_mlint_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-id $*' })
let errorformat =
\ 'L %l (C %c): %*[a-zA-Z0-9]: %m,'.
@@ -39,3 +34,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'matlab',
\ 'name': 'mlint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/nasm/nasm.vim b/bundle/syntastic/syntax_checkers/nasm/nasm.vim
index 8476b515..65bf9aa9 100644
--- a/bundle/syntastic/syntax_checkers/nasm/nasm.vim
+++ b/bundle/syntastic/syntax_checkers/nasm/nasm.vim
@@ -9,22 +9,20 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_nasm_nasm_checker")
finish
endif
-let g:loaded_syntastic_nasm_nasm_checker=1
+let g:loaded_syntastic_nasm_nasm_checker = 1
-function! SyntaxCheckers_nasm_nasm_IsAvailable()
- return executable("nasm")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_nasm_nasm_GetLocList()
- let wd = syntastic#util#shescape(expand("%:p:h") . "/")
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'nasm',
- \ 'args': '-X gnu -f elf -I ' . wd . ' ' . syntastic#c#NullOutput(),
- \ 'filetype': 'nasm',
- \ 'subchecker': 'nasm' })
+function! SyntaxCheckers_nasm_nasm_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '-X gnu -f elf' .
+ \ ' -I ' . syntastic#util#shescape(expand("%:p:h") . "/") .
+ \ ' ' . syntastic#c#NullOutput() })
let errorformat = '%f:%l: %t%*[^:]: %m'
@@ -36,3 +34,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'nasm',
\ 'name': 'nasm'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/nroff/mandoc.vim b/bundle/syntastic/syntax_checkers/nroff/mandoc.vim
index 3333d24e..28085d54 100644
--- a/bundle/syntastic/syntax_checkers/nroff/mandoc.vim
+++ b/bundle/syntastic/syntax_checkers/nroff/mandoc.vim
@@ -9,21 +9,17 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_nroff_mandoc_checker")
finish
endif
-let g:loaded_syntastic_nroff_mandoc_checker=1
+let g:loaded_syntastic_nroff_mandoc_checker = 1
-function! SyntaxCheckers_nroff_mandoc_IsAvailable()
- return executable("mandoc")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_nroff_mandoc_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'mandoc',
- \ 'args': '-Tlint',
- \ 'filetype': 'nroff',
- \ 'subchecker': 'mandoc' })
+function! SyntaxCheckers_nroff_mandoc_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-Tlint' })
let errorformat =
\ '%E%f:%l:%c: %tRROR: %m,' .
@@ -39,3 +35,7 @@ call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'nroff',
\ 'name': 'mandoc'})
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/objc/gcc.vim b/bundle/syntastic/syntax_checkers/objc/gcc.vim
index 320290f5..09c3daa2 100644
--- a/bundle/syntastic/syntax_checkers/objc/gcc.vim
+++ b/bundle/syntastic/syntax_checkers/objc/gcc.vim
@@ -15,22 +15,21 @@ if exists('g:loaded_syntastic_objc_gcc_checker')
endif
let g:loaded_syntastic_objc_gcc_checker = 1
-if !exists('g:syntastic_objc_compiler')
- let g:syntastic_objc_compiler = 'gcc'
+if !exists('g:syntastic_objc_compiler_options')
+ let g:syntastic_objc_compiler_options = '-std=gnu99'
endif
-function! SyntaxCheckers_objc_gcc_IsAvailable()
- return executable(g:syntastic_objc_compiler)
-endfunction
-
let s:save_cpo = &cpo
set cpo&vim
-if !exists('g:syntastic_objc_compiler_options')
- let g:syntastic_objc_compiler_options = '-std=gnu99'
-endif
+function! SyntaxCheckers_objc_gcc_IsAvailable() dict
+ if !exists('g:syntastic_objc_compiler')
+ let g:syntastic_objc_compiler = executable(self.getExec()) ? self.getExec() : 'clang'
+ endif
+ return executable(expand(g:syntastic_objc_compiler))
+endfunction
-function! SyntaxCheckers_objc_gcc_GetLocList()
+function! SyntaxCheckers_objc_gcc_GetLocList() dict
return syntastic#c#GetLocList('objc', 'gcc', {
\ 'errorformat':
\ '%-G%f:%s:,' .
@@ -51,7 +50,7 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'objc',
- \ 'name': 'gcc'})
+ \ 'name': 'gcc' })
let &cpo = s:save_cpo
unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/objc/oclint.vim b/bundle/syntastic/syntax_checkers/objc/oclint.vim
index 0ebd6612..a415c41f 100644
--- a/bundle/syntastic/syntax_checkers/objc/oclint.vim
+++ b/bundle/syntastic/syntax_checkers/objc/oclint.vim
@@ -21,16 +21,11 @@ if exists("g:loaded_syntastic_objc_oclint_checker")
endif
let g:loaded_syntastic_objc_oclint_checker = 1
-function! SyntaxCheckers_objc_oclint_IsAvailable()
- return SyntaxCheckers_c_oclint_IsAvailable()
-endfunction
-
-function! SyntaxCheckers_objc_oclint_GetLocList()
- return SyntaxCheckers_c_oclint_GetLocList()
-endfunction
+runtime! syntax_checkers/c/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'objc',
- \ 'name': 'oclint'})
+ \ 'name': 'oclint',
+ \ 'redirect': 'c/oclint'})
-runtime! syntax_checkers/c/*.vim
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/objcpp/gcc.vim b/bundle/syntastic/syntax_checkers/objcpp/gcc.vim
index 93ff2194..853d6657 100644
--- a/bundle/syntastic/syntax_checkers/objcpp/gcc.vim
+++ b/bundle/syntastic/syntax_checkers/objcpp/gcc.vim
@@ -15,22 +15,21 @@ if exists('g:loaded_syntastic_objcpp_gcc_checker')
endif
let g:loaded_syntastic_objcpp_gcc_checker = 1
-if !exists('g:syntastic_objcpp_compiler')
- let g:syntastic_objcpp_compiler = 'gcc'
+if !exists('g:syntastic_objcpp_compiler_options')
+ let g:syntastic_objcpp_compiler_options = '-std=gnu99'
endif
-function! SyntaxCheckers_objcpp_gcc_IsAvailable()
- return executable(g:syntastic_objcpp_compiler)
-endfunction
-
let s:save_cpo = &cpo
set cpo&vim
-if !exists('g:syntastic_objcpp_compiler_options')
- let g:syntastic_objcpp_compiler_options = '-std=gnu99'
-endif
+function! SyntaxCheckers_objcpp_gcc_IsAvailable() dict
+ if !exists('g:syntastic_c_compiler')
+ let g:syntastic_objcpp_compiler = executable(self.getExec()) ? self.getExec() : 'clang'
+ endif
+ return executable(expand(g:syntastic_objcpp_compiler))
+endfunction
-function! SyntaxCheckers_objcpp_gcc_GetLocList()
+function! SyntaxCheckers_objcpp_gcc_GetLocList() dict
return syntastic#c#GetLocList('objcpp', 'gcc', {
\ 'errorformat':
\ '%-G%f:%s:,' .
@@ -51,7 +50,7 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'objcpp',
- \ 'name': 'gcc'})
+ \ 'name': 'gcc' })
let &cpo = s:save_cpo
unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/objcpp/oclint.vim b/bundle/syntastic/syntax_checkers/objcpp/oclint.vim
index a46fe045..84f71d29 100644
--- a/bundle/syntastic/syntax_checkers/objcpp/oclint.vim
+++ b/bundle/syntastic/syntax_checkers/objcpp/oclint.vim
@@ -21,16 +21,11 @@ if exists("g:loaded_syntastic_objcpp_oclint_checker")
endif
let g:loaded_syntastic_objcpp_oclint_checker = 1
-function! SyntaxCheckers_objcpp_oclint_IsAvailable()
- return SyntaxCheckers_c_oclint_IsAvailable()
-endfunction
-
-function! SyntaxCheckers_objcpp_oclint_GetLocList()
- return SyntaxCheckers_c_oclint_GetLocList()
-endfunction
+runtime! syntax_checkers/c/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'objcpp',
- \ 'name': 'oclint'})
+ \ 'name': 'oclint',
+ \ 'redirect': 'c/oclint'})
-runtime! syntax_checkers/c/*.vim
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/ocaml/camlp4o.vim b/bundle/syntastic/syntax_checkers/ocaml/camlp4o.vim
index 66f21d81..d9f57001 100644
--- a/bundle/syntastic/syntax_checkers/ocaml/camlp4o.vim
+++ b/bundle/syntastic/syntax_checkers/ocaml/camlp4o.vim
@@ -51,16 +51,18 @@
if exists("g:loaded_syntastic_ocaml_camlp4o_checker")
finish
endif
-let g:loaded_syntastic_ocaml_camlp4o_checker=1
+let g:loaded_syntastic_ocaml_camlp4o_checker = 1
-if exists('g:syntastic_ocaml_camlp4r') &&
- \ g:syntastic_ocaml_camlp4r != 0
+if exists('g:syntastic_ocaml_camlp4r') && g:syntastic_ocaml_camlp4r != 0
let s:ocamlpp="camlp4r"
else
let s:ocamlpp="camlp4o"
endif
-function! SyntaxCheckers_ocaml_camlp4o_IsAvailable()
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_ocaml_camlp4o_IsAvailable() dict
return executable(s:ocamlpp)
endfunction
@@ -76,7 +78,7 @@ if !exists('g:syntastic_ocaml_use_ocamlbuild') || !executable("ocamlbuild")
let g:syntastic_ocaml_use_ocamlbuild = 0
endif
-function! SyntaxCheckers_ocaml_camlp4o_GetLocList()
+function! SyntaxCheckers_ocaml_camlp4o_GetLocList() dict
let makeprg = s:GetMakeprg()
if makeprg == ""
return []
@@ -96,7 +98,7 @@ function! SyntaxCheckers_ocaml_camlp4o_GetLocList()
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
endfunction
-function s:GetMakeprg()
+function! s:GetMakeprg()
if g:syntastic_ocaml_use_ocamlc
return s:GetOcamlcMakeprg()
endif
@@ -108,7 +110,7 @@ function s:GetMakeprg()
return s:GetOtherMakeprg()
endfunction
-function s:GetOcamlcMakeprg()
+function! s:GetOcamlcMakeprg()
if g:syntastic_ocaml_use_janestreet_core
let build_cmd = "ocamlc -I "
let build_cmd .= expand(g:syntastic_ocaml_janestreet_core_dir)
@@ -119,12 +121,12 @@ function s:GetOcamlcMakeprg()
endif
endfunction
-function s:GetOcamlBuildMakeprg()
+function! s:GetOcamlBuildMakeprg()
return "ocamlbuild -quiet -no-log -tag annot," . s:ocamlpp . " -no-links -no-hygiene -no-sanitize " .
\ syntastic#util#shexpand('%:r') . ".cmi"
endfunction
-function s:GetOtherMakeprg()
+function! s:GetOtherMakeprg()
"TODO: give this function a better name?
"
"TODO: should use throw/catch instead of returning an empty makeprg
@@ -132,10 +134,10 @@ function s:GetOtherMakeprg()
let extension = expand('%:e')
let makeprg = ""
- if match(extension, 'mly') >= 0 && executable("menhir")
+ if stridx(extension, 'mly') >= 0 && executable("menhir")
" ocamlyacc output can't be redirected, so use menhir
let makeprg = "menhir --only-preprocess " . syntastic#util#shexpand('%') . " >" . syntastic#util#DevNull()
- elseif match(extension,'mll') >= 0 && executable("ocamllex")
+ elseif stridx(extension,'mll') >= 0 && executable("ocamllex")
let makeprg = "ocamllex -q " . syntastic#c#NullOutput() . " " . syntastic#util#shexpand('%')
else
let makeprg = "camlp4o " . syntastic#c#NullOutput() . " " . syntastic#util#shexpand('%')
@@ -147,3 +149,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'ocaml',
\ 'name': 'camlp4o'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/perl/perl.vim b/bundle/syntastic/syntax_checkers/perl/perl.vim
index 029f4354..2ac6ec98 100644
--- a/bundle/syntastic/syntax_checkers/perl/perl.vim
+++ b/bundle/syntastic/syntax_checkers/perl/perl.vim
@@ -11,6 +11,22 @@
"
"============================================================================
"
+" Security:
+"
+" This checker runs 'perl -c' against your file, which in turn executes
+" any BEGIN, UNITCHECK, and CHECK blocks, and any use statements in
+" your file. This is probably fine if you wrote the file yourself,
+" but it can be a problem if you're trying to check third party files.
+" If you are 100% willing to let Vim run the code in your file, set
+" g:syntastic_enable_perl_checker to 1 in your vimrc to enable this
+" checker:
+"
+" let g:syntastic_enable_perl_checker = 1
+"
+" References:
+"
+" - http://perldoc.perl.org/perlrun.html#*-c*
+"
" Checker options:
"
" - g:syntastic_perl_interpreter (string; default: 'perl')
@@ -24,39 +40,38 @@
if exists('g:loaded_syntastic_perl_perl_checker')
finish
endif
-let g:loaded_syntastic_perl_perl_checker=1
-
-if !exists('g:syntastic_perl_interpreter')
- let g:syntastic_perl_interpreter = 'perl'
-endif
+let g:loaded_syntastic_perl_perl_checker = 1
if !exists('g:syntastic_perl_lib_path')
let g:syntastic_perl_lib_path = []
endif
-function! SyntaxCheckers_perl_perl_IsAvailable()
- return executable(g:syntastic_perl_interpreter)
-endfunction
-
-function! SyntaxCheckers_perl_perl_Preprocess(errors)
- let out = []
+let s:save_cpo = &cpo
+set cpo&vim
- for e in a:errors
- 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
- endfor
+function! SyntaxCheckers_perl_perl_IsAvailable() dict
+ if !exists('g:syntastic_perl_interpreter')
+ let g:syntastic_perl_interpreter = self.getExec()
+ endif
- return syntastic#util#unique(out)
+ " don't call executable() here, to allow things like
+ " let g:syntastic_perl_interpreter='/usr/bin/env perl'
+ silent! call system(syntastic#util#shexpand(g:syntastic_perl_interpreter) . ' -e ' . syntastic#util#shescape('exit(0)'))
+ return v:shell_error == 0
endfunction
-function! SyntaxCheckers_perl_perl_GetLocList()
+function! SyntaxCheckers_perl_perl_GetLocList() dict
+ if !exists('g:syntastic_enable_perl_checker') || !g:syntastic_enable_perl_checker
+ call syntastic#log#error('checker perl/perl: checks disabled for security reasons; set g:syntastic_enable_perl_checker to 1 to override')
+ return []
+ endif
+
+ let exe = expand(g:syntastic_perl_interpreter)
if type(g:syntastic_perl_lib_path) == type('')
- call syntastic#util#deprecationWarn('variable g:syntastic_perl_lib_path should be a list')
+ call syntastic#log#deprecationWarn('variable g:syntastic_perl_lib_path should be a list')
let includes = split(g:syntastic_perl_lib_path, ',')
else
- let includes = copy(exists('b:syntastic_perl_lib_path') ? b:syntastic_perl_lib_path : g:syntastic_perl_lib_path)
+ let includes = copy(syntastic#util#var('perl_lib_path'))
endif
let shebang = syntastic#util#parseShebang()
let extra = join(map(includes, '"-I" . v:val')) .
@@ -64,34 +79,35 @@ function! SyntaxCheckers_perl_perl_GetLocList()
\ (index(shebang['args'], '-t') >= 0 ? ' -t' : '')
let errorformat = '%f:%l:%m'
- let makeprg = syntastic#makeprg#build({
- \ 'exe': g:syntastic_perl_interpreter,
- \ 'args': '-c -X ' . extra,
- \ 'filetype': 'perl',
- \ 'subchecker': 'perl' })
+ let makeprg = self.makeprgBuild({
+ \ 'exe': exe,
+ \ 'args_before': '-c -X ' . extra })
let errors = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
- \ 'preprocess': 'SyntaxCheckers_perl_perl_Preprocess',
+ \ 'preprocess': 'perl',
\ 'defaults': {'type': 'E'} })
if !empty(errors)
return errors
endif
- let makeprg = syntastic#makeprg#build({
- \ 'exe': g:syntastic_perl_interpreter,
- \ 'args': '-c -Mwarnings ' . extra,
- \ 'filetype': 'perl',
- \ 'subchecker': 'perl' })
+ let makeprg = self.makeprgBuild({
+ \ 'exe': exe,
+ \ 'args_before': '-c -Mwarnings ' . extra })
return SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
- \ 'preprocess': 'SyntaxCheckers_perl_perl_Preprocess',
+ \ 'preprocess': 'perl',
\ 'defaults': {'type': 'W'} })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'perl',
\ 'name': 'perl'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/perl/perlcritic.vim b/bundle/syntastic/syntax_checkers/perl/perlcritic.vim
index 910ded2b..cd010945 100644
--- a/bundle/syntastic/syntax_checkers/perl/perlcritic.vim
+++ b/bundle/syntastic/syntax_checkers/perl/perlcritic.vim
@@ -27,22 +27,18 @@
if exists("g:loaded_syntastic_perl_perlcritic_checker")
finish
endif
-let g:loaded_syntastic_perl_perlcritic_checker=1
+let g:loaded_syntastic_perl_perlcritic_checker = 1
if !exists('g:syntastic_perl_perlcritic_thres')
let g:syntastic_perl_perlcritic_thres = 5
endif
-function! SyntaxCheckers_perl_perlcritic_IsAvailable()
- return executable('perlcritic')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_perl_perlcritic_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'perlcritic',
- \ 'post_args': '--quiet --nocolor --verbose "\%s:\%f:\%l:\%c:(\%s) \%m (\%e)\n"',
- \ 'filetype': 'perl',
- \ 'subchecker': 'perlcritic' })
+function! SyntaxCheckers_perl_perlcritic_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '--quiet --nocolor --verbose "\%s:\%f:\%l:\%c:(\%s) \%m (\%e)\n"' })
let errorformat = '%t:%f:%l:%c:%m'
@@ -53,8 +49,8 @@ function! SyntaxCheckers_perl_perlcritic_GetLocList()
\ 'subtype': 'Style' })
" change error types according to the prescribed threshold
- for n in range(len(loclist))
- let loclist[n]['type'] = loclist[n]['type'] < g:syntastic_perl_perlcritic_thres ? 'W' : 'E'
+ for e in loclist
+ let e['type'] = e['type'] < g:syntastic_perl_perlcritic_thres ? 'W' : 'E'
endfor
return loclist
@@ -63,3 +59,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'perl',
\ 'name': 'perlcritic'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/perl/podchecker.vim b/bundle/syntastic/syntax_checkers/perl/podchecker.vim
index e6f80e66..5ffc7365 100644
--- a/bundle/syntastic/syntax_checkers/perl/podchecker.vim
+++ b/bundle/syntastic/syntax_checkers/perl/podchecker.vim
@@ -13,18 +13,13 @@
if exists("g:loaded_syntastic_perl_podchecker_checker")
finish
endif
-let g:loaded_syntastic_perl_podchecker_checker=1
+let g:loaded_syntastic_perl_podchecker_checker = 1
-function! SyntaxCheckers_perl_podchecker_IsAvailable()
- return SyntaxCheckers_pod_podchecker_IsAvailable()
-endfunction
-
-function! SyntaxCheckers_perl_podchecker_GetLocList()
- return SyntaxCheckers_pod_podchecker_GetLocList()
-endfunction
+runtime! syntax_checkers/pod/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'perl',
- \ 'name': 'podchecker'})
+ \ 'name': 'podchecker',
+ \ 'redirect': 'pod/podchecker'})
-runtime! syntax_checkers/pod/*.vim
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/php/php.vim b/bundle/syntastic/syntax_checkers/php/php.vim
index 3c2f4237..23c1db9e 100644
--- a/bundle/syntastic/syntax_checkers/php/php.vim
+++ b/bundle/syntastic/syntax_checkers/php/php.vim
@@ -13,26 +13,20 @@
if exists("g:loaded_syntastic_php_php_checker")
finish
endif
-let g:loaded_syntastic_php_php_checker=1
+let g:loaded_syntastic_php_php_checker = 1
-function! SyntaxCheckers_php_php_IsAvailable()
- return executable("php")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
function! SyntaxCheckers_php_php_GetHighlightRegex(item)
- let unexpected = matchstr(a:item['text'], "\\munexpected '[^']\\+'")
- if len(unexpected) < 1
- return ''
- endif
- return '\V'.split(unexpected, "'")[1]
+ let term = matchstr(a:item['text'], "\\munexpected '\\zs[^']\\+\\ze'")
+ return term != '' ? '\V' . escape(term, '\') : ''
endfunction
-function! SyntaxCheckers_php_php_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'php',
- \ 'args': '-l -d error_reporting=E_ALL -d display_errors=1 -d log_errors=0 -d xdebug.cli_color=0',
- \ 'filetype': 'php',
- \ 'subchecker': 'php' })
+function! SyntaxCheckers_php_php_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': '-d error_reporting=E_ALL',
+ \ 'args_after': '-l -d display_errors=1 -d log_errors=0 -d xdebug.cli_color=0' })
let errorformat =
\ '%-GNo syntax errors detected in%.%#,'.
@@ -50,3 +44,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'php',
\ 'name': 'php'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/php/phpcs.vim b/bundle/syntastic/syntax_checkers/php/phpcs.vim
index f6646c66..23d539df 100644
--- a/bundle/syntastic/syntax_checkers/php/phpcs.vim
+++ b/bundle/syntastic/syntax_checkers/php/phpcs.vim
@@ -12,26 +12,23 @@
"
" See here for details of phpcs
" - phpcs (see http://pear.php.net/package/PHP_CodeSniffer)
-"
+
if exists("g:loaded_syntastic_php_phpcs_checker")
finish
endif
-let g:loaded_syntastic_php_phpcs_checker=1
+let g:loaded_syntastic_php_phpcs_checker = 1
-function! SyntaxCheckers_php_phpcs_IsAvailable()
- return executable('phpcs')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_php_phpcs_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'phpcs',
- \ 'args': '--report=csv',
- \ 'filetype': 'php',
- \ 'subchecker': 'phpcs' })
+function! SyntaxCheckers_php_phpcs_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': '--tab-width=' . &tabstop,
+ \ 'args_after': '--report=csv' })
let errorformat =
\ '%-GFile\,Line\,Column\,Type\,Message\,Source\,Severity,'.
- \ '"%f"\,%l\,%c\,%t%*[a-zA-Z]\,"%m"\,%*[a-zA-Z0-9_.-]\,%*[0-9]'
+ \ '"%f"\,%l\,%v\,%t%*[a-zA-Z]\,"%m"\,%*[a-zA-Z0-9_.-]\,%*[0-9]'
return SyntasticMake({
\ 'makeprg': makeprg,
@@ -41,4 +38,9 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'php',
- \ 'name': 'phpcs'})
+ \ 'name': 'phpcs' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/php/phpmd.vim b/bundle/syntastic/syntax_checkers/php/phpmd.vim
index 99c3be6b..6b6022ab 100644
--- a/bundle/syntastic/syntax_checkers/php/phpmd.vim
+++ b/bundle/syntastic/syntax_checkers/php/phpmd.vim
@@ -16,11 +16,10 @@
if exists("g:loaded_syntastic_php_phpmd_checker")
finish
endif
-let g:loaded_syntastic_php_phpmd_checker=1
+let g:loaded_syntastic_php_phpmd_checker = 1
-function! SyntaxCheckers_php_phpmd_IsAvailable()
- return executable('phpmd')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
function! SyntaxCheckers_php_phpmd_GetHighlightRegex(item)
let term = matchstr(a:item['text'], '\m\C^The \S\+ \w\+\(()\)\= \(has\|is not\|utilizes\)')
@@ -58,12 +57,10 @@ function! SyntaxCheckers_php_phpmd_GetHighlightRegex(item)
return ''
endfunction
-function! SyntaxCheckers_php_phpmd_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'phpmd',
- \ 'post_args': 'text codesize,design,unusedcode,naming',
- \ 'filetype': 'php',
- \ 'subchecker': 'phpmd' })
+function! SyntaxCheckers_php_phpmd_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'post_args_before': 'text',
+ \ 'post_args': 'codesize,design,unusedcode,naming' })
let errorformat = '%E%f:%l%\s%#%m'
@@ -76,3 +73,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'php',
\ 'name': 'phpmd'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/po/msgfmt.vim b/bundle/syntastic/syntax_checkers/po/msgfmt.vim
new file mode 100644
index 00000000..254aa91a
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/po/msgfmt.vim
@@ -0,0 +1,50 @@
+"============================================================================
+"File: msgfmt.vim
+"Description: Syntax checking plugin for po files of gettext
+"Maintainer: Ryo Okubo
+"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_po_msgfmt_checker")
+ finish
+endif
+let g:loaded_syntastic_po_msgfmt_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_po_msgfmt_GetHighlightRegex(item)
+ let term = matchstr(a:item['text'], '\mkeyword "\zs[^"]\+\ze" unknown')
+ return term != '' ? '\V' . escape(term, '\') : ''
+endfunction
+
+function! SyntaxCheckers_po_msgfmt_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-c ' . syntastic#c#NullOutput() })
+
+ let errorformat =
+ \ '%W%f:%l: warning: %m,' .
+ \ '%E%f:%l:%v: %m,' .
+ \ '%E%f:%l: %m,' .
+ \ '%+C %.%#,' .
+ \ '%Z%p^,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'postprocess': ['compressWhitespace'] })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'po',
+ \ 'name': 'msgfmt'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/pod/podchecker.vim b/bundle/syntastic/syntax_checkers/pod/podchecker.vim
index c429a495..34a37e55 100644
--- a/bundle/syntastic/syntax_checkers/pod/podchecker.vim
+++ b/bundle/syntastic/syntax_checkers/pod/podchecker.vim
@@ -9,20 +9,17 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_pod_podchecker_checker")
finish
endif
-let g:loaded_syntastic_pod_podchecker_checker=1
+let g:loaded_syntastic_pod_podchecker_checker = 1
-function! SyntaxCheckers_pod_podchecker_IsAvailable()
- return executable("podchecker")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_pod_podchecker_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'podchecker',
- \ 'filetype': 'pod',
- \ 'subchecker': 'podchecker' })
+function! SyntaxCheckers_pod_podchecker_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat =
\ '%W%[%#]%[%#]%[%#] WARNING: %m at line %l in file %f,' .
@@ -35,8 +32,7 @@ function! SyntaxCheckers_pod_podchecker_GetLocList()
\ 'errorformat': errorformat,
\ 'returns': [0, 1, 2] })
- for n in range(len(loclist))
- let e = loclist[n]
+ for e in loclist
if e['valid'] && e['lnum'] == 0
let e['lnum'] = str2nr(matchstr(e['text'], '\m\' . syntastic#util#DevNull())
+function! SyntaxCheckers_puppet_puppet_GetLocList() dict
+ let ver = syntastic#util#getVersion(self.getExecEscaped() . ' --version 2>' . syntastic#util#DevNull())
if syntastic#util#versionIsAtLeast(ver, [2,7,0])
let args = 'parser validate --color=false'
@@ -29,11 +27,7 @@ function! SyntaxCheckers_puppet_puppet_GetLocList()
let args = '--color=false --parseonly'
endif
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'puppet',
- \ 'args': args,
- \ 'filetype': 'puppet',
- \ 'subchecker': 'puppet' })
+ let makeprg = self.makeprgBuild({ 'args_before': args })
let errorformat =
\ '%-Gerr: Try ''puppet help parser validate'' for usage,' .
@@ -44,9 +38,13 @@ function! SyntaxCheckers_puppet_puppet_GetLocList()
return SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat })
-
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'puppet',
\ 'name': 'puppet'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/puppet/puppetlint.vim b/bundle/syntastic/syntax_checkers/puppet/puppetlint.vim
index b59059e2..2a32a8fa 100644
--- a/bundle/syntastic/syntax_checkers/puppet/puppetlint.vim
+++ b/bundle/syntastic/syntax_checkers/puppet/puppetlint.vim
@@ -13,27 +13,27 @@
if exists("g:loaded_syntastic_puppet_puppetlint_checker")
finish
endif
-let g:loaded_syntastic_puppet_puppetlint_checker=1
+let g:loaded_syntastic_puppet_puppetlint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
if exists("g:syntastic_puppet_lint_arguments")
let g:syntastic_puppet_puppetlint_args = g:syntastic_puppet_lint_arguments
- call syntastic#util#deprecationWarn("variable g:syntastic_puppet_lint_arguments is deprecated, please use g:syntastic_puppet_puppetlint_args instead")
+ call syntastic#log#deprecationWarn("variable g:syntastic_puppet_lint_arguments is deprecated, please use g:syntastic_puppet_puppetlint_args instead")
endif
-function! SyntaxCheckers_puppet_puppetlint_IsAvailable()
+function! SyntaxCheckers_puppet_puppetlint_IsAvailable() dict
return
\ executable("puppet") &&
- \ executable("puppet-lint") &&
- \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion('puppet-lint --version 2>' .
- \ syntastic#util#DevNull()), [0,1,10])
+ \ executable(self.getExec()) &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(
+ \ self.getExecEscaped() . ' --version 2>' . syntastic#util#DevNull()), [0,1,10])
endfunction
-function! SyntaxCheckers_puppet_puppetlint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'puppet-lint',
- \ 'post_args': '--log-format "%{KIND} [%{check}] %{message} at %{fullpath}:%{linenumber}"',
- \ 'filetype': 'puppet',
- \ 'subchecker': 'puppetlint' })
+function! SyntaxCheckers_puppet_puppetlint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '--log-format "%{KIND} [%{check}] %{message} at %{fullpath}:%{linenumber}"' })
let errorformat = '%t%*[a-zA-Z] %m at %f:%l'
@@ -44,4 +44,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'puppet',
- \ 'name': 'puppetlint'})
+ \ 'name': 'puppetlint',
+ \ 'exec': 'puppet-lint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/python/compile.py b/bundle/syntastic/syntax_checkers/python/compile.py
new file mode 100755
index 00000000..32f1413d
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/python/compile.py
@@ -0,0 +1,13 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+from sys import argv, exit
+
+
+if len(argv) != 2:
+ exit(1)
+
+try:
+ compile(open(argv[1]).read(), argv[1], 'exec', 0, 1)
+except SyntaxError as err:
+ print('%s:%s:%s: %s' % (err.filename, err.lineno, err.offset, err.msg))
diff --git a/bundle/syntastic/syntax_checkers/python/flake8.vim b/bundle/syntastic/syntax_checkers/python/flake8.vim
index 83fa30dc..61d55cc9 100644
--- a/bundle/syntastic/syntax_checkers/python/flake8.vim
+++ b/bundle/syntastic/syntax_checkers/python/flake8.vim
@@ -5,40 +5,65 @@
" kstep
"
"============================================================================
+
if exists("g:loaded_syntastic_python_flake8_checker")
finish
endif
-let g:loaded_syntastic_python_flake8_checker=1
+let g:loaded_syntastic_python_flake8_checker = 1
-function! SyntaxCheckers_python_flake8_IsAvailable()
- return executable('flake8')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_python_flake8_GetHighlightRegex(i)
- return SyntaxCheckers_python_pyflakes_GetHighlightRegex(a:i)
+function! SyntaxCheckers_python_flake8_GetHighlightRegex(item)
+ return SyntaxCheckers_python_pyflakes_GetHighlightRegex(a:item)
endfunction
-function! SyntaxCheckers_python_flake8_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'flake8',
- \ 'filetype': 'python',
- \ 'subchecker': 'flake8' })
+function! SyntaxCheckers_python_flake8_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat =
\ '%E%f:%l: could not compile,%-Z%p^,' .
- \ '%E%f:%l:%c: F%n %m,' .
- \ '%W%f:%l:%c: C%n %m,' .
- \ '%W%f:%l:%c: %.%n %m,' .
- \ '%W%f:%l: %.%n %m,' .
+ \ '%A%f:%l:%c: %t%n %m,' .
+ \ '%A%f:%l: %t%n %m,' .
\ '%-G%.%#'
- return SyntasticMake({
+ let loclist = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat })
+
+ for e in loclist
+ " E*** and W*** are pep8 errors
+ " F*** are PyFlakes codes
+ " C*** are McCabe complexity messages
+ " N*** are naming conventions from pep8-naming
+
+ if has_key(e, 'nr')
+ let e['text'] .= printf(' [%s%03d]', e['type'], e['nr'])
+ " E901 are syntax errors
+ " E902 are I/O errors
+ if e['type'] ==? 'E' && e['nr'] !~ '\m^9'
+ let e['subtype'] = 'Style'
+ endif
+ call remove(e, 'nr')
+ endif
+
+ if e['type'] =~? '\m^[CNW]'
+ let e['subtype'] = 'Style'
+ endif
+
+ let e['type'] = e['type'] =~? '\m^[EFC]' ? 'E' : 'W'
+ endfor
+
+ return loclist
endfunction
+runtime! syntax_checkers/python/pyflakes.vim
+
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'python',
\ 'name': 'flake8'})
-runtime! syntax_checkers/python/pyflakes.vim
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/python/frosted.vim b/bundle/syntastic/syntax_checkers/python/frosted.vim
new file mode 100644
index 00000000..5c47de5c
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/python/frosted.vim
@@ -0,0 +1,60 @@
+"============================================================================
+"File: frosted.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: LCD 47
+"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_python_frosted_checker')
+ finish
+endif
+let g:loaded_syntastic_python_frosted_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_python_frosted_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-vb' })
+
+ let errorformat =
+ \ '%f:%l:%c:%m,' .
+ \ '%E%f:%l: %m,' .
+ \ '%-Z%p^,' .
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 1] })
+
+ for e in loclist
+ let e["col"] += 1
+
+ let parts = matchlist(e.text, '\v^([EW]\d+):([^:]*):(.+)')
+ if len(parts) >= 4
+ let e["type"] = parts[1][0]
+ let e["text"] = parts[3] . ' [' . parts[1] . ']'
+ let e["hl"] = '\V' . escape(parts[2], '\')
+ elseif e["text"] =~? '\v^I\d+:'
+ let e["valid"] = 0
+ else
+ let e["vcol"] = 0
+ endif
+ endfor
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'python',
+ \ 'name': 'frosted' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/python/pep257.vim b/bundle/syntastic/syntax_checkers/python/pep257.vim
index 9d2b64d9..7bd2d91d 100644
--- a/bundle/syntastic/syntax_checkers/python/pep257.vim
+++ b/bundle/syntastic/syntax_checkers/python/pep257.vim
@@ -10,20 +10,11 @@ if exists("g:loaded_syntastic_python_pep257_checker")
endif
let g:loaded_syntastic_python_pep257_checker = 1
-function! SyntaxCheckers_python_pep257_IsAvailable()
- return executable('pep257')
-endfunction
-
-" sanity: kill empty lines here rather than munging errorformat
-function! SyntaxCheckers_python_pep257_Preprocess(errors)
- return filter(copy(a:errors), 'v:val != ""')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_python_pep257_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'pep257',
- \ 'filetype': 'python',
- \ 'subchecker': 'pep257' })
+function! SyntaxCheckers_python_pep257_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat =
\ '%E%f:%l:%c%\%.%\%.%\d%\+:%\d%\+: %m,' .
@@ -34,12 +25,12 @@ function! SyntaxCheckers_python_pep257_GetLocList()
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'subtype': 'Style',
- \ 'preprocess': 'SyntaxCheckers_python_pep257_Preprocess',
+ \ 'preprocess': 'killEmpty',
\ 'postprocess': ['compressWhitespace'] })
" pep257 outputs byte offsets rather than column numbers
- for n in range(len(loclist))
- let loclist[n]['col'] = get(loclist[n], 'col', 0) + 1
+ for e in loclist
+ let e['col'] = get(e, 'col', 0) + 1
endfor
return loclist
@@ -48,3 +39,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'python',
\ 'name': 'pep257'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/python/pep8.vim b/bundle/syntastic/syntax_checkers/python/pep8.vim
index 71837187..310746b3 100644
--- a/bundle/syntastic/syntax_checkers/python/pep8.vim
+++ b/bundle/syntastic/syntax_checkers/python/pep8.vim
@@ -15,17 +15,13 @@
if exists("g:loaded_syntastic_python_pep8_checker")
finish
endif
-let g:loaded_syntastic_python_pep8_checker=1
+let g:loaded_syntastic_python_pep8_checker = 1
-function! SyntaxCheckers_python_pep8_IsAvailable()
- return executable('pep8')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_python_pep8_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'pep8',
- \ 'filetype': 'python',
- \ 'subchecker': 'pep8' })
+function! SyntaxCheckers_python_pep8_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat = '%f:%l:%c: %m'
@@ -34,8 +30,8 @@ function! SyntaxCheckers_python_pep8_GetLocList()
\ 'errorformat': errorformat,
\ 'subtype': 'Style' })
- for n in range(len(loclist))
- let loclist[n]['type'] = loclist[n]['text'] =~? '^W' ? 'W' : 'E'
+ for e in loclist
+ let e['type'] = e['text'] =~? '^W' ? 'W' : 'E'
endfor
return loclist
@@ -44,3 +40,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'python',
\ 'name': 'pep8'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/python/py3kwarn.vim b/bundle/syntastic/syntax_checkers/python/py3kwarn.vim
index 44d03655..5ceb51ab 100644
--- a/bundle/syntastic/syntax_checkers/python/py3kwarn.vim
+++ b/bundle/syntastic/syntax_checkers/python/py3kwarn.vim
@@ -4,20 +4,17 @@
"Authors: Liam Curry
"
"============================================================================
+
if exists("g:loaded_syntastic_python_py3kwarn_checker")
finish
endif
-let g:loaded_syntastic_python_py3kwarn_checker=1
+let g:loaded_syntastic_python_py3kwarn_checker = 1
-function! SyntaxCheckers_python_py3kwarn_IsAvailable()
- return executable('py3kwarn')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_python_py3kwarn_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'py3kwarn',
- \ 'filetype': 'python',
- \ 'subchecker': 'py3kwarn' })
+function! SyntaxCheckers_python_py3kwarn_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat = '%W%f:%l:%c: %m'
@@ -29,3 +26,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'python',
\ 'name': 'py3kwarn'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/python/pyflakes.vim b/bundle/syntastic/syntax_checkers/python/pyflakes.vim
index f93047bf..5903b2ef 100644
--- a/bundle/syntastic/syntax_checkers/python/pyflakes.vim
+++ b/bundle/syntastic/syntax_checkers/python/pyflakes.vim
@@ -6,24 +6,24 @@
" Parantapa Bhattacharya
"
"============================================================================
+
if exists("g:loaded_syntastic_python_pyflakes_checker")
finish
endif
-let g:loaded_syntastic_python_pyflakes_checker=1
+let g:loaded_syntastic_python_pyflakes_checker = 1
-function! SyntaxCheckers_python_pyflakes_IsAvailable()
- return executable('pyflakes')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
function! SyntaxCheckers_python_pyflakes_GetHighlightRegex(i)
- if match(a:i['text'], 'is assigned to but never used') > -1
- \ || match(a:i['text'], 'imported but unused') > -1
- \ || match(a:i['text'], 'undefined name') > -1
- \ || match(a:i['text'], 'redefinition of') > -1
- \ || match(a:i['text'], 'referenced before assignment') > -1
- \ || match(a:i['text'], 'duplicate argument') > -1
- \ || match(a:i['text'], 'after other statements') > -1
- \ || match(a:i['text'], 'shadowed by loop variable') > -1
+ if stridx(a:i['text'], 'is assigned to but never used') >= 0
+ \ || stridx(a:i['text'], 'imported but unused') >= 0
+ \ || stridx(a:i['text'], 'undefined name') >= 0
+ \ || stridx(a:i['text'], 'redefinition of') >= 0
+ \ || stridx(a:i['text'], 'referenced before assignment') >= 0
+ \ || stridx(a:i['text'], 'duplicate argument') >= 0
+ \ || stridx(a:i['text'], 'after other statements') >= 0
+ \ || stridx(a:i['text'], 'shadowed by loop variable') >= 0
" fun with Python's %r: try "..." first, then '...'
let terms = split(a:i['text'], '"', 1)
@@ -39,11 +39,8 @@ function! SyntaxCheckers_python_pyflakes_GetHighlightRegex(i)
return ''
endfunction
-function! SyntaxCheckers_python_pyflakes_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'pyflakes',
- \ 'filetype': 'python',
- \ 'subchecker': 'pyflakes' })
+function! SyntaxCheckers_python_pyflakes_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat =
\ '%E%f:%l: could not compile,'.
@@ -52,12 +49,23 @@ function! SyntaxCheckers_python_pyflakes_GetLocList()
\ '%E%f:%l: %m,'.
\ '%-G%.%#'
- return SyntasticMake({
+ let loclist = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
\ 'defaults': {'text': "Syntax error"} })
+
+ for e in loclist
+ let e['vcol'] = 0
+ endfor
+
+ return loclist
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'python',
\ 'name': 'pyflakes'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/python/pylama.vim b/bundle/syntastic/syntax_checkers/python/pylama.vim
index 8c8e2ba0..93aa4bad 100644
--- a/bundle/syntastic/syntax_checkers/python/pylama.vim
+++ b/bundle/syntastic/syntax_checkers/python/pylama.vim
@@ -9,25 +9,21 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists('g:loaded_syntastic_python_pylama_checker')
finish
endif
let g:loaded_syntastic_python_pylama_checker = 1
-function! SyntaxCheckers_python_pylama_IsAvailable()
- return executable('pylama')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_python_pylama_GetHighlightRegex(i)
- return SyntaxCheckers_python_pyflakes_GetHighlightRegex(a:i)
+function! SyntaxCheckers_python_pylama_GetHighlightRegex(item)
+ return SyntaxCheckers_python_pyflakes_GetHighlightRegex(a:item)
endfunction
-function! SyntaxCheckers_python_pylama_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'pylama',
- \ 'post_args': '-f pep8',
- \ 'filetype': 'python',
- \ 'subchecker': 'pylama' })
+function! SyntaxCheckers_python_pylama_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-f pep8' })
" TODO: "WARNING:pylama:..." messages are probably a logging bug
let errorformat =
@@ -40,28 +36,33 @@ function! SyntaxCheckers_python_pylama_GetLocList()
\ 'postprocess': ['sort'] })
" adjust for weirdness in each checker
- for n in range(len(loclist))
- let loclist[n]['type'] = match(['R', 'C', 'W'], loclist[n]['text'][0]) >= 0 ? 'W' : 'E'
- if loclist[n]['text'] =~# '\v\[%(mccabe|pep257|pylint)\]$'
- if has_key(loclist[n], 'col')
- let loclist[n]['col'] += 1
+ for e in loclist
+ let e['type'] = e['text'] =~? '\m^[RCW]' ? 'W' : 'E'
+ if e['text'] =~# '\v\[%(mccabe|pep257|pylint)\]$'
+ if has_key(e, 'col')
+ let e['col'] += 1
endif
endif
- if loclist[n]['text'] =~# '\v\[pylint\]$'
- if has_key(loclist[n], 'vcol')
- let loclist[n]['vcol'] = 0
+ if e['text'] =~# '\v\[pylint\]$'
+ if has_key(e, 'vcol')
+ let e['vcol'] = 0
endif
endif
- if loclist[n]['text'] =~# '\v\[%(mccabe|pep257|pep8)\]$'
- let loclist[n]['subtype'] = 'Style'
+ if e['text'] =~# '\v\[%(mccabe|pep257|pep8)\]$'
+ let e['subtype'] = 'Style'
endif
endfor
return loclist
endfunction
+runtime! syntax_checkers/python/pyflakes.vim
+
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'python',
\ 'name': 'pylama' })
-runtime! syntax_checkers/python/pyflakes.vim
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/python/pylint.vim b/bundle/syntastic/syntax_checkers/python/pylint.vim
index 016f8e01..5cc74bb0 100644
--- a/bundle/syntastic/syntax_checkers/python/pylint.vim
+++ b/bundle/syntastic/syntax_checkers/python/pylint.vim
@@ -4,6 +4,7 @@
"Author: Parantapa Bhattacharya
"
"============================================================================
+
if exists("g:loaded_syntastic_python_pylint_checker")
finish
endif
@@ -11,19 +12,21 @@ let g:loaded_syntastic_python_pylint_checker = 1
let s:pylint_new = -1
-function! SyntaxCheckers_python_pylint_IsAvailable()
- let s:pylint_new = executable('pylint') ? s:PylintNew() : -1
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_python_pylint_IsAvailable() dict
+ let exe = self.getExec()
+ let s:pylint_new = executable(exe) ? s:PylintNew(exe) : -1
return s:pylint_new >= 0
endfunction
-function! SyntaxCheckers_python_pylint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'pylint',
- \ 'args': (s:pylint_new ? '--msg-template="{path}:{line}: [{msg_id}] {msg}" -r n' : '-f parseable -r n -i y'),
- \ 'filetype': 'python',
- \ 'subchecker': 'pylint' })
+function! SyntaxCheckers_python_pylint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': (s:pylint_new ? '-f text --msg-template="{path}:{line}:{column}:{C}: [{symbol}] {msg}" -r n' : '-f parseable -r n -i y') })
let errorformat =
+ \ '%A%f:%l:%c:%t: %m,' .
\ '%A%f:%l: %m,' .
\ '%A%f:(%l): %m,' .
\ '%-Z%p^%.%#,' .
@@ -32,32 +35,41 @@ function! SyntaxCheckers_python_pylint_GetLocList()
let loclist=SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
- \ 'postprocess': ['sort'] })
+ \ 'postprocess': ['sort'],
+ \ 'returns': range(32) })
+
+ for e in loclist
+ if !s:pylint_new
+ let e['type'] = e['text'][1]
+ endif
- for n in range(len(loclist))
- let type = loclist[n]['text'][1]
- if type =~# '\m^[EF]'
- let loclist[n]['type'] = 'E'
- elseif type =~# '\m^[CRW]'
- let loclist[n]['type'] = 'W'
+ if e['type'] =~? '\m^[EF]'
+ let e['type'] = 'E'
+ elseif e['type'] =~? '\m^[CRW]'
+ let e['type'] = 'W'
else
- let loclist[n]['valid'] = 0
+ let e['valid'] = 0
endif
- let loclist[n]['vcol'] = 0
+
+ let e['col'] += 1
+ let e['vcol'] = 0
endfor
return loclist
endfunction
-function s:PylintNew()
+function! s:PylintNew(exe)
+ let exe = syntastic#util#shescape(a:exe)
try
" On Windows the version is shown as "pylint-script.py 1.0.0".
- " On Gentoo Linux it's "pylint-python2.7 0.28.0". Oh, joy. :)
- let pylint_version = filter(split(system('pylint --version'), '\m, \=\|\n'), 'v:val =~# ''\m^pylint\>''')[0]
+ " On Gentoo Linux it's "pylint-python2.7 0.28.0".
+ " On NixOS, that would be ".pylint-wrapped 0.26.0", that would be.
+ " Have you guys considered switching to creative writing yet? ;)
+ let pylint_version = filter(split(system(exe . ' --version'), '\m, \=\|\n'), 'v:val =~# ''\m^\.\=pylint\>''')[0]
let pylint_version = substitute(pylint_version, '\v^\S+\s+', '', '')
let ret = syntastic#util#versionIsAtLeast(syntastic#util#parseVersion(pylint_version), [1])
- catch /^Vim\%((\a\+)\)\=:E684/
- call syntastic#util#error("checker python/pylint: can't parse version string (abnormal termination?)")
+ catch /\m^Vim\%((\a\+)\)\=:E684/
+ call syntastic#log#error("checker python/pylint: can't parse version string (abnormal termination?)")
let ret = -1
endtry
return ret
@@ -66,3 +78,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'python',
\ 'name': 'pylint' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/python/python.vim b/bundle/syntastic/syntax_checkers/python/python.vim
index eff1696b..eced4d30 100644
--- a/bundle/syntastic/syntax_checkers/python/python.vim
+++ b/bundle/syntastic/syntax_checkers/python/python.vim
@@ -1,43 +1,46 @@
"============================================================================
"File: python.vim
"Description: Syntax checking plugin for syntastic.vim
-"Author: Artem Nezvigin
-"
-" `errorformat` derived from:
-" http://www.vim.org/scripts/download_script.php?src_id=1392
+"Maintainer: LCD 47
+"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_python_python_checker")
finish
endif
-let g:loaded_syntastic_python_python_checker=1
+let g:loaded_syntastic_python_python_checker = 1
-function! SyntaxCheckers_python_python_IsAvailable()
- return executable('python')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_python_python_GetLocList()
- let fname = "'" . escape(expand('%'), "\\'") . "'"
+let s:compiler = expand(':p:h') . syntastic#util#Slash() . 'compile.py'
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'python',
- \ 'args': '-c',
- \ 'fname': syntastic#util#shescape("compile(open(" . fname . ").read(), " . fname . ", 'exec')"),
- \ 'filetype': 'python',
- \ 'subchecker': 'python' })
+function! SyntaxCheckers_python_python_IsAvailable() dict
+ return executable(self.getExec()) &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(self.getExecEscaped() . ' --version'), [2, 6])
+endfunction
- let errorformat =
- \ '%E File "%f"\, line %l,' .
- \ '%C %p^,' .
- \ '%C %.%#,' .
- \ '%Z%m,' .
- \ '%-G%.%#'
+function! SyntaxCheckers_python_python_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'exe': [self.getExec(), s:compiler] })
+
+ let errorformat = '%E%f:%l:%c: %m'
return SyntasticMake({
\ 'makeprg': makeprg,
- \ 'errorformat': errorformat })
+ \ 'errorformat': errorformat,
+ \ 'returns': [0] })
endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'python',
\ 'name': 'python'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/racket/code-ayatollah.vim b/bundle/syntastic/syntax_checkers/racket/code-ayatollah.vim
new file mode 100644
index 00000000..f8002a72
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/racket/code-ayatollah.vim
@@ -0,0 +1,59 @@
+"============================================================================
+"File: code-ayatollah.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: LCD 47
+"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_racket_code_ayatollah_checker")
+ finish
+endif
+let g:loaded_syntastic_racket_code_ayatollah_checker = 1
+
+if !exists('g:syntastic_racket_code_ayatollah_script')
+ let g:syntastic_racket_code_ayatollah_script = 'code-ayatollah.rkt'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_racket_code_ayatollah_IsAvailable() dict
+ let s:script = expand(g:syntastic_racket_code_ayatollah_script)
+ return executable(self.getExec()) && filereadable(s:script)
+endfunction
+
+function! SyntaxCheckers_racket_code_ayatollah_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'exe': [self.getExec(), s:script] })
+
+ let errorformat =
+ \ ' %l:%v: %m,' .
+ \ '%PErrors in %f:,' .
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style',
+ \ 'postprocess': ['sort'] })
+
+ for e in loclist
+ let e['col'] += 1
+ endfor
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'racket',
+ \ 'name': 'code_ayatollah',
+ \ 'exec': 'racket' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/racket/racket.vim b/bundle/syntastic/syntax_checkers/racket/racket.vim
new file mode 100644
index 00000000..71615205
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/racket/racket.vim
@@ -0,0 +1,50 @@
+"============================================================================
+"File: racket.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Author: Steve Bragg
+"
+"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_racket_racket_checker")
+ finish
+endif
+let g:loaded_syntastic_racket_racket_checker=1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_racket_racket_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ " example of error message
+ "eval-apply.rkt:460:30: the-empty-environment: unbound identifier in module
+ " in: the-empty-environment
+ let errorformat = '%f:%l:%v: %m'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+
+ for e in loclist
+ if has_key(e, 'col')
+ let e['col'] += 1
+ endif
+ endfor
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'racket',
+ \ 'name': 'racket'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/rst/rst2pseudoxml.vim b/bundle/syntastic/syntax_checkers/rst/rst2pseudoxml.vim
index 454b4d85..e5fb0a1f 100644
--- a/bundle/syntastic/syntax_checkers/rst/rst2pseudoxml.vim
+++ b/bundle/syntastic/syntax_checkers/rst/rst2pseudoxml.vim
@@ -16,19 +16,17 @@
if exists("g:loaded_syntastic_rst_rst2pseudoxml_checker")
finish
endif
-let g:loaded_syntastic_rst_rst2pseudoxml_checker=1
+let g:loaded_syntastic_rst_rst2pseudoxml_checker = 1
-function! SyntaxCheckers_rst_rst2pseudoxml_IsAvailable()
- return executable("rst2pseudoxml.py") || executable("rst2pseudoxml")
-endfunction
+let s:rst2pseudoxml = executable('rst2pseudoxml.py') ? 'rst2pseudoxml.py' : 'rst2pseudoxml'
+
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_rst_rst2pseudoxml_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': s:exe(),
- \ 'args': '--report=2 --exit-status=1',
- \ 'tail': syntastic#util#DevNull(),
- \ 'filetype': 'rst',
- \ 'subchecker': 'rst2pseudoxml' })
+function! SyntaxCheckers_rst_rst2pseudoxml_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '--report=2 --exit-status=1',
+ \ 'tail': syntastic#util#DevNull() })
let errorformat =
\ '%f:%l: (%tNFO/1) %m,'.
@@ -41,22 +39,24 @@ function! SyntaxCheckers_rst_rst2pseudoxml_GetLocList()
\ 'makeprg': makeprg,
\ 'errorformat': errorformat })
- for n in range(len(loclist))
- if loclist[n]['type'] ==? 'S'
- let loclist[n]['type'] = 'E'
- elseif loclist[n]['type'] ==? 'I'
- let loclist[n]['type'] = 'W'
- let loclist[n]['subtype'] = 'Style'
+ for e in loclist
+ if e['type'] ==? 'S'
+ let e['type'] = 'E'
+ elseif e['type'] ==? 'I'
+ let e['type'] = 'W'
+ let e['subtype'] = 'Style'
endif
endfor
return loclist
endfunction
-function s:exe()
- return executable("rst2pseudoxml.py") ? "rst2pseudoxml.py" : "rst2pseudoxml"
-endfunction
-
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'rst',
- \ 'name': 'rst2pseudoxml'})
+ \ 'name': 'rst2pseudoxml',
+ \ 'exec': s:rst2pseudoxml })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/rst/rstcheck.vim b/bundle/syntastic/syntax_checkers/rst/rstcheck.vim
new file mode 100644
index 00000000..5c831490
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/rst/rstcheck.vim
@@ -0,0 +1,50 @@
+"============================================================================
+"File: rstcheck.vim
+"Description: Syntax checking for reStructuredText and embedded code blocks
+"Authors: Steven Myint
+"
+"============================================================================
+
+if exists("g:loaded_syntastic_rst_rstcheck_checker")
+ finish
+endif
+let g:loaded_syntastic_rst_rstcheck_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_rst_rstcheck_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat =
+ \ '%f:%l: (%tNFO/1) %m,'.
+ \ '%f:%l: (%tARNING/2) %m,'.
+ \ '%f:%l: (%tRROR/3) %m,'.
+ \ '%f:%l: (%tEVERE/4) %m,'.
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 1] })
+
+ for e in loclist
+ if e['type'] ==? 'S'
+ let e['type'] = 'E'
+ elseif e['type'] ==? 'I'
+ let e['type'] = 'W'
+ let e['subtype'] = 'Style'
+ endif
+ endfor
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'rst',
+ \ 'name': 'rstcheck'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/ruby/jruby.vim b/bundle/syntastic/syntax_checkers/ruby/jruby.vim
index bef2b5f5..fc7ea63e 100644
--- a/bundle/syntastic/syntax_checkers/ruby/jruby.vim
+++ b/bundle/syntastic/syntax_checkers/ruby/jruby.vim
@@ -9,21 +9,28 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_ruby_jruby_checker")
finish
endif
-let g:loaded_syntastic_ruby_jruby_checker=1
+let g:loaded_syntastic_ruby_jruby_checker = 1
-function! SyntaxCheckers_ruby_jruby_IsAvailable()
- return executable('jruby')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_ruby_jruby_GetLocList() dict
+ if syntastic#util#isRunningWindows()
+ let exe = self.getExecEscaped()
+ let args = '-T1'
+ else
+ let exe = 'RUBYOPT= ' . self.getExecEscaped()
+ let args = ''
+ endif
-function! SyntaxCheckers_ruby_jruby_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': s:exe(),
- \ 'args': s:args(),
- \ 'filetype': 'ruby',
- \ 'subchecker': 'jruby' })
+ let makeprg = self.makeprgBuild({
+ \ 'exe': exe,
+ \ 'args': args,
+ \ 'args_after': '-W1 -c' })
let errorformat =
\ '%-GSyntax OK for %f,'.
@@ -39,14 +46,11 @@ function! SyntaxCheckers_ruby_jruby_GetLocList()
\ 'errorformat': errorformat })
endfunction
-function s:args()
- return has('win32') ? '-W1 -T1 -c' : '-W1 -c'
-endfunction
-
-function s:exe()
- return has('win32') ? 'jruby' : 'RUBYOPT= jruby'
-endfunction
-
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'ruby',
\ 'name': 'jruby'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/ruby/macruby.vim b/bundle/syntastic/syntax_checkers/ruby/macruby.vim
index 9226e41e..d66595ca 100644
--- a/bundle/syntastic/syntax_checkers/ruby/macruby.vim
+++ b/bundle/syntastic/syntax_checkers/ruby/macruby.vim
@@ -8,21 +8,19 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_ruby_macruby_checker")
finish
endif
-let g:loaded_syntastic_ruby_macruby_checker=1
+let g:loaded_syntastic_ruby_macruby_checker = 1
-function! SyntaxCheckers_ruby_macruby_IsAvailable()
- return executable('macruby')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_ruby_macruby_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'RUBYOPT= macruby',
- \ 'args': '-W1 -c',
- \ 'filetype': 'ruby',
- \ 'subchecker': 'macruby' })
+function! SyntaxCheckers_ruby_macruby_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'exe': 'RUBYOPT= ' . self.getExecEscaped(),
+ \ 'args_after': '-W1 -c' })
let errorformat =
\ '%-GSyntax OK,'.
@@ -41,3 +39,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'ruby',
\ 'name': 'macruby'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/ruby/mri.vim b/bundle/syntastic/syntax_checkers/ruby/mri.vim
index 27a46a48..aa7de267 100644
--- a/bundle/syntastic/syntax_checkers/ruby/mri.vim
+++ b/bundle/syntastic/syntax_checkers/ruby/mri.vim
@@ -13,36 +13,33 @@
if exists("g:loaded_syntastic_ruby_mri_checker")
finish
endif
-let g:loaded_syntastic_ruby_mri_checker=1
+let g:loaded_syntastic_ruby_mri_checker = 1
-if !exists("g:syntastic_ruby_exec")
- let g:syntastic_ruby_exec = "ruby"
-endif
-
-function! SyntaxCheckers_ruby_mri_IsAvailable()
- return executable(expand(g:syntastic_ruby_exec))
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
function! SyntaxCheckers_ruby_mri_GetHighlightRegex(i)
- if match(a:i['text'], 'assigned but unused variable') > -1
+ if stridx(a:i['text'], 'assigned but unused variable') >= 0
let term = split(a:i['text'], ' - ')[1]
- return '\V\<'.term.'\>'
+ return '\V\<' . escape(term, '\') . '\>'
endif
return ''
endfunction
-function! SyntaxCheckers_ruby_mri_GetLocList()
- let exe = expand(g:syntastic_ruby_exec)
- if !has('win32')
+function! SyntaxCheckers_ruby_mri_GetLocList() dict
+ if !exists('g:syntastic_ruby_exec')
+ let g:syntastic_ruby_exec = self.getExec()
+ endif
+
+ let exe = syntastic#util#shexpand(g:syntastic_ruby_exec)
+ if !syntastic#util#isRunningWindows()
let exe = 'RUBYOPT= ' . exe
endif
- let makeprg = syntastic#makeprg#build({
+ let makeprg = self.makeprgBuild({
\ 'exe': exe,
- \ 'args': '-w -T1 -c',
- \ 'filetype': 'ruby',
- \ 'subchecker': 'mri' })
+ \ 'args_after': '-w -T1 -c' })
"this is a hack to filter out a repeated useless warning in rspec files
"containing lines like
@@ -74,4 +71,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'ruby',
- \ 'name': 'mri'})
+ \ 'name': 'mri',
+ \ 'exec': 'ruby'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/ruby/rubocop.vim b/bundle/syntastic/syntax_checkers/ruby/rubocop.vim
index 22e6131b..9177c563 100644
--- a/bundle/syntastic/syntax_checkers/ruby/rubocop.vim
+++ b/bundle/syntastic/syntax_checkers/ruby/rubocop.vim
@@ -16,20 +16,19 @@
if exists("g:loaded_syntastic_ruby_rubocop_checker")
finish
endif
-let g:loaded_syntastic_ruby_rubocop_checker=1
+let g:loaded_syntastic_ruby_rubocop_checker = 1
-function! SyntaxCheckers_ruby_rubocop_IsAvailable()
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_ruby_rubocop_IsAvailable() dict
return
- \ executable('rubocop') &&
- \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion('rubocop --version'), [0,9,0])
+ \ executable(self.getExec()) &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(self.getExecEscaped() . ' --version'), [0, 9, 0])
endfunction
-function! SyntaxCheckers_ruby_rubocop_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'rubocop',
- \ 'args': '--format emacs --silent',
- \ 'filetype': 'ruby',
- \ 'subchecker': 'rubocop' })
+function! SyntaxCheckers_ruby_rubocop_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--format emacs --silent' })
let errorformat = '%f:%l:%c: %t: %m'
@@ -39,11 +38,11 @@ function! SyntaxCheckers_ruby_rubocop_GetLocList()
\ 'subtype': 'Style'})
" convert rubocop severities to error types recognized by syntastic
- for n in range(len(loclist))
- if loclist[n]['type'] == 'F'
- let loclist[n]['type'] = 'E'
- elseif loclist[n]['type'] != 'W' && loclist[n]['type'] != 'E'
- let loclist[n]['type'] = 'W'
+ for e in loclist
+ if e['type'] ==# 'F'
+ let e['type'] = 'E'
+ elseif e['type'] !=# 'W' && e['type'] !=# 'E'
+ let e['type'] = 'W'
endif
endfor
@@ -53,3 +52,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'ruby',
\ 'name': 'rubocop'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/ruby/rubylint.vim b/bundle/syntastic/syntax_checkers/ruby/rubylint.vim
index 5b914f43..02ed2f2f 100644
--- a/bundle/syntastic/syntax_checkers/ruby/rubylint.vim
+++ b/bundle/syntastic/syntax_checkers/ruby/rubylint.vim
@@ -16,16 +16,11 @@ endif
let g:loaded_syntastic_ruby_rubylint_checker = 1
-function! SyntaxCheckers_ruby_rubylint_IsAvailable()
- return executable("ruby-lint")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_ruby_rubylint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'ruby-lint',
- \ 'args': 'analyze --presenter=syntastic',
- \ 'filetype': 'ruby',
- \ 'subchecker': 'rubylint' })
+function! SyntaxCheckers_ruby_rubylint_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args': 'analyze --presenter=syntastic' })
let errorformat = '%f:%t:%l:%c: %m'
@@ -36,6 +31,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'ruby',
- \ 'name': 'rubylint' })
+ \ 'name': 'rubylint',
+ \ 'exec': 'ruby-lint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
-" vim: set ts=4 sts=4 sw=4:
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/rust/rustc.vim b/bundle/syntastic/syntax_checkers/rust/rustc.vim
index e88b4cf9..97ef66a0 100644
--- a/bundle/syntastic/syntax_checkers/rust/rustc.vim
+++ b/bundle/syntastic/syntax_checkers/rust/rustc.vim
@@ -13,22 +13,17 @@
if exists("g:loaded_syntastic_rust_rustc_checker")
finish
endif
-let g:loaded_syntastic_rust_rustc_checker=1
+let g:loaded_syntastic_rust_rustc_checker = 1
-function! SyntaxCheckers_rust_rustc_IsAvailable()
- return executable("rustc")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_rust_rustc_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'rustc',
- \ 'args': '--parse-only',
- \ 'filetype': 'rust',
- \ 'subchecker': 'rustc' })
+function! SyntaxCheckers_rust_rustc_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--no-trans' })
let errorformat =
- \ '%E%f:%l:%c: \\d%#:\\d%# %.%\{-}error:%.%\{-} %m,' .
- \ '%W%f:%l:%c: \\d%#:\\d%# %.%\{-}warning:%.%\{-} %m,' .
+ \ '%E%f:%l:%c: %\d%#:%\d%# %.%\{-}error:%.%\{-} %m,' .
+ \ '%W%f:%l:%c: %\d%#:%\d%# %.%\{-}warning:%.%\{-} %m,' .
\ '%C%f:%l %m,' .
\ '%-Z%.%#'
@@ -40,3 +35,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'rust',
\ 'name': 'rustc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/sass/sass.vim b/bundle/syntastic/syntax_checkers/sass/sass.vim
index 4b8d4863..353c1a93 100644
--- a/bundle/syntastic/syntax_checkers/sass/sass.vim
+++ b/bundle/syntastic/syntax_checkers/sass/sass.vim
@@ -13,11 +13,7 @@
if exists("g:loaded_syntastic_sass_sass_checker")
finish
endif
-let g:loaded_syntastic_sass_sass_checker=1
-
-function! SyntaxCheckers_sass_sass_IsAvailable()
- return executable("sass")
-endfunction
+let g:loaded_syntastic_sass_sass_checker = 1
"sass caching for large files drastically speeds up the checking, but store it
"in a temp location otherwise sass puts .sass_cache dirs in the users project
@@ -34,16 +30,16 @@ if executable("compass")
let s:imports = "--compass"
endif
-function! SyntaxCheckers_sass_sass_GetLocList()
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_sass_sass_GetLocList() dict
if !g:syntastic_sass_check_partials && expand('%:t')[0] == '_'
return []
endif
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'sass',
- \ 'args': '--cache-location ' . s:sass_cache_location . ' ' . s:imports . ' --check',
- \ 'filetype': 'sass',
- \ 'subchecker': 'sass' })
+ let makeprg = self.makeprgBuild({
+ \ 'args_before': '--cache-location ' . s:sass_cache_location . ' ' . s:imports . ' --check' })
let errorformat =
\ '%ESyntax %trror: %m,' .
@@ -76,3 +72,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'sass',
\ 'name': 'sass'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/scala/fsc.vim b/bundle/syntastic/syntax_checkers/scala/fsc.vim
index d0e95a7d..92912423 100644
--- a/bundle/syntastic/syntax_checkers/scala/fsc.vim
+++ b/bundle/syntastic/syntax_checkers/scala/fsc.vim
@@ -15,26 +15,26 @@ if exists('g:loaded_syntastic_scala_fsc_checker')
endif
let g:loaded_syntastic_scala_fsc_checker = 1
-function! SyntaxCheckers_scala_fsc_IsAvailable()
- return executable('fsc')
-endfunction
-
if !exists('g:syntastic_scala_options')
let g:syntastic_scala_options = ''
endif
-function! SyntaxCheckers_scala_fsc_GetLocList()
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_scala_fsc_GetLocList() dict
" fsc has some serious problems with the
" working directory changing after being started
" that's why we better pass an absolute path
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'fsc',
- \ 'args': '-Ystop-after:parser ' . g:syntastic_scala_options,
- \ 'fname': syntastic#util#shexpand('%:p'),
- \ 'filetype': 'scala',
- \ 'subchecker': 'fsc' })
+ let makeprg = self.makeprgBuild({
+ \ 'args': g:syntastic_scala_options,
+ \ 'args_after': '-Ystop-after:parser',
+ \ 'fname': syntastic#util#shexpand('%:p') })
- let errorformat = '%f:%l: %trror: %m'
+ let errorformat =
+ \ '%E%f:%l: %trror: %m,' .
+ \ '%Z%p^,' .
+ \ '%-G%.%#'
return SyntasticMake({
\ 'makeprg': makeprg,
@@ -44,3 +44,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'scala',
\ 'name': 'fsc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/scala/scalac.vim b/bundle/syntastic/syntax_checkers/scala/scalac.vim
index d6319c16..ea465f08 100644
--- a/bundle/syntastic/syntax_checkers/scala/scalac.vim
+++ b/bundle/syntastic/syntax_checkers/scala/scalac.vim
@@ -13,25 +13,24 @@
if exists("g:loaded_syntastic_scala_scalac_checker")
finish
endif
-let g:loaded_syntastic_scala_scalac_checker=1
-
-function! SyntaxCheckers_scala_scalac_IsAvailable()
- return executable("scalac")
-endfunction
+let g:loaded_syntastic_scala_scalac_checker = 1
if !exists('g:syntastic_scala_options')
let g:syntastic_scala_options = ''
endif
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_scala_scalac_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'scalac',
- \ 'args': '-Ystop-after:parser ' . g:syntastic_scala_options,
- \ 'filetype': 'scala',
- \ 'subchecker': 'scalac' })
+function! SyntaxCheckers_scala_scalac_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': g:syntastic_scala_options,
+ \ 'args_after': '-Ystop-after:parser' })
- let errorformat = '%f:%l: %trror: %m'
+ let errorformat =
+ \ '%E%f:%l: %trror: %m,' .
+ \ '%Z%p^,' .
+ \ '%-G%.%#'
return SyntasticMake({
\ 'makeprg': makeprg,
@@ -41,3 +40,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'scala',
\ 'name': 'scalac'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/scss/sass.vim b/bundle/syntastic/syntax_checkers/scss/sass.vim
index 604bb41d..61bd6de7 100644
--- a/bundle/syntastic/syntax_checkers/scss/sass.vim
+++ b/bundle/syntastic/syntax_checkers/scss/sass.vim
@@ -14,18 +14,13 @@
if exists("g:loaded_syntastic_scss_sass_checker")
finish
endif
-let g:loaded_syntastic_scss_sass_checker=1
+let g:loaded_syntastic_scss_sass_checker = 1
-function! SyntaxCheckers_scss_sass_IsAvailable()
- return SyntaxCheckers_sass_sass_IsAvailable()
-endfunction
-
-function! SyntaxCheckers_scss_sass_GetLocList()
- return SyntaxCheckers_sass_sass_GetLocList()
-endfunction
+runtime! syntax_checkers/sass/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'scss',
- \ 'name': 'sass'})
+ \ 'name': 'sass',
+ \ 'redirect': 'sass/sass'})
-runtime! syntax_checkers/sass/*.vim
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/scss/scss_lint.vim b/bundle/syntastic/syntax_checkers/scss/scss_lint.vim
new file mode 100644
index 00000000..2f971dce
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/scss/scss_lint.vim
@@ -0,0 +1,45 @@
+"============================================================================
+"File: scss_lint.vim
+"Description: SCSS style and syntax checker plugin for Syntastic
+"Maintainer: Shane da Silva
+"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_scss_scss_lint_checker")
+ finish
+endif
+let g:loaded_syntastic_scss_scss_lint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_scss_scss_lint_IsAvailable() dict
+ return
+ \ executable(self.getExec()) &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(
+ \ self.getExecEscaped() . ' --version'), [0, 12])
+endfunction
+
+function! SyntaxCheckers_scss_scss_lint_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+ let errorformat = '%f:%l [%t] %m'
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style',
+ \ 'returns': [0, 1, 65] })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'scss',
+ \ 'name': 'scss_lint',
+ \ 'exec': 'scss-lint' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/sh/checkbashisms.vim b/bundle/syntastic/syntax_checkers/sh/checkbashisms.vim
index d99a05ea..42751cf9 100644
--- a/bundle/syntastic/syntax_checkers/sh/checkbashisms.vim
+++ b/bundle/syntastic/syntax_checkers/sh/checkbashisms.vim
@@ -9,20 +9,13 @@
if exists("g:loaded_syntastic_sh_checkbashisms_checker")
finish
endif
-let g:loaded_syntastic_sh_checkbashisms_checker=1
+let g:loaded_syntastic_sh_checkbashisms_checker = 1
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_sh_checkbashisms_IsAvailable()
- return executable('checkbashisms')
-endfunction
-
-
-function! SyntaxCheckers_sh_checkbashisms_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'checkbashisms',
- \ 'args': '-fx',
- \ 'filetype': 'sh',
- \ 'subchecker': 'checkbashisms'})
+function! SyntaxCheckers_sh_checkbashisms_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args': '-fx' })
let errorformat =
\ '%-Gscript %f is already a bash script; skipping,' .
@@ -39,7 +32,11 @@ function! SyntaxCheckers_sh_checkbashisms_GetLocList()
\ 'subtype': 'Style' })
endfunction
-
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'sh',
\ 'name': 'checkbashisms' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/sh/sh.vim b/bundle/syntastic/syntax_checkers/sh/sh.vim
index f1fb0686..0cae2429 100644
--- a/bundle/syntastic/syntax_checkers/sh/sh.vim
+++ b/bundle/syntastic/syntax_checkers/sh/sh.vim
@@ -13,18 +13,21 @@
if exists("g:loaded_syntastic_sh_sh_checker")
finish
endif
-let g:loaded_syntastic_sh_sh_checker=1
+let g:loaded_syntastic_sh_sh_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
function! s:GetShell()
if !exists('b:shell') || b:shell == ''
let b:shell = ''
let shebang = getbufline(bufnr('%'), 1)[0]
- if len(shebang) > 0
- if match(shebang, 'bash') >= 0
+ if shebang != ''
+ if stridx(shebang, 'bash') >= 0
let b:shell = 'bash'
- elseif match(shebang, 'zsh') >= 0
+ elseif stridx(shebang, 'zsh') >= 0
let b:shell = 'zsh'
- elseif match(shebang, 'sh') >= 0
+ elseif stridx(shebang, 'sh') >= 0
let b:shell = 'sh'
endif
endif
@@ -38,26 +41,24 @@ endfunction
function! s:ForwardToZshChecker()
let registry = g:SyntasticRegistry.Instance()
- if registry.checkable('zsh')
- return SyntaxCheckers_zsh_zsh_GetLocList()
+ if registry.isCheckable('zsh')
+ return registry.getCheckers('zsh', ['zsh'])[0].getLocListRaw()
else
return []
endif
-
endfunction
-
function! s:IsShellValid()
return len(s:GetShell()) > 0 && executable(s:GetShell())
endfunction
-function! SyntaxCheckers_sh_sh_IsAvailable()
+function! SyntaxCheckers_sh_sh_IsAvailable() dict
return s:IsShellValid()
endfunction
-function! SyntaxCheckers_sh_sh_GetLocList()
- if s:GetShell() == 'zsh'
+function! SyntaxCheckers_sh_sh_GetLocList() dict
+ if s:GetShell() ==# 'zsh'
return s:ForwardToZshChecker()
endif
@@ -65,11 +66,9 @@ function! SyntaxCheckers_sh_sh_GetLocList()
return []
endif
- let makeprg = syntastic#makeprg#build({
+ let makeprg = self.makeprgBuild({
\ 'exe': s:GetShell(),
- \ 'args': '-n',
- \ 'filetype': 'sh',
- \ 'subchecker': 'sh' })
+ \ 'args_after': '-n' })
let errorformat = '%f: line %l: %m'
@@ -81,3 +80,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'sh',
\ 'name': 'sh' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/sh/shellcheck.vim b/bundle/syntastic/syntax_checkers/sh/shellcheck.vim
index 6e73bb92..de69683c 100644
--- a/bundle/syntastic/syntax_checkers/sh/shellcheck.vim
+++ b/bundle/syntastic/syntax_checkers/sh/shellcheck.vim
@@ -8,33 +8,24 @@ if exists("g:loaded_syntastic_sh_shellcheck_checker")
endif
let g:loaded_syntastic_sh_shellcheck_checker = 1
-function! SyntaxCheckers_sh_shellcheck_IsAvailable()
- return executable('jsoncheck')
-endfunction
-
-function! SyntaxCheckers_sh_shellcheck_Preprocess(json)
- " A hat tip to Mark Weber for this trick
- " http://stackoverflow.com/a/19105763
- let errors = eval(join(a:json, ''))
-
- call filter(errors, 'v:val["level"] =~? ''\v^(error|warning|style)$''')
- return map(errors, 'v:val["level"][0] . ":" . v:val["line"] . ":" . v:val["column"] . ":" . v:val["message"]')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_sh_shellcheck_GetLocList()
- let makeprg = 'jsoncheck <' . syntastic#util#shexpand('%')
+function! SyntaxCheckers_sh_shellcheck_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-f gcc' })
- let errorformat = '%t:%l:%v:%m'
+ let errorformat =
+ \ '%f:%l:%c: %trror: %m,' .
+ \ '%f:%l:%c: %tarning: %m,' .
+ \ '%f:%l:%c: %tote: %m'
let loclist = SyntasticMake({
\ 'makeprg': makeprg,
\ 'errorformat': errorformat,
- \ 'preprocess': 'SyntaxCheckers_sh_shellcheck_Preprocess',
- \ 'defaults': {'bufnr': bufnr("")},
- \ 'returns': [0] })
+ \ 'returns': [0, 1] })
for e in loclist
- if e['type'] ==? 's'
+ if e['type'] ==? 'n'
let e['type'] = 'w'
let e['subtype'] = 'Style'
endif
@@ -46,3 +37,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'sh',
\ 'name': 'shellcheck' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/slim/slimrb.vim b/bundle/syntastic/syntax_checkers/slim/slimrb.vim
index bda8be01..8cc2bfc0 100644
--- a/bundle/syntastic/syntax_checkers/slim/slimrb.vim
+++ b/bundle/syntastic/syntax_checkers/slim/slimrb.vim
@@ -13,27 +13,20 @@
if exists("g:loaded_syntastic_slim_slimrb_checker")
finish
endif
-let g:loaded_syntastic_slim_slimrb_checker=1
+let g:loaded_syntastic_slim_slimrb_checker = 1
-function! SyntaxCheckers_slim_slimrb_IsAvailable()
- return executable("slimrb")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! s:SlimrbVersion()
- if !exists('s:slimrb_version')
- let s:slimrb_version = syntastic#util#getVersion('slimrb --version 2>' . syntastic#util#DevNull())
+function! SyntaxCheckers_slim_slimrb_GetLocList() dict
+ if !exists('s:slimrb_new')
+ let s:slimrb_new = syntastic#util#versionIsAtLeast(syntastic#util#getVersion(
+ \ self.getExecEscaped() . ' --version 2>'. syntastic#util#DevNull()), [1, 3, 1])
endif
- return s:slimrb_version
-endfunction
-function! SyntaxCheckers_slim_slimrb_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'slimrb',
- \ 'args': '-c',
- \ 'filetype': 'slim',
- \ 'subchecker': 'slimrb' })
+ let makeprg = self.makeprgBuild({ 'args_after': '-c' })
- if syntastic#util#versionIsAtLeast(s:SlimrbVersion(), [1,3,1])
+ if s:slimrb_new
let errorformat =
\ '%C\ %#%f\, Line %l\, Column %c,'.
\ '%-G\ %.%#,'.
@@ -55,3 +48,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'slim',
\ 'name': 'slimrb'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/tcl/nagelfar.vim b/bundle/syntastic/syntax_checkers/tcl/nagelfar.vim
index c908f73f..0797690e 100644
--- a/bundle/syntastic/syntax_checkers/tcl/nagelfar.vim
+++ b/bundle/syntastic/syntax_checkers/tcl/nagelfar.vim
@@ -11,21 +11,17 @@
" See nagelfar homepage http://nagelfar.berlios.de/.
"
"============================================================================
+
if exists("g:loaded_syntastic_tcl_nagelfar_checker")
finish
endif
-let g:loaded_syntastic_tcl_nagelfar_checker=1
+let g:loaded_syntastic_tcl_nagelfar_checker = 1
-function! SyntaxCheckers_tcl_nagelfar_IsAvailable()
- return executable('nagelfar')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_tcl_nagelfar_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'nagelfar',
- \ 'args': '-H',
- \ 'filetype': 'tcl',
- \ 'subchecker': 'nagelfar' })
+function! SyntaxCheckers_tcl_nagelfar_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-H' })
let errorformat =
\ '%I%f: %l: N %m,'.
@@ -40,3 +36,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'tcl',
\ 'name': 'nagelfar'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/tex/chktex.vim b/bundle/syntastic/syntax_checkers/tex/chktex.vim
index 43ae2f52..b55eaee8 100644
--- a/bundle/syntastic/syntax_checkers/tex/chktex.vim
+++ b/bundle/syntastic/syntax_checkers/tex/chktex.vim
@@ -28,20 +28,15 @@ if exists('g:loaded_syntastic_tex_chktex_checker')
endif
let g:loaded_syntastic_tex_chktex_checker = 1
+let s:save_cpo = &cpo
+set cpo&vim
+
if !exists('g:syntastic_tex_chktex_showmsgs')
let g:syntastic_tex_chktex_showmsgs = 1
endif
-function! SyntaxCheckers_tex_chktex_IsAvailable()
- return executable('chktex')
-endfunction
-
-function! SyntaxCheckers_tex_chktex_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'chktex',
- \ 'post_args': '-q -v1',
- \ 'filetype': 'tex',
- \ 'subchecker': 'chktex' })
+function! SyntaxCheckers_tex_chktex_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-q -v1' })
let errorformat =
\ '%EError %n in %f line %l: %m,' .
@@ -60,3 +55,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'tex',
\ 'name': 'chktex'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/tex/lacheck.vim b/bundle/syntastic/syntax_checkers/tex/lacheck.vim
index d68a519a..0896919c 100644
--- a/bundle/syntastic/syntax_checkers/tex/lacheck.vim
+++ b/bundle/syntastic/syntax_checkers/tex/lacheck.vim
@@ -13,17 +13,13 @@
if exists('g:loaded_syntastic_tex_lacheck_checker')
finish
endif
-let g:loaded_syntastic_tex_lacheck_checker=1
+let g:loaded_syntastic_tex_lacheck_checker = 1
-function! SyntaxCheckers_tex_lacheck_IsAvailable()
- return executable('lacheck')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_tex_lacheck_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'lacheck',
- \ 'filetype': 'tex',
- \ 'subchecker': 'lacheck' })
+function! SyntaxCheckers_tex_lacheck_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat =
\ '%-G** %f:,' .
@@ -37,3 +33,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'tex',
\ 'name': 'lacheck'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/texinfo/makeinfo.vim b/bundle/syntastic/syntax_checkers/texinfo/makeinfo.vim
new file mode 100644
index 00000000..63cae936
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/texinfo/makeinfo.vim
@@ -0,0 +1,47 @@
+"============================================================================
+"File: makeinfo.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: LCD 47
+"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_texinfo_makeinfo_checker")
+ finish
+endif
+let g:loaded_syntastic_texinfo_makeinfo_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_texinfo_makeinfo_GetHighlightRegex(item)
+ let term = matchstr(a:item['text'], "\\m`\\zs[^']\\+\\ze'")
+ return term != '' ? '\V' . escape(term, '\') : ''
+endfunction
+
+function! SyntaxCheckers_texinfo_makeinfo_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': syntastic#c#NullOutput() })
+
+ let errorformat =
+ \ '%f:%l: %tarning: %m,' .
+ \ '%f:%l: %m,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'type': 'e' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'texinfo',
+ \ 'name': 'makeinfo'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/text/atdtool.vim b/bundle/syntastic/syntax_checkers/text/atdtool.vim
index 6aeab062..b0f32c11 100644
--- a/bundle/syntastic/syntax_checkers/text/atdtool.vim
+++ b/bundle/syntastic/syntax_checkers/text/atdtool.vim
@@ -15,25 +15,20 @@ if exists("g:loaded_syntastic_text_atdtool_checker")
endif
let g:loaded_syntastic_text_atdtool_checker = 1
-function! SyntaxCheckers_text_atdtool_IsAvailable()
- return executable('atdtool')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
function! SyntaxCheckers_text_atdtool_GetHighlightRegex(item)
let term = matchstr(a:item['text'], '\m "\zs[^"]\+\ze"\($\| | suggestions:\)')
if term != ''
let col = get(a:item, 'col', 0)
- let term = (col != 0 ? '\%' . col . 'c' : '') . '\V' . term
+ let term = (col != 0 ? '\%' . col . 'c' : '') . '\V' . escape(term, '\')
endif
return term
endfunction
-function! SyntaxCheckers_text_atdtool_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'atdtool',
- \ 'tail': '2>' . syntastic#util#DevNull(),
- \ 'filetype': 'text',
- \ 'subchecker': 'atdtool' })
+function! SyntaxCheckers_text_atdtool_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'tail': '2> ' . syntastic#util#DevNull() })
let errorformat =
\ '%W%f:%l:%c: %m,'.
@@ -45,8 +40,8 @@ function! SyntaxCheckers_text_atdtool_GetLocList()
\ 'returns': [0],
\ 'subtype': 'Style' })
- for n in range(len(loclist))
- let loclist[n]['text'] = substitute(loclist[n]['text'], '\m\n\s\+', ' | ', 'g')
+ for e in loclist
+ let e['text'] = substitute(e['text'], '\m\n\s\+', ' | ', 'g')
endfor
return loclist
@@ -55,3 +50,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'text',
\ 'name': 'atdtool'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/text/language_check.vim b/bundle/syntastic/syntax_checkers/text/language_check.vim
new file mode 100644
index 00000000..20111468
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/text/language_check.vim
@@ -0,0 +1,37 @@
+"============================================================================
+"File: language_check.vim
+"Description: Grammar checker (https://github.com/myint/language-check)
+"Authors: Steven Myint
+"
+"============================================================================
+
+if exists("g:loaded_syntastic_text_language_check_checker")
+ finish
+endif
+let g:loaded_syntastic_text_language_check_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_text_language_check_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat =
+ \ '%f:%l:%c: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style',
+ \ 'returns': [0, 2] })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'text',
+ \ 'name': 'language_check',
+ \ 'exec': 'language-check'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/twig/twiglint.vim b/bundle/syntastic/syntax_checkers/twig/twiglint.vim
index 7cbba5f4..36e264bf 100644
--- a/bundle/syntastic/syntax_checkers/twig/twiglint.vim
+++ b/bundle/syntastic/syntax_checkers/twig/twiglint.vim
@@ -13,23 +13,15 @@
if exists("g:loaded_syntastic_twig_twiglint_checker")
finish
endif
-let g:loaded_syntastic_twig_twiglint_checker=1
+let g:loaded_syntastic_twig_twiglint_checker = 1
-function! SyntaxCheckers_twig_twiglint_GetHighlightRegex(item)
- " Let's match the full line for now
- return '\V'
-endfunction
-
-function! SyntaxCheckers_twig_twiglint_IsAvailable()
- return executable('twig-lint')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_twig_twiglint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'twig-lint',
- \ 'args': 'lint --format=csv',
- \ 'filetype': 'twig',
- \ 'subchecker': 'twiglint' })
+function! SyntaxCheckers_twig_twiglint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_before': 'lint',
+ \ 'args_after': '--format=csv' })
let errorformat = '"%f"\,%l\,%m'
@@ -40,4 +32,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'twig',
- \ 'name': 'twiglint'})
+ \ 'name': 'twiglint',
+ \ 'exec': 'twig-lint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/typescript/tsc.vim b/bundle/syntastic/syntax_checkers/typescript/tsc.vim
index 768dc4e0..7f594e09 100644
--- a/bundle/syntastic/syntax_checkers/typescript/tsc.vim
+++ b/bundle/syntastic/syntax_checkers/typescript/tsc.vim
@@ -7,20 +7,15 @@
if exists("g:loaded_syntastic_typescript_tsc_checker")
finish
endif
-let g:loaded_syntastic_typescript_tsc_checker=1
-
-function! SyntaxCheckers_typescript_tsc_IsAvailable()
- return executable("tsc")
-endfunction
+let g:loaded_syntastic_typescript_tsc_checker = 1
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_typescript_tsc_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'tsc',
+function! SyntaxCheckers_typescript_tsc_GetLocList() dict
+ let makeprg = self.makeprgBuild({
\ 'args': '--module commonjs',
- \ 'post_args': '--out ' . syntastic#util#DevNull(),
- \ 'filetype': 'typescript',
- \ 'subchecker': 'tsc' })
+ \ 'args_after': '--out ' . syntastic#util#DevNull() })
let errorformat =
\ '%E%f %#(%l\,%c): error %m,' .
@@ -38,3 +33,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'typescript',
\ 'name': 'tsc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/vala/valac.vim b/bundle/syntastic/syntax_checkers/vala/valac.vim
index 7ffc0260..e6c1b88d 100644
--- a/bundle/syntastic/syntax_checkers/vala/valac.vim
+++ b/bundle/syntastic/syntax_checkers/vala/valac.vim
@@ -6,7 +6,12 @@
" "// modules: " and containing space delimited list of vala
" modules, used by the file, so this script can build correct
" --pkg arguments.
-" Alternatively you can set g:syntastic_vala_modules array
+" Add another special comment line into your vala file starting
+" with "// vapidirs: " followed by a space delimited list of
+" the vapi directories so this script can build with the correct
+" --vapidir arguments
+" Alternatively you can set the g:syntastic_vala_modules array
+" and/or the g:syntastic_vala_vapidirs array
" in your .vimrc or .lvimrc with localvimrc plugin
" (http://www.vim.org/scripts/script.php?script_id=441).
" Valac compiler is not the fastest thing in the world, so you
@@ -27,13 +32,12 @@ if exists("g:loaded_syntastic_vala_valac_checker")
endif
let g:loaded_syntastic_vala_valac_checker = 1
-function! SyntaxCheckers_vala_valac_IsAvailable()
- return executable('valac')
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
function! SyntaxCheckers_vala_valac_GetHighlightRegex(pos)
- let strlength = strlen(matchstr(a:pos['text'], '\m\^\+$'))
- return '\%>' . (a:pos.col-1) . 'c.*\%<' . (a:pos.col+strlength+1) . 'c'
+ let length = strlen(matchstr(a:pos['text'], '\m\^\+$'))
+ return '\%>' . (a:pos['col'] - 1) . 'c.*\%<' . (a:pos['col'] + length + 1) . 'c'
endfunction
function! s:GetValaModules()
@@ -52,13 +56,27 @@ function! s:GetValaModules()
return split(strpart(modules_str, 12), '\s\+')
endfunction
-function! SyntaxCheckers_vala_valac_GetLocList()
+function! s:GetValaVapiDirs()
+ if exists('g:syntastic_vala_vapi_dirs')
+ if type(g:syntastic_vala_vapi_dirs) == type('')
+ return split(g:syntastic_vala_vapi_dirs, '\s\+')
+ elseif type(g:syntastic_vala_vapi_dirs) == type([])
+ return copy(g:syntastic_vala_vapi_dirs)
+ else
+ echoerr 'g:syntastic_vala_vapi_dirs must be either list or string: fallback to in file modules string'
+ endif
+ endif
+
+ let vapi_line = search('^//\s*vapidirs:\s*','n')
+ let vapi_str = getline(vapi_line)
+ return split( substitute( vapi_str, '^//\s*vapidirs:\s*', '', 'g' ), '\s\+' )
+endfunction
+
+function! SyntaxCheckers_vala_valac_GetLocList() dict
let vala_pkg_args = join(map(s:GetValaModules(), '"--pkg ".v:val'), ' ')
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'valac',
- \ 'args': '-C ' . vala_pkg_args,
- \ 'filetype': 'vala',
- \ 'subchecker': 'valac' })
+ let vala_vapi_args = join(map(s:GetValaVapiDirs(), '"--vapidir ".v:val'), ' ')
+ let makeprg = self.makeprgBuild({ 'args': '-C ' . vala_pkg_args . " " . vala_vapi_args })
+
let errorformat =
\ '%A%f:%l.%c-%\d%\+.%\d%\+: %t%[a-z]%\+: %m,'.
\ '%C%m,'.
@@ -72,3 +90,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'vala',
\ 'name': 'valac'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/verilog/verilator.vim b/bundle/syntastic/syntax_checkers/verilog/verilator.vim
index 0bad01b3..396d72e5 100644
--- a/bundle/syntastic/syntax_checkers/verilog/verilator.vim
+++ b/bundle/syntastic/syntax_checkers/verilog/verilator.vim
@@ -9,22 +9,21 @@ if exists("g:loaded_syntastic_verilog_verilator_checker")
endif
let g:loaded_syntastic_verilog_verilator_checker = 1
-if !exists('g:syntastic_verilog_compiler')
- let g:syntastic_verilog_compiler = 'verilator'
+if !exists('g:syntastic_verilog_compiler_options')
+ let g:syntastic_verilog_compiler_options = '-Wall'
endif
let s:save_cpo = &cpo
set cpo&vim
-function! SyntaxCheckers_verilog_verilator_IsAvailable()
- return executable(g:syntastic_verilog_compiler)
+function! SyntaxCheckers_verilog_verilator_IsAvailable() dict
+ if !exists('g:syntastic_verilog_compiler')
+ let g:syntastic_verilog_compiler = self.getExec()
+ endif
+ return executable(expand(g:syntastic_verilog_compiler))
endfunction
-if !exists('g:syntastic_verilog_compiler_options')
- let g:syntastic_verilog_compiler_options = '-Wall'
-endif
-
-function! SyntaxCheckers_verilog_verilator_GetLocList()
+function! SyntaxCheckers_verilog_verilator_GetLocList() dict
return syntastic#c#GetLocList('verilog', 'verilator', {
\ 'errorformat':
\ '%%%trror-%\=%\w%#: %f:%l: %m,' .
@@ -34,7 +33,7 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'verilog',
- \ 'name': 'verilator'})
+ \ 'name': 'verilator' })
let &cpo = s:save_cpo
unlet s:save_cpo
diff --git a/bundle/syntastic/syntax_checkers/vhdl/ghdl.vim b/bundle/syntastic/syntax_checkers/vhdl/ghdl.vim
index 7158cd78..f101d37f 100644
--- a/bundle/syntastic/syntax_checkers/vhdl/ghdl.vim
+++ b/bundle/syntastic/syntax_checkers/vhdl/ghdl.vim
@@ -9,21 +9,17 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+
if exists("g:loaded_syntastic_vhdl_ghdl_checker")
finish
endif
let g:loaded_syntastic_vhdl_ghdl_checker = 1
-function! SyntaxCheckers_vhdl_ghdl_IsAvailable()
- return executable("ghdl")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_vhdl_ghdl_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'ghdl',
- \ 'args': '-s',
- \ 'filetype': 'vhdl',
- \ 'subchecker': 'ghdl' })
+function! SyntaxCheckers_vhdl_ghdl_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-s' })
let errorformat = '%f:%l:%c: %m'
@@ -35,3 +31,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'vhdl',
\ 'name': 'ghdl'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/vim/vimlint.vim b/bundle/syntastic/syntax_checkers/vim/vimlint.vim
new file mode 100644
index 00000000..d0916dce
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/vim/vimlint.vim
@@ -0,0 +1,94 @@
+"============================================================================
+"File: vimlint.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: LCD 47
+"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_vim_vimlint_checker")
+ finish
+endif
+let g:loaded_syntastic_vim_vimlint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_vim_vimlint_GetHighlightRegex(item)
+ let term = matchstr(a:item['text'], '\m `\zs[^`]\+\ze`')
+ if term != ''
+ let col = get(a:item, 'col', 0)
+
+ if col && term[0:1] ==# 'l:'
+ if getline(a:item.lnum)[col-1:col] !=# 'l:'
+ let term = term[2:]
+ endif
+ endif
+
+ return '\V' . (col ? '\%' . col . 'c' : '') . escape(term, '\')
+ endif
+
+ return ''
+endfunction
+
+function! SyntaxCheckers_vim_vimlint_IsAvailable() dict
+ let ret = 0
+ try
+ call vimlint#vimlint(syntastic#util#DevNull(), { 'output': [], 'quiet': 1 })
+ let ret = 1
+ catch /\m^Vim\%((\a\+)\)\=:E117/
+ " do nothing
+ endtry
+ return ret
+endfunction
+
+function! SyntaxCheckers_vim_vimlint_GetLocList() dict
+ " EVL102: unused variable v
+ " EVL103: unused argument v
+ " EVL104: variable may not be initialized on some execution path: v
+ " EVL105: global variable v is defined without g:
+ " EVL106: local variable v is used without l:
+ " EVL201: unreachable code
+ " EVL204: constant in conditional context
+ " EVL205: missing scriptencoding
+ " value 3: the message is a warning
+ "
+ " References: :help vimlint-errorcode and :help vimlint-variables
+ return vimlint#vimlint(expand('%'), {
+ \ 'output': function('s:vimlintOutput'),
+ \ 'quiet': 1,
+ \ 'EVL102': 3,
+ \ 'EVL103': 3,
+ \ 'EVL104': 3,
+ \ 'EVL105': 3,
+ \ 'EVL106': 3,
+ \ 'EVL201': 3,
+ \ 'EVL204': 3,
+ \ 'EVL205': 3 })
+endfunction
+
+" @vimlint(EVL103, 1, a:filename)
+function! s:vimlintOutput(filename, pos, ev, eid, mes, obj)
+ call add(a:obj.error, {
+ \ 'bufnr': bufnr(''),
+ \ 'lnum': a:pos.lnum,
+ \ 'col': a:pos.col,
+ \ 'vcol': 0,
+ \ 'type': a:ev[0],
+ \ 'text': '[' . a:eid . '] ' . a:mes,
+ \ 'valid': a:pos.lnum > 0 })
+endfunction
+" @vimlint(EVL103, 0, a:filename)
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'vim',
+ \ 'name': 'vimlint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/cpp/ycm.vim b/bundle/syntastic/syntax_checkers/xhtml/jshint.vim
similarity index 52%
rename from bundle/syntastic/syntax_checkers/cpp/ycm.vim
rename to bundle/syntastic/syntax_checkers/xhtml/jshint.vim
index b0dbab58..3312ccef 100644
--- a/bundle/syntastic/syntax_checkers/cpp/ycm.vim
+++ b/bundle/syntastic/syntax_checkers/xhtml/jshint.vim
@@ -1,7 +1,7 @@
"============================================================================
-"File: ycm.vim
-"Description: Syntax checking plugin for syntastic.vim
-"Maintainer: Val Markovic
+"File: jshint.vim
+"Description: Javascript syntax checker for xHTML - using jshint
+"Maintainer: LCD 47
"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
@@ -10,25 +10,16 @@
"
"============================================================================
-if exists("g:loaded_syntastic_cpp_ycm_checker")
+if exists("g:loaded_syntastic_xhtml_jshint_checker")
finish
endif
-let g:loaded_syntastic_cpp_ycm_checker = 1
+let g:loaded_syntastic_xhtml_jshint_checker = 1
-function! SyntaxCheckers_cpp_ycm_IsAvailable()
- return SyntaxCheckers_c_ycm_IsAvailable()
-endfunction
-
-if !exists('g:loaded_youcompleteme')
- finish
-endif
-
-function! SyntaxCheckers_cpp_ycm_GetLocList()
- return SyntaxCheckers_c_ycm_GetLocList()
-endfunction
+runtime! syntax_checkers/html/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
- \ 'filetype': 'cpp',
- \ 'name': 'ycm'})
+ \ 'filetype': 'xhtml',
+ \ 'name': 'jshint',
+ \ 'redirect': 'html/jshint'})
-runtime! syntax_checkers/c/*.vim
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/xhtml/tidy.vim b/bundle/syntastic/syntax_checkers/xhtml/tidy.vim
index e0c22fbb..6fa14b32 100644
--- a/bundle/syntastic/syntax_checkers/xhtml/tidy.vim
+++ b/bundle/syntastic/syntax_checkers/xhtml/tidy.vim
@@ -18,31 +18,30 @@
if exists("g:loaded_syntastic_xhtml_tidy_checker")
finish
endif
-let g:loaded_syntastic_xhtml_tidy_checker=1
+let g:loaded_syntastic_xhtml_tidy_checker = 1
if !exists('g:syntastic_xhtml_tidy_ignore_errors')
let g:syntastic_xhtml_tidy_ignore_errors = []
endif
-function! SyntaxCheckers_xhtml_tidy_IsAvailable()
- return executable("tidy")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
" TODO: join this with html.vim DRY's sake?
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',
+ \'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
@@ -56,13 +55,9 @@ function! s:IgnoreError(text)
return 0
endfunction
-function! SyntaxCheckers_xhtml_tidy_GetLocList()
+function! SyntaxCheckers_xhtml_tidy_GetLocList() dict
let encopt = s:TidyEncOptByFenc()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'tidy',
- \ 'args': encopt . ' -xml -e',
- \ 'filetype': 'xhtml',
- \ 'subchecker': 'tidy' })
+ let makeprg = self.makeprgBuild({ 'args_after': encopt . ' -xml -e' })
let errorformat=
\ '%Wline %l column %v - Warning: %m,' .
@@ -75,9 +70,9 @@ function! SyntaxCheckers_xhtml_tidy_GetLocList()
\ 'defaults': {'bufnr': bufnr("")},
\ 'returns': [0, 1, 2] })
- for n in range(len(loclist))
- if loclist[n]['valid'] && s:IgnoreError(loclist[n]['text']) == 1
- let loclist[n]['valid'] = 0
+ for e in loclist
+ if e['valid'] && s:IgnoreError(e['text']) == 1
+ let e['valid'] = 0
endif
endfor
@@ -87,3 +82,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'xhtml',
\ 'name': 'tidy'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/xml/xmllint.vim b/bundle/syntastic/syntax_checkers/xml/xmllint.vim
index 5a6e1db7..3076cabb 100644
--- a/bundle/syntastic/syntax_checkers/xml/xmllint.vim
+++ b/bundle/syntastic/syntax_checkers/xml/xmllint.vim
@@ -13,22 +13,17 @@
if exists("g:loaded_syntastic_xml_xmllint_checker")
finish
endif
-let g:loaded_syntastic_xml_xmllint_checker=1
+let g:loaded_syntastic_xml_xmllint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
" You can use a local installation of DTDs to significantly speed up validation
" and allow you to validate XML data without network access, see xmlcatalog(1)
" and http://www.xmlsoft.org/catalog.html for more information.
-function! SyntaxCheckers_xml_xmllint_IsAvailable()
- return executable('xmllint')
-endfunction
-
-function! SyntaxCheckers_xml_xmllint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'xmllint',
- \ 'args': '--xinclude --noout --postvalid',
- \ 'filetype': 'xml',
- \ 'subchecker': 'xmllint' })
+function! SyntaxCheckers_xml_xmllint_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--xinclude --noout --postvalid' })
let errorformat=
\ '%E%f:%l: error : %m,' .
@@ -50,3 +45,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'xml',
\ 'name': 'xmllint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/xslt/xmllint.vim b/bundle/syntastic/syntax_checkers/xslt/xmllint.vim
index db397ed8..e224c256 100644
--- a/bundle/syntastic/syntax_checkers/xslt/xmllint.vim
+++ b/bundle/syntastic/syntax_checkers/xslt/xmllint.vim
@@ -13,18 +13,13 @@
if exists("g:loaded_syntastic_xslt_xmllint_checker")
finish
endif
-let g:loaded_syntastic_xslt_xmllint_checker=1
+let g:loaded_syntastic_xslt_xmllint_checker = 1
-function! SyntaxCheckers_xslt_xmllint_IsAvailable()
- return SyntaxCheckers_xml_xmllint_IsAvailable()
-endfunction
-
-function! SyntaxCheckers_xslt_xmllint_GetLocList()
- return SyntaxCheckers_xml_xmllint_GetLocList()
-endfunction
+runtime! syntax_checkers/xml/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'xslt',
- \ 'name': 'xmllint'})
+ \ 'name': 'xmllint',
+ \ 'redirect': 'xml/xmllint'})
-runtime! syntax_checkers/xml/*.vim
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/yacc/bison.vim b/bundle/syntastic/syntax_checkers/yacc/bison.vim
new file mode 100644
index 00000000..8444879e
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/yacc/bison.vim
@@ -0,0 +1,55 @@
+"============================================================================
+"File: yacc.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: LCD 47
+"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_yacc_bison_checker")
+ finish
+endif
+let g:loaded_syntastic_yacc_bison_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_yacc_bison_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': syntastic#c#NullOutput() })
+
+ let errorformat =
+ \ '%E%f:%l%.%v-%.%\{-}: %trror: %m,' .
+ \ '%E%f:%l%.%v: %trror: %m,' .
+ \ '%W%f:%l%.%v-%.%\{-}: %tarning: %m,' .
+ \ '%W%f:%l%.%v: %tarning: %m,' .
+ \ '%I%f:%l%.%v-%.%\{-}: %\s%\+%m,' .
+ \ '%I%f:%l%.%v: %\s%\+%m'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+
+ let last_type = 'E'
+ for e in loclist
+ if e['type'] ==? 'I'
+ let e['type'] = last_type
+ endif
+ let last_type = e['type']
+ endfor
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'yacc',
+ \ 'name': 'bison'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/yaml/jsyaml.vim b/bundle/syntastic/syntax_checkers/yaml/jsyaml.vim
index 9ffdc658..a0c6dba0 100644
--- a/bundle/syntastic/syntax_checkers/yaml/jsyaml.vim
+++ b/bundle/syntastic/syntax_checkers/yaml/jsyaml.vim
@@ -16,20 +16,23 @@
if exists("g:loaded_syntastic_yaml_jsyaml_checker")
finish
endif
-let g:loaded_syntastic_yaml_jsyaml_checker=1
+let g:loaded_syntastic_yaml_jsyaml_checker = 1
-function! SyntaxCheckers_yaml_jsyaml_IsAvailable()
- return executable("js-yaml")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_yaml_jsyaml_GetLocList() dict
+ if !exists('s:js_yaml_new')
+ let s:js_yaml_new =
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(self.getExecEscaped() . ' --version'), [2])
+ endif
-function! SyntaxCheckers_yaml_jsyaml_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'js-yaml',
- \ 'args': '--compact',
- \ 'filetype': 'yaml',
- \ 'subchecker': 'jsyaml' })
+ let makeprg = self.makeprgBuild({ 'args_after': (s:js_yaml_new ? '' : '--compact') })
- let errorformat='Error on line %l\, col %c:%m,%-G%.%#'
+ let errorformat =
+ \ 'Error on line %l\, col %c:%m,' .
+ \ 'JS-YAML: %m at line %l\, column %c:,' .
+ \ '%-G%.%#'
return SyntasticMake({
\ 'makeprg': makeprg,
@@ -39,4 +42,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'yaml',
- \ 'name': 'jsyaml'})
+ \ 'name': 'jsyaml',
+ \ 'exec': 'js-yaml'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/yaml/yamlxs.vim b/bundle/syntastic/syntax_checkers/yaml/yamlxs.vim
new file mode 100644
index 00000000..e9d33771
--- /dev/null
+++ b/bundle/syntastic/syntax_checkers/yaml/yamlxs.vim
@@ -0,0 +1,78 @@
+"============================================================================
+"File: yamlxs.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: LCD 47
+"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.
+"Installation: cpanm YAML::XS
+"
+"============================================================================
+
+if exists("g:loaded_syntastic_yaml_yamlxs_checker")
+ finish
+endif
+let g:loaded_syntastic_yaml_yamlxs_checker = 1
+
+if !exists('g:syntastic_perl_lib_path')
+ let g:syntastic_perl_lib_path = []
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_yaml_yamlxs_IsAvailable() dict
+ if !exists('g:syntastic_perl_interpreter')
+ let g:syntastic_perl_interpreter = self.getExec()
+ endif
+
+ " don't call executable() here, to allow things like
+ " let g:syntastic_perl_interpreter='/usr/bin/env perl'
+ silent! call system(s:Exe() . ' ' . s:Modules() . ' -e ' . syntastic#util#shescape('exit(0)'))
+ return v:shell_error == 0
+endfunction
+
+function! SyntaxCheckers_yaml_yamlxs_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'exe': s:Exe(),
+ \ 'args_before': s:Modules() . ' -e ' . syntastic#util#shescape('YAML::XS::LoadFile($ARGV[0])') })
+
+ let errorformat =
+ \ '%EYAML::XS::Load Error: The problem:,' .
+ \ '%-C,' .
+ \ '%C %m,' .
+ \ '%Cwas found at document: %\d%\+\, line: %l\, column: %c,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'postprocess': ['compressWhitespace'],
+ \ 'defaults': {'bufnr': bufnr("")} })
+endfunction
+
+function! s:Exe()
+ return syntastic#util#shexpand(g:syntastic_perl_interpreter)
+endfunction
+
+function s:Modules()
+ if type(g:syntastic_perl_lib_path) == type('')
+ call syntastic#log#deprecationWarn('variable g:syntastic_perl_lib_path should be a list')
+ let includes = split(g:syntastic_perl_lib_path, ',')
+ else
+ let includes = copy(syntastic#util#var('perl_lib_path'))
+ endif
+ return join(map(includes, '"-I" . v:val') + ['-MYAML::XS'])
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'yaml',
+ \ 'name': 'yamlxs',
+ \ 'exec': 'perl' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/z80/z80syntaxchecker.vim b/bundle/syntastic/syntax_checkers/z80/z80syntaxchecker.vim
index b68acf13..bbf3e48d 100644
--- a/bundle/syntastic/syntax_checkers/z80/z80syntaxchecker.vim
+++ b/bundle/syntastic/syntax_checkers/z80/z80syntaxchecker.vim
@@ -9,25 +9,23 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
+"
+" To obtain this application there are two solutions:
+" - Install this python package:
+" https://github.com/rgiot/pycpcdemotools
+" - Copy/paste this script in your search path:
+" https://raw.github.com/rgiot/pycpcdemotools/master/cpcdemotools/source_checker/z80_syntax_checker.py
if exists("g:loaded_syntastic_z80_z80syntaxchecker_checker")
finish
endif
-let g:loaded_syntastic_z80_z80syntaxchecker_checker=1
-
-"bail if the user doesnt have z80_syntax_checker.py installed
-"To obtain this application there are two solutions:
-" - Install this python package: https://github.com/rgiot/pycpcdemotools
-" - Copy/paste this script in your search path: https://raw.github.com/rgiot/pycpcdemotools/master/cpcdemotools/source_checker/z80_syntax_checker.py
-function! SyntaxCheckers_z80_z80syntaxchecker_IsAvailable()
- return executable("z80_syntax_checker.py")
-endfunction
+let g:loaded_syntastic_z80_z80syntaxchecker_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_z80_z80syntaxchecker_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'z80_syntax_checker.py',
- \ 'filetype': 'z80',
- \ 'subchecker': 'z80syntaxchecker' })
+function! SyntaxCheckers_z80_z80syntaxchecker_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat = '%f:%l %m'
@@ -38,4 +36,10 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'z80',
- \ 'name': 'z80syntaxchecker'})
+ \ 'name': 'z80syntaxchecker',
+ \ 'exec': 'z80_syntax_checker.py'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/zpt/zptlint.vim b/bundle/syntastic/syntax_checkers/zpt/zptlint.vim
index ae6ab8a3..6769b55b 100644
--- a/bundle/syntastic/syntax_checkers/zpt/zptlint.vim
+++ b/bundle/syntastic/syntax_checkers/zpt/zptlint.vim
@@ -9,12 +9,7 @@
" See http://sam.zoy.org/wtfpl/COPYING for more details.
"
"============================================================================
-
-if exists("g:loaded_syntastic_zpt_zptlint_checker")
- finish
-endif
-let g:loaded_syntastic_zpt_zptlint_checker=1
-
+"
" In order for this plugin to be useful, you will need to set up the
" zpt filetype in your vimrc
"
@@ -24,15 +19,16 @@ let g:loaded_syntastic_zpt_zptlint_checker=1
" Then install the zptlint program, found on pypi:
" http://pypi.python.org/pypi/zptlint
-function! SyntaxCheckers_zpt_zptlint_IsAvailable()
- return executable("zptlint")
-endfunction
+if exists("g:loaded_syntastic_zpt_zptlint_checker")
+ finish
+endif
+let g:loaded_syntastic_zpt_zptlint_checker = 1
-function! SyntaxCheckers_zpt_zptlint_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'zptlint',
- \ 'filetype': 'zpt',
- \ 'subchecker': 'zptlint' })
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_zpt_zptlint_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
let errorformat=
\ '%-P*** Error in: %f,'.
@@ -48,3 +44,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'zpt',
\ 'name': 'zptlint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/c/ycm.vim b/bundle/syntastic/syntax_checkers/zsh/shellcheck.vim
similarity index 58%
rename from bundle/syntastic/syntax_checkers/c/ycm.vim
rename to bundle/syntastic/syntax_checkers/zsh/shellcheck.vim
index 5cce6fc5..42f6fcf1 100644
--- a/bundle/syntastic/syntax_checkers/c/ycm.vim
+++ b/bundle/syntastic/syntax_checkers/zsh/shellcheck.vim
@@ -1,7 +1,7 @@
"============================================================================
-"File: ycm.vim
+"File: shellcheck.vim
"Description: Syntax checking plugin for syntastic.vim
-"Maintainer: Val Markovic
+"Maintainer: LCD 47
"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
@@ -10,23 +10,16 @@
"
"============================================================================
-if exists("g:loaded_syntastic_c_ycm_checker")
+if exists("g:loaded_syntastic_zsh_shellcheck_checker")
finish
endif
-let g:loaded_syntastic_c_ycm_checker = 1
+let g:loaded_syntastic_zsh_shellcheck_checker = 1
-function! SyntaxCheckers_c_ycm_IsAvailable()
- return exists('g:loaded_youcompleteme')
-endfunction
-
-if !exists('g:loaded_youcompleteme')
- finish
-endif
-
-function! SyntaxCheckers_c_ycm_GetLocList()
- return youcompleteme#CurrentFileDiagnostics()
-endfunction
+runtime! syntax_checkers/sh/*.vim
call g:SyntasticRegistry.CreateAndRegisterChecker({
- \ 'filetype': 'c',
- \ 'name': 'ycm'})
+ \ 'filetype': 'zsh',
+ \ 'name': 'shellcheck',
+ \ 'redirect': 'sh/shellcheck'})
+
+" vim: set et sts=4 sw=4:
diff --git a/bundle/syntastic/syntax_checkers/zsh/zsh.vim b/bundle/syntastic/syntax_checkers/zsh/zsh.vim
index 5e339a9c..48057631 100644
--- a/bundle/syntastic/syntax_checkers/zsh/zsh.vim
+++ b/bundle/syntastic/syntax_checkers/zsh/zsh.vim
@@ -13,18 +13,13 @@
if exists("g:loaded_syntastic_zsh_zsh_checker")
finish
endif
-let g:loaded_syntastic_zsh_zsh_checker=1
+let g:loaded_syntastic_zsh_zsh_checker = 1
-function! SyntaxCheckers_zsh_zsh_IsAvailable()
- return executable("zsh")
-endfunction
+let s:save_cpo = &cpo
+set cpo&vim
-function! SyntaxCheckers_zsh_zsh_GetLocList()
- let makeprg = syntastic#makeprg#build({
- \ 'exe': 'zsh',
- \ 'args': '-n',
- \ 'filetype': 'zsh',
- \ 'subchecker': 'zsh' })
+function! SyntaxCheckers_zsh_zsh_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-n' })
let errorformat = '%f:%l: %m'
@@ -36,3 +31,8 @@ endfunction
call g:SyntasticRegistry.CreateAndRegisterChecker({
\ 'filetype': 'zsh',
\ 'name': 'zsh'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4: