diff --git a/sources_non_forked/syntastic/.gitignore b/sources_non_forked/syntastic/.gitignore
new file mode 100644
index 00000000..cc07c931
--- /dev/null
+++ b/sources_non_forked/syntastic/.gitignore
@@ -0,0 +1,4 @@
+*~
+*.swp
+tags
+.DS_Store
diff --git a/sources_non_forked/syntastic/CONTRIBUTING.md b/sources_non_forked/syntastic/CONTRIBUTING.md
new file mode 100644
index 00000000..378b53b3
--- /dev/null
+++ b/sources_non_forked/syntastic/CONTRIBUTING.md
@@ -0,0 +1,105 @@
+# CONTRIBUTING
+- - -
+1\. [Bug reports / GitHub issues](#bugreps)
+2\. [Submitting a patch](#patches)
+3\. [General style notes](#generalstyle)
+4\. [Syntax checker notes](#checkerstyle)
+- - -
+
+
+
+## 1. Bug reports / GitHub issues
+
+Please note that the preferred channel for posting bug reports is the
+[issue tracker at GitHub][0]. Reports posted elsewhere are less likely
+to be seen by the core team.
+
+When reporting a bug make sure you search the existing GitHub issues
+for the same/similar issues. If you find one, feel free to add a `+1`
+comment with any additional information that may help us solve the
+issue.
+
+When creating a new issue be sure to state the following:
+
+* steps to reproduce the bug;
+* the version of Vim you are using (run `:ver` to find out);
+* the version of syntastic you are using (see `:SyntasticInfo`).
+
+For syntax checker bugs also state the version of the checker executable
+that you are using. Adding debugging information is typically useful
+too:
+
+* open a file handled by your checker;
+* set `g:syntastic_debug` to 1 or 3;
+* run the checker;
+* copy the output of `:mes`.
+
+
+
+## 2. Submitting a patch
+
+Before you consider adding features to syntastic, _please_ spend a few
+minutes (re-)reading the latest version of the [manual][1]. Syntastic
+is changing rapidly at times, and it's quite possible that some of the
+features you want to add exist already.
+
+To submit a patch:
+
+* fork the [repo][2] on GitHub;
+* make a [topic branch][3] and start hacking;
+* submit a pull request based off your topic branch.
+
+Small, focused patches are preferred.
+
+Large changes to the code should be discussed with the core team first.
+Create an issue and explain your plan and see what we say.
+
+Also make sure to update the manual whenever applicable. Nobody can use
+features that aren't documented.
+
+
+
+## 3. General style notes
+
+Follow 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][4] to
+aid readability.
+
+
+
+## 4. Syntax checker notes
+
+Make sure to read the [guide][5] if you plan to add new syntax checkers.
+
+Use the existing checkers as templates, rather than writing everything
+from scratch.
+
+The preferred style for error format strings is one "clause" per line.
+E.g. (from the `coffee` checker):
+
+```vim
+let errorformat =
+ \ '%E%f:%l:%c: %trror: %m,' .
+ \ 'Syntax%trror: In %f\, %m on line %l,' .
+ \ '%EError: In %f\, Parse error on line %l: %m,' .
+ \ '%EError: In %f\, %m on line %l,' .
+ \ '%W%f(%l): lint warning: %m,' .
+ \ '%W%f(%l): warning: %m,' .
+ \ '%E%f(%l): SyntaxError: %m,' .
+ \ '%-Z%p^,' .
+ \ '%-G%.%#'
+```
+
+[0]: https://github.com/scrooloose/syntastic/issues
+[1]: https://github.com/scrooloose/syntastic/blob/master/doc/syntastic.txt
+[2]: https://github.com/scrooloose/syntastic
+[3]: https://github.com/dchelimsky/rspec/wiki/Topic-Branches#using-topic-branches-when-contributing-patches
+[4]: http://www.refactoring.com/catalog/extractVariable.html
+[5]: https://github.com/scrooloose/syntastic/wiki/Syntax-Checker-Guide
diff --git a/sources_non_forked/syntastic/LICENCE b/sources_non_forked/syntastic/LICENCE
new file mode 100644
index 00000000..8b1a9d81
--- /dev/null
+++ b/sources_non_forked/syntastic/LICENCE
@@ -0,0 +1,13 @@
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+Copyright (C) 2004 Sam Hocevar
+
+Everyone is permitted to copy and distribute verbatim or modified
+copies of this license document, and changing it is allowed as long
+as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/sources_non_forked/syntastic/README.markdown b/sources_non_forked/syntastic/README.markdown
new file mode 100644
index 00000000..d0eb41f2
--- /dev/null
+++ b/sources_non_forked/syntastic/README.markdown
@@ -0,0 +1,305 @@
+ ,
+ / \,,_ .'|
+ ,{{| /}}}}/_.' _____________________________________________
+ }}}}` '{{' '. / \
+ {{{{{ _ ;, \ / Ladies and Gentlemen, \
+ ,}}}}}} /o`\ ` ;) | |
+ {{{{{{ / ( | this is ... |
+ }}}}}} | \ | |
+ {{{{{{{{ \ \ | |
+ }}}}}}}}} '.__ _ | | _____ __ __ _ |
+ {{{{{{{{ /`._ (_\ / | / ___/__ ______ / /_____ ______/ /_(_)____ |
+ }}}}}}' | //___/ --=: \__ \/ / / / __ \/ __/ __ `/ ___/ __/ / ___/ |
+ jgs `{{{{` | '--' | ___/ / /_/ / / / / /_/ /_/ (__ ) /_/ / /__ |
+ }}}` | /____/\__, /_/ /_/\__/\__,_/____/\__/_/\___/ |
+ | /____/ |
+ | /
+ \_____________________________________________/
+
+
+- - -
+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, Arduino, AsciiDoc, ASM, BEMHTML, Bro, Bourne shell, C,
+C++, C#, Cabal, Chef, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart,
+DocBook, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata, GLSL, Go,
+Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON, JSX, LESS,
+Lex, Limbo, LISP, LLVM intermediate language, Lua, MATLAB, NASM, Objective-C,
+Objective-C++, OCaml, Perl, Perl POD, PHP, gettext Portable Object, OS X
+and iOS property lists, Puppet, Python, Racket, R, reStructuredText, Ruby,
+SASS/SCSS, Scala, Slim, Tcl, TeX, Texinfo, Twig, TypeScript, Vala, Verilog,
+VHDL, VimL, xHtml, XML, XSLT, YACC, YAML, z80, Zope page templates, and zsh.
+See the [wiki][3] for details about the corresponding supported checkers.
+
+Below is a screenshot showing the methods that Syntastic uses to display syntax
+errors. Note that, in practise, you will only have a subset of these methods
+enabled.
+
+![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.
+3. Signs are placed beside lines with errors - note that warnings are displayed in a different color.
+4. There is a configurable statusline flag you can include in your statusline config.
+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.
+
+
+
+## 2\. Installation
+
+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).
+
+
+
+
+### 2.1\. Step 1: Install pathogen.vim
+
+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 -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
+```
+Next you *need* to add this to your `~/.vimrc`:
+```vim
+execute pathogen#infect()
+```
+
+
+
+### 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:
+
+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.
+
+
+
+
+## 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: 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, make sure the `g:syntastic_perl_checkers` list includes `perl`,
+and set `g:syntastic_enable_perl_checker` to 1 in your vimrc:
+```vim
+let g:syntastic_enable_perl_checker = 1
+```
+
+
+
+__Q. What happened to the `rustc` checker?__
+
+A. It has been included in the [Rust compiler package][12]. If you have
+a recent version of the Rust compiler, the checker should be picked up
+automatically by syntastic.
+
+
+
+__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:
+```vim
+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 `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:
+```vim
+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?__
+
+A. Stick a line like this in your vimrc:
+```vim
+let g:syntastic__checkers = ['']
+```
+
+To see the list of supported checkers for your filetype look at the
+[wiki][3].
+
+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']
+```
+
+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']
+```
+
+This is telling syntastic to run the `php` checker first, and if no errors are
+found, run `phpcs`, and then `phpmd`.
+
+You can also run checkers explicitly by calling `:SyntasticCheck `.
+
+e.g. to run `phpcs` and `phpmd`:
+```vim
+:SyntasticCheck phpcs phpmd
+```
+
+This works for any checkers available for the current filetype, even if they
+aren't listed in `g:syntastic__checkers`. You can't run checkers for
+"foreign" filetypes though (e.g. you can't run, say, a Python checker if the
+current filetype is `php`).
+
+
+
+__Q. How can I display together the errors found by all checkers enabled for
+the current file?__
+
+A. Set `g:syntastic_aggregate_errors` to 1 in your vimrc:
+```vim
+let g:syntastic_aggregate_errors = 1
+```
+
+See `:help syntastic-aggregating-errors` for more details.
+
+
+
+__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`.
+
+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][3] to see what
+options are available.
+
+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:
+
+```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].
+A guide for writing syntax checkers can be found in the [wiki][11].
+There are also a dedicated [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]: http://valloric.github.io/YouCompleteMe/
+[10]: http://perldoc.perl.org/perlrun.html#*-c*
+[11]: https://github.com/scrooloose/syntastic/wiki/Syntax-Checker-Guide
+[12]: https://github.com/rust-lang/rust/
diff --git a/sources_non_forked/syntastic/_assets/screenshot_1.png b/sources_non_forked/syntastic/_assets/screenshot_1.png
new file mode 100644
index 00000000..c1b69f4b
Binary files /dev/null and b/sources_non_forked/syntastic/_assets/screenshot_1.png differ
diff --git a/sources_non_forked/syntastic/autoload/syntastic/c.vim b/sources_non_forked/syntastic/autoload/syntastic/c.vim
new file mode 100644
index 00000000..5dad1408
--- /dev/null
+++ b/sources_non_forked/syntastic/autoload/syntastic/c.vim
@@ -0,0 +1,332 @@
+if exists("g:loaded_syntastic_c_autoload") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_c_autoload = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+" Public functions {{{1
+
+" convenience function to determine the 'null device' parameter
+" based on the current operating system
+function! syntastic#c#NullOutput() " {{{2
+ let known_os = has('unix') || has('mac') || syntastic#util#isRunningWindows()
+ return known_os ? '-o ' . syntastic#util#DevNull() : ''
+endfunction " }}}2
+
+" read additional compiler flags from the given configuration file
+" the file format and its parsing mechanism is inspired by clang_complete
+function! syntastic#c#ReadConfig(file) " {{{2
+ " search in the current file's directory upwards
+ let config = findfile(a:file, '.;')
+ if config == '' || !filereadable(config)
+ return ''
+ endif
+
+ " convert filename into absolute path
+ let filepath = fnamemodify(config, ':p:h')
+
+ " try to read config file
+ try
+ let lines = readfile(config)
+ catch /\m^Vim\%((\a\+)\)\=:E48[45]/
+ return ''
+ endtry
+
+ " filter out empty lines and comments
+ call filter(lines, 'v:val !~ ''\v^(\s*#|$)''')
+
+ " remove leading and trailing spaces
+ call map(lines, 'substitute(v:val, ''\m^\s\+'', "", "")')
+ call map(lines, 'substitute(v:val, ''\m\s\+$'', "", "")')
+
+ let parameters = []
+ for line in lines
+ let matches = matchstr(line, '\m\C^\s*-I\s*\zs.\+')
+ if matches != ''
+ " this one looks like an absolute path
+ if match(matches, '\m^\%(/\|\a:\)') != -1
+ call add(parameters, '-I' . matches)
+ else
+ call add(parameters, '-I' . filepath . syntastic#util#Slash() . matches)
+ endif
+ else
+ call add(parameters, line)
+ endif
+ endfor
+
+ return join(map(parameters, 'syntastic#util#shescape(v:val)'))
+endfunction " }}}2
+
+" GetLocList() for C-like compilers
+function! syntastic#c#GetLocList(filetype, subchecker, options) " {{{2
+ try
+ let flags = s:_getCflags(a:filetype, a:subchecker, a:options)
+ catch /\m\C^Syntastic: skip checks$/
+ return []
+ endtry
+
+ 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 postprocess = s:_getCheckerVar('g', a:filetype, a:subchecker, 'remove_include_errors', 0) ?
+ \ ['filterForeignErrors'] : []
+
+ " process makeprg
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'postprocess': postprocess })
+endfunction " }}}2
+
+" }}}1
+
+" Private functions {{{1
+
+" initialize c/cpp syntax checker handlers
+function! s:_init() " {{{2
+ let s:handlers = []
+ let s:cflags = {}
+
+ 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#oneTimeWarn(msg) " {{{2
+ if index(s:one_time_notices_issued, a:msg) >= 0
+ return
+ endif
+
+ call add(s:one_time_notices_issued, a:msg)
+ call syntastic#log#warn(a:msg)
+endfunction " }}}2
+
+" @vimlint(EVL102, 1, l:OLD_VAR)
+function! syntastic#log#deprecationWarn(old, new, ...) " {{{2
+ if exists('g:syntastic_' . a:old) && !exists('g:syntastic_' . a:new)
+ let msg = 'variable g:syntastic_' . a:old . ' is deprecated, please use '
+
+ if a:0
+ let OLD_VAR = g:syntastic_{a:old}
+ try
+ let NEW_VAR = eval(a:1)
+ let msg .= 'in its stead: let g:syntastic_' . a:new . ' = ' . string(NEW_VAR)
+ let g:syntastic_{a:new} = NEW_VAR
+ catch
+ let msg .= 'g:syntastic_' . a:new . ' instead'
+ endtry
+ else
+ let msg .= 'g:syntastic_' . a:new . ' instead'
+ let g:syntastic_{a:new} = g:syntastic_{a:old}
+ endif
+
+ call syntastic#log#oneTimeWarn(msg)
+ endif
+endfunction " }}}2
+" @vimlint(EVL102, 0, l:OLD_VAR)
+
+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')
+lockvar s:isDebugEnabled
+
+function! s:_logRedirect(on) " {{{2
+ if exists("g:syntastic_debug_file")
+ if a:on
+ try
+ execute 'redir >> ' . fnameescape(expand(g:syntastic_debug_file))
+ catch /\m^Vim\%((\a\+)\)\=:/
+ silent! redir END
+ unlet g:syntastic_debug_file
+ endtry
+ else
+ silent! redir END
+ endif
+ endif
+endfunction " }}}2
+
+function! s:_logTimestamp() " {{{2
+ return 'syntastic: ' . split(reltimestr(reltime(g:syntastic_start)))[0] . ': '
+endfunction " }}}2
+
+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/sources_non_forked/syntastic/autoload/syntastic/postprocess.vim b/sources_non_forked/syntastic/autoload/syntastic/postprocess.vim
new file mode 100644
index 00000000..65570d98
--- /dev/null
+++ b/sources_non_forked/syntastic/autoload/syntastic/postprocess.vim
@@ -0,0 +1,54 @@
+if exists("g:loaded_syntastic_postprocess_autoload") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_postprocess_autoload = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+" Public functions {{{1
+
+" 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')
+ let e['text'] = substitute(e['text'], '\m^\s\+', '', '')
+ let e['text'] = substitute(e['text'], '\m\s\+$', '', '')
+ endfor
+
+ return a:errors
+endfunction " }}}2
+
+" remove spurious CR under Cygwin
+function! syntastic#postprocess#cygwinRemoveCR(errors) " {{{2
+ if has('win32unix')
+ for e in a:errors
+ let e['text'] = substitute(e['text'], '\r', '', 'g')
+ endfor
+ endif
+
+ return a:errors
+endfunction " }}}2
+
+" decode XML entities
+function! syntastic#postprocess#decodeXMLEntities(errors) " {{{2
+ for e in a:errors
+ let e['text'] = syntastic#util#decodeXMLEntities(e['text'])
+ endfor
+
+ return a:errors
+endfunction " }}}2
+
+" filter out errors referencing other files
+function! syntastic#postprocess#filterForeignErrors(errors) " {{{2
+ return filter(copy(a:errors), 'get(v:val, "bufnr") == ' . bufnr(''))
+endfunction " }}}2
+
+" }}}1
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/autoload/syntastic/preprocess.vim b/sources_non_forked/syntastic/autoload/syntastic/preprocess.vim
new file mode 100644
index 00000000..56998d26
--- /dev/null
+++ b/sources_non_forked/syntastic/autoload/syntastic/preprocess.vim
@@ -0,0 +1,142 @@
+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#cabal(errors) " {{{2
+ let out = []
+ let star = 0
+ for err in a:errors
+ if star
+ if err == ''
+ let star = 0
+ else
+ let out[-1] .= ' ' . err
+ endif
+ else
+ call add(out, err)
+ if err =~ '\m^*\s'
+ let star = 1
+ endif
+ endif
+ endfor
+ return out
+endfunction " }}}2
+
+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#rparse(errors) " {{{2
+ let errlist = copy(a:errors)
+
+ " remove uninteresting lines and handle continuations
+ let i = 0
+ while i < len(errlist)
+ if i > 0 && errlist[i][:1] == ' ' && errlist[i] !~ '\m\s\+\^$'
+ let errlist[i-1] .= errlist[i][1:]
+ call remove(errlist, i)
+ elseif errlist[i] !~ '\m^\(Lint:\|Lint checking:\|Error in\) '
+ call remove(errlist, i)
+ else
+ let i += 1
+ endif
+ endwhile
+
+ let out = []
+ let fname = ''
+ for e in errlist
+ if match(e, '\m^Lint: ') == 0
+ let parts = matchlist(e, '\m^Lint: \(.*\): found on lines \([0-9, ]\+\)\(+\(\d\+\) more\)\=')
+ if len(parts) >= 3
+ for line in split(parts[2], '\m,\s*')
+ call add(out, 'E:' . fname . ':' . line . ': ' . parts[1])
+ endfor
+ endif
+ if len(parts) >= 5 && parts[4] != ''
+ call add(out, 'E:' . fname . ':0: ' . parts[1] . ' - ' . parts[4] . ' messages not shown')
+ endif
+ elseif match(e, '\m^Lint checking: ') == 0
+ let fname = matchstr(e, '\m^Lint checking: \zs.*')
+ elseif match(e, '\m^Error in ') == 0
+ call add(out, substitute(e, '\m^Error in .\+ : .\+\ze:\d\+:\d\+: ', 'E:' . fname, ''))
+ endif
+ endfor
+
+ return out
+endfunction " }}}2
+
+function! syntastic#preprocess#tslint(errors) " {{{2
+ return map(copy(a:errors), 'substitute(v:val, ''\m^\(([^)]\+)\)\s\(.\+\)$'', ''\2 \1'', "")')
+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/sources_non_forked/syntastic/autoload/syntastic/util.vim b/sources_non_forked/syntastic/autoload/syntastic/util.vim
new file mode 100644
index 00000000..51831b47
--- /dev/null
+++ b/sources_non_forked/syntastic/autoload/syntastic/util.vim
@@ -0,0 +1,286 @@
+if exists('g:loaded_syntastic_util_autoload') || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_util_autoload = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+" Public functions {{{1
+
+function! syntastic#util#isRunningWindows() " {{{2
+ return has('win16') || has('win32') || has('win64')
+endfunction " }}}2
+
+function! syntastic#util#DevNull() " {{{2
+ if syntastic#util#isRunningWindows()
+ return 'NUL'
+ endif
+ return '/dev/null'
+endfunction " }}}2
+
+" Get directory separator
+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
+"
+"e.g.
+"
+"#!/usr/bin/perl -f -bar
+"
+"returns
+"
+"{'exe': '/usr/bin/perl', 'args': ['-f', '-bar']}
+function! syntastic#util#parseShebang() " {{{2
+ for lnum in range(1, 5)
+ let line = getline(lnum)
+ if line =~ '^#!'
+ let line = substitute(line, '\v^#!\s*(\S+/env(\s+-\S+)*\s+)?', '', '')
+ let exe = matchstr(line, '\m^\S*\ze')
+ let args = split(matchstr(line, '\m^\S*\zs.*'))
+ return { 'exe': exe, 'args': args }
+ endif
+ endfor
+
+ 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) " {{{2
+ return map(split(matchstr( a:version, '\v^\D*\zs\d+(\.\d+)+\ze' ), '\m\.'), 'str2nr(v:val)')
+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) " {{{2
+ return syntastic#util#parseVersion(system(a:command))
+endfunction " }}}2
+
+" Verify that the 'installed' version is at least the 'required' version.
+"
+" 'installed' and 'required' must be arrays. If they have different lengths,
+" 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) " {{{2
+ return syntastic#util#compareLexi(a:installed, a:required) >= 0
+endfunction " }}}2
+
+" Almost lexicographic comparison of two lists of integers. :) If lists
+" have different lengths, the "missing" elements are assumed to be 0.
+function! syntastic#util#compareLexi(a, b) " {{{2
+ for idx in range(max([len(a:a), len(a:b)]))
+ let a_element = str2nr(get(a:a, idx, 0))
+ let b_element = str2nr(get(a:b, idx, 0))
+ if a_element != b_element
+ return a_element > b_element ? 1 : -1
+ endif
+ endfor
+ " Everything matched, so it is at least the required version.
+ return 0
+endfunction " }}}2
+
+" strwidth() was added in Vim 7.3; if it doesn't exist, we use strlen()
+" and hope for the best :)
+let s:width = function(exists('*strwidth') ? 'strwidth' : 'strlen')
+lockvar s:width
+
+function! syntastic#util#screenWidth(str, tabstop) " {{{2
+ let chunks = split(a:str, "\t", 1)
+ let width = s:width(chunks[-1])
+ for c in chunks[:-2]
+ let cwidth = s:width(c)
+ let width += cwidth + a:tabstop - cwidth % a:tabstop
+ endfor
+ return width
+endfunction " }}}2
+
+"print as much of a:msg as possible without "Press Enter" prompt appearing
+function! syntastic#util#wideMsg(msg) " {{{2
+ let old_ruler = &ruler
+ let old_showcmd = &showcmd
+
+ "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")
+
+ "convert tabs to spaces so that the tabs count towards the window
+ "width as the proper amount of characters
+ let chunks = split(msg, "\t", 1)
+ let msg = join(map(chunks[:-2], 'v:val . repeat(" ", &tabstop - s:width(v:val) % &tabstop)'), '') . chunks[-1]
+ let msg = strpart(msg, 0, &columns - 1)
+
+ set noruler noshowcmd
+ call syntastic#util#redraw(0)
+
+ echo msg
+
+ 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) " {{{2
+ " convert to number, or hell breaks loose
+ let buf = str2nr(a:buffer)
+
+ if !bufloaded(buf) || !buflisted(buf)
+ return 0
+ endif
+
+ " get rid of hidden buffers
+ for tab in range(1, tabpagenr('$'))
+ if index(tabpagebuflist(tab), buf) >= 0
+ return 1
+ endif
+ endfor
+
+ return 0
+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) " {{{2
+ let here = fnamemodify(a:where, ':p')
+
+ 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 ==? 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 " }}}2
+
+" Returns unique elements in a list
+function! syntastic#util#unique(list) " {{{2
+ let seen = {}
+ let uniques = []
+ for e in a:list
+ if !has_key(seen, e)
+ let seen[e] = 1
+ call add(uniques, e)
+ endif
+ endfor
+ return uniques
+endfunction " }}}2
+
+" A less noisy shellescape()
+function! syntastic#util#shescape(string) " {{{2
+ return a:string =~ '\m^[A-Za-z0-9_/.-]\+$' ? a:string : shellescape(a:string)
+endfunction " }}}2
+
+" A less noisy shellescape(expand())
+function! syntastic#util#shexpand(string) " {{{2
+ return syntastic#util#shescape(expand(a:string))
+endfunction " }}}2
+
+" decode XML entities
+function! syntastic#util#decodeXMLEntities(string) " {{{2
+ let str = a:string
+ let str = substitute(str, '\m<', '<', 'g')
+ let str = substitute(str, '\m>', '>', 'g')
+ let str = substitute(str, '\m"', '"', 'g')
+ let str = substitute(str, '\m'', "'", 'g')
+ let str = substitute(str, '\m&', '\&', 'g')
+ return str
+endfunction " }}}2
+
+function! syntastic#util#redraw(full) " {{{2
+ if a:full
+ redraw!
+ else
+ redraw
+ endif
+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
+
+" Return a [high, low] list of integers, representing the time
+" (hopefully high resolution) since program start
+" TODO: This assumes reltime() returns a list of integers.
+function! syntastic#util#stamp() " {{{2
+ return reltime(g:syntastic_start)
+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 sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/doc/syntastic.txt b/sources_non_forked/syntastic/doc/syntastic.txt
new file mode 100644
index 00000000..14d4b13e
--- /dev/null
+++ b/sources_non_forked/syntastic/doc/syntastic.txt
@@ -0,0 +1,770 @@
+*syntastic.txt* Syntax checking on the fly has never been so pimp.
+*syntastic*
+
+
+ It's a bird! It's a plane! ZOMG It's ... ~
+
+ _____ __ __ _ ~
+ / ___/__ ______ / /_____ ______/ /_(_)____ ~
+ \__ \/ / / / __ \/ __/ __ `/ ___/ __/ / ___/ ~
+ ___/ / /_/ / / / / /_/ /_/ (__ ) /_/ / /__ ~
+ /____/\__, /_/ /_/\__/\__,_/____/\__/_/\___/ ~
+ /____/ ~
+
+
+
+ Reference Manual~
+
+
+==============================================================================
+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.Editing files over network.............|syntastic-netrw|
+ 6.3.Interaction with python-mode...........|syntastic-pymode|
+ 6.4.Interaction with YouCompleteMe.........|syntastic-ycm|
+ 6.5.Interaction with the fish shell........|syntastic-fish|
+ 6.6.Interaction with PowerShell............|syntastic-powershell|
+ 6.7.Using syntastic with the fizsh shell...|syntastic-fizsh|
+ 6.8.Interaction with Eclim.................|syntastic-eclim|
+ 6.9.Interaction with vim-virtualenv........|syntastic-vim-virtualenv|
+ 7.About........................................|syntastic-about|
+ 8.License......................................|syntastic-license|
+
+
+==============================================================================
+1. Intro *syntastic-intro*
+
+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
+because they didn't have to compile their code or execute their script to find
+them.
+
+Syntastic comes in two parts: the syntax checker plugins, and the core. The
+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 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 writing the buffer) and passive (manual)
+checking.
+
+==============================================================================
+2. Functionality provided *syntastic-functionality*
+
+Syntax checking can be done automatically or on demand (see
+|'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-global-options| for how to configure and
+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
+ * Erroneous parts of lines can be highlighted (this functionality is only
+ 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*
+
+To use the statusline flag, this must appear in your |'statusline'| setting >
+ %{SyntasticStatuslineFlag()}
+<
+Something like this could be more useful: >
+ set statusline+=%#warningmsg#
+ set statusline+=%{SyntasticStatuslineFlag()}
+ 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.
+
+------------------------------------------------------------------------------
+2.2. Error signs *syntastic-error-signs*
+
+Syntastic uses the |:sign| commands to mark lines with errors and warnings in
+the sign column. To enable this feature, use the |'syntastic_enable_signs'|
+option.
+
+Signs are colored using the Error and Todo syntax highlight groups by default.
+If you wish to customize the colors for the signs, you can use the following
+groups:
+ SyntasticErrorSign - For syntax errors, links to 'error' by default
+ SyntasticWarningSign - For syntax warnings, links to 'todo' by default
+ SyntasticStyleErrorSign - For style errors, links to 'SyntasticErrorSign'
+ by default
+ SyntasticStyleWarningSign - For style warnings, links to
+ 'SyntasticWarningSign' by default
+
+Example: >
+ highlight SyntasticErrorSign guifg=white guibg=red
+<
+To set up highlighting for the line where a sign resides, you can use the
+following highlight groups:
+ SyntasticErrorLine
+ SyntasticWarningLine
+ SyntasticStyleErrorLine - Links to 'SyntasticErrorLine' by default
+ SyntasticStyleWarningLine - Links to 'SyntasticWarningLine' by default
+
+Example: >
+ highlight SyntasticErrorLine guibg=#2f0000
+<
+------------------------------------------------------------------------------
+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|.
+
+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
+ SyntasticStyleError - Links to SyntasticError by default
+ SyntasticStyleWarning - Links to SyntasticWarning 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 generation of these labels by turning off '|syntastic_id_checkers|'.
+
+If |'syntastic_sort_aggregated_errors'| is set (which is the default), messages
+in the aggregated list are grouped by file, then sorted by line number, then
+type, then column number. Otherwise messages produced by the same checker are
+grouped together.
+
+------------------------------------------------------------------------------
+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*
+
+:Errors *:SyntasticErrors*
+
+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. 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*
+
+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*
+
+
+ *'syntastic_check_on_open'*
+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
+<
+ *'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
+<
+ *'syntastic_aggregate_errors'*
+Default: 0
+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_sort_aggregated_errors'*
+Default: 1
+By default, 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), errors are grouped by file,
+then sorted by line number, then grouped by type (namely errors take precedence
+over warnings), then they are sorted by column number. If you want to leave
+messages grouped by checker output, set this variable to 0. >
+ let g:syntastic_sort_aggregated_errors = 0
+<
+ *'syntastic_echo_current_error'*
+Default: 1
+If enabled, syntastic will echo current error to the command window. If
+multiple errors are found on the same line, |syntastic_cursor_columns| is used
+to decide which one is shown. >
+ let g:syntastic_echo_current_error = 1
+<
+ *'syntastic_cursor_columns'*
+Default: 1
+This option controls which errors are echoed to the command window if
+|syntastic_echo_current_error| is set and multiple errors are found on the same
+line. When the option is enabled, the first error corresponding to the current
+column is show. Otherwise, the first error on the current line is echoed,
+regardless of the cursor position on the current line.
+
+When dealing with very large lists of errors, disabling this option can speed
+up navigation significantly: >
+ let g:syntastic_cursor_column = 0
+<
+ *'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
+<
+ *'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 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 = "⚠"
+<
+ *'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|.
+
+ *'syntastic_enable_highlighting'*
+Default: 1
+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 |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 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
+<
+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
+<
+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
+<
+ *'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
+<
+ *'syntastic_ignore_files'*
+Default: []
+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
+checkers are mapped accordingly, which allows syntastic to check files with
+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": [],
+ "passive_filetypes": [] }
+
+Use this option to fine tune when automatic syntax checking is done (or not
+done).
+
+The option should be set to something like: >
+
+ let g:syntastic_mode_map = { "mode": "active",
+ \ "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
+calls |:SyntasticCheck|.
+
+The exceptions to these rules are defined with "active_filetypes" and
+"passive_filetypes". In passive mode, automatic checks are still done for
+filetypes in the "active_filetypes" array (and "passive_filetypes" is
+ignored). In active mode, automatic checks are not done for any filetypes in
+the "passive_filetypes" array ("active_filetypes" is ignored).
+
+If any of "mode", "active_filetypes", or "passive_filetypes" are left
+unspecified, they default to values above.
+
+At runtime, the |:SyntasticToggleMode| command can be used to switch between
+active and passive modes.
+
+ *'syntastic_quiet_messages'*
+Default: {}
+
+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:
+ %e - number of errors
+ %w - number of warnings
+ %t - total number of warnings and errors
+ %fe - line number of first error
+ %fw - line number of first warning
+ %F - line number of first warning or error
+
+Several additional flags are available to hide text under certain conditions:
+ %E{...} - hide the text in the brackets unless there are errors
+ %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 can't be nested.
+
+Example: >
+ let g:syntastic_stl_format = '[%E{Err: %fe #%e}%B{, }%W{Warn: %fw #%w}]'
+<
+If this format is used and the current buffer has 5 errors and 1 warning
+starting on lines 20 and 10 respectively then this would appear on the
+statusline: >
+ [Err: 20 #5, Warn: 10 #1]
+<
+If the buffer had 2 warnings, starting on line 5 then this would appear: >
+ [Warn: 5 #2]
+<
+ *'syntastic_full_redraws'*
+Default: 0 in GUI Vim and MacVim, 1 otherwise
+Controls whether syntastic calls |:redraw| or |:redraw!| for screen redraws.
+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_debug'*
+Default: 0
+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
+<
+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 Choosing which checkers to use *syntastic-filetype-checkers*
+
+ *'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"]
+<
+ *'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.
+
+Take a look at the wiki to find out what checkers and filetypes are supported
+by syntastic:
+
+ https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers
+
+Use |:SyntasticInfo| to see which checkers are available for a given filetype.
+
+------------------------------------------------------------------------------
+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 'makeprgBuild()' function and provide many options by
+default - in fact you can customise every part of the command that gets called.
+
+ *'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": "2>/dev/null" })
+<
+The result is a 'makeprg' of the form: >
+
+<
+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.
+
+If one of these variables has a non-empty default and you want it to be empty,
+you can set it to a space, e.g.: >
+ let g:syntastic_javascript_jslint_args = " "
+<
+(setting it to an empty string doesn't work, for implementation reasons).
+
+ *'syntastic___exe'*
+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"
+<
+The general form of the override options is: >
+ 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:
+
+ https://github.com/scrooloose/syntastic/wiki/Syntax-Checkers
+
+ *'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*
+
+------------------------------------------------------------------------------
+6.1. Handling of composite filetypes *syntastic-composite*
+
+Some Vim plugins use composite filetypes, such as "django.python" or
+"handlebars.html". Normally, syntastic deals with this situation by splitting
+the filetype in its simple components, and calling all checkers that apply.
+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 Editing files over network *syntastic-netrw*
+
+The standard plugin |netrw| allows Vim to transparently edit files over
+network and inside archives. Currently syntastic doesn't support this mode
+of operation. It can only check files that can be accessed directly by local
+checkers, without any translation or conversion.
+
+------------------------------------------------------------------------------
+6.3 Interaction with python-mode *syntastic-pymode*
+
+Syntastic can be used along with the 'python-mode' Vim plugin (see
+https://github.com/klen/python-mode). However, they both run syntax checks by
+default when you save buffers to disk, and this is probably not what you want.
+To avoid both plugins opening error windows, you can either set passive mode
+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.4 Interaction with YouCompleteMe *syntastic-ycm*
+
+Syntastic can be used together with the 'YouCompleteMe' Vim plugin (see
+http://valloric.github.io/YouCompleteMe/). However, by default 'YouCompleteMe'
+disables syntastic"s checkers for the "c", "cpp", "objc", and "objcpp"
+filetypes, in order to allow its own checkers to run. If you want to use YCM's
+identifier completer but still run syntastic's checkers for those filetypes you
+have to set |ycm_show_diagnostics_ui| to 0. E.g.: >
+ let g:ycm_show_diagnostics_ui = 0
+<
+------------------------------------------------------------------------------
+6.5 Interaction with the fish shell *syntastic-fish*
+
+At the time of this writing the 'fish' shell (see http://fishshell.com/)
+doesn't support the standard UNIX syntax for file redirections, and thus it
+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
+<
+------------------------------------------------------------------------------
+6.6. Interaction with PowerShell *syntastic-powershell*
+
+At the time of this writing, syntastic is not compatible with using 'Windows
+PowerShell' (http://technet.microsoft.com/en-us/library/bb978526.aspx) as Vim's
+'shell'. You may still run Vim from 'PowerShell', but you do have to point
+Vim's 'shell' to a more traditional program, such as 'cmd.exe': >
+ set shell=cmd.exe
+<
+------------------------------------------------------------------------------
+6.7. 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
+<
+------------------------------------------------------------------------------
+6.8. Interaction with Eclim *syntastic-eclim*
+
+As far as syntastic is concerned there shouldn't be any compatibility problems
+with the 'Eclim' Vim plugin (see http://eclim.org/). However, at the time of
+this writing there are several reports that 'Eclim' triggers a bug in Vim that
+makes syntastic forget some of its configuration parameters. No solutions or
+workarounds are known for now.
+
+------------------------------------------------------------------------------
+6.9. Interaction with vim-virtualenv *syntastic-vim-virtualenv*
+
+At the time of this writing, syntastic can't run checkers installed
+in Python virtual environments activated by 'vim-virtualenv' (see
+https://github.com/jmcantrell/vim-virtualenv). This is a limitation of
+'vim-virtualenv'.
+
+==============================================================================
+7. About *syntastic-about*
+
+The core maintainers of syntastic are:
+ Martin Grenfell (github: scrooloose)
+ Gregor Uhlenheuer (github: kongo2002)
+ LCD 047 (github: lcd047)
+
+Find the latest version of syntastic at:
+
+ http://github.com/scrooloose/syntastic
+
+==============================================================================
+8. License *syntastic-license*
+
+Syntastic is released under the wtfpl.
+See http://sam.zoy.org/wtfpl/COPYING.
+
+ vim:tw=78:sw=4:ft=help:norl:
diff --git a/sources_non_forked/syntastic/plugin/syntastic.vim b/sources_non_forked/syntastic/plugin/syntastic.vim
new file mode 100644
index 00000000..393a7cce
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic.vim
@@ -0,0 +1,610 @@
+"============================================================================
+"File: syntastic.vim
+"Description: Vim plugin for on the fly syntax checking.
+"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_plugin")
+ finish
+endif
+let g:loaded_syntastic_plugin = 1
+
+if has('reltime')
+ let g:syntastic_start = reltime()
+ lockvar! g:syntastic_start
+endif
+
+let g:syntastic_version = '3.4.0-117'
+lockvar g:syntastic_version
+
+" Sanity checks {{{1
+
+for s:feature in ['autocmd', 'eval', 'modify_fname', 'quickfix', 'reltime', '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()
+lockvar s:running_windows
+
+if !s:running_windows && executable('uname')
+ try
+ let s:uname = system('uname')
+ catch /\m^Vim\%((\a\+)\)\=:E484/
+ call syntastic#log#error("your shell " . &shell . " doesn't use traditional UNIX syntax for redirections")
+ finish
+ endtry
+ lockvar s:uname
+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,
+ \ 'cursor_columns': 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_extensions': '\c\v^([gx]?z|lzma|bz2)$',
+ \ 'ignore_files': [],
+ \ 'loc_list_height': 10,
+ \ 'quiet_messages': {},
+ \ 'reuse_loc_lists': 0,
+ \ 'sort_aggregated_errors': 1,
+ \ 'stl_format': '[Syntax: line:%F (%t)]',
+ \ 'style_error_symbol': 'S>',
+ \ 'style_warning_symbol': 'S>',
+ \ 'warning_symbol': '>>'
+ \ }
+lockvar! g:syntastic_defaults
+
+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_quiet_warnings")
+ call syntastic#log#oneTimeWarn("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
+
+" }}}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
+lockvar! s:debug_dump_options
+
+" debug constants
+let g:SyntasticDebugTrace = 1
+lockvar g:SyntasticDebugTrace
+let g:SyntasticDebugLoclist = 2
+lockvar g:SyntasticDebugLoclist
+let g:SyntasticDebugNotifications = 4
+lockvar g:SyntasticDebugNotifications
+let g:SyntasticDebugAutocommands = 8
+lockvar g:SyntasticDebugAutocommands
+let g:SyntasticDebugVariables = 16
+lockvar g:SyntasticDebugVariables
+
+" }}}1
+
+runtime! plugin/syntastic/*.vim
+
+let s:registry = g:SyntasticRegistry.Instance()
+let s:notifiers = g:SyntasticNotifiers.Instance()
+let s:modemap = g:SyntasticModeMap.Instance()
+
+" 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:resolveFiletypes()
+ call extend(checker_names, s:registry.getNamesOfAvailableCheckers(ft))
+ endfor
+ return join(checker_names, "\n")
+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
+ \ call s:UpdateErrors(0, )
+ \ call syntastic#util#redraw(g:syntastic_full_redraws)
+command! Errors call s:ShowLocList()
+command! -nargs=? -complete=custom,s:CompleteFiletypes SyntasticInfo
+ \ call s:modemap.modeInfo() |
+ \ 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()
+
+" }}}1
+
+" Autocommands and hooks {{{1
+
+augroup syntastic
+ autocmd BufReadPost * call s:BufReadPostHook()
+ autocmd BufWritePost * call s:BufWritePostHook()
+ autocmd BufEnter * call s:BufEnterHook()
+augroup END
+
+if v:version > 703 || (v:version == 703 && has('patch544'))
+ " QuitPre was added in Vim 7.3.544
+ augroup syntastic
+ autocmd QuitPre * call s:QuitPreHook()
+ 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:BufWritePostHook() " {{{2
+ call syntastic#log#debug(g:SyntasticDebugAutocommands,
+ \ 'autocmd: BufWritePost, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr("")))))
+ call s:UpdateErrors(1)
+endfunction " }}}2
+
+function! s:BufEnterHook() " {{{2
+ call syntastic#log#debug(g:SyntasticDebugAutocommands,
+ \ 'autocmd: BufEnter, buffer ' . bufnr("") . ' = ' . string(bufname(str2nr(bufnr("")))) .
+ \ ', &buftype = ' . string(&buftype))
+ if &buftype == ''
+ call s:notifiers.refresh(g:SyntasticLoclist.current())
+ elseif &buftype == 'quickfix'
+ " TODO: this is needed because in recent versions of Vim lclose
+ " can no longer be called from BufWinLeave
+ " TODO: at this point there is no b:syntastic_loclist
+ let loclist = filter(copy(getloclist(0)), 'v:val["valid"] == 1')
+ let owner = str2nr(getbufvar(bufnr(""), 'syntastic_owner_buffer'))
+ let buffers = syntastic#util#unique(map(loclist, 'v:val["bufnr"]') + (owner ? [owner] : []))
+ if !empty(loclist) && empty(filter( buffers, 'syntastic#util#bufIsActive(v:val)' ))
+ call SyntasticLoclistHide()
+ endif
+ endif
+endfunction " }}}2
+
+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 SyntasticLoclistHide()
+endfunction " }}}2
+
+" }}}1
+
+" Main {{{1
+
+"refresh and redraw all the error info for this buf when saving or reading
+function! s:UpdateErrors(auto_invoked, ...) " {{{2
+ 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#debug(g:SyntasticDebugTrace, 'UpdateErrors' . (a:auto_invoked ? ' (auto)' : '') .
+ \ ': ' . (a:0 ? join(a:000) : 'default checkers'))
+ if s:skipFile()
+ return
+ endif
+
+ call s:modemap.synch()
+ let run_checks = !a:auto_invoked || s:modemap.allowsAutoChecking(&filetype)
+ if run_checks
+ 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 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 && 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 " }}}2
+
+"clear the loc list for the buffer
+function! s:ClearCache() " {{{2
+ call s:notifiers.reset(g:SyntasticLoclist.current())
+ call b:syntastic_loclist.destroy()
+endfunction " }}}2
+
+"detect and cache all syntax errors in this buffer
+function! s:CacheErrors(checker_names) " {{{2
+ call syntastic#log#debug(g:SyntasticDebugTrace, 'CacheErrors: ' .
+ \ (len(a:checker_names) ? join(a:checker_names) : 'default checkers'))
+ call s:ClearCache()
+ let newLoclist = g:SyntasticLoclist.New([])
+
+ if !s:skipFile()
+ " debug logging {{{3
+ 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') || len(filetypes) > 1
+ let decorate_errors = aggregate_errors && syntastic#util#var('id_checkers')
+ let sort_aggregated_errors = aggregate_errors && syntastic#util#var('sort_aggregated_errors')
+
+ let clist = []
+ for type in filetypes
+ call extend(clist, s:registry.getCheckers(type, a:checker_names))
+ endfor
+
+ let names = []
+ let unavailable_checkers = 0
+ for checker in clist
+ let cname = checker.getFiletype() . '/' . checker.getName()
+ if !checker.isAvailable()
+ call syntastic#log#debug(g:SyntasticDebugTrace, 'CacheErrors: Checker ' . cname . ' is not available')
+ let unavailable_checkers += 1
+ continue
+ endif
+
+ call syntastic#log#debug(g:SyntasticDebugTrace, 'CacheErrors: Invoking checker: ' . cname)
+
+ let loclist = checker.getLocList()
+
+ if !loclist.isEmpty()
+ if decorate_errors
+ call loclist.decorate(cname)
+ endif
+ call add(names, cname)
+ if checker.getWantSort() && !sort_aggregated_errors
+ call loclist.sort()
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'sorted:', loclist)
+ endif
+
+ let newLoclist = newLoclist.extend(loclist)
+
+ if !aggregate_errors
+ break
+ endif
+ endif
+ endfor
+
+ " set names {{{3
+ if !empty(names)
+ 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(names, ', '))
+ endif
+ endif
+ " }}}3
+
+ " issue warning about no active checkers {{{3
+ if len(clist) == unavailable_checkers
+ 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#log#debug(g:SyntasticDebugTrace, 'CacheErrors: no checkers available for ' . &filetype)
+ endif
+ endif
+ " }}}3
+
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'aggregated:', newLoclist)
+ if sort_aggregated_errors
+ call newLoclist.sort()
+ call syntastic#log#debug(g:SyntasticDebugLoclist, 'sorted:', newLoclist)
+ endif
+ endif
+
+ call newLoclist.deploy()
+endfunction " }}}2
+
+function! s:ToggleMode() " {{{2
+ call s:modemap.toggleMode()
+ call s:ClearCache()
+ call s:UpdateErrors(1)
+ call s:modemap.echoMode()
+endfunction " }}}2
+
+"display the cached errors for this buf in the location list
+function! s:ShowLocList() " {{{2
+ call g:SyntasticLoclist.current().show()
+endfunction " }}}2
+
+"Emulates the :lmake command. Sets up the make environment according to the
+"options given, runs make, resets the environment, returns the location list
+"
+"a:options can contain the following keys:
+" 'makeprg'
+" 'errorformat'
+"
+"The corresponding options are set for the duration of the function call. They
+"are set with :let, so dont escape spaces.
+"
+"a:options may also contain:
+" 'defaults' - a dict containing default values for the returned errors
+" 'subtype' - all errors will be assigned the given subtype
+" 'preprocess' - a function to be applied to the error file before parsing errors
+" 'postprocess' - a list of functions to be applied to the error list
+" 'cwd' - change directory to the given path before running the checker
+" 'env' - environment variables to set before running the checker
+" 'returns' - a list of valid exit codes for the checker
+" @vimlint(EVL102, 1, l:env_save)
+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
+ let old_errorformat = &errorformat
+ let old_cwd = getcwd()
+ let old_lc_messages = $LC_MESSAGES
+ let old_lc_all = $LC_ALL
+ " }}}3
+
+ call s:bashHack()
+
+ if has_key(a:options, 'errorformat')
+ let &errorformat = a:options['errorformat']
+ endif
+
+ if has_key(a:options, 'cwd')
+ execute 'lcd ' . fnameescape(a:options['cwd'])
+ endif
+
+ " set environment variables {{{3
+ let env_save = {}
+ if has_key(a:options, 'env') && len(a:options['env'])
+ for key in keys(a:options['env'])
+ if key =~? '\m^[a-z_]\+$'
+ exec 'let env_save[' . string(key) . '] = $' . key
+ exec 'let $' . key . ' = ' . string(a:options['env'][key])
+ endif
+ endfor
+ endif
+ let $LC_MESSAGES = 'C'
+ let $LC_ALL = ''
+ " }}}3
+
+ let err_lines = split(system(a:options['makeprg']), "\n", 1)
+
+ " restore environment variables {{{3
+ let $LC_ALL = old_lc_all
+ let $LC_MESSAGES = old_lc_messages
+ if len(env_save)
+ for key in keys(env_save)
+ exec 'let $' . key . ' = ' . string(env_save[key])
+ endfor
+ endif
+ " }}}3
+
+ 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 = deepcopy(getloclist(0))
+
+ if has_key(a:options, '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
+ " }}}3
+
+ 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 s:addToErrors(errors, a:options['defaults'])
+ endif
+
+ " Add subtype info if present.
+ if has_key(a:options, 'subtype')
+ call s:addToErrors(errors, { 'subtype': a:options['subtype'] })
+ endif
+
+ 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 " }}}2
+" @vimlint(EVL102, 0, l:env_save)
+
+"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 fname = expand('%')
+ let skip = (exists('b:syntastic_skip_checks') ? b:syntastic_skip_checks : 0) ||
+ \ (&buftype != '') || !filereadable(fname) || getwinvar(0, '&diff') ||
+ \ s:ignoreFile(fname) || fnamemodify(fname, ':e') =~? g:syntastic_ignore_extensions
+ if skip
+ call syntastic#log#debug(g:SyntasticDebugTrace, 'skipFile: skipping')
+ endif
+ return skip
+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(err, key) || empty(err[key])
+ let err[key] = a:options[key]
+ endif
+ endfor
+ endfor
+
+ return a:errors
+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')
+ lockvar s:uname
+ endif
+ return s:uname
+endfunction " }}}2
+
+" }}}1
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/plugin/syntastic/autoloclist.vim b/sources_non_forked/syntastic/plugin/syntastic/autoloclist.vim
new file mode 100644
index 00000000..5362ad6a
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic/autoloclist.vim
@@ -0,0 +1,38 @@
+if exists("g:loaded_syntastic_notifier_autoloclist") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_notifier_autoloclist = 1
+
+let g:SyntasticAutoloclistNotifier = {}
+
+" Public methods {{{1
+"
+function! g:SyntasticAutoloclistNotifier.New() " {{{2
+ let newObj = copy(self)
+ return newObj
+endfunction " }}}2
+
+function! g:SyntasticAutoloclistNotifier.refresh(loclist) " {{{2
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'autoloclist: refresh')
+ call g:SyntasticAutoloclistNotifier.AutoToggle(a:loclist)
+endfunction " }}}2
+
+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 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 " }}}2
+
+" }}}1
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/plugin/syntastic/balloons.vim b/sources_non_forked/syntastic/plugin/syntastic/balloons.vim
new file mode 100644
index 00000000..6bf6edb9
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic/balloons.vim
@@ -0,0 +1,67 @@
+if exists("g:loaded_syntastic_notifier_balloons") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_notifier_balloons = 1
+
+if !has('balloon_eval')
+ let g:syntastic_enable_balloons = 0
+endif
+
+let g:SyntasticBalloonsNotifier = {}
+
+" Public methods {{{1
+
+function! g:SyntasticBalloonsNotifier.New() " {{{2
+ let newObj = copy(self)
+ return newObj
+endfunction " }}}2
+
+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) " {{{2
+ let b:syntastic_balloons = {}
+ if self.enabled() && !a:loclist.isEmpty()
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'balloons: refresh')
+ let buf = bufnr('')
+ 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'])
+ let b:syntastic_balloons[i['lnum']] .= "\n" . i['text']
+ else
+ let b:syntastic_balloons[i['lnum']] = i['text']
+ endif
+ endfor
+ set beval bexpr=SyntasticBalloonsExprNotifier()
+ endif
+ endif
+endfunction " }}}2
+
+" Reset the error balloons
+" @vimlint(EVL103, 1, a:loclist)
+function! g:SyntasticBalloonsNotifier.reset(loclist) " {{{2
+ let b:syntastic_balloons = {}
+ if has('balloon_eval')
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'balloons: reset')
+ set nobeval
+ endif
+endfunction " }}}2
+" @vimlint(EVL103, 0, a:loclist)
+
+" }}}1
+
+" Private functions {{{1
+
+function! SyntasticBalloonsExprNotifier() " {{{2
+ if !exists('b:syntastic_balloons')
+ return ''
+ endif
+ return get(b:syntastic_balloons, v:beval_lnum, '')
+endfunction " }}}2
+
+" }}}1
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/plugin/syntastic/checker.vim b/sources_non_forked/syntastic/plugin/syntastic/checker.vim
new file mode 100644
index 00000000..273f0521
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic/checker.vim
@@ -0,0 +1,179 @@
+if exists("g:loaded_syntastic_checker") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_checker = 1
+
+let g:SyntasticChecker = {}
+
+" Public methods {{{1
+
+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)
+ let newObj._sort = 0
+
+ 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 newObj._locListFunc = function(prefix . 'GetLocList')
+
+ if exists('*' . prefix . 'IsAvailable')
+ let newObj._isAvailableFunc = function(prefix . 'IsAvailable')
+ else
+ let newObj._isAvailableFunc = function('SyntasticCheckerIsAvailableDefault')
+ endif
+
+ if exists('*' . prefix . 'GetHighlightRegex')
+ let newObj._highlightRegexFunc = function(prefix . 'GetHighlightRegex')
+ endif
+
+ return newObj
+endfunction " }}}2
+
+function! g:SyntasticChecker.getFiletype() " {{{2
+ return self._filetype
+endfunction " }}}2
+
+function! g:SyntasticChecker.getName() " {{{2
+ return self._name
+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
+
+ 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#log#debug(g:SyntasticDebugTrace, 'getLocList: checker ' . name . ' returned ' . v:shell_error)
+ catch /\m\C^Syntastic: checker error$/
+ let list = []
+ call syntastic#log#error('checker ' . name . ' returned abnormal status ' . v:shell_error)
+ endtry
+ call self._populateHighlightRegexes(list)
+ call syntastic#log#debug(g:SyntasticDebugLoclist, name . ' raw:', list)
+ call self._quietMessages(list)
+ return list
+endfunction " }}}2
+
+function! g:SyntasticChecker.getLocList() " {{{2
+ return g:SyntasticLoclist.New(self.getLocListRaw())
+endfunction " }}}2
+
+function! g:SyntasticChecker.getWantSort() " {{{2
+ return self._sort
+endfunction " }}}2
+
+function! g:SyntasticChecker.setWantSort(val) " {{{2
+ let self._sort = a:val
+endfunction " }}}2
+
+function! g:SyntasticChecker.makeprgBuild(opts) " {{{2
+ let basename = self._filetype . '_' . self._name . '_'
+
+ 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
+ if !has_key(self, '_available')
+ let self._available = self._isAvailableFunc()
+ endif
+ return self._available
+endfunction " }}}2
+
+" }}}1
+
+" Private methods {{{1
+
+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 term != ''
+ let e['hl'] = term
+ endif
+ endif
+ endfor
+ endif
+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/sources_non_forked/syntastic/plugin/syntastic/cursor.vim b/sources_non_forked/syntastic/plugin/syntastic/cursor.vim
new file mode 100644
index 00000000..60f0014c
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic/cursor.vim
@@ -0,0 +1,138 @@
+if exists("g:loaded_syntastic_notifier_cursor") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_notifier_cursor = 1
+
+let g:SyntasticCursorNotifier = {}
+
+" Public methods {{{1
+
+function! g:SyntasticCursorNotifier.New() " {{{2
+ let newObj = copy(self)
+ return newObj
+endfunction " }}}2
+
+function! g:SyntasticCursorNotifier.enabled() " {{{2
+ return syntastic#util#var('echo_current_error')
+endfunction " }}}2
+
+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:syntastic_line = -1
+ let b:syntastic_cursor_columns = a:loclist.getCursorColumns()
+ autocmd! syntastic CursorMoved
+ autocmd syntastic CursorMoved * call SyntasticRefreshCursor()
+ endif
+endfunction " }}}2
+
+" @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:syntastic_line = -1
+endfunction " }}}2
+" @vimlint(EVL103, 0, a:loclist)
+
+" }}}1
+
+" Private methods {{{1
+
+function! SyntasticRefreshCursor() " {{{2
+ if !exists('b:syntastic_messages') || empty(b:syntastic_messages)
+ " file not checked
+ return
+ endif
+
+ if !exists('b:syntastic_line')
+ let b:syntastic_line = -1
+ endif
+ let l = line('.')
+ let current_messages = get(b:syntastic_messages, l, {})
+
+ if !exists('b:syntastic_cursor_columns')
+ let b:syntastic_cursor_columns = g:syntastic_cursor_columns
+ endif
+
+ if b:syntastic_cursor_columns
+ let c = virtcol('.')
+ if !exists('b:syntastic_idx')
+ let b:syntastic_idx = -1
+ endif
+
+ if s:_isSameIndex(l, b:syntastic_line, c, b:syntastic_idx, current_messages)
+ return
+ else
+ let b:syntastic_line = l
+ endif
+
+ if !empty(current_messages)
+ let b:syntastic_idx = s:_findIndex(c, current_messages)
+ call syntastic#util#wideMsg(current_messages[b:syntastic_idx].text)
+ else
+ let b:syntastic_idx = -1
+ echo
+ endif
+ else
+ if l == b:syntastic_line
+ return
+ endif
+ let b:syntastic_line = l
+
+ if !empty(current_messages)
+ call syntastic#util#wideMsg(current_messages[0].text)
+ else
+ echo
+ endif
+ endif
+endfunction " }}}2
+
+" }}}1
+
+" Private functions {{{1
+
+function! s:_isSameIndex(line, old_line, column, idx, messages) " {{{2
+ if a:old_line >= 0 && a:line == a:old_line && a:idx >= 0
+ if len(a:messages) <= 1
+ return 1
+ endif
+
+ if a:messages[a:idx].scol <= a:column
+ if a:idx == len(a:messages) - 1 || a:column < a:messages[a:idx + 1].scol
+ return 1
+ else
+ return 0
+ endif
+ else
+ return 0
+ endif
+ else
+ return 0
+ endif
+endfunction " }}}2
+
+function! s:_findIndex(column, messages) " {{{2
+ let max = len(a:messages) - 1
+ if max == 0
+ return 0
+ endif
+ let min = 0
+
+ " modified binary search: assign index 0 to columns to the left of the first error
+ while min < max - 1
+ let mid = (min + max) / 2
+ if a:column < a:messages[mid].scol
+ let max = mid
+ else
+ let min = mid
+ endif
+ endwhile
+
+ return a:column < a:messages[max].scol ? min : max
+endfunction " }}}2
+
+" }}}1
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/plugin/syntastic/highlighting.vim b/sources_non_forked/syntastic/plugin/syntastic/highlighting.vim
new file mode 100644
index 00000000..afb6614a
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic/highlighting.vim
@@ -0,0 +1,104 @@
+if exists("g:loaded_syntastic_notifier_highlighting") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+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'))
+lockvar s:has_highlighting
+
+let g:SyntasticHighlightingNotifier = {}
+
+let s:setup_done = 0
+
+" Public methods {{{1
+
+function! g:SyntasticHighlightingNotifier.New() " {{{2
+ let newObj = copy(self)
+
+ if !s:setup_done
+ call self._setup()
+ let s:setup_done = 1
+ lockvar s:setup_done
+ endif
+
+ return newObj
+endfunction " }}}2
+
+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) " {{{2
+ if self.enabled()
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'highlighting: refresh')
+ call self._reset()
+ let buf = bufnr('')
+ let issues = filter(a:loclist.copyRaw(), 'v:val["bufnr"] == buf')
+ for item in issues
+ let group = 'Syntastic' . get(item, 'subtype', '') . ( item['type'] ==? 'E' ? 'Error' : 'Warning' )
+
+ " 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', 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']])
+
+ call matchadd(group, '\%' . item['lnum'] . 'l\%' . lcol . coltype)
+ endif
+ endfor
+ endif
+endfunction " }}}2
+
+" Remove all error highlights from the window
+" @vimlint(EVL103, 1, a:loclist)
+function! g:SyntasticHighlightingNotifier.reset(loclist) " {{{2
+ if s:has_highlighting
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'highlighting: reset')
+ call self._reset()
+ endif
+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
+ if !hlexists('SyntasticStyleError')
+ highlight link SyntasticStyleError SyntasticError
+ endif
+ if !hlexists('SyntasticStyleWarning')
+ highlight link SyntasticStyleWarning SyntasticWarning
+ endif
+ endif
+endfunction " }}}2
+
+function! g:SyntasticHighlightingNotifier._reset() " {{{2
+ for match in getmatches()
+ if stridx(match['group'], 'Syntastic') == 0
+ call matchdelete(match['id'])
+ endif
+ endfor
+endfunction " }}}2
+
+" }}}1
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/plugin/syntastic/loclist.vim b/sources_non_forked/syntastic/plugin/syntastic/loclist.vim
new file mode 100644
index 00000000..05f39a2d
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic/loclist.vim
@@ -0,0 +1,400 @@
+if exists("g:loaded_syntastic_loclist") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_loclist = 1
+
+let g:SyntasticLoclist = {}
+
+" Public methods {{{1
+
+function! g:SyntasticLoclist.New(rawLoclist) " {{{2
+ let newObj = copy(self)
+
+ let llist = filter(copy(a:rawLoclist), 'v:val["valid"] == 1')
+
+ for e in llist
+ if get(e, 'type', '') == ''
+ let e['type'] = 'E'
+ endif
+ endfor
+
+ let newObj._rawLoclist = llist
+ let newObj._name = ''
+ let newObj._owner = bufnr('')
+ let newObj._sorted = 0
+ let newObj._columns = g:syntastic_cursor_columns
+
+ return newObj
+endfunction " }}}2
+
+function! g:SyntasticLoclist.current() " {{{2
+ if !exists("b:syntastic_loclist") || empty(b:syntastic_loclist)
+ let b:syntastic_loclist = g:SyntasticLoclist.New([])
+ endif
+ return b:syntastic_loclist
+endfunction " }}}2
+
+function! g:SyntasticLoclist.extend(other) " {{{2
+ let list = self.copyRaw()
+ call extend(list, a:other.copyRaw())
+ return g:SyntasticLoclist.New(list)
+endfunction " }}}2
+
+function! g:SyntasticLoclist.sort() " {{{2
+ if !self._sorted
+ for e in self._rawLoclist
+ call s:_setScreenColumn(e)
+ endfor
+
+ call sort(self._rawLoclist, self._columns ? 's:_compareErrorItemsByColumns' : 's:_compareErrorItemsByLines')
+
+ let self._sorted = 1
+ endif
+endfunction " }}}2
+
+function! g:SyntasticLoclist.isEmpty() " {{{2
+ return empty(self._rawLoclist)
+endfunction " }}}2
+
+function! g:SyntasticLoclist.isNewerThan(stamp) " {{{2
+ if !exists("self._stamp")
+ let self._stamp = []
+ return 0
+ endif
+ return syntastic#util#compareLexi(self._stamp, a:stamp) > 0
+endfunction " }}}2
+
+function! g:SyntasticLoclist.copyRaw() " {{{2
+ return copy(self._rawLoclist)
+endfunction " }}}2
+
+function! g:SyntasticLoclist.getRaw() " {{{2
+ return self._rawLoclist
+endfunction " }}}2
+
+function! g:SyntasticLoclist.getBuffers() " {{{2
+ return syntastic#util#unique(map(copy(self._rawLoclist), 'str2nr(v:val["bufnr"])') + [self._owner])
+endfunction " }}}2
+
+function! g:SyntasticLoclist.getCursorColumns() " {{{2
+ return self._columns
+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
+
+ if g:syntastic_stl_format !=# self._stl_format
+ let self._stl_format = g:syntastic_stl_format
+
+ if !empty(self._rawLoclist)
+ let errors = self.errors()
+ let warnings = self.warnings()
+
+ 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.getFirstIssue() " {{{2
+ return get(self._rawLoclist, 0, {})
+endfunction " }}}2
+
+function! g:SyntasticLoclist.getName() " {{{2
+ return len(self._name)
+endfunction " }}}2
+
+function! g:SyntasticLoclist.setName(name) " {{{2
+ let self._name = a:name
+endfunction " }}}2
+
+function! g:SyntasticLoclist.getOwner() " {{{2
+ return self._owner
+endfunction " }}}2
+
+function! g:SyntasticLoclist.setOwner(buffer) " {{{2
+ let self._owner = type(a:buffer) == type(0) ? a:buffer : str2nr(a:buffer)
+endfunction " }}}2
+
+function! g:SyntasticLoclist.deploy() " {{{2
+ call self.setOwner(bufnr(''))
+ let self._stamp = syntastic#util#stamp()
+ for buf in self.getBuffers()
+ call setbufvar(buf, 'syntastic_loclist', self)
+ endfor
+endfunction " }}}2
+
+function! g:SyntasticLoclist.destroy() " {{{2
+ for buf in self.getBuffers()
+ call setbufvar(buf, 'syntastic_loclist', {})
+ endfor
+endfunction " }}}2
+
+function! g:SyntasticLoclist.decorate(tag) " {{{2
+ for e in self._rawLoclist
+ let e['text'] .= ' [' . a:tag . ']'
+ endfor
+endfunction " }}}2
+
+function! g:SyntasticLoclist.errors() " {{{2
+ if !exists("self._cachedErrors")
+ let self._cachedErrors = self.filter({'type': "E"})
+ endif
+ return self._cachedErrors
+endfunction " }}}2
+
+function! g:SyntasticLoclist.warnings() " {{{2
+ if !exists("self._cachedWarnings")
+ let self._cachedWarnings = self.filter({'type': "W"})
+ endif
+ return self._cachedWarnings
+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) " {{{2
+ if !exists("self._cachedMessages")
+ let self._cachedMessages = {}
+
+ let errors = self.errors() + self.warnings()
+ for e in errors
+ let b = e['bufnr']
+ let l = e['lnum']
+
+ if !has_key(self._cachedMessages, b)
+ let self._cachedMessages[b] = {}
+ endif
+
+ if !has_key(self._cachedMessages[b], l)
+ let self._cachedMessages[b][l] = [e]
+ elseif self._columns
+ call add(self._cachedMessages[b][l], e)
+ endif
+ endfor
+
+ if self._columns
+ if !self._sorted
+ for b in keys(self._cachedMessages)
+ for l in keys(self._cachedMessages[b])
+ if len(self._cachedMessages[b][l]) > 1
+ for e in self._cachedMessages[b][l]
+ call s:_setScreenColumn(e)
+ endfor
+ call sort(self._cachedMessages[b][l], 's:_compareErrorItemsByColumns')
+ endif
+ endfor
+ endfor
+ endif
+
+ for b in keys(self._cachedMessages)
+ for l in keys(self._cachedMessages[b])
+ call s:_removeShadowedItems(self._cachedMessages[b][l])
+ endfor
+ endfor
+ endif
+ endif
+
+ return get(self._cachedMessages, a:buf, {})
+endfunction " }}}2
+
+"Filter the list and return new native loclist
+"e.g.
+" .filter({'bufnr': 10, 'type': 'e'})
+"
+"would return all errors for buffer 10.
+"
+"Note that all comparisons are done with ==?
+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
+ 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
+
+"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()
+ execute "lopen " . syntastic#util#var('loc_list_height')
+ if num != winnr()
+ wincmd p
+ endif
+
+ " try to find the loclist window and set w:quickfix_title
+ let errors = getloclist(0)
+ for buf in tabpagebuflist()
+ if buflisted(buf) && bufloaded(buf) && getbufvar(buf, '&buftype') ==# 'quickfix'
+ let win = bufwinnr(buf)
+ let title = getwinvar(win, 'quickfix_title')
+
+ " TODO: try to make sure we actually own this window; sadly,
+ " errors == getloclist(0) is the only somewhat safe way to
+ " achieve that
+ if strpart(title, 0, 16) ==# ':SyntasticCheck ' ||
+ \ ( (title == '' || title ==# ':setloclist()') && errors == getloclist(0) )
+ call setwinvar(win, 'quickfix_title', ':SyntasticCheck ' . self._name)
+ call setbufvar(buf, 'syntastic_owner_buffer', self._owner)
+ endif
+ endif
+ endfor
+ endif
+endfunction " }}}2
+
+" }}}1
+
+" Non-method functions {{{1
+
+function! SyntasticLoclistHide() " {{{2
+ call syntastic#log#debug(g:SyntasticDebugNotifications, 'loclist: hide')
+ silent! lclose
+endfunction " }}}2
+
+" }}}1
+
+" Private functions {{{1
+
+function! s:_translate(key, val) " {{{2
+ return 'get(v:val, ' . string(a:key) . ', "") ==? ' . string(a:val)
+endfunction " }}}2
+
+function! s:_setScreenColumn(item) " {{{2
+ if !has_key(a:item, 'scol')
+ let col = get(a:item, 'col', 0)
+ if col != 0 && a:item['vcol'] == 0
+ let buf = str2nr(a:item['bufnr'])
+ try
+ let line = getbufline(buf, a:item['lnum'])[0]
+ catch /\m^Vim\%((\a\+)\)\=:E684/
+ let line = ''
+ endtry
+ let a:item['scol'] = syntastic#util#screenWidth(strpart(line, 0, col), getbufvar(buf, '&tabstop'))
+ else
+ let a:item['scol'] = col
+ endif
+ endif
+endfunction " }}}2
+
+function! s:_removeShadowedItems(errors) " {{{2
+ " keep only the first message at a given column
+ let i = 0
+ while i < len(a:errors) - 1
+ let j = i + 1
+ let dupes = 0
+ while j < len(a:errors) && a:errors[j].scol == a:errors[i].scol
+ let dupes = 1
+ let j += 1
+ endwhile
+ if dupes
+ call remove(a:errors, i + 1, j - 1)
+ endif
+ let i += 1
+ endwhile
+
+ " merge messages with the same text
+ let i = 0
+ while i < len(a:errors) - 1
+ let j = i + 1
+ let dupes = 0
+ while j < len(a:errors) && a:errors[j].text == a:errors[i].text
+ let dupes = 1
+ let j += 1
+ endwhile
+ if dupes
+ call remove(a:errors, i + 1, j - 1)
+ endif
+ let i += 1
+ endwhile
+endfunction " }}}2
+
+function! s:_compareErrorItemsByColumns(a, b) " {{{2
+ if a:a['bufnr'] != a:b['bufnr']
+ " group by file
+ return a:a['bufnr'] - a:b['bufnr']
+ elseif a:a['lnum'] != a:b['lnum']
+ " sort by line
+ return a:a['lnum'] - a:b['lnum']
+ elseif a:a['scol'] != a:b['scol']
+ " sort by screen column
+ return a:a['scol'] - a:b['scol']
+ elseif a:a['type'] !=? a:b['type']
+ " errors take precedence over warnings
+ return a:a['type'] ==? 'E' ? -1 : 1
+ else
+ return 0
+ endif
+endfunction " }}}2
+
+function! s:_compareErrorItemsByLines(a, b) " {{{2
+ if a:a['bufnr'] != a:b['bufnr']
+ " group by file
+ return a:a['bufnr'] - a:b['bufnr']
+ elseif a:a['lnum'] != a:b['lnum']
+ " sort by line
+ return a:a['lnum'] - a:b['lnum']
+ elseif a:a['type'] !=? a:b['type']
+ " errors take precedence over warnings
+ return a:a['type'] ==? 'E' ? -1 : 1
+ else
+ " sort by screen column
+ return a:a['scol'] - a:b['scol']
+ endif
+endfunction " }}}2
+
+" }}}1
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/plugin/syntastic/modemap.vim b/sources_non_forked/syntastic/plugin/syntastic/modemap.vim
new file mode 100644
index 00000000..dd131bcb
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic/modemap.vim
@@ -0,0 +1,100 @@
+if exists("g:loaded_syntastic_modemap") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_modemap = 1
+
+let g:SyntasticModeMap = {}
+
+" Public methods {{{1
+
+function! g:SyntasticModeMap.Instance() " {{{2
+ if !exists('s:SyntasticModeMapInstance')
+ let s:SyntasticModeMapInstance = copy(self)
+ call s:SyntasticModeMapInstance.synch()
+ endif
+
+ return s:SyntasticModeMapInstance
+endfunction " }}}2
+
+function! g:SyntasticModeMap.synch() " {{{2
+ if exists('g:syntastic_mode_map')
+ let self._mode = get(g:syntastic_mode_map, 'mode', 'active')
+ let self._activeFiletypes = copy(get(g:syntastic_mode_map, 'active_filetypes', []))
+ let self._passiveFiletypes = copy(get(g:syntastic_mode_map, 'passive_filetypes', []))
+ else
+ let self._mode = 'active'
+ let self._activeFiletypes = []
+ let self._passiveFiletypes = []
+ endif
+endfunction " }}}2
+
+function! g:SyntasticModeMap.allowsAutoChecking(filetype) " {{{2
+ let fts = split(a:filetype, '\m\.')
+
+ if self.isPassive()
+ return self._isOneFiletypeActive(fts)
+ else
+ return self._noFiletypesArePassive(fts)
+ endif
+endfunction " }}}2
+
+function! g:SyntasticModeMap.isPassive() " {{{2
+ return self._mode ==# 'passive'
+endfunction " }}}2
+
+function! g:SyntasticModeMap.toggleMode() " {{{2
+ call self.synch()
+
+ if self._mode ==# 'active'
+ let self._mode = 'passive'
+ else
+ let self._mode = 'active'
+ endif
+
+ "XXX Changing a global variable. Tsk, tsk...
+ if !exists('g:syntastic_mode_map')
+ let g:syntastic_mode_map = {}
+ endif
+ let g:syntastic_mode_map['mode'] = self._mode
+endfunction " }}}2
+
+function! g:SyntasticModeMap.echoMode() " {{{2
+ echo "Syntastic: " . self._mode . " mode enabled"
+endfunction " }}}2
+
+function! g:SyntasticModeMap.modeInfo(...) " {{{2
+ echomsg 'Syntastic version: ' . g:syntastic_version
+ let type = a:0 ? a:1 : &filetype
+ echomsg 'Info for filetype: ' . type
+
+ call self.synch()
+ echomsg 'Mode: ' . self._mode
+ if self._mode ==# 'active'
+ if len(self._passiveFiletypes)
+ let plural = len(self._passiveFiletypes) != 1 ? 's' : ''
+ echomsg 'Passive filetype' . plural . ': ' . join(sort(copy(self._passiveFiletypes)))
+ endif
+ else
+ if len(self._activeFiletypes)
+ let plural = len(self._activeFiletypes) != 1 ? 's' : ''
+ echomsg 'Active filetype' . plural . ': ' . join(sort(copy(self._activeFiletypes)))
+ endif
+ endif
+ echomsg 'Filetype ' . type . ' is ' . (self.allowsAutoChecking(type) ? 'active' : 'passive')
+endfunction " }}}2
+
+" }}}1
+
+" Private methods {{{1
+
+function! g:SyntasticModeMap._isOneFiletypeActive(filetypes) " {{{2
+ return !empty(filter(copy(a:filetypes), 'index(self._activeFiletypes, v:val) != -1'))
+endfunction " }}}2
+
+function! g:SyntasticModeMap._noFiletypesArePassive(filetypes) " {{{2
+ return empty(filter(copy(a:filetypes), 'index(self._passiveFiletypes, v:val) != -1'))
+endfunction " }}}2
+
+" }}}1
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/plugin/syntastic/notifiers.vim b/sources_non_forked/syntastic/plugin/syntastic/notifiers.vim
new file mode 100644
index 00000000..49948b1d
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic/notifiers.vim
@@ -0,0 +1,86 @@
+if exists("g:loaded_syntastic_notifiers") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_notifiers = 1
+
+let g:SyntasticNotifiers = {}
+
+let s:notifier_types = ['signs', 'balloons', 'highlighting', 'cursor', 'autoloclist']
+lockvar! s:notifier_types
+
+let s:persistent_notifiers = ['signs', 'balloons']
+lockvar! s:persistent_notifiers
+
+" Public methods {{{1
+
+function! g:SyntasticNotifiers.Instance() " {{{2
+ if !exists('s:SyntasticNotifiersInstance')
+ let s:SyntasticNotifiersInstance = copy(self)
+ call s:SyntasticNotifiersInstance._initNotifiers()
+ endif
+
+ return s:SyntasticNotifiersInstance
+endfunction " }}}2
+
+function! g:SyntasticNotifiers.refresh(loclist) " {{{2
+ if !a:loclist.isEmpty() && !a:loclist.isNewerThan([])
+ " loclist not fully constructed yet
+ return
+ endif
+
+ 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()
+ if index(s:persistent_notifiers, type) > -1
+ " refresh only if loclist has changed since last call
+ if !exists('b:syntastic_' . type . '_stamp')
+ let b:syntastic_{type}_stamp = []
+ endif
+ if a:loclist.isNewerThan(b:syntastic_{type}_stamp) || a:loclist.isEmpty()
+ call self._notifier[type].refresh(a:loclist)
+ let b:syntastic_{type}_stamp = syntastic#util#stamp()
+ endif
+ else
+ call self._notifier[type].refresh(a:loclist)
+ endif
+ endif
+ endfor
+endfunction " }}}2
+
+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', '')
+
+ " reset notifiers regardless if they are enabled or not, since
+ " the user might have disabled them since the last refresh();
+ " notifiers MUST be prepared to deal with reset() when disabled
+ if has_key(g:{class}, 'reset')
+ call self._notifier[type].reset(a:loclist)
+ endif
+
+ " also reset stamps
+ if index(s:persistent_notifiers, type) > -1
+ let b:syntastic_{type}_stamp = []
+ endif
+ endfor
+endfunction " }}}2
+
+" }}}1
+
+" Private methods {{{1
+
+function! g:SyntasticNotifiers._initNotifiers() " {{{2
+ let self._notifier = {}
+ for type in s:notifier_types
+ let class = substitute(type, '\m.*', 'Syntastic\u&Notifier', '')
+ let self._notifier[type] = g:{class}.New()
+ endfor
+
+ let self._enabled_types = copy(s:notifier_types)
+endfunction " }}}2
+
+" }}}1
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/plugin/syntastic/registry.vim b/sources_non_forked/syntastic/plugin/syntastic/registry.vim
new file mode 100644
index 00000000..87896836
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic/registry.vim
@@ -0,0 +1,265 @@
+if exists("g:loaded_syntastic_registry") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_registry = 1
+
+" Initialisation {{{1
+
+let s:defaultCheckers = {
+ \ 'actionscript':['mxmlc'],
+ \ 'ada': ['gcc'],
+ \ 'applescript': ['osacompile'],
+ \ 'arduino': ['avrgcc'],
+ \ 'asciidoc': ['asciidoc'],
+ \ 'asm': ['gcc'],
+ \ 'bro': ['bro'],
+ \ 'bemhtml': ['bemhtmllint'],
+ \ 'c': ['gcc'],
+ \ 'cabal': ['cabal'],
+ \ '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': [],
+ \ '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'],
+ \ 'r': [],
+ \ 'racket': ['racket'],
+ \ 'rst': ['rst2pseudoxml'],
+ \ 'ruby': ['mri'],
+ \ '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']
+ \ }
+lockvar! s:defaultCheckers
+
+let s:defaultFiletypeMap = {
+ \ 'gentoo-metadata': 'xml',
+ \ 'lhaskell': 'haskell',
+ \ 'litcoffee': 'coffee'
+ \ }
+lockvar! s:defaultFiletypeMap
+
+let g:SyntasticRegistry = {}
+
+" }}}1
+
+" Public methods {{{1
+
+" Note: 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.
+
+function! g:SyntasticRegistry.Instance() " {{{2
+ if !exists('s:SyntasticRegistryInstance')
+ let s:SyntasticRegistryInstance = copy(self)
+ let s:SyntasticRegistryInstance._checkerMap = {}
+ endif
+
+ return s:SyntasticRegistryInstance
+endfunction " }}}2
+
+function! g:SyntasticRegistry.CreateAndRegisterChecker(args) " {{{2
+ let checker = g:SyntasticChecker.New(a:args)
+ let registry = g:SyntasticRegistry.Instance()
+ call registry._registerChecker(checker)
+endfunction " }}}2
+
+" Given a list of checker names hints_list, return a map name --> checker.
+" If hints_list is empty, user settings are are used instead. Checkers are
+" not checked for availability (that is, the corresponding IsAvailable() are
+" not run).
+function! g:SyntasticRegistry.getCheckers(ftalias, hints_list) " {{{2
+ let ft = s:_normaliseFiletype(a:ftalias)
+ call self._loadCheckersFor(ft)
+
+ let checkers_map = self._checkerMap[ft]
+ if empty(checkers_map)
+ return []
+ endif
+
+ call self._checkDeprecation(ft)
+
+ let names =
+ \ !empty(a:hints_list) ? syntastic#util#unique(a:hints_list) :
+ \ exists('b:syntastic_checkers') ? b:syntastic_checkers :
+ \ exists('g:syntastic_' . ft . '_checkers') ? g:syntastic_{ft}_checkers :
+ \ get(s:defaultCheckers, ft, 0)
+
+ return type(names) == type([]) ?
+ \ self._filterCheckersByName(checkers_map, names) : [checkers_map[keys(checkers_map)[0]]]
+endfunction " }}}2
+
+" Same as getCheckers(), but keep only the checkers available. This runs the
+" corresponding IsAvailable() functions for all checkers.
+function! g:SyntasticRegistry.getCheckersAvailable(ftalias, hints_list) " {{{2
+ return filter(self.getCheckers(a:ftalias, a:hints_list), 'v:val.isAvailable()')
+endfunction " }}}2
+
+function! g:SyntasticRegistry.getKnownFiletypes() " {{{2
+ let types = keys(s:defaultCheckers)
+
+ call extend(types, keys(s:defaultFiletypeMap))
+
+ if exists('g:syntastic_filetype_map')
+ call extend(types, keys(g:syntastic_filetype_map))
+ endif
+
+ if exists('g:syntastic_extra_filetypes') && type(g:syntastic_extra_filetypes) == type([])
+ call extend(types, g:syntastic_extra_filetypes)
+ endif
+
+ return syntastic#util#unique(types)
+endfunction " }}}2
+
+function! g:SyntasticRegistry.getNamesOfAvailableCheckers(ftalias) " {{{2
+ let ft = s:_normaliseFiletype(a:ftalias)
+ call self._loadCheckersFor(ft)
+ return keys(filter( copy(self._checkerMap[ft]), 'v:val.isAvailable()' ))
+endfunction " }}}2
+
+function! g:SyntasticRegistry.echoInfoFor(ftalias_list) " {{{2
+ let ft_list = syntastic#util#unique(map( copy(a:ftalias_list), 's:_normaliseFiletype(v:val)' ))
+ if len(ft_list) != 1
+ let available = []
+ let active = []
+
+ for ft in ft_list
+ call extend(available, map( self.getNamesOfAvailableCheckers(ft), 'ft . "/" . v:val' ))
+ call extend(active, map( self.getCheckersAvailable(ft, []), 'ft . "/" . v:val.getName()' ))
+ endfor
+ else
+ let ft = ft_list[0]
+ let available = self.getNamesOfAvailableCheckers(ft)
+ let active = map(self.getCheckersAvailable(ft, []), 'v:val.getName()')
+ endif
+
+ let cnt = len(available)
+ let plural = cnt != 1 ? 's' : ''
+ let cklist = cnt ? join(sort(available)) : '-'
+ echomsg 'Available checker' . plural . ': ' . cklist
+
+ let cnt = len(active)
+ let plural = cnt != 1 ? 's' : ''
+ let cklist = cnt ? join(active) : '-'
+ echomsg 'Currently enabled checker' . plural . ': ' . cklist
+endfunction " }}}2
+
+" }}}1
+
+" Private methods {{{1
+
+function! g:SyntasticRegistry._registerChecker(checker) abort " {{{2
+ let ft = a:checker.getFiletype()
+ if !has_key(self._checkerMap, ft)
+ let self._checkerMap[ft] = {}
+ endif
+
+ let name = a:checker.getName()
+ if has_key(self._checkerMap[ft], name)
+ throw 'Syntastic: Duplicate syntax checker name: ' . ft . '/' . name
+ endif
+
+ let self._checkerMap[ft][name] = a:checker
+endfunction " }}}2
+
+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._loadCheckersFor(filetype) " {{{2
+ if has_key(self._checkerMap, a:filetype)
+ return
+ endif
+
+ execute "runtime! syntax_checkers/" . a:filetype . "/*.vim"
+
+ if !has_key(self._checkerMap, a:filetype)
+ let self._checkerMap[a:filetype] = {}
+ endif
+endfunction " }}}2
+
+" 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#log#oneTimeWarn('variable g:syntastic_' . a:filetype . '_checker is deprecated')
+ endif
+endfunction " }}}2
+
+" }}}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:_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 " }}}2
+
+" }}}1
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/plugin/syntastic/signs.vim b/sources_non_forked/syntastic/plugin/syntastic/signs.vim
new file mode 100644
index 00000000..e2f4b5de
--- /dev/null
+++ b/sources_non_forked/syntastic/plugin/syntastic/signs.vim
@@ -0,0 +1,138 @@
+if exists("g:loaded_syntastic_notifier_signs") || !exists("g:loaded_syntastic_plugin")
+ finish
+endif
+let g:loaded_syntastic_notifier_signs = 1
+
+" 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
+" actually needed)
+let s:first_sign_id = 5000
+let s:next_sign_id = s:first_sign_id
+
+let g:SyntasticSignsNotifier = {}
+
+let s:setup_done = 0
+
+" }}}1
+
+" Public methods {{{1
+
+function! g:SyntasticSignsNotifier.New() " {{{2
+ let newObj = copy(self)
+
+ if !s:setup_done
+ call self._setup()
+ let s:setup_done = 1
+ lockvar s:setup_done
+ endif
+
+ return newObj
+endfunction " }}}2
+
+function! g:SyntasticSignsNotifier.enabled() " {{{2
+ return has('signs') && syntastic#util#var('enable_signs')
+endfunction " }}}2
+
+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)
+endfunction " }}}2
+
+" }}}1
+
+" Private methods {{{1
+
+" One time setup: define our own sign types and highlighting
+function! g:SyntasticSignsNotifier._setup() " {{{2
+ if has('signs')
+ if !hlexists('SyntasticErrorSign')
+ highlight link SyntasticErrorSign error
+ endif
+ if !hlexists('SyntasticWarningSign')
+ highlight link SyntasticWarningSign todo
+ endif
+ if !hlexists('SyntasticStyleErrorSign')
+ highlight link SyntasticStyleErrorSign SyntasticErrorSign
+ endif
+ if !hlexists('SyntasticStyleWarningSign')
+ highlight link SyntasticStyleWarningSign SyntasticWarningSign
+ endif
+ if !hlexists('SyntasticStyleErrorLine')
+ highlight link SyntasticStyleErrorLine SyntasticErrorLine
+ endif
+ if !hlexists('SyntasticStyleWarningLine')
+ highlight link SyntasticStyleWarningLine SyntasticWarningLine
+ endif
+
+ " define the signs used to display syntax and style errors/warns
+ exe 'sign define SyntasticError text=' . g:syntastic_error_symbol .
+ \ ' texthl=SyntasticErrorSign linehl=SyntasticErrorLine'
+ exe 'sign define SyntasticWarning text=' . g:syntastic_warning_symbol .
+ \ ' texthl=SyntasticWarningSign linehl=SyntasticWarningLine'
+ exe 'sign define SyntasticStyleError text=' . g:syntastic_style_error_symbol .
+ \ ' texthl=SyntasticStyleErrorSign linehl=SyntasticStyleErrorLine'
+ exe 'sign define SyntasticStyleWarning text=' . g:syntastic_style_warning_symbol .
+ \ ' texthl=SyntasticStyleWarningSign linehl=SyntasticStyleWarningLine'
+ endif
+endfunction " }}}2
+
+" Place signs by all syntax errors in the buffer
+function! g:SyntasticSignsNotifier._signErrors(loclist) " {{{2
+ let loclist = a:loclist
+ if !loclist.isEmpty()
+
+ let buf = bufnr('')
+ if !bufloaded(buf)
+ " signs can be placed only in loaded buffers
+ return
+ endif
+
+ " errors come first, so that they are not masked by warnings
+ let issues = copy(loclist.errors())
+ call extend(issues, loclist.warnings())
+ call filter(issues, 'v:val["bufnr"] == buf')
+ let seen = {}
+
+ for i in issues
+ if i['lnum'] > 0 && !has_key(seen, i['lnum'])
+ let seen[i['lnum']] = 1
+
+ let sign_severity = i['type'] ==? 'W' ? 'Warning' : 'Error'
+ let sign_subtype = get(i, 'subtype', '')
+ let sign_type = 'Syntastic' . sign_subtype . sign_severity
+
+ 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 " }}}2
+
+" Remove the signs with the given ids from this buffer
+function! g:SyntasticSignsNotifier._removeSigns(ids) " {{{2
+ if has('signs')
+ for s in reverse(copy(a:ids))
+ execute "sign unplace " . s
+ call remove(self._bufSignIds(), index(self._bufSignIds(), s))
+ endfor
+ endif
+endfunction " }}}2
+
+" Get all the ids of the SyntaxError signs in the buffer
+function! g:SyntasticSignsNotifier._bufSignIds() " {{{2
+ if !exists("b:syntastic_sign_ids")
+ let b:syntastic_sign_ids = []
+ endif
+ return b:syntastic_sign_ids
+endfunction " }}}2
+
+" }}}1
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/sources_non_forked/syntastic/syntax_checkers/actionscript/mxmlc.vim b/sources_non_forked/syntastic/syntax_checkers/actionscript/mxmlc.vim
new file mode 100644
index 00000000..dd47287d
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/actionscript/mxmlc.vim
@@ -0,0 +1,67 @@
+"============================================================================
+"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
+
+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
+ call syntastic#log#deprecationWarn('actionscript_mxmlc_conf', 'actionscript_mxmlc_args',
+ \ "'-load-config+=' . syntastic#util#shexpand(OLD_VAR)")
+
+ let makeprg = self.makeprgBuild({ '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/sources_non_forked/syntastic/syntax_checkers/ada/gcc.vim b/sources_non_forked/syntastic/syntax_checkers/ada/gcc.vim
new file mode 100644
index 00000000..14e79a04
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/ada/gcc.vim
@@ -0,0 +1,47 @@
+"============================================================================
+"File: ada.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Alfredo Di Napoli
+"License: This program is free software. It comes without any warranty,
+" to the extent permitted by applicable law.
+"
+"============================================================================
+
+if exists('g:loaded_syntastic_ada_gcc_checker')
+ finish
+endif
+let g:loaded_syntastic_ada_gcc_checker = 1
+
+if !exists('g:syntastic_ada_compiler_options')
+ let g:syntastic_ada_compiler_options = ''
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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() dict
+ return syntastic#c#GetLocList('ada', 'gcc', {
+ \ 'errorformat':
+ \ '%-G%f:%s:,' .
+ \ '%f:%l:%c: %m,' .
+ \ '%f:%l: %m',
+ \ 'main_flags': '-c -x ada -fsyntax-only',
+ \ 'header_flags': '-x ada',
+ \ 'header_names': '\.ads$' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'ada',
+ \ 'name': 'gcc' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/applescript/osacompile.vim b/sources_non_forked/syntastic/syntax_checkers/applescript/osacompile.vim
new file mode 100644
index 00000000..522e6a27
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/applescript/osacompile.vim
@@ -0,0 +1,49 @@
+"==============================================================================
+" FileName: applescript.vim
+" Desc: Syntax checking plugin for syntastic.vim
+" Author: Zhao Cai
+" Email: caizhaoff@gmail.com
+" Version: 0.2.1
+" Date Created: Thu 09 Sep 2011 10:30:09 AM EST
+" Last Modified: Fri 09 Dec 2011 01:10:24 PM EST
+"
+" History: 0.1.0 - working, but it will run the script everytime to check
+" syntax. Should use osacompile but strangely it does not give
+" errors.
+"
+" 0.2.0 - switch to osacompile, it gives less errors compared
+" with osascript.
+"
+" 0.2.1 - remove g:syntastic_applescript_tempfile. use
+" tempname() instead.
+"
+" 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_applescript_osacompile_checker")
+ finish
+endif
+let g:loaded_syntastic_applescript_osacompile_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/arduino/avrgcc.vim b/sources_non_forked/syntastic/syntax_checkers/arduino/avrgcc.vim
new file mode 100644
index 00000000..98647638
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/arduino/avrgcc.vim
@@ -0,0 +1,26 @@
+"============================================================================
+"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_arduino_avrgcc_checker')
+ finish
+endif
+let g:loaded_syntastic_arduino_avrgcc_checker = 1
+
+runtime! syntax_checkers/c/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'arduino',
+ \ 'name': 'avrgcc',
+ \ 'exec': 'avr-gcc',
+ \ 'redirect': 'c/avrgcc'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/asciidoc/asciidoc.vim b/sources_non_forked/syntastic/syntax_checkers/asciidoc/asciidoc.vim
new file mode 100644
index 00000000..bec2a49d
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/asciidoc/asciidoc.vim
@@ -0,0 +1,47 @@
+"============================================================================
+"File: asciidoc.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_asciidoc_asciidoc_checker")
+ finish
+endif
+let g:loaded_syntastic_asciidoc_asciidoc_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_asciidoc_asciidoc_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': syntastic#c#NullOutput() })
+
+ let errorformat =
+ \ '%Easciidoc: %tRROR: %f: line %l: %m,' .
+ \ '%Easciidoc: %tRROR: %f: %m,' .
+ \ '%Easciidoc: FAILED: %f: line %l: %m,' .
+ \ '%Easciidoc: FAILED: %f: %m,' .
+ \ '%Wasciidoc: %tARNING: %f: line %l: %m,' .
+ \ '%Wasciidoc: %tARNING: %f: %m,' .
+ \ '%Wasciidoc: DEPRECATED: %f: line %l: %m,' .
+ \ '%Wasciidoc: DEPRECATED: %f: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 1] })
+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/sources_non_forked/syntastic/syntax_checkers/asm/gcc.vim b/sources_non_forked/syntastic/syntax_checkers/asm/gcc.vim
new file mode 100644
index 00000000..f5ecebe6
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/bemhtml/bemhtmllint.vim b/sources_non_forked/syntastic/syntax_checkers/bemhtml/bemhtmllint.vim
new file mode 100644
index 00000000..7f52ed3b
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/bemhtml/bemhtmllint.vim
@@ -0,0 +1,35 @@
+"============================================================================
+"File: bemhtmllint.vim
+"Description: Syntax checking plugin for syntastic.vim
+"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_bemhtml_bemhtmllint_checker")
+ finish
+endif
+
+let g:loaded_syntastic_bemhtml_bemhtmllint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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': 'bemhtml',
+ \ 'name': 'bemhtmllint',
+ \ 'exec': 'bemhtml-lint' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/bro/bro.vim b/sources_non_forked/syntastic/syntax_checkers/bro/bro.vim
new file mode 100644
index 00000000..5d75c8ad
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/bro/bro.vim
@@ -0,0 +1,45 @@
+"============================================================================
+"File: bro.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Justin Azoff
+"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_bro_bro_checker")
+ finish
+endif
+let g:loaded_syntastic_bro_bro_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_bro_bro_IsAvailable() dict
+ return system(self.getExecEscaped() . ' --help') =~# '--parse-only'
+endfunction
+
+function! SyntaxCheckers_bro_bro_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_before': '--parse-only' })
+
+ "example: error in ./foo.bro, line 3: unknown identifier banana, at or "near "banana"
+ let errorformat =
+ \ '%trror in %f\, line %l: %m,' .
+ \ '%tarning in %f\, line %l: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'bro',
+ \ 'name': 'bro'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/c/avrgcc.vim b/sources_non_forked/syntastic/syntax_checkers/c/avrgcc.vim
new file mode 100644
index 00000000..5563d61d
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/c/avrgcc.vim
@@ -0,0 +1,57 @@
+"============================================================================
+"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
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/c/checkpatch.vim b/sources_non_forked/syntastic/syntax_checkers/c/checkpatch.vim
new file mode 100644
index 00000000..957af2de
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/c/checkpatch.vim
@@ -0,0 +1,58 @@
+"============================================================================
+"File: checkpatch.vim
+"Description: Syntax checking plugin for syntastic.vim using checkpatch.pl
+"Maintainer: Daniel Walker
+"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_checkpatch_checker")
+ finish
+endif
+let g:loaded_syntastic_c_checkpatch_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_c_checkpatch_IsAvailable() dict
+ call syntastic#log#deprecationWarn('c_checker_checkpatch_location', 'c_checkpatch_exe')
+
+ if !exists('g:syntastic_c_checkpatch_exe') && !executable(self.getExec())
+ if executable('checkpatch')
+ let g:syntastic_c_checkpatch_exe = 'checkpatch'
+ elseif executable('./scripts/checkpatch.pl')
+ let g:syntastic_c_checkpatch_exe = fnamemodify('./scripts/checkpatch.pl', ':p')
+ elseif executable('./scripts/checkpatch')
+ let g:syntastic_c_checkpatch_exe = fnamemodify('./scripts/checkpatch', ':p')
+ endif
+ endif
+
+ return executable(self.getExec())
+endfunction
+
+function! SyntaxCheckers_c_checkpatch_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--no-summary --no-tree --terse --file' })
+
+ let errorformat =
+ \ '%f:%l: %tARNING: %m,' .
+ \ '%f:%l: %tRROR: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 1],
+ \ 'subtype': 'Style' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'c',
+ \ 'name': 'checkpatch',
+ \ 'exec': 'checkpatch.pl'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/c/cppcheck.vim b/sources_non_forked/syntastic/syntax_checkers/c/cppcheck.vim
new file mode 100644
index 00000000..e4223cb2
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/c/gcc.vim b/sources_non_forked/syntastic/syntax_checkers/c/gcc.vim
new file mode 100644
index 00000000..4fd19847
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/c/gcc.vim
@@ -0,0 +1,58 @@
+"============================================================================
+"File: c.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Gregor Uhlenheuer
+"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_gcc_checker')
+ finish
+endif
+let g:loaded_syntastic_c_gcc_checker = 1
+
+if !exists('g:syntastic_c_compiler_options')
+ let g:syntastic_c_compiler_options = '-std=gnu99'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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() dict
+ return syntastic#c#GetLocList('c', 'gcc', {
+ \ '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',
+ \ 'main_flags': '-x c -fsyntax-only',
+ \ 'header_flags': '-x c',
+ \ 'header_names': '\m\.h$' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'c',
+ \ 'name': 'gcc' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/c/make.vim b/sources_non_forked/syntastic/syntax_checkers/c/make.vim
new file mode 100644
index 00000000..8b84173f
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/c/make.vim
@@ -0,0 +1,61 @@
+"============================================================================
+"File: make.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Gregor Uhlenheuer
+"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_make_checker')
+ finish
+endif
+let g:loaded_syntastic_c_make_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_c_make_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args': '-sk', 'fname': '' })
+
+ 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'
+
+ if exists('g:syntastic_c_errorformat')
+ let errorformat = g:syntastic_c_errorformat
+ endif
+
+ " process makeprg
+ let errors = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+
+ " filter the processed errors if desired
+ if exists('g:syntastic_c_remove_include_errors') && g:syntastic_c_remove_include_errors != 0
+ return filter(errors, 'has_key(v:val, "bufnr") && v:val["bufnr"] == ' . bufnr(''))
+ else
+ return errors
+ endif
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'c',
+ \ 'name': 'make'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/c/oclint.vim b/sources_non_forked/syntastic/syntax_checkers/c/oclint.vim
new file mode 100644
index 00000000..ca717c48
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/c/oclint.vim
@@ -0,0 +1,63 @@
+"============================================================================
+"File: oclint.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: "UnCO" Lin
+"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_oclint_config_file' allows you to define a file
+" that contains additional compiler arguments like include directories or
+" CFLAGS. The file is expected to contain one option per line. If none is
+" given the filename defaults to '.syntastic_oclint_config':
+"
+" let g:syntastic_oclint_config_file = '.config'
+
+if exists("g:loaded_syntastic_c_oclint_checker")
+ finish
+endif
+let g:loaded_syntastic_c_oclint_checker = 1
+
+if !exists('g:syntastic_oclint_config_file')
+ let g:syntastic_oclint_config_file = '.syntastic_oclint_config'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_c_oclint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'post_args_before': '-- -c ' . syntastic#c#ReadConfig(g:syntastic_oclint_config_file) })
+
+ let errorformat =
+ \ '%E%f:%l:%c: %m P1 ,' .
+ \ '%E%f:%l:%c: %m P2 ,' .
+ \ '%W%f:%l:%c: %m P3 ,' .
+ \ '%E%f:%l:%c: fatal error: %m,' .
+ \ '%E%f:%l:%c: error: %m,' .
+ \ '%W%f:%l:%c: warning: %m,' .
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style',
+ \ 'postprocess': ['compressWhitespace'],
+ \ 'returns': [0, 3, 5] })
+
+ call self.setWantSort(1)
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/c/sparse.vim b/sources_non_forked/syntastic/syntax_checkers/c/sparse.vim
new file mode 100644
index 00000000..b7c30a0a
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/c/sparse.vim
@@ -0,0 +1,53 @@
+"============================================================================
+"File: sparse.vim
+"Description: Syntax checking plugin for syntastic.vim using sparse.pl
+"Maintainer: Daniel Walker
+"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_sparse_config_file' allows you to define a file
+" that contains additional compiler arguments like include directories or
+" CFLAGS. The file is expected to contain one option per line. If none is
+" given the filename defaults to '.syntastic_sparse_config':
+"
+" let g:syntastic_sparse_config_file = '.config'
+
+if exists("g:loaded_syntastic_c_sparse_checker")
+ finish
+endif
+let g:loaded_syntastic_c_sparse_checker = 1
+
+if !exists('g:syntastic_sparse_config_file')
+ let g:syntastic_sparse_config_file = '.syntastic_sparse_config'
+endif
+
+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,'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")},
+ \ 'returns': [0] })
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/c/splint.vim b/sources_non_forked/syntastic/syntax_checkers/c/splint.vim
new file mode 100644
index 00000000..f56af1ae
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/c/splint.vim
@@ -0,0 +1,62 @@
+"============================================================================
+"File: splint.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.
+"============================================================================
+"
+" The setting 'g:syntastic_splint_config_file' allows you to define a file
+" that contains additional compiler arguments like include directories or
+" CFLAGS. The file is expected to contain one option per line. If none is
+" given the filename defaults to '.syntastic_splint_config':
+"
+" let g:syntastic_splint_config_file = '.config'
+
+if exists("g:loaded_syntastic_c_splint_checker")
+ finish
+endif
+let g:loaded_syntastic_c_splint_checker = 1
+
+if !exists('g:syntastic_splint_config_file')
+ let g:syntastic_splint_config_file = '.syntastic_splint_config'
+endif
+
+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 %.%#,' .
+ \ '%-G%f(%l\,%v): %[%#]%[%#]%[%#] Internal Bug %.%#,' .
+ \ '%W%f:%l:%v: %m,' .
+ \ '%W%f(%l\,%v): %m,' .
+ \ '%W%f:%l: %m,' .
+ \ '%W%f(%l): %m,' .
+ \ '%-C %\+In file included from %.%#,' .
+ \ '%-C %\+from %.%#,' .
+ \ '%+C %.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style',
+ \ 'postprocess': ['compressWhitespace'],
+ \ 'defaults': {'type': 'W'} })
+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/sources_non_forked/syntastic/syntax_checkers/cabal/cabal.vim b/sources_non_forked/syntastic/syntax_checkers/cabal/cabal.vim
new file mode 100644
index 00000000..191969be
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/cabal/cabal.vim
@@ -0,0 +1,55 @@
+"============================================================================
+"File: cabal.vim
+"Description: Haskell package description (.cabal file) linting and syntax
+" validation via 'cabal check'
+"Maintainer: Ian D. Bollinger
+"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_cabal_cabal_checker')
+ finish
+endif
+let g:loaded_syntastic_cabal_cabal_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_cabal_cabal_GetHighlightRegex(item)
+ let field = matchstr(a:item['text'], "\\vParse of field '\\zs[^']+")
+ if field != ''
+ return '\v\c^\s*' . field . '\s*:\s*\zs.*$'
+ endif
+ let field = matchstr(a:item['text'], "\\v(^|\\s)'\\zs[^']+\\ze'")
+ if field != ''
+ return '\V\c\<' . escape(field, '\') . '\>'
+ endif
+ return ''
+endfunction
+
+function! SyntaxCheckers_cabal_cabal_GetLocList() dict
+ let makeprg = self.getExecEscaped() . ' check'
+
+ let errorformat =
+ \ '%Ecabal: %f:%l: %m,' .
+ \ '%W* %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'cwd': expand('%:p:h'),
+ \ 'preprocess': 'cabal',
+ \ 'defaults': {'bufnr': bufnr('')} })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'cabal',
+ \ 'name': 'cabal'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/chef/foodcritic.vim b/sources_non_forked/syntastic/syntax_checkers/chef/foodcritic.vim
new file mode 100644
index 00000000..e7773331
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/chef/foodcritic.vim
@@ -0,0 +1,39 @@
+"============================================================================
+"File: foodcritic.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Doug Ireton
+"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_chef_foodcritic_checker")
+ finish
+endif
+let g:loaded_syntastic_chef_foodcritic_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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 })
+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/sources_non_forked/syntastic/syntax_checkers/co/coco.vim b/sources_non_forked/syntastic/syntax_checkers/co/coco.vim
new file mode 100644
index 00000000..1a58c451
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/co/coco.vim
@@ -0,0 +1,43 @@
+"============================================================================
+"File: co.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Andrew Kelley
+"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_co_coco_checker")
+ finish
+endif
+let g:loaded_syntastic_co_coco_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_co_coco_GetLocList() dict
+ let tmpdir = $TMPDIR != '' ? $TMPDIR : $TMP != '' ? $TMP : '/tmp'
+ let makeprg = self.makeprgBuild({ 'args_after': '-c -o ' . tmpdir })
+
+ let errorformat =
+ \ '%EFailed at: %f,' .
+ \ '%ZSyntax%trror: %m on line %l,'.
+ \ '%EFailed at: %f,'.
+ \ '%Z%trror: Parse error on line %l: %m'
+
+ 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/sources_non_forked/syntastic/syntax_checkers/cobol/cobc.vim b/sources_non_forked/syntastic/syntax_checkers/cobol/cobc.vim
new file mode 100644
index 00000000..73f5688d
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/cobol/cobc.vim
@@ -0,0 +1,46 @@
+"============================================================================
+"File: cobc.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_cobol_cobc_checker')
+ finish
+endif
+let g:loaded_syntastic_cobol_cobc_checker = 1
+
+if !exists('g:syntastic_cobol_compiler_options')
+ let g:syntastic_cobol_compiler_options = ''
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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() dict
+ return syntastic#c#GetLocList('cobol', 'cobc', {
+ \ 'errorformat': '%f:%l: %trror: %m',
+ \ 'main_flags': '-fsyntax-only' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'cobol',
+ \ 'name': 'cobc' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/coffee/coffee.vim b/sources_non_forked/syntastic/syntax_checkers/coffee/coffee.vim
new file mode 100644
index 00000000..543647e3
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/coffee/coffee.vim
@@ -0,0 +1,56 @@
+"============================================================================
+"File: coffee.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Lincoln Stoll
+"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.
+"
+"============================================================================
+"
+" 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 s:save_cpo = &cpo
+set cpo&vim
+
+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() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-cp' })
+
+ let errorformat =
+ \ '%E%f:%l:%c: %trror: %m,' .
+ \ 'Syntax%trror: In %f\, %m on line %l,' .
+ \ '%EError: In %f\, Parse error on line %l: %m,' .
+ \ '%EError: In %f\, %m on line %l,' .
+ \ '%W%f(%l): lint warning: %m,' .
+ \ '%W%f(%l): warning: %m,' .
+ \ '%E%f(%l): SyntaxError: %m,' .
+ \ '%-Z%p^,' .
+ \ '%-G%.%#'
+
+ 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/sources_non_forked/syntastic/syntax_checkers/coffee/coffeelint.vim b/sources_non_forked/syntastic/syntax_checkers/coffee/coffeelint.vim
new file mode 100644
index 00000000..99f2fad8
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/coffee/coffeelint.vim
@@ -0,0 +1,48 @@
+"============================================================================
+"File: coffeelint.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Lincoln Stoll
+"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_coffee_coffeelint_checker")
+ finish
+endif
+let g:loaded_syntastic_coffee_coffeelint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_coffee_coffeelint_GetLocList() dict
+ if !exists('s:coffeelint_new')
+ let s:coffeelint_new = syntastic#util#versionIsAtLeast(syntastic#util#getVersion(
+ \ self.getExecEscaped() . ' --version'), [1, 4])
+ endif
+ let makeprg = self.makeprgBuild({ 'args_after': (s:coffeelint_new ? '--reporter csv' : '--csv') })
+
+ let errorformat =
+ \ '%f\,%l\,%\d%#\,%trror\,%m,' .
+ \ '%f\,%l\,%trror\,%m,' .
+ \ '%f\,%l\,%\d%#\,%tarn\,%m,' .
+ \ '%f\,%l\,%tarn\,%m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style',
+ \ 'returns': [0, 1] })
+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/sources_non_forked/syntastic/syntax_checkers/coq/coqtop.vim b/sources_non_forked/syntastic/syntax_checkers/coq/coqtop.vim
new file mode 100644
index 00000000..292bbaaa
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/coq/coqtop.vim
@@ -0,0 +1,40 @@
+"============================================================================
+"File: coqtop.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Matvey Aksenov
+"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_coq_coqtop_checker")
+ finish
+endif
+let g:loaded_syntastic_coq_coqtop_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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\-%.%#\:,'.
+ \ '%C%m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/cpp/cppcheck.vim b/sources_non_forked/syntastic/syntax_checkers/cpp/cppcheck.vim
new file mode 100644
index 00000000..b4b9d344
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/cpp/cpplint.vim b/sources_non_forked/syntastic/syntax_checkers/cpp/cpplint.vim
new file mode 100644
index 00000000..60664343
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/cpp/cpplint.vim
@@ -0,0 +1,64 @@
+"============================================================================
+"File: cpplint.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.
+"
+"============================================================================
+"
+" For details about cpplint see:
+" https://code.google.com/p/google-styleguide/
+"
+" Checker options:
+"
+" - g:syntastic_cpp_cpplint_thres (integer; default: 5)
+" error threshold: policy violations with a severity above this
+" value are highlighted as errors, the others are warnings
+"
+" - g:syntastic_cpp_cpplint_args (string; default: '--verbose=3')
+" command line options to pass to cpplint
+
+if exists("g:loaded_syntastic_cpp_cpplint_checker")
+ finish
+endif
+let g:loaded_syntastic_cpp_cpplint_checker = 1
+
+if !exists('g:syntastic_cpp_cpplint_thres')
+ let g:syntastic_cpp_cpplint_thres = 5
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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',
+ \ 'returns': [0, 1] })
+
+ " change error types according to the prescribed threshold
+ for e in loclist
+ let e['type'] = e['type'] < g:syntastic_cpp_cpplint_thres ? 'W' : 'E'
+ endfor
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'cpp',
+ \ 'name': 'cpplint',
+ \ 'exec': 'cpplint.py'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/cpp/gcc.vim b/sources_non_forked/syntastic/syntax_checkers/cpp/gcc.vim
new file mode 100644
index 00000000..c8d77996
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/cpp/gcc.vim
@@ -0,0 +1,55 @@
+"============================================================================
+"File: cpp.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Gregor Uhlenheuer
+"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_cpp_gcc_checker')
+ finish
+endif
+let g:loaded_syntastic_cpp_gcc_checker = 1
+
+if !exists('g:syntastic_cpp_compiler_options')
+ let g:syntastic_cpp_compiler_options = ''
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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() dict
+ return syntastic#c#GetLocList('cpp', 'gcc', {
+ \ 'errorformat':
+ \ '%-G%f:%s:,' .
+ \ '%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',
+ \ 'main_flags': '-x c++ -fsyntax-only',
+ \ 'header_flags': '-x c++',
+ \ 'header_names': '\m\.\(h\|hpp\|hh\)$' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'cpp',
+ \ 'name': 'gcc',
+ \ 'exec': 'g++' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/cpp/oclint.vim b/sources_non_forked/syntastic/syntax_checkers/cpp/oclint.vim
new file mode 100644
index 00000000..b467cd75
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/cpp/oclint.vim
@@ -0,0 +1,31 @@
+"============================================================================
+"File: oclint.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: "UnCO" Lin
+"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_oclint_config_file' allows you to define a file
+" that contains additional compiler arguments like include directories or
+" CFLAGS. The file is expected to contain one option per line. If none is
+" given the filename defaults to '.syntastic_oclint_config':
+"
+" let g:syntastic_oclint_config_file = '.config'
+
+if exists("g:loaded_syntastic_cpp_oclint_checker")
+ finish
+endif
+let g:loaded_syntastic_cpp_oclint_checker = 1
+
+runtime! syntax_checkers/c/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'cpp',
+ \ 'name': 'oclint',
+ \ 'redirect': 'c/oclint'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/cs/mcs.vim b/sources_non_forked/syntastic/syntax_checkers/cs/mcs.vim
new file mode 100644
index 00000000..d7662a1c
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/cs/mcs.vim
@@ -0,0 +1,39 @@
+"============================================================================
+"File: cs.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Daniel Walker
+"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_cs_mcs_checker")
+ finish
+endif
+let g:loaded_syntastic_cs_mcs_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_cs_mcs_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--parse' })
+
+ let errorformat = '%f(%l\,%c): %trror %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")} })
+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/sources_non_forked/syntastic/syntax_checkers/css/csslint.vim b/sources_non_forked/syntastic/syntax_checkers/css/csslint.vim
new file mode 100644
index 00000000..0fc06269
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/css/csslint.vim
@@ -0,0 +1,52 @@
+"============================================================================
+"File: css.vim
+"Description: Syntax checking plugin for syntastic.vim using `csslint` CLI tool (http://csslint.net).
+"Maintainer: Ory Band
+"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.
+"============================================================================
+"
+" Specify additional options to csslint with this option. e.g. to disable
+" warnings:
+"
+" let g:syntastic_csslint_options = '--warnings=none'
+
+if exists('g:loaded_syntastic_css_csslint_checker')
+ finish
+endif
+let g:loaded_syntastic_css_csslint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_css_csslint_GetLocList() dict
+ call syntastic#log#deprecationWarn('csslint_options', 'css_csslint_args')
+
+ let makeprg = self.makeprgBuild({ 'args_after': '--format=compact' })
+
+ " Print CSS Lint's error/warning messages from compact format. Ignores blank lines.
+ let errorformat =
+ \ '%-G,' .
+ \ '%-G%f: lint free!,' .
+ \ '%f: line %l\, col %c\, %trror - %m,' .
+ \ '%f: line %l\, col %c\, %tarning - %m,'.
+ \ '%f: line %l\, col %c\, %m,'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")} })
+
+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/sources_non_forked/syntastic/syntax_checkers/css/phpcs.vim b/sources_non_forked/syntastic/syntax_checkers/css/phpcs.vim
new file mode 100644
index 00000000..86aefeb6
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/css/phpcs.vim
@@ -0,0 +1,29 @@
+"============================================================================
+"File: phpcs.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.
+"
+"============================================================================
+"
+" 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
+
+runtime! syntax_checkers/php/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'css',
+ \ 'name': 'phpcs',
+ \ 'redirect': 'php/phpcs'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/css/prettycss.vim b/sources_non_forked/syntastic/syntax_checkers/css/prettycss.vim
new file mode 100644
index 00000000..06fd7e46
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/css/prettycss.vim
@@ -0,0 +1,64 @@
+"============================================================================
+"File: prettycss.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.
+"
+"============================================================================
+"
+" For details about PrettyCSS see:
+"
+" - http://fidian.github.io/PrettyCSS/
+" - https://github.com/fidian/PrettyCSS
+
+if exists("g:loaded_syntastic_css_prettycss_checker")
+ finish
+endif
+let g:loaded_syntastic_css_prettycss_checker = 1
+
+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' . escape(term, '\')
+ endif
+ return term
+endfunction
+
+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 =
+ \ '%EError: %m\, line %l\, char %c),' .
+ \ '%WWarning: %m\, line %l\, char %c),' .
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")} })
+
+ for e in loclist
+ let e["text"] .= ')'
+ endfor
+
+ call self.setWantSort(1)
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/css/recess.vim b/sources_non_forked/syntastic/syntax_checkers/css/recess.vim
new file mode 100644
index 00000000..6d043e44
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/css/recess.vim
@@ -0,0 +1,26 @@
+"============================================================================
+"File: recess.vim
+"Description: Syntax checking plugin for syntastic.vim using `recess`
+" (http://twitter.github.io/recess/).
+"Maintainer: Tim Carry
+"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_css_recess_checker")
+ finish
+endif
+let g:loaded_syntastic_css_recess_checker = 1
+
+runtime! syntax_checkers/less/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'css',
+ \ 'name': 'recess',
+ \ 'redirect': 'less/recess'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/cucumber/cucumber.vim b/sources_non_forked/syntastic/syntax_checkers/cucumber/cucumber.vim
new file mode 100644
index 00000000..c06a06e5
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/cucumber/cucumber.vim
@@ -0,0 +1,42 @@
+"============================================================================
+"File: cucumber.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_cucumber_cucumber_checker")
+ finish
+endif
+let g:loaded_syntastic_cucumber_cucumber_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_cucumber_cucumber_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--dry-run --quiet --strict --format pretty' })
+
+ let errorformat =
+ \ '%f:%l:%c:%m,' .
+ \ '%W %.%# (%m),' .
+ \ '%-Z%f:%l:%.%#,'.
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/cuda/nvcc.vim b/sources_non_forked/syntastic/syntax_checkers/cuda/nvcc.vim
new file mode 100644
index 00000000..f93332b1
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/cuda/nvcc.vim
@@ -0,0 +1,78 @@
+"============================================================================
+"File: cuda.vim
+"Description: Syntax checking plugin for syntastic.vim
+"
+"Author: Hannes Schulz
+"
+"============================================================================
+
+" in order to also check header files add this to your .vimrc:
+" (this creates an empty .syntastic_dummy.cu file in your source directory)
+"
+" let g:syntastic_cuda_check_header = 1
+
+" By default, nvcc and thus syntastic, defaults to the most basic architecture.
+" This can produce false errors if the developer intends to compile for newer
+" hardware and use newer features, eg. double precision numbers. To pass a
+" specific target arch to nvcc, e.g. add the following to your .vimrc:
+"
+" let g:syntastic_cuda_arch = "sm_20"
+
+if exists("g:loaded_syntastic_cuda_nvcc_checker")
+ finish
+endif
+let g:loaded_syntastic_cuda_nvcc_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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 =
+ \ 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,'.
+ \ '%-G%f:%l: (Each undeclared identifier is reported only once,'.
+ \ '%-G%f:%l: for each function it appears in.),'.
+ \ '%f:%l:%c:%m,'.
+ \ '%f(%l):%m,'.
+ \ '%f:%l:%m,'.
+ \ '"%f"\, line %l%*\D%c%*[^ ] %m,'.
+ \ '%D%*\a[%*\d]: Entering directory `%f'','.
+ \ '%X%*\a[%*\d]: Leaving directory `%f'','.
+ \ '%D%*\a: Entering directory `%f'','.
+ \ '%X%*\a: Leaving directory `%f'','.
+ \ '%DMaking %*\a in %f,'.
+ \ '%f|%l| %m'
+
+ if expand('%') =~? '\m\%(.h\|.hpp\|.cuh\)$'
+ if exists('g:syntastic_cuda_check_header')
+ let makeprg =
+ \ 'echo > .syntastic_dummy.cu ; ' .
+ \ self.getExecEscaped() . ' ' . arch_flag .
+ \ ' --cuda -O0 -I . .syntastic_dummy.cu -Xcompiler -fsyntax-only -include ' .
+ \ syntastic#util#shexpand('%') . ' ' . syntastic#c#NullOutput()
+ else
+ return []
+ endif
+ endif
+
+ return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/d/dmd.vim b/sources_non_forked/syntastic/syntax_checkers/d/dmd.vim
new file mode 100644
index 00000000..05e7b6a1
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/d/dmd.vim
@@ -0,0 +1,59 @@
+"============================================================================
+"File: d.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Alfredo Di Napoli
+"License: Based on the original work of Gregor Uhlenheuer and his
+" cpp.vim checker so credits are dued.
+" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+" OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+" HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+" OTHER DEALINGS IN THE SOFTWARE.
+"
+"============================================================================
+
+if exists('g:loaded_syntastic_d_dmd_checker')
+ finish
+endif
+let g:loaded_syntastic_d_dmd_checker = 1
+
+if !exists('g:syntastic_d_compiler_options')
+ let g:syntastic_d_compiler_options = ''
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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() dict
+ if !exists('g:syntastic_d_include_dirs')
+ let g:syntastic_d_include_dirs = filter(glob($HOME . '/.dub/packages/*', 1, 1), 'isdirectory(v:val)')
+ call map(g:syntastic_d_include_dirs, 'isdirectory(v:val . "/source") ? v:val . "/source" : v:val')
+ call add(g:syntastic_d_include_dirs, './source')
+ endif
+
+ return syntastic#c#GetLocList('d', 'dmd', {
+ \ 'errorformat':
+ \ '%-G%f:%s:,%f(%l): %m,' .
+ \ '%f:%l: %m',
+ \ 'main_flags': '-c -of' . syntastic#util#DevNull(),
+ \ 'header_names': '\m\.di$' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'd',
+ \ 'name': 'dmd' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/dart/dartanalyzer.vim b/sources_non_forked/syntastic/syntax_checkers/dart/dartanalyzer.vim
new file mode 100644
index 00000000..edf71df3
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/docbk/xmllint.vim b/sources_non_forked/syntastic/syntax_checkers/docbk/xmllint.vim
new file mode 100644
index 00000000..bfb9da0a
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/docbk/xmllint.vim
@@ -0,0 +1,25 @@
+"============================================================================
+"File: docbk.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_docbk_xmllint_checker")
+ finish
+endif
+let g:loaded_syntastic_docbk_xmllint_checker = 1
+
+runtime! syntax_checkers/xml/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'docbk',
+ \ 'name': 'xmllint',
+ \ 'redirect': 'xml/xmllint'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/dustjs/swiffer.vim b/sources_non_forked/syntastic/syntax_checkers/dustjs/swiffer.vim
new file mode 100644
index 00000000..0bdf2813
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/dustjs/swiffer.vim
@@ -0,0 +1,38 @@
+"============================================================================
+"File: swiffer.vim
+"Description: Dust.js syntax checker - using swiffer
+"Maintainer: Steven Foote
+"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_dustjs_swiffer_checker")
+ finish
+endif
+
+let g:loaded_syntastic_dustjs_swiffer_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_dustjs_swiffer_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat = '%E%f - Line %l\, Column %c: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+ endfunction
+
+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/sources_non_forked/syntastic/syntax_checkers/elixir/elixir.vim b/sources_non_forked/syntastic/syntax_checkers/elixir/elixir.vim
new file mode 100644
index 00000000..3914fa9b
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/elixir/elixir.vim
@@ -0,0 +1,56 @@
+"============================================================================
+"File: elixir.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Richard Ramsden
+"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_elixir_elixir_checker")
+ finish
+endif
+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() dict
+ return executable('elixir') && executable('mix')
+endfunction
+
+function! SyntaxCheckers_elixir_elixir_GetLocList() dict
+ if !exists('g:syntastic_enable_elixir_checker') || !g:syntastic_enable_elixir_checker
+ call syntastic#log#error('checker elixir/elixir: checks disabled for security reasons; ' .
+ \ 'set g:syntastic_enable_elixir_checker to 1 to override')
+ return []
+ endif
+
+ let make_options = {}
+ let compile_command = 'elixir'
+ let mix_file = syntastic#util#findInParent('mix.exs', expand('%:p:h'))
+
+ if filereadable(mix_file)
+ let compile_command = 'mix compile'
+ let make_options['cwd'] = fnamemodify(mix_file, ':p:h')
+ endif
+
+ let make_options['makeprg'] = self.makeprgBuild({ 'exe': compile_command })
+
+ let make_options['errorformat'] = '** %*[^\ ] %f:%l: %m'
+
+ return SyntasticMake(make_options)
+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/sources_non_forked/syntastic/syntax_checkers/erlang/erlang_check_file.erl b/sources_non_forked/syntastic/syntax_checkers/erlang/erlang_check_file.erl
new file mode 100755
index 00000000..bd94870b
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/erlang/erlang_check_file.erl
@@ -0,0 +1,61 @@
+#!/usr/bin/env escript
+-export([main/1]).
+
+main([FileName]) ->
+ LibDirs = (["ebin", "include", "src", "test"] ++
+ filelib:wildcard("{apps,deps,lib}/*/{ebin,include}")),
+ compile(FileName, LibDirs);
+
+main([FileName, "-rebar", Path, LibDirs]) ->
+ {ok, L} = file:consult(Path),
+ P = dict:from_list(L),
+ Root = filename:dirname(Path),
+
+ Lib1 = case dict:find(lib_dirs, P) of
+ {ok, X} -> lists:map(fun(Sub) -> Root ++ "/" ++ Sub end, X);
+ _ -> []
+ end,
+
+ Lib2 = case dict:find(sub_dirs, P) of
+ {ok, Y} -> lists:foldl(
+ fun(Sub,Sofar) ->
+ Sofar ++ [
+ Root ++ "/" ++ Sub,
+ Root ++ "/" ++ Sub ++ "/include",
+ Root ++ "/" ++ Sub ++ "/deps",
+ Root ++ "/" ++ Sub ++ "/lib"
+ ] end, [], Y);
+ _ -> []
+ end,
+
+ LibDirs1 = LibDirs ++ Lib1 ++ Lib2,
+ %io:format("~p~n", [LibDirs1]),
+ compile(FileName, LibDirs1);
+
+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, I)} || I <- LibDirs]).
+
+get_root(Dir) ->
+ Path = filename:split(filename:absname(Dir)),
+ filename:join(get_root(lists:reverse(Path), Path)).
+
+get_root([], Path) ->
+ Path;
+get_root(["src" | Tail], _Path) ->
+ lists:reverse(Tail);
+get_root(["test" | Tail], _Path) ->
+ lists:reverse(Tail);
+get_root([_ | Tail], Path) ->
+ get_root(Tail, Path).
diff --git a/sources_non_forked/syntastic/syntax_checkers/erlang/escript.vim b/sources_non_forked/syntastic/syntax_checkers/erlang/escript.vim
new file mode 100644
index 00000000..b4725505
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/erlang/escript.vim
@@ -0,0 +1,61 @@
+"============================================================================
+"File: erlang.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Pawel Salata
+"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_erlang_erlang_checker')
+ finish
+endif
+let g:loaded_syntastic_erlang_erlang_checker = 1
+
+if !exists('g:syntastic_erlc_include_path')
+ let g:syntastic_erlc_include_path = ''
+endif
+
+let s:check_file = syntastic#util#shescape(expand(':p:h') . syntastic#util#Slash() . 'erlang_check_file.erl')
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_erlang_escript_GetLocList() dict
+ if expand('%:e') ==# 'hrl'
+ return []
+ endif
+
+ let shebang = syntastic#util#parseShebang()
+ if shebang['exe'] ==# 'escript'
+ let args = '-s'
+ let post_args = ''
+ else
+ let args = s:check_file
+ let post_args = g:syntastic_erlc_include_path
+ endif
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': args,
+ \ 'fname': syntastic#util#shexpand('%:p'),
+ \ 'post_args_after': post_args })
+
+ let errorformat =
+ \ '%W%f:%l: warning: %m,'.
+ \ '%E%f:%l: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'erlang',
+ \ 'name': 'escript'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/erlang/syntaxerl.vim b/sources_non_forked/syntastic/syntax_checkers/erlang/syntaxerl.vim
new file mode 100644
index 00000000..91629c43
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/erlang/syntaxerl.vim
@@ -0,0 +1,42 @@
+"============================================================================
+"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_erlang_syntaxerl_checker")
+ finish
+endif
+
+let g:loaded_syntastic_erlang_syntaxerl_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+
+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': 'erlang',
+ \ 'name': 'syntaxerl'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/eruby/ruby.vim b/sources_non_forked/syntastic/syntax_checkers/eruby/ruby.vim
new file mode 100644
index 00000000..ea6b2f05
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/eruby/ruby.vim
@@ -0,0 +1,70 @@
+"============================================================================
+"File: ruby.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_eruby_ruby_checker")
+ finish
+endif
+let g:loaded_syntastic_eruby_ruby_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_eruby_ruby_IsAvailable() dict
+ if !exists('g:syntastic_eruby_ruby_exec') && exists('g:syntastic_ruby_exec')
+ let g:syntastic_eruby_ruby_exec = g:syntastic_ruby_exec
+ endif
+ return executable(self.getExec())
+endfunction
+
+function! SyntaxCheckers_eruby_ruby_GetLocList() dict
+ let fname = "'" . escape(expand('%'), "\\'") . "'"
+
+ " TODO: encodings became useful in ruby 1.9 :)
+ if syntastic#util#versionIsAtLeast(syntastic#util#getVersion(self.getExecEscaped(). ' --version'), [1, 9])
+ let enc = &fileencoding != '' ? &fileencoding : &encoding
+ let encoding_spec = ', :encoding => "' . (enc ==? 'utf-8' ? 'UTF-8' : 'BINARY') . '"'
+ else
+ let encoding_spec = ''
+ endif
+
+ "gsub fixes issue #7, rails has it's own eruby syntax
+ let makeprg =
+ \ self.getExecEscaped() . ' -rerb -e ' .
+ \ syntastic#util#shescape('puts ERB.new(File.read(' .
+ \ fname . encoding_spec .
+ \ ').gsub(''<%='',''<%''), nil, ''-'').src') .
+ \ ' | ' . self.getExecEscaped() . ' -c'
+
+ let errorformat =
+ \ '%-GSyntax OK,'.
+ \ '%E-:%l: syntax error\, %m,%Z%p^,'.
+ \ '%W-:%l: warning: %m,'.
+ \ '%Z%p^,'.
+ \ '%-C%.%#'
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'RUBYOPT': '' }
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env,
+ \ 'defaults': { 'bufnr': bufnr(""), 'vcol': 1 } })
+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/sources_non_forked/syntastic/syntax_checkers/fortran/gfortran.vim b/sources_non_forked/syntastic/syntax_checkers/fortran/gfortran.vim
new file mode 100644
index 00000000..ce0d1aa0
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/fortran/gfortran.vim
@@ -0,0 +1,51 @@
+"============================================================================
+"File: fortran.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Karl Yngve Lervåg
+"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_fortran_gfortran_checker")
+ finish
+endif
+let g:loaded_syntastic_fortran_gfortran_checker=1
+
+if !exists('g:syntastic_fortran_compiler_options')
+ let g:syntastic_fortran_compiler_options = ''
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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() dict
+ return syntastic#c#GetLocList('fortran', 'gfortran', {
+ \ 'errorformat':
+ \ '%-C %#,'.
+ \ '%-C %#%.%#,'.
+ \ '%A%f:%l.%c:,'.
+ \ '%Z%trror: %m,'.
+ \ '%Z%tarning: %m,'.
+ \ '%-G%.%#',
+ \ 'main_flags': '-fsyntax-only' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'fortran',
+ \ 'name': 'gfortran' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/glsl/cgc.vim b/sources_non_forked/syntastic/syntax_checkers/glsl/cgc.vim
new file mode 100644
index 00000000..43b9069a
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/go/go.vim b/sources_non_forked/syntastic/syntax_checkers/go/go.vim
new file mode 100644
index 00000000..868d7140
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/go/go.vim
@@ -0,0 +1,91 @@
+"============================================================================
+"File: go.vim
+"Description: Check go syntax using 'gofmt -l' followed by 'go [build|test]'
+"Maintainer: Kamil Kisiel
+"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.
+"
+" This syntax checker does not reformat your source code.
+" 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 s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_go_go_IsAvailable() dict
+ return executable('go') && executable('gofmt')
+endfunction
+
+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 = self.makeprgBuild({
+ \ 'exe': 'gofmt',
+ \ 'args': '-l',
+ \ 'tail': '> ' . syntastic#util#DevNull() })
+
+ let errorformat =
+ \ '%f:%l:%c: %m,' .
+ \ '%-G%.%#'
+
+ let errors = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'type': 'e'} })
+ if !empty(errors)
+ return errors
+ endif
+
+ " 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('%'), '\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,' .
+ \ '%-G#%.%#'
+
+ " The go compiler needs to either be run with an import path as an
+ " argument or directly from the package directory. Since figuring out
+ " the proper import path is fickle, just cwd to the package.
+
+ let errors = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ '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/sources_non_forked/syntastic/syntax_checkers/go/gofmt.vim b/sources_non_forked/syntastic/syntax_checkers/go/gofmt.vim
new file mode 100644
index 00000000..62b86cbc
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/go/gofmt.vim
@@ -0,0 +1,44 @@
+"============================================================================
+"File: gofmt.vim
+"Description: Check go syntax using 'gofmt -l'
+"Maintainer: Brandon Thomson
+"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.
+"
+" This syntax checker does not reformat your source code.
+" 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 s:save_cpo = &cpo
+set cpo&vim
+
+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%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'type': 'e'} })
+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/sources_non_forked/syntastic/syntax_checkers/go/golint.vim b/sources_non_forked/syntastic/syntax_checkers/go/golint.vim
new file mode 100644
index 00000000..c4107016
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/go/golint.vim
@@ -0,0 +1,39 @@
+"============================================================================
+"File: golint.vim
+"Description: Check go syntax using 'golint'
+"Maintainer: Hiroshi Ioka
+"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_golint_checker")
+ finish
+endif
+let g:loaded_syntastic_go_golint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_go_golint_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat = '%f:%l:%c: %m,%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style' })
+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/sources_non_forked/syntastic/syntax_checkers/go/gotype.vim b/sources_non_forked/syntastic/syntax_checkers/go/gotype.vim
new file mode 100644
index 00000000..010766e0
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/go/govet.vim b/sources_non_forked/syntastic/syntax_checkers/go/govet.vim
new file mode 100644
index 00000000..080204a1
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/go/govet.vim
@@ -0,0 +1,49 @@
+"============================================================================
+"File: govet.vim
+"Description: Perform static analysis of Go code with the vet tool
+"Maintainer: Kamil Kisiel
+"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_govet_checker")
+ finish
+endif
+let g:loaded_syntastic_go_govet_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_go_govet_IsAvailable() dict
+ return executable('go')
+endfunction
+
+function! SyntaxCheckers_go_govet_GetLocList() dict
+ let makeprg = 'go vet'
+ let errorformat = '%Evet: %.%\+: %f:%l:%c: %m,%W%f:%l: %m,%-G%.%#'
+
+ " The go compiler needs to either be run with an import path as an
+ " argument or directly from the package directory. Since figuring out
+ " the proper import path is fickle, just cwd to the package.
+
+ let errors = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'cwd': expand('%:p:h'),
+ \ 'defaults': {'type': 'w'} })
+
+ return errors
+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/sources_non_forked/syntastic/syntax_checkers/haml/haml.vim b/sources_non_forked/syntastic/syntax_checkers/haml/haml.vim
new file mode 100644
index 00000000..a26fa6cc
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/haml/haml.vim
@@ -0,0 +1,46 @@
+"============================================================================
+"File: haml.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_checker')
+ finish
+endif
+let g:loaded_syntastic_haml_haml_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_haml_haml_IsAvailable() dict
+ call syntastic#log#deprecationWarn('haml_interpreter', 'haml_haml_exec')
+ return executable(self.getExec())
+endfunction
+
+function! SyntaxCheckers_haml_haml_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-c' })
+
+ let errorformat =
+ \ 'Haml error on line %l: %m,' .
+ \ 'Syntax error on line %l: %m,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/haml/haml_lint.vim b/sources_non_forked/syntastic/syntax_checkers/haml/haml_lint.vim
new file mode 100644
index 00000000..160d9a5a
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/handlebars/handlebars.vim b/sources_non_forked/syntastic/syntax_checkers/handlebars/handlebars.vim
new file mode 100644
index 00000000..93c298f6
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/handlebars/handlebars.vim
@@ -0,0 +1,42 @@
+"============================================================================
+"File: handlebars.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_handlebars_handlebars_checker")
+ finish
+endif
+let g:loaded_syntastic_handlebars_handlebars_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_handlebars_handlebars_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-f ' . syntastic#util#DevNull() })
+
+ let errorformat =
+ \ '%EError: %m on line %l:,'.
+ \ "%EError: %m,".
+ \ '%Z%p^,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")} })
+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/sources_non_forked/syntastic/syntax_checkers/haskell/ghc-mod.vim b/sources_non_forked/syntastic/syntax_checkers/haskell/ghc-mod.vim
new file mode 100644
index 00000000..7a86ffa6
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/haskell/ghc-mod.vim
@@ -0,0 +1,72 @@
+"============================================================================
+"File: ghc-mod.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Anthony Carapetis
+"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_haskell_ghc_mod_checker')
+ finish
+endif
+let g:loaded_syntastic_haskell_ghc_mod_checker = 1
+
+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() dict
+ let makeprg = self.makeprgBuild({
+ \ 'exe': self.getExecEscaped() . ' check' . (s:ghc_mod_new ? ' --boundary=""' : '') })
+
+ let errorformat =
+ \ '%-G%\s%#,' .
+ \ '%f:%l:%c:%trror: %m,' .
+ \ '%f:%l:%c:%tarning: %m,'.
+ \ '%f:%l:%c: %trror: %m,' .
+ \ '%f:%l:%c: %tarning: %m,' .
+ \ '%f:%l:%c:%m,' .
+ \ '%E%f:%l:%c:,' .
+ \ '%Z%m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ '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',
+ \ 'exec': 'ghc-mod' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/haskell/hdevtools.vim b/sources_non_forked/syntastic/syntax_checkers/haskell/hdevtools.vim
new file mode 100644
index 00000000..978abd20
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/haskell/hdevtools.vim
@@ -0,0 +1,56 @@
+"============================================================================
+"File: hdevtools.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Anthony Carapetis
+"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_haskell_hdevtools_checker")
+ finish
+endif
+let g:loaded_syntastic_haskell_hdevtools_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_haskell_hdevtools_GetLocList() dict
+ if !exists('g:syntastic_haskell_hdevtools_args') && exists('g:hdevtools_options')
+ call syntastic#log#oneTimeWarn('variable g:hdevtools_options is deprecated, ' .
+ \ 'please use g:syntastic_haskell_hdevtools_args instead')
+ let g:syntastic_haskell_hdevtools_args = g:hdevtools_options
+ endif
+
+ let makeprg = self.makeprgBuild({
+ \ 'exe_after': 'check',
+ \ 'fname': syntastic#util#shexpand('%:p') })
+
+ let errorformat =
+ \ '%-Z %#,'.
+ \ '%W%f:%l:%v: Warning: %m,'.
+ \ '%W%f:%l:%v: Warning:,'.
+ \ '%E%f:%l:%v: %m,'.
+ \ '%E%>%f:%l:%v:,'.
+ \ '%+C %#%m,'.
+ \ '%W%>%f:%l:%v:,'.
+ \ '%+C %#%tarning: %m,'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'vcol': 1},
+ \ 'postprocess': ['compressWhitespace'] })
+endfunction
+
+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/sources_non_forked/syntastic/syntax_checkers/haskell/hlint.vim b/sources_non_forked/syntastic/syntax_checkers/haskell/hlint.vim
new file mode 100644
index 00000000..592e4d39
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/haskell/hlint.vim
@@ -0,0 +1,39 @@
+"============================================================================
+"File: hlint.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Nicolas Wu
+"License: BSD
+"============================================================================
+
+if exists('g:loaded_syntastic_haskell_hlint_checker')
+ finish
+endif
+let g:loaded_syntastic_haskell_hlint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_haskell_hlint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'fname': syntastic#util#shexpand('%:p')})
+
+ let errorformat =
+ \ '%E%f:%l:%v: Error: %m,' .
+ \ '%W%f:%l:%v: Warning: %m,' .
+ \ '%C%m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'vcol': 1},
+ \ 'postprocess': ['compressWhitespace'] })
+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/sources_non_forked/syntastic/syntax_checkers/haskell/scan.vim b/sources_non_forked/syntastic/syntax_checkers/haskell/scan.vim
new file mode 100644
index 00000000..ed74a004
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/haskell/scan.vim
@@ -0,0 +1,43 @@
+"============================================================================
+"File: scan.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_haskell_scan_checker')
+ finish
+endif
+let g:loaded_syntastic_haskell_scan_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_haskell_scan_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat = '%f:%l:%v: %m'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style' })
+
+ call self.setWantSort(1)
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'haskell',
+ \ 'name': 'scan'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/haxe/haxe.vim b/sources_non_forked/syntastic/syntax_checkers/haxe/haxe.vim
new file mode 100644
index 00000000..90589420
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/haxe/haxe.vim
@@ -0,0 +1,61 @@
+"============================================================================
+"File: haxe.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: David Bernard
+"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_haxe_haxe_checker")
+ finish
+endif
+let g:loaded_syntastic_haxe_haxe_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_haxe_haxe_GetLocList() dict
+ if exists('b:vaxe_hxml')
+ let hxml = b:vaxe_hxml
+ elseif exists('g:vaxe_hxml')
+ let hxml = g:vaxe_hxml
+ else
+ let hxml = syntastic#util#findInParent('*.hxml', expand('%:p:h'))
+ endif
+ let hxml = fnamemodify(hxml, ':p')
+
+ if hxml != ''
+ let makeprg = self.makeprgBuild({
+ \ 'fname': syntastic#util#shescape(fnamemodify(hxml, ':t')) })
+
+ let errorformat = '%E%f:%l: characters %c-%n : %m'
+
+ 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 []
+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/sources_non_forked/syntastic/syntax_checkers/hss/hss.vim b/sources_non_forked/syntastic/syntax_checkers/hss/hss.vim
new file mode 100644
index 00000000..0f2ef527
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/hss/hss.vim
@@ -0,0 +1,38 @@
+"============================================================================
+"File: hss.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Justin Donaldson (jdonaldson@gmail.com)
+"License: This program is free software. It comes without any warranty,
+" to the extent permitted by applicable law. You can redistribute
+" it and/or modify it under the terms of the Do What The Fuck You
+" Want To Public License, Version 2, as published by Sam Hocevar.
+" See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists("g:loaded_syntastic_hss_hss_checker")
+ finish
+endif
+let g:loaded_syntastic_hss_hss_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_hss_hss_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after' : '-output ' . syntastic#util#DevNull() })
+
+ let errorformat = '%E%f:%l: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/html/jshint.vim b/sources_non_forked/syntastic/syntax_checkers/html/jshint.vim
new file mode 100644
index 00000000..8bb0a530
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/html/jshint.vim
@@ -0,0 +1,50 @@
+"============================================================================
+"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
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_html_jshint_IsAvailable() dict
+ call syntastic#log#deprecationWarn('jshint_exec', 'html_jshint_exec')
+ return executable(self.getExec()) &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(self.getExecEscaped() . ' --version'), [2,4])
+endfunction
+
+function! SyntaxCheckers_html_jshint_GetLocList() dict
+ call syntastic#log#deprecationWarn('html_jshint_conf', 'html_jshint_args',
+ \ "'--config ' . syntastic#util#shexpand(OLD_VAR)")
+
+ let makeprg = self.makeprgBuild({ 'args_after': '--verbose --extract always' })
+
+ let errorformat = '%A%f: line %l\, col %v\, %m \(%t%*\d\)'
+
+ call self.setWantSort(1)
+
+ 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/sources_non_forked/syntastic/syntax_checkers/html/tidy.vim b/sources_non_forked/syntastic/syntax_checkers/html/tidy.vim
new file mode 100644
index 00000000..7dcf5223
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/html/tidy.vim
@@ -0,0 +1,219 @@
+"============================================================================
+"File: tidy.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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.
+"
+"============================================================================
+"
+" Note: if you need to check HTML5 sources, you might consider installing a
+" fork of HTML Tidy, named "HTML Tidy for HTML5":
+"
+" http://w3c.github.io/tidy-html5/
+"
+" HTML Tidy for HTML5 can be used without changes by this checker, just install
+" it and point g:syntastic_html_tidy_exec to the executable.
+"
+" Checker options:
+"
+" - g:syntastic_html_tidy_ignore_errors (list; default: [])
+" list of errors to ignore
+" - g:syntastic_html_tidy_blocklevel_tags (list; default: [])
+" list of additional blocklevel tags, to be added to "--new-blocklevel-tags"
+" - g:syntastic_html_tidy_inline_tags (list; default: [])
+" list of additional inline tags, to be added to "--new-inline-tags"
+" - g:syntastic_html_tidy_empty_tags (list; default: [])
+" list of additional empty tags, to be added to "--new-empty-tags"
+
+if exists("g:loaded_syntastic_html_tidy_checker")
+ finish
+endif
+let g:loaded_syntastic_html_tidy_checker = 1
+
+if !exists('g:syntastic_html_tidy_ignore_errors')
+ let g:syntastic_html_tidy_ignore_errors = []
+endif
+
+if !exists('g:syntastic_html_tidy_blocklevel_tags')
+ let g:syntastic_html_tidy_blocklevel_tags = []
+endif
+
+if !exists('g:syntastic_html_tidy_inline_tags')
+ let g:syntastic_html_tidy_inline_tags = []
+endif
+
+if !exists('g:syntastic_html_tidy_empty_tags')
+ let g:syntastic_html_tidy_empty_tags = []
+endif
+
+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',
+ \ }
+ return get(tidy_opts, &fileencoding, '-utf8')
+endfunction
+
+let s:ignore_errors = [
+ \ " lacks \"summary\" attribute",
+ \ "not approved by W3C",
+ \ " proprietary attribute \"placeholder\"",
+ \ " proprietary attribute \"charset\"",
+ \ " lacks \"content\" attribute",
+ \ "inserting \"type\" attribute",
+ \ "proprietary attribute \"data-",
+ \ "missing declaration",
+ \ "inserting implicit ",
+ \ "inserting missing 'title' element",
+ \ "unescaped & or unknown entity",
+ \ " 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\""
+ \ ]
+lockvar! s:ignore_errors
+
+let s:blocklevel_tags = [
+ \ "main",
+ \ "section",
+ \ "article",
+ \ "aside",
+ \ "header",
+ \ "footer",
+ \ "nav",
+ \ "figure",
+ \ "figcaption"
+ \ ]
+lockvar! s:blocklevel_tags
+
+let s:inline_tags = [
+ \ "video",
+ \ "audio",
+ \ "source",
+ \ "embed",
+ \ "mark",
+ \ "progress",
+ \ "meter",
+ \ "time",
+ \ "ruby",
+ \ "rt",
+ \ "rp",
+ \ "canvas",
+ \ "command",
+ \ "details",
+ \ "datalist"
+ \ ]
+lockvar! s:inline_tags
+
+let s:empty_tags = [
+ \ "wbr",
+ \ "keygen"
+ \ ]
+lockvar! s:empty_tags
+
+function! s:IgnoreError(text)
+ for i in s:ignore_errors + g:syntastic_html_tidy_ignore_errors
+ if stridx(a:text, i) != -1
+ return 1
+ endif
+ endfor
+ return 0
+endfunction
+
+function! s:NewTags(name)
+ return syntastic#util#shescape(join( s:{a:name} + g:syntastic_html_tidy_{a:name}, ',' ))
+endfunction
+
+function! s:Args()
+ let args = s:TidyEncOptByFenc() .
+ \ ' --new-blocklevel-tags ' . s:NewTags('blocklevel_tags') .
+ \ ' --new-inline-tags ' . s:NewTags('inline_tags') .
+ \ ' --new-empty-tags ' . s:NewTags('empty_tags') .
+ \ ' -e'
+ return args
+endfunction
+
+function! SyntaxCheckers_html_tidy_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': s:Args() })
+
+ let errorformat =
+ \ '%Wline %l column %v - Warning: %m,' .
+ \ '%Eline %l column %v - Error: %m,' .
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")},
+ \ 'returns': [0, 1, 2] })
+
+ " filter out valid HTML5 from the errors
+ for e in loclist
+ if e['valid'] && s:IgnoreError(e['text']) == 1
+ let e['valid'] = 0
+ endif
+ endfor
+
+ return loclist
+endfunction
+
+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/sources_non_forked/syntastic/syntax_checkers/html/validator.vim b/sources_non_forked/syntastic/syntax_checkers/html/validator.vim
new file mode 100644
index 00000000..6a8e503d
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/html/validator.vim
@@ -0,0 +1,87 @@
+"============================================================================
+"File: validator.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.
+"
+"============================================================================
+"
+" For detail;s about validator see: http://about.validator.nu/
+"
+" Checker options:
+"
+" - g:syntastic_html_validator_api (string; default: 'http://validator.nu/')
+" URL of the service to use for checking; leave it to the default to run the
+" checks against http://validator.nu/, or set it to 'http://localhost:8888/'
+" if you're running a local service as per http://about.validator.nu/#src
+"
+" - g:syntastic_html_validator_parser (string; default: empty)
+" parser to use; legal values are: xml, xmldtd, html, html5, html4, html4tr;
+" set it to 'html5' to check HTML5 files; see the wiki for reference:
+" http://wiki.whatwg.org/wiki/Validator.nu_Common_Input_Parameters#parser
+"
+" - g:syntastic_html_validator_nsfilter (string; default: empty)
+" sets the nsfilter for the parser; see the wiki for details:
+" http://wiki.whatwg.org/wiki/Validator.nu_Common_Input_Parameters#nsfilter
+
+if exists("g:loaded_syntastic_html_validator_checker")
+ finish
+endif
+let g:loaded_syntastic_html_validator_checker=1
+
+if !exists('g:syntastic_html_validator_api')
+ let g:syntastic_html_validator_api = 'http://validator.nu/'
+endif
+
+if !exists('g:syntastic_html_validator_parser')
+ let g:syntastic_html_validator_parser = ''
+endif
+
+if !exists('g:syntastic_html_validator_nsfilter')
+ let g:syntastic_html_validator_nsfilter = ''
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_html_validator_GetLocList() dict
+ let fname = syntastic#util#shexpand('%')
+ 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 =
+ \ '%E"%f":%l: %trror: %m,' .
+ \ '%E"%f":%l-%\d%\+: %trror: %m,' .
+ \ '%E"%f":%l%\%.%c: %trror: %m,' .
+ \ '%E"%f":%l%\%.%c-%\d%\+%\%.%\d%\+: %trror: %m,' .
+ \ '%E"%f":%l: %trror fatal: %m,' .
+ \ '%E"%f":%l-%\d%\+: %trror fatal: %m,' .
+ \ '%E"%f":%l%\%.%c: %trror fatal: %m,' .
+ \ '%E"%f":%l%\%.%c-%\d%\+%\%.%\d%\+: %trror fatal: %m,' .
+ \ '%W"%f":%l: info %tarning: %m,' .
+ \ '%W"%f":%l-%\d%\+: info %tarning: %m,' .
+ \ '%W"%f":%l%\%.%c: info %tarning: %m,' .
+ \ '%W"%f":%l%\%.%c-%\d%\+%\%.%\d%\+: info %tarning: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'preprocess': 'validator',
+ \ 'returns': [0] })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'html',
+ \ 'name': 'validator',
+ \ 'exec': 'curl' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/html/w3.vim b/sources_non_forked/syntastic/syntax_checkers/html/w3.vim
new file mode 100644
index 00000000..747b7583
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/html/w3.vim
@@ -0,0 +1,69 @@
+"============================================================================
+"File: w3.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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.
+"
+"============================================================================
+"
+" Checker option:
+"
+" - g:syntastic_html_w3_api (string; default: 'http://validator.w3.org/check')
+" URL of the service to use for checking; leave it to the default to run the
+" checks against http://validator.w3.org/, or set it to
+" 'http://localhost/w3c-validator/check' if you're running a local service
+
+if exists("g:loaded_syntastic_html_w3_checker")
+ finish
+endif
+let g:loaded_syntastic_html_w3_checker = 1
+
+if !exists('g:syntastic_html_w3_api')
+ let g:syntastic_html_w3_api = 'http://validator.w3.org/check'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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
+
+ let errorformat =
+ \ '%A %\+{,' .
+ \ '%C %\+"lastLine": %l\,%\?,' .
+ \ '%C %\+"lastColumn": %c\,%\?,' .
+ \ '%C %\+"message": "%m"\,%\?,' .
+ \ '%C %\+"type": "%trror"\,%\?,' .
+ \ '%-G %\+"type": "%tnfo"\,%\?,' .
+ \ '%C %\+"subtype": "%tarning"\,%\?,' .
+ \ '%Z %\+}\,,' .
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")},
+ \ 'returns': [0] })
+
+ for e in loclist
+ let e['text'] = substitute(e['text'], '\m\\\([\"]\)', '\1', 'g')
+ endfor
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'html',
+ \ 'name': 'w3',
+ \ 'exec': 'curl' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/java/checkstyle.vim b/sources_non_forked/syntastic/syntax_checkers/java/checkstyle.vim
new file mode 100644
index 00000000..387c2c9f
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/java/checkstyle.vim
@@ -0,0 +1,62 @@
+"============================================================================
+"File: checkstyle.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Dmitry Geurkov
+"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.
+"
+" Tested with checkstyle 5.5
+"============================================================================
+
+if exists("g:loaded_syntastic_java_checkstyle_checker")
+ finish
+endif
+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'
+endif
+
+if !exists("g:syntastic_java_checkstyle_conf_file")
+ let g:syntastic_java_checkstyle_conf_file = 'sun_checks.xml'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_java_checkstyle_GetLocList() dict
+
+ let fname = syntastic#util#shescape( expand('%:p:h') . '/' . expand('%:t') )
+
+ if has('win32unix')
+ let fname = substitute(system('cygpath -m ' . fname), '\m\%x00', '', 'g')
+ endif
+
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '-cp ' . g:syntastic_java_checkstyle_classpath .
+ \ ' com.puppycrawl.tools.checkstyle.Main -c ' .
+ \ syntastic#util#shexpand(g:syntastic_java_checkstyle_conf_file) .
+ \ ' -f xml',
+ \ 'fname': fname })
+
+ let errorformat = '%f:%t:%l:%c:%m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'preprocess': 'checkstyle',
+ \ 'subtype': 'Style' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'java',
+ \ 'name': 'checkstyle',
+ \ 'exec': 'java'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/java/javac.vim b/sources_non_forked/syntastic/syntax_checkers/java/javac.vim
new file mode 100644
index 00000000..2e138bea
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/java/javac.vim
@@ -0,0 +1,435 @@
+"============================================================================
+"File: javac.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Jochen Keil
+" Dmitry Geurkov
+"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_java_javac_checker')
+ finish
+endif
+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
+
+" Global Options
+if !exists('g:syntastic_java_javac_executable')
+ let g:syntastic_java_javac_executable = 'javac'
+endif
+
+if !exists('g:syntastic_java_maven_executable')
+ let g:syntastic_java_maven_executable = 'mvn'
+endif
+
+if !exists('g:syntastic_java_javac_options')
+ let g:syntastic_java_javac_options = '-Xlint'
+endif
+
+if !exists('g:syntastic_java_maven_options')
+ let g:syntastic_java_maven_options = ''
+endif
+
+if !exists('g:syntastic_java_javac_classpath')
+ let g:syntastic_java_javac_classpath = ''
+endif
+
+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 ' . syntastic#util#shescape(a:path)), "\n", '', 'g')
+endfunction
+
+if !exists('g:syntastic_java_javac_temp_dir')
+ if has('win32') || has('win64')
+ let g:syntastic_java_javac_temp_dir = $TEMP . syntastic#util#Slash() . 'vim-syntastic-javac'
+ elseif has('win32unix')
+ let g:syntastic_java_javac_temp_dir = s:CygwinPath('/tmp/vim-syntastic-javac')
+ elseif $TMPDIR != ''
+ let g:syntastic_java_javac_temp_dir = $TMPDIR . '/vim-syntastic-javac'
+ else
+ let g:syntastic_java_javac_temp_dir = '/tmp/vim-syntastic-javac'
+ endif
+endif
+
+if !exists('g:syntastic_java_javac_autoload_maven_classpath')
+ let g:syntastic_java_javac_autoload_maven_classpath = 1
+endif
+
+if !exists('g:syntastic_java_javac_config_file_enabled')
+ let g:syntastic_java_javac_config_file_enabled = 0
+endif
+
+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
+
+if !exists('g:syntastic_java_javac_maven_pom_classpath')
+ let g:syntastic_java_javac_maven_pom_classpath = {}
+endif
+
+function! s:RemoveCarriageReturn(line)
+ return substitute(a:line, "\r", '', 'g')
+endfunction
+
+" recursively remove directory and all it's sub-directories
+function! s:RemoveDir(dir)
+ if isdirectory(a:dir)
+ for f in split(globpath(a:dir, '*'), "\n")
+ call s:RemoveDir(f)
+ endfor
+ silent! call system('rmdir ' . syntastic#util#shescape(a:dir))
+ else
+ silent! call delete(a:dir)
+ endif
+endfunction
+
+function! s:ClassSep()
+ return (syntastic#util#isRunningWindows() || has('win32unix')) ? ';' : ':'
+endfunction
+
+function! s:AddToClasspath(classpath, path)
+ if a:path == ''
+ return a:classpath
+ endif
+ return (a:classpath != '') ? a:classpath . s:ClassSep() . a:path : a:path
+endfunction
+
+function! s:SplitClasspath(classpath)
+ return split(a:classpath, s:ClassSep())
+endfunction
+
+function! s:LoadConfigFile()
+ if filereadable(expand(g:syntastic_java_javac_config_file))
+ exe 'source ' . fnameescape(expand(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
+ if filereadable(expand(g:syntastic_java_javac_config_file))
+ " load lines from config file
+ let lines = readfile(expand(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)
+ else
+ let i += 1
+ endif
+ endwhile
+ else
+ let lines = []
+ endif
+ " add new g:syntastic_java_javac_classpath option to config
+ call add(lines, 'let g:syntastic_java_javac_classpath = ' . string(path))
+ " save config file lines
+ call writefile(lines, expand(g:syntastic_java_javac_config_file))
+ endif
+ " set new classpath
+ let g:syntastic_java_javac_classpath = path
+ let &modified = 0
+endfunction
+
+function! s:EditClasspath()
+ let command = 'syntastic javac classpath'
+ let winnr = bufwinnr('^' . command . '$')
+ if winnr < 0
+ let path = []
+ let pathlines = split(g:syntastic_java_javac_classpath, "\n")
+ for p in pathlines
+ call extend(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 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, expand(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(expand(g:syntastic_java_javac_config_file))
+ let lines = readfile(expand(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
+endfunction
+
+function! s:GetMavenProperties()
+ let mvn_properties = {}
+ 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 = syntastic#util#shexpand(g:syntastic_java_maven_executable) .
+ \ ' -f ' . syntastic#util#shescape(pom) .
+ \ ' ' . g:syntastic_java_maven_options
+ let mvn_is_managed_tag = 1
+ let mvn_settings_output = split(system(mvn_cmd . ' help:effective-pom'), "\n")
+ let current_path = 'project'
+ for line in mvn_settings_output
+ let matches = matchlist(line, '\m^\s*<\([a-zA-Z0-9\-\.]\+\)>\s*$')
+ if mvn_is_managed_tag && !empty(matches)
+ let mvn_is_managed_tag = index(g:syntastic_java_javac_maven_pom_tags, matches[1]) >= 0
+ let current_path .= '.' . matches[1]
+ else
+ let matches = matchlist(line, '\m^\s*\([a-zA-Z0-9\-\.]\+\)>\s*$')
+ if !empty(matches)
+ let mvn_is_managed_tag = index(g:syntastic_java_javac_maven_pom_tags, matches[1]) < 0
+ let current_path = substitute(current_path, '\m\.' . matches[1] . '$', '', '')
+ else
+ let matches = matchlist(line, '\m^\s*<\([a-zA-Z0-9\-\.]\+\)>\(.\+\)[a-zA-Z0-9\-\.]\+>\s*$')
+ if mvn_is_managed_tag && !empty(matches)
+ let mvn_properties[current_path . '.' . matches[1]] = matches[2]
+ endif
+ endif
+ endif
+ endfor
+ let g:syntastic_java_javac_maven_pom_properties[pom] = mvn_properties
+ endif
+ return g:syntastic_java_javac_maven_pom_properties[pom]
+ endif
+ return mvn_properties
+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 = syntastic#util#shexpand(g:syntastic_java_maven_executable) .
+ \ ' -f ' . syntastic#util#shescape(pom) .
+ \ ' ' . g:syntastic_java_maven_options
+ let mvn_classpath_output = split(system(mvn_cmd . ' dependency:build-classpath'), "\n")
+ let mvn_classpath = ''
+ let class_path_next = 0
+
+ for line in mvn_classpath_output
+ if class_path_next == 1
+ let mvn_classpath = s:RemoveCarriageReturn(line)
+ break
+ endif
+ if stridx(line, 'Dependencies classpath:') >= 0
+ let class_path_next = 1
+ endif
+ endfor
+
+ let mvn_properties = s:GetMavenProperties()
+
+ let output_dir = 'target/classes'
+ if has_key(mvn_properties, 'project.build.outputDirectory')
+ let output_dir = mvn_properties['project.build.outputDirectory']
+ endif
+ let mvn_classpath = s:AddToClasspath(mvn_classpath, output_dir)
+
+ let test_output_dir = 'target/test-classes'
+ if has_key(mvn_properties, 'project.build.testOutputDirectory')
+ let test_output_dir = mvn_properties['project.build.testOutputDirectory']
+ endif
+ let mvn_classpath = s:AddToClasspath(mvn_classpath, test_output_dir)
+
+ let g:syntastic_java_javac_maven_pom_ftime[pom] = getftime(pom)
+ let g:syntastic_java_javac_maven_pom_classpath[pom] = mvn_classpath
+ endif
+ return g:syntastic_java_javac_maven_pom_classpath[pom]
+ endif
+ return ''
+endfunction
+
+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()
+ let pom = findfile('pom.xml', '.;')
+ if s:has_maven && filereadable(pom)
+ let mvn_properties = s:GetMavenProperties()
+ let output_dir = getcwd()
+ if has_key(mvn_properties, 'project.properties.build.dir')
+ let output_dir = mvn_properties['project.properties.build.dir']
+ endif
+ 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 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']
+ endif
+ endif
+
+ if has('win32unix')
+ let output_dir = s:CygwinPath(output_dir)
+ endif
+ return output_dir
+ endif
+ return '.'
+endfunction
+
+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 ' . syntastic#util#shescape(output_dir)
+ endif
+
+ " load classpath from config file
+ if g:syntastic_java_javac_config_file_enabled
+ call s:LoadConfigFile()
+ endif
+
+ let javac_classpath = ''
+
+ " add classpathes to javac_classpath
+ for path in split(g:syntastic_java_javac_classpath, s:ClassSep())
+ if path != ''
+ try
+ let ps = glob(path, 0, 1)
+ catch
+ let ps = split(glob(path, 0), "\n")
+ endtry
+ if type(ps) == type([])
+ for p in ps
+ let javac_classpath = s:AddToClasspath(javac_classpath, p)
+ endfor
+ else
+ let javac_classpath = s:AddToClasspath(javac_classpath, ps)
+ endif
+ endif
+ endfor
+
+ if s:has_maven && g:syntastic_java_javac_autoload_maven_classpath
+ if !g:syntastic_java_javac_delete_output
+ let javac_opts .= ' -d ' . syntastic#util#shescape(s:MavenOutputDirectory())
+ endif
+ let javac_classpath = s:AddToClasspath(javac_classpath, s:GetMavenClasspath())
+ endif
+
+ " load custom classpath
+ if g:syntastic_java_javac_custom_classpath_command != ''
+ let lines = system(g:syntastic_java_javac_custom_classpath_command)
+ if syntastic#util#isRunningWindows() || has('win32unix')
+ let lines = substitute(lines, "\r\n", "\n", 'g')
+ endif
+ for l in split(lines, "\n")
+ let javac_classpath = s:AddToClasspath(javac_classpath, l)
+ endfor
+ endif
+
+ if javac_classpath != ''
+ let javac_opts .= ' -cp ' . syntastic#util#shexpand(javac_classpath)
+ endif
+
+ let fname = expand('%:p:h') . syntastic#util#Slash() . expand ('%:t')
+
+ if has('win32unix')
+ let fname = s:CygwinPath(fname)
+ endif
+
+ let makeprg = self.makeprgBuild({
+ \ 'args': javac_opts,
+ \ 'fname': syntastic#util#shescape(fname) })
+
+ " unashamedly stolen from *errorformat-javac* (quickfix.txt) and modified to include error types
+ let errorformat =
+ \ '%E%f:%l:\ error:\ %m,'.
+ \ '%W%f:%l:\ warning:\ %m,'.
+ \ '%A%f:%l:\ %m,'.
+ \ '%+Z%p^,'.
+ \ '%+C%.%#,'.
+ \ '%-G%.%#'
+
+ if g:syntastic_java_javac_delete_output
+ silent! call mkdir(output_dir, 'p')
+ endif
+ let errors = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'postprocess': ['cygwinRemoveCR'] })
+
+ if g:syntastic_java_javac_delete_output
+ call s:RemoveDir(output_dir)
+ endif
+ return errors
+
+endfunction
+
+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/sources_non_forked/syntastic/syntax_checkers/javascript/closurecompiler.vim b/sources_non_forked/syntastic/syntax_checkers/javascript/closurecompiler.vim
new file mode 100644
index 00000000..5dac3abe
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/javascript/closurecompiler.vim
@@ -0,0 +1,64 @@
+"============================================================================
+"File: closurecompiler.vim
+"Description: Javascript syntax checker - using Google Closure Compiler
+"Maintainer: Motohiro Takayama
+"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_closurecompiler_checker")
+ finish
+endif
+let g:loaded_syntastic_javascript_closurecompiler_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_javascript_closurecompiler_IsAvailable() dict
+ call syntastic#log#deprecationWarn('javascript_closure_compiler_path', 'javascript_closurecompiler_path')
+
+ return
+ \ executable("java") &&
+ \ exists("g:syntastic_javascript_closurecompiler_path") &&
+ \ filereadable(g:syntastic_javascript_closurecompiler_path)
+endfunction
+
+function! SyntaxCheckers_javascript_closurecompiler_GetLocList() dict
+ call syntastic#log#deprecationWarn('javascript_closure_compiler_options', 'javascript_closurecompiler_args')
+ call syntastic#log#deprecationWarn('javascript_closure_compiler_file_list', 'javascript_closurecompiler_file_list')
+
+ if exists("g:syntastic_javascript_closurecompiler_file_list")
+ let file_list = join(readfile(g:syntastic_javascript_closurecompiler_file_list))
+ else
+ let file_list = syntastic#util#shexpand('%')
+ endif
+
+ let makeprg = self.makeprgBuild({
+ \ 'exe_after': '-jar ' . g:syntastic_javascript_closurecompiler_path,
+ \ 'args_after': '--js' ,
+ \ 'fname': file_list })
+
+ let errorformat =
+ \ '%-GOK,'.
+ \ '%E%f:%l: ERROR - %m,'.
+ \ '%Z%p^,'.
+ \ '%W%f:%l: WARNING - %m,'.
+ \ '%Z%p^'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'javascript',
+ \ 'name': 'closurecompiler',
+ \ 'exec': 'java'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/javascript/eslint.vim b/sources_non_forked/syntastic/syntax_checkers/javascript/eslint.vim
new file mode 100644
index 00000000..96919c8f
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/javascript/eslint.vim
@@ -0,0 +1,56 @@
+"============================================================================
+"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
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_javascript_eslint_IsAvailable() dict
+ return
+ \ executable(self.getExec()) &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(self.getExecEscaped() . ' --version'), [0, 1])
+endfunction
+
+function! SyntaxCheckers_javascript_eslint_GetLocList() dict
+ call syntastic#log#deprecationWarn('javascript_eslint_conf', 'javascript_eslint_args',
+ \ "'--config ' . syntastic#util#shexpand(OLD_VAR)")
+
+ let makeprg = self.makeprgBuild({ 'args_before': '-f compact' })
+
+ let errorformat =
+ \ '%E%f: line %l\, col %c\, Error - %m,' .
+ \ '%W%f: line %l\, col %c\, Warning - %m'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+
+ for e in loclist
+ let e['col'] += 1
+ endfor
+
+ call self.setWantSort(1)
+
+ 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/sources_non_forked/syntastic/syntax_checkers/javascript/gjslint.vim b/sources_non_forked/syntastic/syntax_checkers/javascript/gjslint.vim
new file mode 100644
index 00000000..1704ac27
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/javascript/gjslint.vim
@@ -0,0 +1,45 @@
+"============================================================================
+"File: gjslint.vim
+"Description: Javascript syntax checker - using gjslint
+"Maintainer: Martin Grenfell
+"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_gjslint_checker")
+ finish
+endif
+let g:loaded_syntastic_javascript_gjslint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_javascript_gjslint_GetLocList() dict
+ call syntastic#log#deprecationWarn('javascript_gjslint_conf', 'javascript_gjslint_args')
+
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '--nosummary --unix_mode --nodebug_indentation --nobeep' })
+
+ let errorformat =
+ \ "%f:%l:(New Error -%\\?\%n) %m," .
+ \ "%f:%l:(-%\\?%n) %m," .
+ \ "%-G1 files checked," .
+ \ " no errors found.," .
+ \ "%-G%.%#"
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+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/sources_non_forked/syntastic/syntax_checkers/javascript/jscs.vim b/sources_non_forked/syntastic/syntax_checkers/javascript/jscs.vim
new file mode 100644
index 00000000..c5017522
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/javascript/jscs.vim
@@ -0,0 +1,44 @@
+"============================================================================
+"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'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style',
+ \ 'preprocess': 'checkstyle',
+ \ 'returns': [0, 2] })
+
+ call self.setWantSort(1)
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/javascript/jshint.vim b/sources_non_forked/syntastic/syntax_checkers/javascript/jshint.vim
new file mode 100644
index 00000000..69706c0a
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/javascript/jshint.vim
@@ -0,0 +1,59 @@
+"============================================================================
+"File: jshint.vim
+"Description: Javascript syntax checker - using jshint
+"Maintainer: Martin Grenfell
+"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_jshint_checker')
+ finish
+endif
+let g:loaded_syntastic_javascript_jshint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_javascript_jshint_IsAvailable() dict
+ call syntastic#log#deprecationWarn('jshint_exec', 'javascript_jshint_exec')
+ if !executable(self.getExec())
+ return 0
+ endif
+ let s:jshint_version = syntastic#util#getVersion(self.getExecEscaped() . ' --version')
+ return syntastic#util#versionIsAtLeast(s:jshint_version, [1])
+endfunction
+
+function! SyntaxCheckers_javascript_jshint_GetLocList() dict
+ call syntastic#log#deprecationWarn('javascript_jshint_conf', 'javascript_jshint_args',
+ \ "'--config ' . syntastic#util#shexpand(OLD_VAR)")
+
+ if !exists('s:jshint_new')
+ let s:jshint_new = syntastic#util#versionIsAtLeast(s:jshint_version, [1, 1])
+ endif
+
+ let makeprg = self.makeprgBuild({ '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'
+
+ call self.setWantSort(1)
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ '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/sources_non_forked/syntastic/syntax_checkers/javascript/jsl.vim b/sources_non_forked/syntastic/syntax_checkers/javascript/jsl.vim
new file mode 100644
index 00000000..8f4148d6
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/javascript/jsl.vim
@@ -0,0 +1,48 @@
+"============================================================================
+"File: jsl.vim
+"Description: Javascript syntax checker - using jsl
+"Maintainer: Martin Grenfell
+"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_jsl_checker")
+ finish
+endif
+let g:loaded_syntastic_javascript_jsl_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_javascript_jsl_GetLocList() dict
+ call syntastic#log#deprecationWarn('javascript_jsl_conf', 'javascript_jsl_args',
+ \ "'-conf ' . syntastic#util#shexpand(OLD_VAR)")
+
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '-nologo -nofilelisting -nosummary -nocontext -process' })
+
+ let errorformat =
+ \ '%W%f(%l): lint warning: %m,'.
+ \ '%-Z%p^,'.
+ \ '%W%f(%l): warning: %m,'.
+ \ '%-Z%p^,'.
+ \ '%E%f(%l): SyntaxError: %m,'.
+ \ '%-Z%p^,'.
+ \ '%-G'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+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/sources_non_forked/syntastic/syntax_checkers/javascript/jslint.vim b/sources_non_forked/syntastic/syntax_checkers/javascript/jslint.vim
new file mode 100644
index 00000000..63bb4101
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/javascript/jslint.vim
@@ -0,0 +1,51 @@
+"============================================================================
+"File: jslint.vim
+"Description: Javascript syntax checker - using jslint
+"Maintainer: Martin Grenfell
+"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.
+"
+"Tested with jslint 0.1.4.
+"============================================================================
+if exists("g:loaded_syntastic_javascript_jslint_checker")
+ finish
+endif
+
+let g:loaded_syntastic_javascript_jslint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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 term
+endfunction
+
+function! SyntaxCheckers_javascript_jslint_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args': '--white --nomen --regexp --plusplus --bitwise --newcap --sloppy --vars' })
+
+ let errorformat =
+ \ '%E %##%\d%\+ %m,'.
+ \ '%-Z%.%#Line %l\, Pos %c,'.
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")} })
+endfunction
+
+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/sources_non_forked/syntastic/syntax_checkers/javascript/jsxhint.vim b/sources_non_forked/syntastic/syntax_checkers/javascript/jsxhint.vim
new file mode 100644
index 00000000..21ba6a04
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/javascript/jsxhint.vim
@@ -0,0 +1,47 @@
+"============================================================================
+"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
+ 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/sources_non_forked/syntastic/syntax_checkers/json/jsonlint.vim b/sources_non_forked/syntastic/syntax_checkers/json/jsonlint.vim
new file mode 100644
index 00000000..2b9ec451
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/json/jsonlint.vim
@@ -0,0 +1,43 @@
+"============================================================================
+"File: jsonlint.vim
+"Description: JSON syntax checker - using jsonlint
+"Maintainer: Miller Medeiros
+"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_json_jsonlint_checker")
+ finish
+endif
+let g:loaded_syntastic_json_jsonlint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_json_jsonlint_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'post_args_after': '--compact' })
+
+ let errorformat =
+ \ '%ELine %l:%c,'.
+ \ '%Z\\s%#Reason: %m,'.
+ \ '%C%.%#,'.
+ \ '%f: line %l\, col %c\, %m,'.
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr('')} })
+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/sources_non_forked/syntastic/syntax_checkers/json/jsonval.vim b/sources_non_forked/syntastic/syntax_checkers/json/jsonval.vim
new file mode 100644
index 00000000..16e30091
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/json/jsonval.vim
@@ -0,0 +1,41 @@
+"============================================================================
+"File: jsonval.vim
+"Description: JSON syntax checker - using jsonval
+"Maintainer: Miller Medeiros
+"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_json_jsonval_checker")
+ finish
+endif
+let g:loaded_syntastic_json_jsonval_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_json_jsonval_GetLocList() dict
+ " based on https://gist.github.com/1196345
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat =
+ \ '%E%f:\ %m\ at\ line\ %l,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr('')} })
+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/sources_non_forked/syntastic/syntax_checkers/less/less-lint.coffee b/sources_non_forked/syntastic/syntax_checkers/less/less-lint.coffee
new file mode 100644
index 00000000..0b05e4a7
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/less/less-lint.coffee
@@ -0,0 +1,41 @@
+#!/usr/bin/env node
+
+fs = require 'fs'
+less = require 'less'
+args = process.argv.slice(1)
+options = {}
+
+args = args.filter (arg) ->
+ match = arg.match(/^-I(.+)$/)
+ if match
+ options.paths.push(match[1]);
+ return false
+
+ match = arg.match(/^--?([a-z][\-0-9a-z]*)(?:=([^\s]+))?$/i)
+ if match
+ arg = match[1]
+ else
+ return arg
+
+ switch arg
+ when 'strict-imports' then options.strictImports = true
+ when 'include-path'
+ options.paths = match[2].split(if os.type().match(/Windows/) then ';' else ':')
+ .map (p) ->
+ if p
+ return path.resolve(process.cwd(), p)
+ when 'O0' then options.optimization = 0
+ when 'O1' then options.optimization = 1
+ when 'O2' then options.optimization = 2
+
+options.filename = args[1]
+
+parser = new(less.Parser) options
+
+fs.readFile(options.filename, 'utf-8', (err,data) ->
+ parser.parse(data, (err, tree) ->
+ if err
+ less.writeError err
+ process.exit(1)
+ )
+)
diff --git a/sources_non_forked/syntastic/syntax_checkers/less/less-lint.js b/sources_non_forked/syntastic/syntax_checkers/less/less-lint.js
new file mode 100644
index 00000000..5abc653c
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/less/less-lint.js
@@ -0,0 +1,57 @@
+// Generated by CoffeeScript 1.3.3
+(function() {
+ var args, fs, less, options, parser;
+
+ fs = require('fs');
+
+ less = require('less');
+
+ args = process.argv.slice(1);
+
+ options = {};
+
+ args = args.filter(function(arg) {
+ var match;
+ match = arg.match(/^-I(.+)$/);
+ if (match) {
+ options.paths.push(match[1]);
+ return false;
+ }
+ match = arg.match(/^--?([a-z][\-0-9a-z]*)(?:=([^\s]+))?$/i);
+ if (match) {
+ arg = match[1];
+ } else {
+ return arg;
+ }
+ switch (arg) {
+ case 'strict-imports':
+ return options.strictImports = true;
+ case 'include-path':
+ return options.paths = match[2].split(os.type().match(/Windows/) ? ';' : ':').map(function(p) {
+ if (p) {
+ return path.resolve(process.cwd(), p);
+ }
+ });
+ case 'O0':
+ return options.optimization = 0;
+ case 'O1':
+ return options.optimization = 1;
+ case 'O2':
+ return options.optimization = 2;
+ }
+ });
+
+ options.filename = args[1];
+
+ parser = new less.Parser(options);
+
+ fs.readFile(options.filename, 'utf-8', function(err, data) {
+ return parser.parse(data, function(err, tree) {
+ if (err) {
+ less.writeError(err);
+ return process.exit(1);
+ }
+ });
+ });
+
+}).call(this);
diff --git a/sources_non_forked/syntastic/syntax_checkers/less/lessc.vim b/sources_non_forked/syntastic/syntax_checkers/less/lessc.vim
new file mode 100644
index 00000000..9b5efa96
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/less/lessc.vim
@@ -0,0 +1,71 @@
+"============================================================================
+"File: less.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Julien Blanchard
+"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.
+"
+"============================================================================
+
+" To send additional options to less use the variable g:syntastic_less_options.
+" The default is
+" let g:syntastic_less_options = "--no-color"
+"
+" To use less-lint instead of less set the variable
+" g:syntastic_less_use_less_lint.
+
+if exists("g:loaded_syntastic_less_lessc_checker")
+ finish
+endif
+let g:loaded_syntastic_less_lessc_checker = 1
+
+if !exists("g:syntastic_less_options")
+ let g:syntastic_less_options = ""
+endif
+
+if !exists("g:syntastic_less_use_less_lint")
+ let g:syntastic_less_use_less_lint = 0
+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() dict
+ return g:syntastic_less_use_less_lint ? executable('node') : executable(self.getExec())
+endfunction
+
+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,
+ \ 'args_after': '--no-color',
+ \ 'tail': '> ' . syntastic#util#DevNull() })
+
+ let errorformat =
+ \ '%m in %f on line %l\, column %c:,' .
+ \ '%m in %f:%l:%c,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr(""), 'text': "Syntax error"} })
+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/sources_non_forked/syntastic/syntax_checkers/less/recess.vim b/sources_non_forked/syntastic/syntax_checkers/less/recess.vim
new file mode 100644
index 00000000..92944189
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/less/recess.vim
@@ -0,0 +1,44 @@
+"============================================================================
+"File: recess.vim
+"Description: Syntax checking plugin for syntastic.vim using `recess`
+" (http://twitter.github.io/recess/).
+"Maintainer: Tim Carry
+"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_less_recess_checker')
+ finish
+endif
+let g:loaded_syntastic_less_recess_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_less_recess_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'post_args_after': '--format=compact --stripColors' })
+
+ let errorformat =
+ \ '%E%m in %f,' .
+ \ '%Z %#%l.%.%#,' .
+ \ '%f:%l:%m,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'less',
+ \ 'name': 'recess'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/lex/flex.vim b/sources_non_forked/syntastic/syntax_checkers/lex/flex.vim
new file mode 100644
index 00000000..b8bc6483
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/limbo/limbo.vim b/sources_non_forked/syntastic/syntax_checkers/limbo/limbo.vim
new file mode 100644
index 00000000..b501e3c9
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/lisp/clisp.vim b/sources_non_forked/syntastic/syntax_checkers/lisp/clisp.vim
new file mode 100644
index 00000000..5e726a92
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/lisp/clisp.vim
@@ -0,0 +1,49 @@
+"============================================================================
+"File: lisp.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Karl Yngve Lervåg
+"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_lisp_clisp_checker")
+ finish
+endif
+let g:loaded_syntastic_lisp_clisp_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_lisp_clisp_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '-q',
+ \ 'fname_before': '-c' })
+
+ let errorformat =
+ \ '%-G;%.%#,' .
+ \ '%W%>WARNING:%.%# line %l : %m,' .
+ \ '%Z %#%m,' .
+ \ '%W%>WARNING:%.%# lines %l%\%.%\%.%\d%\+ : %m,' .
+ \ '%Z %#%m,' .
+ \ '%E%>The following functions were %m,' .
+ \ '%Z %m,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr('')} })
+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/sources_non_forked/syntastic/syntax_checkers/llvm/llvm.vim b/sources_non_forked/syntastic/syntax_checkers/llvm/llvm.vim
new file mode 100644
index 00000000..c65a1672
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/llvm/llvm.vim
@@ -0,0 +1,39 @@
+"============================================================================
+"File: llvm.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Andrew Kelley
+"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_llvm_llvm_checker")
+ finish
+endif
+let g:loaded_syntastic_llvm_llvm_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_llvm_llvm_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': syntastic#c#NullOutput() })
+
+ let errorformat = 'llc: %f:%l:%c: %trror: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'llvm',
+ \ 'name': 'llvm',
+ \ 'exec': 'llc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/lua/luac.vim b/sources_non_forked/syntastic/syntax_checkers/lua/luac.vim
new file mode 100644
index 00000000..012f1490
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/lua/luac.vim
@@ -0,0 +1,65 @@
+"============================================================================
+"File: lua.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Gregor Uhlenheuer
+"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_lua_luac_checker")
+ finish
+endif
+let g:loaded_syntastic_lua_luac_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_lua_luac_GetHighlightRegex(pos)
+ let result = ''
+ 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'
+ else
+ 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() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-p' })
+
+ let errorformat = 'luac: %#%f:%l: %m'
+
+ return SyntasticMake({
+ \ '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/sources_non_forked/syntastic/syntax_checkers/matlab/mlint.vim b/sources_non_forked/syntastic/syntax_checkers/matlab/mlint.vim
new file mode 100644
index 00000000..1b15eeac
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/matlab/mlint.vim
@@ -0,0 +1,41 @@
+"============================================================================
+"File: matlab.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Jason Graham
+"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_matlab_mlint_checker")
+ finish
+endif
+let g:loaded_syntastic_matlab_mlint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_matlab_mlint_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-id $*' })
+
+ let errorformat =
+ \ 'L %l (C %c): %*[a-zA-Z0-9]: %m,'.
+ \ 'L %l (C %c-%*[0-9]): %*[a-zA-Z0-9]: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")} })
+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/sources_non_forked/syntastic/syntax_checkers/nasm/nasm.vim b/sources_non_forked/syntastic/syntax_checkers/nasm/nasm.vim
new file mode 100644
index 00000000..65bf9aa9
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/nasm/nasm.vim
@@ -0,0 +1,41 @@
+"============================================================================
+"File: nasm.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Håvard Pettersson
+"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_nasm_nasm_checker")
+ finish
+endif
+let g:loaded_syntastic_nasm_nasm_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/nroff/mandoc.vim b/sources_non_forked/syntastic/syntax_checkers/nroff/mandoc.vim
new file mode 100644
index 00000000..28085d54
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/nroff/mandoc.vim
@@ -0,0 +1,41 @@
+"============================================================================
+"File: mandoc.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_nroff_mandoc_checker")
+ finish
+endif
+let g:loaded_syntastic_nroff_mandoc_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_nroff_mandoc_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-Tlint' })
+
+ let errorformat =
+ \ '%E%f:%l:%c: %tRROR: %m,' .
+ \ '%W%f:%l:%c: %tARNING: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 2, 3, 4] })
+endfunction
+
+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/sources_non_forked/syntastic/syntax_checkers/objc/gcc.vim b/sources_non_forked/syntastic/syntax_checkers/objc/gcc.vim
new file mode 100644
index 00000000..09c3daa2
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/objc/gcc.vim
@@ -0,0 +1,58 @@
+"============================================================================
+"File: objc.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Gregor Uhlenheuer
+"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_gcc_checker')
+ finish
+endif
+let g:loaded_syntastic_objc_gcc_checker = 1
+
+if !exists('g:syntastic_objc_compiler_options')
+ let g:syntastic_objc_compiler_options = '-std=gnu99'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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() dict
+ return syntastic#c#GetLocList('objc', 'gcc', {
+ \ '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',
+ \ 'main_flags': '-x objective-c -fsyntax-only',
+ \ 'header_flags': '-x objective-c-header -lobjc',
+ \ 'header_names': '\m\.h$' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'objc',
+ \ 'name': 'gcc' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/objc/oclint.vim b/sources_non_forked/syntastic/syntax_checkers/objc/oclint.vim
new file mode 100644
index 00000000..a415c41f
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/objc/oclint.vim
@@ -0,0 +1,31 @@
+"============================================================================
+"File: oclint.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: "UnCO" Lin
+"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_oclint_config_file' allows you to define a file
+" that contains additional compiler arguments like include directories or
+" CFLAGS. The file is expected to contain one option per line. If none is
+" given the filename defaults to '.syntastic_oclint_config':
+"
+" let g:syntastic_oclint_config_file = '.config'
+
+if exists("g:loaded_syntastic_objc_oclint_checker")
+ finish
+endif
+let g:loaded_syntastic_objc_oclint_checker = 1
+
+runtime! syntax_checkers/c/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'objc',
+ \ 'name': 'oclint',
+ \ 'redirect': 'c/oclint'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/objcpp/gcc.vim b/sources_non_forked/syntastic/syntax_checkers/objcpp/gcc.vim
new file mode 100644
index 00000000..853d6657
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/objcpp/gcc.vim
@@ -0,0 +1,58 @@
+"============================================================================
+"File: objcpp.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Gregor Uhlenheuer
+"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_gcc_checker')
+ finish
+endif
+let g:loaded_syntastic_objcpp_gcc_checker = 1
+
+if !exists('g:syntastic_objcpp_compiler_options')
+ let g:syntastic_objcpp_compiler_options = '-std=gnu99'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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() dict
+ return syntastic#c#GetLocList('objcpp', 'gcc', {
+ \ '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',
+ \ 'main_flags': '-x objective-c++ -fsyntax-only',
+ \ 'header_flags': '-x objective-c++-header -lobjc',
+ \ 'header_names': '\m\.h$' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'objcpp',
+ \ 'name': 'gcc' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/objcpp/oclint.vim b/sources_non_forked/syntastic/syntax_checkers/objcpp/oclint.vim
new file mode 100644
index 00000000..84f71d29
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/objcpp/oclint.vim
@@ -0,0 +1,31 @@
+"============================================================================
+"File: oclint.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: "UnCO" Lin
+"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_oclint_config_file' allows you to define a file
+" that contains additional compiler arguments like include directories or
+" CFLAGS. The file is expected to contain one option per line. If none is
+" given the filename defaults to '.syntastic_oclint_config':
+"
+" let g:syntastic_oclint_config_file = '.config'
+
+if exists("g:loaded_syntastic_objcpp_oclint_checker")
+ finish
+endif
+let g:loaded_syntastic_objcpp_oclint_checker = 1
+
+runtime! syntax_checkers/c/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'objcpp',
+ \ 'name': 'oclint',
+ \ 'redirect': 'c/oclint'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/ocaml/camlp4o.vim b/sources_non_forked/syntastic/syntax_checkers/ocaml/camlp4o.vim
new file mode 100644
index 00000000..d9f57001
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/ocaml/camlp4o.vim
@@ -0,0 +1,156 @@
+"============================================================================
+"File: ocaml.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Török Edwin
+"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 more reliable way to check for a single .ml file is to use ocamlc.
+" You can do that setting this in your .vimrc:
+"
+" let g:syntastic_ocaml_use_ocamlc = 1
+" It's possible to use ocamlc in conjuction with Jane Street's Core. In order
+" to do that, you have to specify this in your .vimrc:
+"
+" let g:syntastic_ocaml_use_janestreet_core = 1
+" let g:syntastic_ocaml_janestreet_core_dir =
+"
+" Where path is the path to your core installation (usually a collection of
+" .cmx and .cmxa files).
+"
+"
+" By default the camlp4o preprocessor is used to check the syntax of .ml, and .mli files,
+" ocamllex is used to check .mll files and menhir is used to check .mly files.
+" The output is all redirected to /dev/null, nothing is written to the disk.
+"
+" If your source code needs camlp4r then you can define this in your .vimrc:
+"
+" let g:syntastic_ocaml_camlp4r = 1
+"
+" If you used some syntax extensions, or you want to also typecheck the source
+" code, then you can define this:
+"
+" let g:syntastic_ocaml_use_ocamlbuild = 1
+"
+" This will run ocamlbuild .inferred.mli, so it will write to your _build
+" directory (and possibly rebuild your myocamlbuild.ml plugin), only enable this
+" if you are ok with that.
+"
+" If you are using syntax extensions / external libraries and have a properly
+" set up _tags (and myocamlbuild.ml file) then it should just work
+" to enable this flag and get syntax / type checks through syntastic.
+"
+" For best results your current directory should be the project root
+" (same situation if you want useful output from :make).
+
+if exists("g:loaded_syntastic_ocaml_camlp4o_checker")
+ finish
+endif
+let g:loaded_syntastic_ocaml_camlp4o_checker = 1
+
+if exists('g:syntastic_ocaml_camlp4r') && g:syntastic_ocaml_camlp4r != 0
+ let s:ocamlpp="camlp4r"
+else
+ let s:ocamlpp="camlp4o"
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_ocaml_camlp4o_IsAvailable() dict
+ return executable(s:ocamlpp)
+endfunction
+
+if !exists('g:syntastic_ocaml_use_ocamlc') || !executable('ocamlc')
+ let g:syntastic_ocaml_use_ocamlc = 0
+endif
+
+if !exists('g:syntastic_ocaml_use_janestreet_core')
+ let g:syntastic_ocaml_use_ocamlc = 0
+endif
+
+if !exists('g:syntastic_ocaml_use_ocamlbuild') || !executable("ocamlbuild")
+ let g:syntastic_ocaml_use_ocamlbuild = 0
+endif
+
+function! SyntaxCheckers_ocaml_camlp4o_GetLocList() dict
+ let makeprg = s:GetMakeprg()
+ if makeprg == ""
+ return []
+ endif
+
+ let errorformat =
+ \ '%AFile "%f"\, line %l\, characters %c-%*\d:,'.
+ \ '%AFile "%f"\, line %l\, characters %c-%*\d (end at line %*\d\, character %*\d):,'.
+ \ '%AFile "%f"\, line %l\, character %c:,'.
+ \ '%AFile "%f"\, line %l\, character %c:%m,'.
+ \ '%-GPreprocessing error %.%#,'.
+ \ '%-GCommand exited %.%#,'.
+ \ '%C%tarning %n: %m,'.
+ \ '%C%m,'.
+ \ '%-G+%.%#'
+
+ return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
+
+function! s:GetMakeprg()
+ if g:syntastic_ocaml_use_ocamlc
+ return s:GetOcamlcMakeprg()
+ endif
+
+ if g:syntastic_ocaml_use_ocamlbuild && isdirectory('_build')
+ return s:GetOcamlBuildMakeprg()
+ endif
+
+ return s:GetOtherMakeprg()
+endfunction
+
+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)
+ let build_cmd .= " -c " . syntastic#util#shexpand('%')
+ return build_cmd
+ else
+ return "ocamlc -c " . syntastic#util#shexpand('%')
+ endif
+endfunction
+
+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()
+ "TODO: give this function a better name?
+ "
+ "TODO: should use throw/catch instead of returning an empty makeprg
+
+ let extension = expand('%:e')
+ let makeprg = ""
+
+ 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 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('%')
+ endif
+
+ return makeprg
+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/sources_non_forked/syntastic/syntax_checkers/perl/perl.vim b/sources_non_forked/syntastic/syntax_checkers/perl/perl.vim
new file mode 100644
index 00000000..553c55a5
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/perl/perl.vim
@@ -0,0 +1,109 @@
+"============================================================================
+"File: perl.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Anthony Carapetis ,
+" Eric Harmon
+"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.
+"
+"============================================================================
+"
+" 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')
+" The perl interpreter to use.
+"
+" - g:syntastic_perl_lib_path (list; default: [])
+" List of include directories to be added to the perl command line. Example:
+"
+" let g:syntastic_perl_lib_path = [ './lib', './lib/auto' ]
+
+if exists('g:loaded_syntastic_perl_perl_checker')
+ finish
+endif
+let g:loaded_syntastic_perl_perl_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_perl_perl_IsAvailable() dict
+ if !exists('g:syntastic_perl_perl_exec') && exists('g:syntastic_perl_interpreter')
+ let g:syntastic_perl_perl_exec = g:syntastic_perl_interpreter
+ endif
+
+ " don't call executable() here, to allow things like
+ " let g:syntastic_perl_interpreter='/usr/bin/env perl'
+ silent! call system(self.getExecEscaped() . ' -e ' . syntastic#util#shescape('exit(0)'))
+ return v:shell_error == 0
+endfunction
+
+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
+
+ if type(g:syntastic_perl_lib_path) == type('')
+ call syntastic#log#oneTimeWarn('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
+ let shebang = syntastic#util#parseShebang()
+ let extra = join(map(includes, '"-I" . v:val')) .
+ \ (index(shebang['args'], '-T') >= 0 ? ' -T' : '') .
+ \ (index(shebang['args'], '-t') >= 0 ? ' -t' : '')
+ let errorformat = '%f:%l:%m'
+
+ let makeprg = self.makeprgBuild({ 'args_before': '-c -X ' . extra })
+
+ let errors = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'preprocess': 'perl',
+ \ 'defaults': {'type': 'E'} })
+ if !empty(errors)
+ return errors
+ endif
+
+ let makeprg = self.makeprgBuild({ 'args_before': '-c -Mwarnings ' . extra })
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ '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/sources_non_forked/syntastic/syntax_checkers/perl/perlcritic.vim b/sources_non_forked/syntastic/syntax_checkers/perl/perlcritic.vim
new file mode 100644
index 00000000..cd010945
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/perl/perlcritic.vim
@@ -0,0 +1,66 @@
+"============================================================================
+"File: perlcritic.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.
+"
+"============================================================================
+"
+" For details about perlcritic see:
+"
+" - http://perlcritic.tigris.org/
+" - https://metacpan.org/module/Perl::Critic
+"
+" Checker options:
+"
+" - g:syntastic_perl_perlcritic_thres (integer; default: 5)
+" error threshold: policy violations with a severity above this
+" value are highlighted as errors, the others are warnings
+"
+" - g:syntastic_perl_perlcritic_args (string; default: empty)
+" command line options to pass to perlcritic
+
+if exists("g:loaded_syntastic_perl_perlcritic_checker")
+ finish
+endif
+let g:loaded_syntastic_perl_perlcritic_checker = 1
+
+if !exists('g:syntastic_perl_perlcritic_thres')
+ let g:syntastic_perl_perlcritic_thres = 5
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 2],
+ \ 'subtype': 'Style' })
+
+ " change error types according to the prescribed threshold
+ for e in loclist
+ let e['type'] = e['type'] < g:syntastic_perl_perlcritic_thres ? 'W' : 'E'
+ endfor
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/perl/podchecker.vim b/sources_non_forked/syntastic/syntax_checkers/perl/podchecker.vim
new file mode 100644
index 00000000..5ffc7365
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/perl/podchecker.vim
@@ -0,0 +1,25 @@
+"============================================================================
+"File: podchecker.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_perl_podchecker_checker")
+ finish
+endif
+let g:loaded_syntastic_perl_podchecker_checker = 1
+
+runtime! syntax_checkers/pod/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'perl',
+ \ 'name': 'podchecker',
+ \ 'redirect': 'pod/podchecker'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/php/php.vim b/sources_non_forked/syntastic/syntax_checkers/php/php.vim
new file mode 100644
index 00000000..23c1db9e
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/php/php.vim
@@ -0,0 +1,51 @@
+"============================================================================
+"File: php.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_php_php_checker")
+ finish
+endif
+let g:loaded_syntastic_php_php_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_php_php_GetHighlightRegex(item)
+ let term = matchstr(a:item['text'], "\\munexpected '\\zs[^']\\+\\ze'")
+ return term != '' ? '\V' . escape(term, '\') : ''
+endfunction
+
+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%.%#,'.
+ \ 'Parse error: %#syntax %trror\, %m in %f on line %l,'.
+ \ 'Parse %trror: %m in %f on line %l,'.
+ \ 'Fatal %trror: %m in %f on line %l,'.
+ \ '%-G\s%#,'.
+ \ '%-GErrors parsing %.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/php/phpcs.vim b/sources_non_forked/syntastic/syntax_checkers/php/phpcs.vim
new file mode 100644
index 00000000..e6600ac6
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/php/phpcs.vim
@@ -0,0 +1,46 @@
+"============================================================================
+"File: phpcs.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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.
+"
+"============================================================================
+"
+" 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 s:save_cpo = &cpo
+set cpo&vim
+
+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\,%v\,%t%*[a-zA-Z]\,"%m"\,%*[a-zA-Z0-9_.-]\,%*[0-9]%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'php',
+ \ 'name': 'phpcs' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/php/phpmd.vim b/sources_non_forked/syntastic/syntax_checkers/php/phpmd.vim
new file mode 100644
index 00000000..6b6022ab
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/php/phpmd.vim
@@ -0,0 +1,80 @@
+"============================================================================
+"File: phpmd.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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.
+"
+"============================================================================
+"
+" See here for details of phpmd
+" - phpmd (see http://phpmd.org)
+
+if exists("g:loaded_syntastic_php_phpmd_checker")
+ finish
+endif
+let g:loaded_syntastic_php_phpmd_checker = 1
+
+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\)')
+ if term != ''
+ return '\V'.substitute(term, '\m\C^The \S\+ \(\w\+\)\(()\)\= .*', '\1', '')
+ endif
+ let term = matchstr(a:item['text'], '\m\C^Avoid \(variables with short\|excessively long variable\) names like \S\+\.')
+ if term != ''
+ return '\V'.substitute(term, '\m\C^Avoid \(variables with short\|excessively long variable\) names like \(\S\+\)\..*', '\2', '')
+ endif
+ let term = matchstr(a:item['text'], '\m\C^Avoid using short method names like \S\+::\S\+()\.')
+ if term != ''
+ return '\V'.substitute(term, '\m\C^Avoid using short method names like \S\+::\(\S\+\)()\..*', '\1', '')
+ endif
+ let term = matchstr(a:item['text'], '\m\C^\S\+ accesses the super-global variable ')
+ if term != ''
+ return '\V'.substitute(term, '\m\C accesses the super-global variable .*$', '', '')
+ endif
+ let term = matchstr(a:item['text'], '\m\C^Constant \S\+ should be defined in uppercase')
+ if term != ''
+ return '\V'.substitute(term, '\m\C^Constant \(\S\+\) should be defined in uppercase', '\1', '')
+ endif
+ let term = matchstr(a:item['text'], "\\m\\C^The '\\S\\+()' method which returns ")
+ if term != ''
+ return '\V'.substitute(term, "\\m\\C^The '\\(\\S\\+\\()' method which returns.*", '\1', '')
+ endif
+ let term = matchstr(a:item['text'], '\m\C variable \S\+ should begin with ')
+ if term != ''
+ return '\V'.substitute(term, '\m\C.* variable \(\S\+\) should begin with .*', '\1', '')
+ endif
+ let term = matchstr(a:item['text'], "\\m\\C^Avoid unused \\(private fields\\|local variables\\|private methods\\|parameters\\) such as '\\S\\+'")
+ if term != ''
+ return '\V'.substitute(term, "\\m\\C^Avoid unused \\(private fields\\|local variables\\|private methods\\|parameters\\) such as '\\(\\S\\+\\)'.*", '\2', '')
+ endif
+ return ''
+endfunction
+
+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'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype' : 'Style' })
+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/sources_non_forked/syntastic/syntax_checkers/po/msgfmt.vim b/sources_non_forked/syntastic/syntax_checkers/po/msgfmt.vim
new file mode 100644
index 00000000..254aa91a
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/pod/podchecker.vim b/sources_non_forked/syntastic/syntax_checkers/pod/podchecker.vim
new file mode 100644
index 00000000..34a37e55
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/pod/podchecker.vim
@@ -0,0 +1,51 @@
+"============================================================================
+"File: podchecker.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_pod_podchecker_checker")
+ finish
+endif
+let g:loaded_syntastic_pod_podchecker_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_pod_podchecker_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat =
+ \ '%W%[%#]%[%#]%[%#] WARNING: %m at line %l in file %f,' .
+ \ '%W%[%#]%[%#]%[%#] WARNING: %m at line EOF in file %f,' .
+ \ '%E%[%#]%[%#]%[%#] ERROR: %m at line %l in file %f,' .
+ \ '%E%[%#]%[%#]%[%#] ERROR: %m at line EOF in file %f'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 1, 2] })
+
+ for e in loclist
+ if e['valid'] && e['lnum'] == 0
+ let e['lnum'] = str2nr(matchstr(e['text'], '\m\
+"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_puppet_puppet_checker")
+ finish
+endif
+let g:loaded_syntastic_puppet_puppet_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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'
+ else
+ let args = '--color=false --parseonly'
+ endif
+
+ let makeprg = self.makeprgBuild({ 'args_before': args })
+
+ let errorformat =
+ \ '%-Gerr: Try ''puppet help parser validate'' for usage,' .
+ \ '%-GError: Try ''puppet help parser validate'' for usage,' .
+ \ '%Eerr: Could not parse for environment %*[a-z]: %m at %f:%l,' .
+ \ '%EError: Could not parse for environment %*[a-z]: %m at %f:%l'
+
+ 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/sources_non_forked/syntastic/syntax_checkers/puppet/puppetlint.vim b/sources_non_forked/syntastic/syntax_checkers/puppet/puppetlint.vim
new file mode 100644
index 00000000..ff4ba071
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/puppet/puppetlint.vim
@@ -0,0 +1,50 @@
+"============================================================================
+"File: puppetlint.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Eivind Uggedal
+"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_puppet_puppetlint_checker")
+ finish
+endif
+let g:loaded_syntastic_puppet_puppetlint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_puppet_puppetlint_IsAvailable() dict
+ return
+ \ executable("puppet") &&
+ \ 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() dict
+ call syntastic#log#deprecationWarn('puppet_lint_arguments', 'puppet_puppetlint_args')
+
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '--log-format "%{KIND} [%{check}] %{message} at %{fullpath}:%{linenumber}"' })
+
+ let errorformat = '%t%*[a-zA-Z] %m at %f:%l'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'puppet',
+ \ 'name': 'puppetlint',
+ \ 'exec': 'puppet-lint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/python/compile.py b/sources_non_forked/syntastic/syntax_checkers/python/compile.py
new file mode 100755
index 00000000..32f1413d
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/python/flake8.vim b/sources_non_forked/syntastic/syntax_checkers/python/flake8.vim
new file mode 100644
index 00000000..1e4f1c9b
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/python/flake8.vim
@@ -0,0 +1,72 @@
+"============================================================================
+"File: flake8.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Authors: Sylvain Soliman
+" kstep
+"
+"============================================================================
+
+if exists("g:loaded_syntastic_python_flake8_checker")
+ finish
+endif
+let g:loaded_syntastic_python_flake8_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_python_flake8_GetHighlightRegex(item)
+ return SyntaxCheckers_python_pyflakes_GetHighlightRegex(a:item)
+endfunction
+
+function! SyntaxCheckers_python_flake8_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat =
+ \ '%E%f:%l: could not compile,%-Z%p^,' .
+ \ '%A%f:%l:%c: %t%n %m,' .
+ \ '%A%f:%l: %t%n %m,' .
+ \ '%-G%.%#'
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env })
+
+ 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'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/python/frosted.vim b/sources_non_forked/syntastic/syntax_checkers/python/frosted.vim
new file mode 100644
index 00000000..e1284e44
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/python/frosted.vim
@@ -0,0 +1,63 @@
+"============================================================================
+"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 env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env,
+ \ '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/sources_non_forked/syntastic/syntax_checkers/python/pep257.vim b/sources_non_forked/syntastic/syntax_checkers/python/pep257.vim
new file mode 100644
index 00000000..d4b16575
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/python/pep257.vim
@@ -0,0 +1,62 @@
+"============================================================================
+"File: pep257.vim
+"Description: Docstring style checking plugin for syntastic.vim
+"============================================================================
+"
+" For details about pep257 see: https://github.com/GreenSteam/pep257
+
+if exists('g:loaded_syntastic_python_pep257_checker')
+ finish
+endif
+let g:loaded_syntastic_python_pep257_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_python_pep257_GetLocList() dict
+ if !exists('s:pep257_new')
+ let s:pep257_new = syntastic#util#versionIsAtLeast(syntastic#util#getVersion(
+ \ self.getExecEscaped() . ' --version'), [0, 3])
+ endif
+
+ let makeprg = self.makeprgBuild({})
+
+ if s:pep257_new
+ let errorformat =
+ \ '%E%f:%l %.%#:,' .
+ \ '%+C %m'
+ else
+ let errorformat =
+ \ '%E%f:%l:%c%\%.%\%.%\d%\+:%\d%\+: %m,' .
+ \ '%E%f:%l:%c: %m,' .
+ \ '%+C %m'
+ endif
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env,
+ \ 'subtype': 'Style',
+ \ 'preprocess': 'killEmpty',
+ \ 'postprocess': ['compressWhitespace'] })
+
+ if s:pep257_new == 0
+ " byte offsets rather than column numbers
+ for e in loclist
+ let e['col'] = get(e, 'col', 0) + 1
+ endfor
+ endif
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/python/pep8.vim b/sources_non_forked/syntastic/syntax_checkers/python/pep8.vim
new file mode 100644
index 00000000..0f35c276
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/python/pep8.vim
@@ -0,0 +1,50 @@
+"============================================================================
+"File: pep8.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.
+"
+"============================================================================
+"
+" For details about pep8 see: https://github.com/jcrocholl/pep8
+
+if exists("g:loaded_syntastic_python_pep8_checker")
+ finish
+endif
+let g:loaded_syntastic_python_pep8_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_python_pep8_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat = '%f:%l:%c: %m'
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env,
+ \ 'subtype': 'Style' })
+
+ for e in loclist
+ let e['type'] = e['text'] =~? '^W' ? 'W' : 'E'
+ endfor
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/python/py3kwarn.vim b/sources_non_forked/syntastic/syntax_checkers/python/py3kwarn.vim
new file mode 100644
index 00000000..69a3060f
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/python/py3kwarn.vim
@@ -0,0 +1,36 @@
+"============================================================================
+"File: py3kwarn.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Authors: Liam Curry
+"
+"============================================================================
+
+if exists("g:loaded_syntastic_python_py3kwarn_checker")
+ finish
+endif
+let g:loaded_syntastic_python_py3kwarn_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_python_py3kwarn_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat = '%W%f:%l:%c: %m'
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env })
+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/sources_non_forked/syntastic/syntax_checkers/python/pyflakes.vim b/sources_non_forked/syntastic/syntax_checkers/python/pyflakes.vim
new file mode 100644
index 00000000..530a275c
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/python/pyflakes.vim
@@ -0,0 +1,74 @@
+"============================================================================
+"File: pyflakes.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Authors: Martin Grenfell
+" kstep
+" Parantapa Bhattacharya
+"
+"============================================================================
+
+if exists("g:loaded_syntastic_python_pyflakes_checker")
+ finish
+endif
+let g:loaded_syntastic_python_pyflakes_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_python_pyflakes_GetHighlightRegex(i)
+ 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 term = matchstr(a:i['text'], '\m^.\{-}"\zs.\{-1,}\ze"')
+ if term != ''
+ return '\V\<' . escape(term, '\') . '\>'
+ endif
+
+ let term = matchstr(a:i['text'], '\m^.\{-}''\zs.\{-1,}\ze''')
+ if term != ''
+ return '\V\<' . escape(term, '\') . '\>'
+ endif
+ endif
+ return ''
+endfunction
+
+function! SyntaxCheckers_python_pyflakes_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat =
+ \ '%E%f:%l: could not compile,'.
+ \ '%-Z%p^,'.
+ \ '%E%f:%l:%c: %m,'.
+ \ '%E%f:%l: %m,'.
+ \ '%-G%.%#'
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env,
+ \ '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/sources_non_forked/syntastic/syntax_checkers/python/pylama.vim b/sources_non_forked/syntastic/syntax_checkers/python/pylama.vim
new file mode 100644
index 00000000..01c0ab62
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/python/pylama.vim
@@ -0,0 +1,72 @@
+"============================================================================
+"File: pylama.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_pylama_checker')
+ finish
+endif
+let g:loaded_syntastic_python_pylama_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_python_pylama_GetHighlightRegex(item)
+ return SyntaxCheckers_python_pyflakes_GetHighlightRegex(a:item)
+endfunction
+
+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 =
+ \ '%-GWARNING:pylama:%.%#,' .
+ \ '%A%f:%l:%c: %m'
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env })
+
+ " adjust for weirdness in each checker
+ 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 e['text'] =~# '\v\[pylint\]$'
+ if has_key(e, 'vcol')
+ let e['vcol'] = 0
+ endif
+ endif
+ if e['text'] =~# '\v\[%(mccabe|pep257|pep8)\]$'
+ let e['subtype'] = 'Style'
+ endif
+ endfor
+
+ call self.setWantSort(1)
+
+ return loclist
+endfunction
+
+runtime! syntax_checkers/python/pyflakes.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'python',
+ \ 'name': 'pylama' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/python/pylint.vim b/sources_non_forked/syntastic/syntax_checkers/python/pylint.vim
new file mode 100644
index 00000000..88dff422
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/python/pylint.vim
@@ -0,0 +1,90 @@
+"============================================================================
+"File: pylint.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Author: Parantapa Bhattacharya
+"
+"============================================================================
+
+if exists("g:loaded_syntastic_python_pylint_checker")
+ finish
+endif
+let g:loaded_syntastic_python_pylint_checker = 1
+
+let s:pylint_new = -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() 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^%.%#,' .
+ \ '%-G%.%#'
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env,
+ \ 'returns': range(32) })
+
+ for e in loclist
+ if !s:pylint_new
+ let e['type'] = e['text'][1]
+ endif
+
+ if e['type'] =~? '\m^[EF]'
+ let e['type'] = 'E'
+ elseif e['type'] =~? '\m^[CRW]'
+ let e['type'] = 'W'
+ else
+ let e['valid'] = 0
+ endif
+
+ let e['col'] += 1
+ let e['vcol'] = 0
+ endfor
+
+ call self.setWantSort(1)
+
+ return loclist
+endfunction
+
+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".
+ " On NixOS, that would be ".pylint-wrapped 0.26.0".
+ " On Arch Linux it's "pylint2 1.1.0".
+ " Have you guys considered switching to creative writing yet? ;)
+ let pylint_version = filter(split(system(exe . ' --version'), '\m, \=\|\n'), 'v:val =~# ''\m^\.\=pylint[-0-9]*\>''')[0]
+ let pylint_version = substitute(pylint_version, '\v^\S+\s+', '', '')
+ let ret = syntastic#util#versionIsAtLeast(syntastic#util#parseVersion(pylint_version), [1])
+ 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
+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/sources_non_forked/syntastic/syntax_checkers/python/python.vim b/sources_non_forked/syntastic/syntax_checkers/python/python.vim
new file mode 100644
index 00000000..5023ee6c
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/python/python.vim
@@ -0,0 +1,49 @@
+"============================================================================
+"File: python.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_python_checker")
+ finish
+endif
+let g:loaded_syntastic_python_python_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+let s:compiler = expand(':p:h') . syntastic#util#Slash() . 'compile.py'
+
+function! SyntaxCheckers_python_python_IsAvailable() dict
+ return executable(self.getExec()) &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(self.getExecEscaped() . ' --version'), [2, 6])
+endfunction
+
+function! SyntaxCheckers_python_python_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'exe': [self.getExec(), s:compiler] })
+
+ let errorformat = '%E%f:%l:%c: %m'
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' }
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env,
+ \ '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/sources_non_forked/syntastic/syntax_checkers/r/lint.vim b/sources_non_forked/syntastic/syntax_checkers/r/lint.vim
new file mode 100644
index 00000000..9112905b
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/r/lint.vim
@@ -0,0 +1,81 @@
+"============================================================================
+"File: lint.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_r_lint_checker")
+ finish
+endif
+let g:loaded_syntastic_r_lint_checker = 1
+
+if !exists('g:syntastic_r_lint_styles')
+ let g:syntastic_r_lint_styles = 'lint.style'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_r_lint_GetHighlightRegex(item)
+ let term = matchstr(a:item['text'], '\m`\zs[^`]\+\ze`')
+ if term == ''
+ let term = matchstr(a:item['text'], "\\m'\\zs[^']\\+\\ze'")
+ endif
+ return term != '' ? '\V' . escape(term, '\') : ''
+endfunction
+
+function! SyntaxCheckers_r_lint_IsAvailable() dict
+ if !executable(self.getExec())
+ return 0
+ endif
+ call system(self.getExecEscaped() . ' --slave --restore --no-save -e ' . syntastic#util#shescape('library(lint)'))
+ return v:shell_error == 0
+endfunction
+
+function! SyntaxCheckers_r_lint_GetLocList() dict
+ let setwd = syntastic#util#isRunningWindows() ? 'setwd("' . escape(getcwd(), '"\') . '"); ' : ''
+ let setwd = 'setwd("' . escape(getcwd(), '"\') . '"); '
+ let makeprg = self.getExecEscaped() . ' --slave --restore --no-save' .
+ \ ' -e ' . syntastic#util#shescape(setwd . 'library(lint); ' .
+ \ 'try(lint(commandArgs(TRUE), ' . g:syntastic_r_lint_styles . '))') .
+ \ ' --args ' . syntastic#util#shexpand('%')
+
+ let errorformat =
+ \ '%t:%f:%l:%v: %m,' .
+ \ '%t:%f:%l: %m'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style',
+ \ 'preprocess': 'rparse',
+ \ 'returns': [0] })
+
+ for e in loclist
+ if e['type'] == 'F'
+ " parse error
+ let e['type'] = 'E'
+ call remove(e, 'subtype')
+ endif
+ endfor
+
+ call self.setWantSort(1)
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'r',
+ \ 'name': 'lint',
+ \ 'exec': 'R' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/r/svtools.vim b/sources_non_forked/syntastic/syntax_checkers/r/svtools.vim
new file mode 100644
index 00000000..ec924c38
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/r/svtools.vim
@@ -0,0 +1,78 @@
+"============================================================================
+"File: svtools.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.
+"
+"============================================================================
+"
+" Security:
+"
+" This checker runs the code 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_r_svtools_checker to 1 in
+" your vimrc to enable this checker:
+"
+" let g:syntastic_enable_r_svtools_checker = 1
+
+if exists("g:loaded_syntastic_r_svtools_checker")
+ finish
+endif
+let g:loaded_syntastic_r_svtools_checker = 1
+
+if !exists('g:syntastic_r_svtools_styles')
+ let g:syntastic_r_svtools_styles = 'lint.style'
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_r_svtools_GetHighlightRegex(item)
+ let term = matchstr(a:item['text'], "\\m'\\zs[^']\\+\\ze'")
+ return term != '' ? '\V' . escape(term, '\') : ''
+endfunction
+
+function! SyntaxCheckers_r_svtools_IsAvailable() dict
+ if !executable(self.getExec())
+ return 0
+ endif
+ call system(self.getExecEscaped() . ' --slave --restore --no-save -e ' . syntastic#util#shescape('library(svTools)'))
+ return v:shell_error == 0
+endfunction
+
+function! SyntaxCheckers_r_svtools_GetLocList() dict
+ if !exists('g:syntastic_enable_r_svtools_checker') || !g:syntastic_enable_r_svtools_checker
+ call syntastic#log#error('checker r/svtools: checks disabled for security reasons; set g:syntastic_enable_r_svtools_checker to 1 to override')
+ return []
+ endif
+
+ let setwd = syntastic#util#isRunningWindows() ? 'setwd("' . escape(getcwd(), '"\') . '"); ' : ''
+ let makeprg = self.getExecEscaped() . ' --slave --restore --no-save' .
+ \ ' -e ' . syntastic#util#shescape(setwd . 'library(svTools); ' .
+ \ 'try(lint(commandArgs(TRUE), filename = commandArgs(TRUE), type = "flat", sep = ":"))') .
+ \ ' --args ' . syntastic#util#shexpand('%')
+
+ let errorformat =
+ \ '%trror:%f:%\s%#%l:%\s%#%v:%m,' .
+ \ '%tarning:%f:%\s%#%l:%\s%#%v:%m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0] })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'r',
+ \ 'name': 'svtools',
+ \ 'exec': 'R' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/racket/code-ayatollah.vim b/sources_non_forked/syntastic/syntax_checkers/racket/code-ayatollah.vim
new file mode 100644
index 00000000..ffb02f7b
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/racket/code-ayatollah.vim
@@ -0,0 +1,60 @@
+"============================================================================
+"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' })
+
+ for e in loclist
+ let e['col'] += 1
+ endfor
+
+ call self.setWantSort(1)
+
+ 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/sources_non_forked/syntastic/syntax_checkers/racket/racket.vim b/sources_non_forked/syntastic/syntax_checkers/racket/racket.vim
new file mode 100644
index 00000000..71615205
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/rst/rst2pseudoxml.vim b/sources_non_forked/syntastic/syntax_checkers/rst/rst2pseudoxml.vim
new file mode 100644
index 00000000..e5fb0a1f
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/rst/rst2pseudoxml.vim
@@ -0,0 +1,62 @@
+"============================================================================
+"File: rst.vim
+"Description: Syntax checking plugin for docutil's reStructuredText files
+"Maintainer: James Rowe
+"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.
+"
+"============================================================================
+
+" We use rst2pseudoxml.py, as it is ever so marginally faster than the other
+" rst2${x} tools in docutils.
+
+if exists("g:loaded_syntastic_rst_rst2pseudoxml_checker")
+ finish
+endif
+let g:loaded_syntastic_rst_rst2pseudoxml_checker = 1
+
+let s:rst2pseudoxml = executable('rst2pseudoxml.py') ? 'rst2pseudoxml.py' : 'rst2pseudoxml'
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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,'.
+ \ '%f:%l: (%tARNING/2) %m,'.
+ \ '%f:%l: (%tRROR/3) %m,'.
+ \ '%f:%l: (%tEVERE/4) %m,'.
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+
+ 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': 'rst2pseudoxml',
+ \ 'exec': s:rst2pseudoxml })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/rst/rstcheck.vim b/sources_non_forked/syntastic/syntax_checkers/rst/rstcheck.vim
new file mode 100644
index 00000000..5c831490
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/ruby/jruby.vim b/sources_non_forked/syntastic/syntax_checkers/ruby/jruby.vim
new file mode 100644
index 00000000..bf57b091
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/ruby/jruby.vim
@@ -0,0 +1,50 @@
+"============================================================================
+"File: jruby.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Leonid Shevtsov
+"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_ruby_jruby_checker")
+ finish
+endif
+let g:loaded_syntastic_ruby_jruby_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_ruby_jruby_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': (syntastic#util#isRunningWindows() ? '-T1' : ''),
+ \ 'args_after': '-W1 -c' })
+
+ let errorformat =
+ \ '%-GSyntax OK for %f,'.
+ \ '%ESyntaxError in %f:%l: syntax error\, %m,'.
+ \ '%Z%p^,'.
+ \ '%W%f:%l: warning: %m,'.
+ \ '%Z%p^,'.
+ \ '%W%f:%l: %m,'.
+ \ '%-C%.%#'
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'RUBYOPT': '' }
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env })
+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/sources_non_forked/syntastic/syntax_checkers/ruby/macruby.vim b/sources_non_forked/syntastic/syntax_checkers/ruby/macruby.vim
new file mode 100644
index 00000000..54c8365f
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/ruby/macruby.vim
@@ -0,0 +1,47 @@
+"============================================================================
+"File: macruby.vim
+"Description: Syntax checking plugin for syntastic.vim
+"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_ruby_macruby_checker")
+ finish
+endif
+let g:loaded_syntastic_ruby_macruby_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_ruby_macruby_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-W1 -c' })
+
+ let errorformat =
+ \ '%-GSyntax OK,'.
+ \ '%E%f:%l: syntax error\, %m,'.
+ \ '%Z%p^,'.
+ \ '%W%f:%l: warning: %m,'.
+ \ '%Z%p^,'.
+ \ '%W%f:%l: %m,'.
+ \ '%-C%.%#'
+
+ let env = { 'RUBYOPT': '' }
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env })
+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/sources_non_forked/syntastic/syntax_checkers/ruby/mri.vim b/sources_non_forked/syntastic/syntax_checkers/ruby/mri.vim
new file mode 100644
index 00000000..e55c493d
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/ruby/mri.vim
@@ -0,0 +1,79 @@
+"============================================================================
+"File: mri.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_ruby_mri_checker")
+ finish
+endif
+let g:loaded_syntastic_ruby_mri_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_ruby_mri_IsAvailable() dict
+ if !exists('g:syntastic_ruby_mri_exec') && exists('g:syntastic_ruby_exec')
+ let g:syntastic_ruby_mri_exec = g:syntastic_ruby_exec
+ endif
+ return executable(self.getExec())
+endfunction
+
+function! SyntaxCheckers_ruby_mri_GetHighlightRegex(i)
+ if stridx(a:i['text'], 'assigned but unused variable') >= 0
+ let term = split(a:i['text'], ' - ')[1]
+ return '\V\<' . escape(term, '\') . '\>'
+ endif
+
+ return ''
+endfunction
+
+function! SyntaxCheckers_ruby_mri_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-w -T1 -c' })
+
+ "this is a hack to filter out a repeated useless warning in rspec files
+ "containing lines like
+ "
+ " foo.should == 'bar'
+ "
+ "Which always generate the warning below. Note that ruby >= 1.9.3 includes
+ "the word "possibly" in the warning
+ let errorformat = '%-G%.%#warning: %\(possibly %\)%\?useless use of == in void context,'
+
+ " filter out lines starting with ...
+ " long lines are truncated and wrapped in ... %p then returns the wrong
+ " column offset
+ let errorformat .= '%-G%\%.%\%.%\%.%.%#,'
+
+ let errorformat .=
+ \ '%-GSyntax OK,'.
+ \ '%E%f:%l: syntax error\, %m,'.
+ \ '%Z%p^,'.
+ \ '%W%f:%l: warning: %m,'.
+ \ '%Z%p^,'.
+ \ '%W%f:%l: %m,'.
+ \ '%-C%.%#'
+
+ let env = syntastic#util#isRunningWindows() ? {} : { 'RUBYOPT': '' }
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'env': env })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'ruby',
+ \ 'name': 'mri',
+ \ 'exec': 'ruby'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/ruby/rubocop.vim b/sources_non_forked/syntastic/syntax_checkers/ruby/rubocop.vim
new file mode 100644
index 00000000..9177c563
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/ruby/rubocop.vim
@@ -0,0 +1,59 @@
+"============================================================================
+"File: rubocop.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Recai Oktaş
+"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.
+"
+"============================================================================
+"
+" In order to use rubocop with the default ruby checker (mri):
+" let g:syntastic_ruby_checkers = ['mri', 'rubocop']
+
+if exists("g:loaded_syntastic_ruby_rubocop_checker")
+ finish
+endif
+let g:loaded_syntastic_ruby_rubocop_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_ruby_rubocop_IsAvailable() dict
+ return
+ \ executable(self.getExec()) &&
+ \ syntastic#util#versionIsAtLeast(syntastic#util#getVersion(self.getExecEscaped() . ' --version'), [0, 9, 0])
+endfunction
+
+function! SyntaxCheckers_ruby_rubocop_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--format emacs --silent' })
+
+ let errorformat = '%f:%l:%c: %t: %m'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style'})
+
+ " convert rubocop severities to error types recognized by syntastic
+ 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
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/ruby/rubylint.vim b/sources_non_forked/syntastic/syntax_checkers/ruby/rubylint.vim
new file mode 100644
index 00000000..07f0d4f0
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/ruby/rubylint.vim
@@ -0,0 +1,44 @@
+"============================================================================
+"File: rubylint.vim
+"Description: Checks Ruby source code using ruby-lint
+"Maintainer: Yorick Peterse
+"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_ruby_rubylint_checker")
+ finish
+endif
+
+let g:loaded_syntastic_ruby_rubylint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_ruby_rubylint_GetLocList() dict
+ if !exists('s:rubylint_new')
+ let s:rubylint_new = syntastic#util#versionIsAtLeast(syntastic#util#getVersion(
+ \ self.getExecEscaped() . ' --version'), [2])
+ endif
+ let makeprg = self.makeprgBuild({ 'args': (s:rubylint_new ? '' : 'analyze ') . '--presenter=syntastic' })
+
+ let errorformat = '%f:%t:%l:%c: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'ruby',
+ \ 'name': 'rubylint',
+ \ 'exec': 'ruby-lint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/sass/sass.vim b/sources_non_forked/syntastic/syntax_checkers/sass/sass.vim
new file mode 100644
index 00000000..a515fe5f
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/sass/sass.vim
@@ -0,0 +1,80 @@
+"============================================================================
+"File: sass.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_sass_sass_checker")
+ finish
+endif
+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
+let s:sass_cache_location = tempname()
+lockvar s:sass_cache_location
+
+"By default do not check partials as unknown variables are a syntax error
+if !exists("g:syntastic_sass_check_partials")
+ let g:syntastic_sass_check_partials = 0
+endif
+
+"use compass imports if available
+let s:imports = ""
+if executable("compass")
+ let s:imports = "--compass"
+endif
+
+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 = self.makeprgBuild({
+ \ 'args_before': '--cache-location ' . s:sass_cache_location . ' ' . s:imports . ' --check' })
+
+ let errorformat =
+ \ '%ESyntax %trror: %m,' .
+ \ '%+C %.%#,' .
+ \ '%C on line %l of %f\, %.%#,' .
+ \ '%C on line %l of %f,' .
+ \ '%-G %\+from line %.%#,' .
+ \ '%-G %\+Use --trace for backtrace.,' .
+ \ '%W%>DEPRECATION WARNING on line %l of %f:,' .
+ \ '%+C%> %.%#,' .
+ \ '%W%>WARNING: on line %l of %f:,' .
+ \ '%+C%> %.%#,' .
+ \ '%W%>WARNING on line %l of %f: %m,' .
+ \ '%+C%> %.%#,' .
+ \ '%W%>WARNING on line %l of %f:,' .
+ \ '%Z%m,' .
+ \ '%W%>WARNING: %m,' .
+ \ '%C on line %l of %f\, %.%#,' .
+ \ '%C on line %l of %f,' .
+ \ '%-G %\+from line %.%#,' .
+ \ 'Syntax %trror on line %l: %m,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'postprocess': ['compressWhitespace'] })
+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/sources_non_forked/syntastic/syntax_checkers/sass/sassc.vim b/sources_non_forked/syntastic/syntax_checkers/sass/sassc.vim
new file mode 100644
index 00000000..731d1789
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/sass/sassc.vim
@@ -0,0 +1,38 @@
+"============================================================================
+"File: sassc.vim
+"Description: Syntax checking plugin for syntastic
+"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_sass_sassc_checker")
+ finish
+endif
+let g:loaded_syntastic_sass_sassc_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_sass_sassc_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'fname_after': syntastic#util#DevNull() })
+
+ let errorformat = '%f:%l: %trror: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'sass',
+ \ 'name': 'sassc'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/scala/fsc.vim b/sources_non_forked/syntastic/syntax_checkers/scala/fsc.vim
new file mode 100644
index 00000000..6f1fcf6d
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/scala/fsc.vim
@@ -0,0 +1,48 @@
+"============================================================================
+"File: fsc.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Gregor Uhlenheuer
+"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_scala_fsc_checker')
+ finish
+endif
+let g:loaded_syntastic_scala_fsc_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_scala_fsc_GetLocList() dict
+ call syntastic#log#deprecationWarn('scala_options', 'scala_fsc_args')
+
+ " fsc has some serious problems with the
+ " working directory changing after being started
+ " that's why we better pass an absolute path
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '-Ystop-after:parser',
+ \ 'fname': syntastic#util#shexpand('%:p') })
+
+ let errorformat =
+ \ '%E%f:%l: %trror: %m,' .
+ \ '%Z%p^,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/scala/scalac.vim b/sources_non_forked/syntastic/syntax_checkers/scala/scalac.vim
new file mode 100644
index 00000000..0d0c15aa
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/scala/scalac.vim
@@ -0,0 +1,43 @@
+"============================================================================
+"File: scala.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Rickey Visinski
+"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_scala_scalac_checker")
+ finish
+endif
+let g:loaded_syntastic_scala_scalac_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_scala_scalac_GetLocList() dict
+ call syntastic#log#deprecationWarn('scala_options', 'scala_scalac_args')
+
+ let makeprg = self.makeprgBuild({ 'args_after': '-Ystop-after:parser' })
+
+ let errorformat =
+ \ '%E%f:%l: %trror: %m,' .
+ \ '%Z%p^,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/scss/sass.vim b/sources_non_forked/syntastic/syntax_checkers/scss/sass.vim
new file mode 100644
index 00000000..0f837ca5
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/scss/sass.vim
@@ -0,0 +1,25 @@
+"============================================================================
+"File: scss.vim
+"Description: scss syntax checking plugin for syntastic
+"Maintainer: Martin Grenfell
+"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_sass_checker")
+ finish
+endif
+let g:loaded_syntastic_scss_sass_checker = 1
+
+runtime! syntax_checkers/sass/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'scss',
+ \ 'name': 'sass',
+ \ 'redirect': 'sass/sass'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/scss/sassc.vim b/sources_non_forked/syntastic/syntax_checkers/scss/sassc.vim
new file mode 100644
index 00000000..75fdc2aa
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/scss/sassc.vim
@@ -0,0 +1,25 @@
+"============================================================================
+"File: sassc.vim
+"Description: Syntax checking plugin for syntastic
+"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_scss_sassc_checker")
+ finish
+endif
+let g:loaded_syntastic_scss_sassc_checker = 1
+
+runtime! syntax_checkers/sass/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'scss',
+ \ 'name': 'sassc',
+ \ 'redirect': 'sass/sassc'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/scss/scss_lint.vim b/sources_non_forked/syntastic/syntax_checkers/scss/scss_lint.vim
new file mode 100644
index 00000000..2f971dce
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/sh/checkbashisms.vim b/sources_non_forked/syntastic/syntax_checkers/sh/checkbashisms.vim
new file mode 100644
index 00000000..42751cf9
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/sh/checkbashisms.vim
@@ -0,0 +1,42 @@
+"============================================================================
+"File: checkbashisms.vim
+"Description: Shell script syntax/style checking plugin for syntastic.vim
+"Notes: checkbashisms.pl can be downloaded from
+" http://debian.inode.at/debian/pool/main/d/devscripts/
+" as part of the devscripts package.
+"============================================================================
+
+if exists("g:loaded_syntastic_sh_checkbashisms_checker")
+ finish
+endif
+let g:loaded_syntastic_sh_checkbashisms_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_sh_checkbashisms_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args': '-fx' })
+
+ let errorformat =
+ \ '%-Gscript %f is already a bash script; skipping,' .
+ \ '%Eerror: %f: %m\, opened in line %l,' .
+ \ '%Eerror: %f: %m,' .
+ \ '%Ecannot open script %f for reading: %m,' .
+ \ '%Wscript %f %m,%C%.# lines,' .
+ \ '%Wpossible bashism in %f line %l (%m):,%C%.%#,%Z.%#,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ '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/sources_non_forked/syntastic/syntax_checkers/sh/sh.vim b/sources_non_forked/syntastic/syntax_checkers/sh/sh.vim
new file mode 100644
index 00000000..d736f296
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/sh/sh.vim
@@ -0,0 +1,88 @@
+"============================================================================
+"File: sh.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Gregor Uhlenheuer
+"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_sh_sh_checker")
+ finish
+endif
+let g:loaded_syntastic_sh_sh_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_sh_sh_IsAvailable() dict
+ return s:IsShellValid()
+endfunction
+
+function! SyntaxCheckers_sh_sh_GetLocList() dict
+ if s:GetShell() ==# 'zsh'
+ return s:ForwardToZshChecker()
+ endif
+
+ if !s:IsShellValid()
+ return []
+ endif
+
+ let makeprg = self.makeprgBuild({
+ \ 'exe': s:GetShell(),
+ \ 'args_after': '-n' })
+
+ let errorformat = '%f: line %l: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+function! s:GetShell()
+ if !exists('b:shell') || b:shell == ''
+ let b:shell = ''
+ let shebang = syntastic#util#parseShebang()['exe']
+ if shebang != ''
+ if shebang[-strlen('bash'):-1] ==# 'bash'
+ let b:shell = 'bash'
+ elseif shebang[-strlen('zsh'):-1] ==# 'zsh'
+ let b:shell = 'zsh'
+ elseif shebang[-strlen('sh'):-1] ==# 'sh'
+ let b:shell = 'sh'
+ endif
+ endif
+ " try to use env variable in case no shebang could be found
+ if b:shell == ''
+ let b:shell = fnamemodify(expand('$SHELL'), ':t')
+ endif
+ endif
+ return b:shell
+endfunction
+
+function! s:IsShellValid()
+ let shell = s:GetShell()
+ return shell != '' && executable(shell)
+endfunction
+
+function! s:ForwardToZshChecker()
+ let registry = g:SyntasticRegistry.Instance()
+ let zsh_checkers = registry.getCheckersAvailable('zsh', ['zsh'])
+ if !empty(zsh_checkers)
+ return zsh_checkers[0].getLocListRaw()
+ else
+ return []
+ endif
+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/sources_non_forked/syntastic/syntax_checkers/sh/shellcheck.vim b/sources_non_forked/syntastic/syntax_checkers/sh/shellcheck.vim
new file mode 100644
index 00000000..de69683c
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/sh/shellcheck.vim
@@ -0,0 +1,44 @@
+"============================================================================
+"File: shellcheck.vim
+"Description: Shell script syntax/style checking plugin for syntastic.vim
+"============================================================================
+
+if exists("g:loaded_syntastic_sh_shellcheck_checker")
+ finish
+endif
+let g:loaded_syntastic_sh_shellcheck_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_sh_shellcheck_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-f gcc' })
+
+ let errorformat =
+ \ '%f:%l:%c: %trror: %m,' .
+ \ '%f:%l:%c: %tarning: %m,' .
+ \ '%f:%l:%c: %tote: %m'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 1] })
+
+ for e in loclist
+ if e['type'] ==? 'n'
+ let e['type'] = 'w'
+ let e['subtype'] = 'Style'
+ endif
+ endfor
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/slim/slimrb.vim b/sources_non_forked/syntastic/syntax_checkers/slim/slimrb.vim
new file mode 100644
index 00000000..8cc2bfc0
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/slim/slimrb.vim
@@ -0,0 +1,55 @@
+"============================================================================
+"File: slim.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_slim_slimrb_checker")
+ finish
+endif
+let g:loaded_syntastic_slim_slimrb_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+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
+
+ let makeprg = self.makeprgBuild({ 'args_after': '-c' })
+
+ if s:slimrb_new
+ let errorformat =
+ \ '%C\ %#%f\, Line %l\, Column %c,'.
+ \ '%-G\ %.%#,'.
+ \ '%ESlim::Parser::SyntaxError: %m,'.
+ \ '%+C%.%#'
+ else
+ let errorformat =
+ \ '%C\ %#%f\, Line %l,'.
+ \ '%-G\ %.%#,'.
+ \ '%ESlim::Parser::SyntaxError: %m,'.
+ \ '%+C%.%#'
+ endif
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/tcl/nagelfar.vim b/sources_non_forked/syntastic/syntax_checkers/tcl/nagelfar.vim
new file mode 100644
index 00000000..0797690e
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/tcl/nagelfar.vim
@@ -0,0 +1,43 @@
+"============================================================================
+"File: nagelfar.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: James Pickard
+"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.
+"Notes: Requires nagelfar v1.1.12 or later with support for -H option.
+" 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 s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_tcl_nagelfar_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-H' })
+
+ let errorformat =
+ \ '%I%f: %l: N %m,'.
+ \ '%f: %l: %t %m,'.
+ \ '%-GChecking file %f'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/tex/chktex.vim b/sources_non_forked/syntastic/syntax_checkers/tex/chktex.vim
new file mode 100644
index 00000000..23392360
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/tex/chktex.vim
@@ -0,0 +1,65 @@
+"============================================================================
+"File: chktex.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.
+"
+"============================================================================
+"
+" For details about ChkTeX see:
+"
+" http://baruch.ev-en.org/proj/chktex/
+"
+" Checker options:
+"
+" - g:syntastic_tex_chktex_showmsgs (boolean; default: 1)
+" whether to show informational messages (chktex option "-m");
+" by default informational messages are shown as warnings
+"
+" - g:syntastic_tex_chktex_args (string; default: empty)
+" command line options to pass to chktex
+
+if exists('g:loaded_syntastic_tex_chktex_checker')
+ finish
+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_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-q -v1' })
+
+ let errorformat =
+ \ '%EError %n in %f line %l: %m,' .
+ \ '%WWarning %n in %f line %l: %m,' .
+ \ (g:syntastic_tex_chktex_showmsgs ? '%WMessage %n in %f line %l: %m,' : '') .
+ \ '%Z%p^,' .
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'subtype': 'Style' })
+
+ call self.setWantSort(1)
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/tex/lacheck.vim b/sources_non_forked/syntastic/syntax_checkers/tex/lacheck.vim
new file mode 100644
index 00000000..0896919c
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/tex/lacheck.vim
@@ -0,0 +1,40 @@
+"============================================================================
+"File: tex.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_tex_lacheck_checker')
+ finish
+endif
+let g:loaded_syntastic_tex_lacheck_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_tex_lacheck_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat =
+ \ '%-G** %f:,' .
+ \ '%E"%f"\, line %l: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/texinfo/makeinfo.vim b/sources_non_forked/syntastic/syntax_checkers/texinfo/makeinfo.vim
new file mode 100644
index 00000000..63cae936
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/text/atdtool.vim b/sources_non_forked/syntastic/syntax_checkers/text/atdtool.vim
new file mode 100644
index 00000000..b0f32c11
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/text/atdtool.vim
@@ -0,0 +1,57 @@
+"============================================================================
+"File: atdtool.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_text_atdtool_checker")
+ finish
+endif
+let g:loaded_syntastic_text_atdtool_checker = 1
+
+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' . escape(term, '\')
+ endif
+ return term
+endfunction
+
+function! SyntaxCheckers_text_atdtool_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'tail': '2> ' . syntastic#util#DevNull() })
+
+ let errorformat =
+ \ '%W%f:%l:%c: %m,'.
+ \ '%+C suggestions:%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0],
+ \ 'subtype': 'Style' })
+
+ for e in loclist
+ let e['text'] = substitute(e['text'], '\m\n\s\+', ' | ', 'g')
+ endfor
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/text/language_check.vim b/sources_non_forked/syntastic/syntax_checkers/text/language_check.vim
new file mode 100644
index 00000000..20111468
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/twig/twiglint.vim b/sources_non_forked/syntastic/syntax_checkers/twig/twiglint.vim
new file mode 100644
index 00000000..36e264bf
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/twig/twiglint.vim
@@ -0,0 +1,41 @@
+"============================================================================
+"File: twig.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Alexander
+"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_twig_twiglint_checker")
+ finish
+endif
+let g:loaded_syntastic_twig_twiglint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_twig_twiglint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_before': 'lint',
+ \ 'args_after': '--format=csv' })
+
+ let errorformat = '"%f"\,%l\,%m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat})
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'twig',
+ \ 'name': 'twiglint',
+ \ 'exec': 'twig-lint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/typescript/tsc.vim b/sources_non_forked/syntastic/syntax_checkers/typescript/tsc.vim
new file mode 100644
index 00000000..d2e7349d
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/typescript/tsc.vim
@@ -0,0 +1,43 @@
+"============================================================================
+"File: typescript.vim
+"Description: TypeScript syntax checker
+"Maintainer: Bill Casarin
+"============================================================================
+
+if exists("g:loaded_syntastic_typescript_tsc_checker")
+ finish
+endif
+let g:loaded_syntastic_typescript_tsc_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_typescript_tsc_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args': '--module commonjs',
+ \ 'args_after': '--out ' . syntastic#util#DevNull() })
+
+ let errorformat =
+ \ '%E%f %#(%l\,%c): error %m,' .
+ \ '%E%f %#(%l\,%c): %m,' .
+ \ '%Eerror %m,' .
+ \ '%C%\s%\+%m'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")} })
+
+ call self.setWantSort(1)
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/typescript/tslint.vim b/sources_non_forked/syntastic/syntax_checkers/typescript/tslint.vim
new file mode 100644
index 00000000..80ca8817
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/typescript/tslint.vim
@@ -0,0 +1,46 @@
+"============================================================================
+"File: typescript/tslint.vim
+"Description: TypeScript linter
+"Maintainer: Seon-Wook Park
+"============================================================================
+
+if exists("g:loaded_syntastic_typescript_tslint_checker")
+ finish
+endif
+let g:loaded_syntastic_typescript_tslint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_typescript_tslint_GetHighlightRegex(item)
+ let term = matchstr(a:item['text'], "\\m\\s'\\zs.\\{-}\\ze'\\s")
+ return term != '' ? '\V' . escape(term, '\') : ''
+endfunction
+
+function! SyntaxCheckers_typescript_tslint_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_after': '--format verbose',
+ \ 'fname_before': '-f' })
+
+ " (comment-format) ts/app.ts[12, 36]: comment must start with lowercase letter
+ let errorformat = '%f[%l\, %c]: %m'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'preprocess': 'tslint',
+ \ 'returns': [0, 2] })
+
+ call self.setWantSort(1)
+
+ return loclist
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'typescript',
+ \ 'name': 'tslint'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/vala/valac.vim b/sources_non_forked/syntastic/syntax_checkers/vala/valac.vim
new file mode 100644
index 00000000..912e298d
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/vala/valac.vim
@@ -0,0 +1,97 @@
+"============================================================================
+"File: vala.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Konstantin Stepanov (me@kstep.me)
+"Notes: Add special comment line into your vala file starting with
+" "// modules: " and containing space delimited list of vala
+" modules, used by the file, so this script can build correct
+" --pkg arguments.
+" 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
+" may want to disable this plugin with
+" let g:syntastic_vala_check_disabled = 1 command in your .vimrc or
+" command line. Unlet this variable to set it to 0 to reenable
+" this checker.
+"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_vala_valac_checker")
+ finish
+endif
+let g:loaded_syntastic_vala_valac_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_vala_valac_GetHighlightRegex(pos)
+ let length = strlen(matchstr(a:pos['text'], '\m\^\+$'))
+ return '\%>' . (a:pos['col'] - 1) . 'c\%<' . (a:pos['col'] + length) . 'c'
+endfunction
+
+function! s:GetValaModules()
+ if exists('g:syntastic_vala_modules')
+ if type(g:syntastic_vala_modules) == type('')
+ return split(g:syntastic_vala_modules, '\s\+')
+ elseif type(g:syntastic_vala_modules) == type([])
+ return copy(g:syntastic_vala_modules)
+ else
+ echoerr 'g:syntastic_vala_modules must be either list or string: fallback to in file modules string'
+ endif
+ endif
+
+ let modules_line = search('^// modules: ', 'n')
+ let modules_str = getline(modules_line)
+ return split(strpart(modules_str, 12), '\s\+')
+endfunction
+
+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 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,'.
+ \ '%Z%m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/verilog/verilator.vim b/sources_non_forked/syntastic/syntax_checkers/verilog/verilator.vim
new file mode 100644
index 00000000..396d72e5
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/verilog/verilator.vim
@@ -0,0 +1,41 @@
+"============================================================================
+"File: verilator.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Kocha
+"============================================================================
+
+if exists("g:loaded_syntastic_verilog_verilator_checker")
+ finish
+endif
+let g:loaded_syntastic_verilog_verilator_checker = 1
+
+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() dict
+ if !exists('g:syntastic_verilog_compiler')
+ let g:syntastic_verilog_compiler = self.getExec()
+ endif
+ return executable(expand(g:syntastic_verilog_compiler))
+endfunction
+
+function! SyntaxCheckers_verilog_verilator_GetLocList() dict
+ return syntastic#c#GetLocList('verilog', 'verilator', {
+ \ 'errorformat':
+ \ '%%%trror-%\=%\w%#: %f:%l: %m,' .
+ \ '%%%tarning-%\=%\w%#: %f:%l: %m',
+ \ 'main_flags': '--lint-only' })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'verilog',
+ \ 'name': 'verilator' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/vhdl/ghdl.vim b/sources_non_forked/syntastic/syntax_checkers/vhdl/ghdl.vim
new file mode 100644
index 00000000..ff02224a
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/vhdl/ghdl.vim
@@ -0,0 +1,38 @@
+"============================================================================
+"File: ghdl.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Jan Wagner
+"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_vhdl_ghdl_checker")
+ finish
+endif
+let g:loaded_syntastic_vhdl_ghdl_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_vhdl_ghdl_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_before': '-s' })
+
+ let errorformat = '%f:%l:%c: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/vim/vimlint.vim b/sources_non_forked/syntastic/syntax_checkers/vim/vimlint.vim
new file mode 100644
index 00000000..7122de1f
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/vim/vimlint.vim
@@ -0,0 +1,99 @@
+"============================================================================
+"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 col ? '\%>' . (col - 1) . 'c\%<' . (col + strlen(term)) . 'c' : '\V' . escape(term, '\')
+ endif
+
+ return ''
+endfunction
+
+function! SyntaxCheckers_vim_vimlint_IsAvailable() dict
+ return
+ \ globpath(&runtimepath, 'autoload/vimlparser.vim') != '' &&
+ \ globpath(&runtimepath, 'autoload/vimlint.vim') != ''
+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
+ let param = {
+ \ 'output': function('s:vimlintOutput'),
+ \ 'quiet': 1,
+ \ 'EVL102': 3,
+ \ 'EVL103': 3,
+ \ 'EVL104': 3,
+ \ 'EVL105': 3,
+ \ 'EVL106': 3,
+ \ 'EVL201': 3,
+ \ 'EVL204': 3,
+ \ 'EVL205': 3 }
+
+ if exists('g:syntastic_vimlint_options')
+ if type(g:syntastic_vimlint_options) == type({})
+ let options = filter(copy(g:syntastic_vimlint_options), 'v:key =~# "\\m^EVL"')
+ call extend(param, options, 'force')
+ endif
+ endif
+
+ return vimlint#vimlint(expand('%'), param)
+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',
+ \ 'exec': 'vim' })
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/xhtml/jshint.vim b/sources_non_forked/syntastic/syntax_checkers/xhtml/jshint.vim
new file mode 100644
index 00000000..3312ccef
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/xhtml/jshint.vim
@@ -0,0 +1,25 @@
+"============================================================================
+"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
+" 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_xhtml_jshint_checker")
+ finish
+endif
+let g:loaded_syntastic_xhtml_jshint_checker = 1
+
+runtime! syntax_checkers/html/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'xhtml',
+ \ 'name': 'jshint',
+ \ 'redirect': 'html/jshint'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/xhtml/tidy.vim b/sources_non_forked/syntastic/syntax_checkers/xhtml/tidy.vim
new file mode 100644
index 00000000..a3e2d47a
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/xhtml/tidy.vim
@@ -0,0 +1,89 @@
+"============================================================================
+"File: xhtml.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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.
+"
+"============================================================================
+"
+" Checker option:
+"
+" - g:syntastic_xhtml_tidy_ignore_errors (list; default: [])
+" list of errors to ignore
+
+if exists("g:loaded_syntastic_xhtml_tidy_checker")
+ finish
+endif
+let g:loaded_syntastic_xhtml_tidy_checker = 1
+
+if !exists('g:syntastic_xhtml_tidy_ignore_errors')
+ let g:syntastic_xhtml_tidy_ignore_errors = []
+endif
+
+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',
+ \ }
+ return get(tidy_opts, &fileencoding, '-utf8')
+endfunction
+
+function! s:IgnoreError(text)
+ for i in g:syntastic_xhtml_tidy_ignore_errors
+ if stridx(a:text, i) != -1
+ return 1
+ endif
+ endfor
+ return 0
+endfunction
+
+function! SyntaxCheckers_xhtml_tidy_GetLocList() dict
+ let encopt = s:TidyEncOptByFenc()
+ let makeprg = self.makeprgBuild({ 'args_after': encopt . ' -xml -e' })
+
+ let errorformat=
+ \ '%Wline %l column %v - Warning: %m,' .
+ \ '%Eline %l column %v - Error: %m,' .
+ \ '%-G%.%#'
+
+ let loclist = SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")},
+ \ 'returns': [0, 1, 2] })
+
+ for e in loclist
+ if e['valid'] && s:IgnoreError(e['text']) == 1
+ let e['valid'] = 0
+ endif
+ endfor
+
+ return loclist
+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/sources_non_forked/syntastic/syntax_checkers/xml/plutil.vim b/sources_non_forked/syntastic/syntax_checkers/xml/plutil.vim
new file mode 100644
index 00000000..a9ad1451
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/xml/plutil.vim
@@ -0,0 +1,42 @@
+"============================================================================
+"File: plutil.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_xml_plutil_checker")
+ finish
+endif
+let g:loaded_syntastic_xml_plutil_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_xml_plutil_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ 'args_before': '-lint -s',
+ \ 'fname_before': '--' })
+
+ let errorformat =
+ \ '%E%f: %m at line %l'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 1] })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'xml',
+ \ 'name': 'plutil'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/xml/xmllint.vim b/sources_non_forked/syntastic/syntax_checkers/xml/xmllint.vim
new file mode 100644
index 00000000..3076cabb
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/xml/xmllint.vim
@@ -0,0 +1,52 @@
+"============================================================================
+"File: xml.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Sebastian Kusnier
+"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_xml_xmllint_checker")
+ finish
+endif
+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_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '--xinclude --noout --postvalid' })
+
+ let errorformat=
+ \ '%E%f:%l: error : %m,' .
+ \ '%-G%f:%l: validity error : Validation failed: no DTD found %m,' .
+ \ '%W%f:%l: warning : %m,' .
+ \ '%W%f:%l: validity warning : %m,' .
+ \ '%E%f:%l: validity error : %m,' .
+ \ '%E%f:%l: parser error : %m,' .
+ \ '%E%f:%l: %m,' .
+ \ '%-Z%p^,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'returns': [0, 1, 2, 3, 4, 5] })
+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/sources_non_forked/syntastic/syntax_checkers/xslt/xmllint.vim b/sources_non_forked/syntastic/syntax_checkers/xslt/xmllint.vim
new file mode 100644
index 00000000..e224c256
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/xslt/xmllint.vim
@@ -0,0 +1,25 @@
+"============================================================================
+"File: xslt.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Sebastian Kusnier
+"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_xslt_xmllint_checker")
+ finish
+endif
+let g:loaded_syntastic_xslt_xmllint_checker = 1
+
+runtime! syntax_checkers/xml/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'xslt',
+ \ 'name': 'xmllint',
+ \ 'redirect': 'xml/xmllint'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/yacc/bison.vim b/sources_non_forked/syntastic/syntax_checkers/yacc/bison.vim
new file mode 100644
index 00000000..8444879e
--- /dev/null
+++ b/sources_non_forked/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/sources_non_forked/syntastic/syntax_checkers/yaml/jsyaml.vim b/sources_non_forked/syntastic/syntax_checkers/yaml/jsyaml.vim
new file mode 100644
index 00000000..a0c6dba0
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/yaml/jsyaml.vim
@@ -0,0 +1,51 @@
+"============================================================================
+"File: yaml.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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: $ npm install -g js-yaml
+"
+"============================================================================
+
+if exists("g:loaded_syntastic_yaml_jsyaml_checker")
+ finish
+endif
+let g:loaded_syntastic_yaml_jsyaml_checker = 1
+
+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
+
+ let makeprg = self.makeprgBuild({ 'args_after': (s:js_yaml_new ? '' : '--compact') })
+
+ let errorformat =
+ \ 'Error on line %l\, col %c:%m,' .
+ \ 'JS-YAML: %m at line %l\, column %c:,' .
+ \ '%-G%.%#'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat,
+ \ 'defaults': {'bufnr': bufnr("")} })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'yaml',
+ \ 'name': 'jsyaml',
+ \ 'exec': 'js-yaml'})
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/yaml/yamlxs.vim b/sources_non_forked/syntastic/syntax_checkers/yaml/yamlxs.vim
new file mode 100644
index 00000000..6c12a627
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/yaml/yamlxs.vim
@@ -0,0 +1,73 @@
+"============================================================================
+"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_yaml_yamlxs_exec') && exists('g:syntastic_perl_interpreter')
+ let g:syntastic_yaml_yamlxs_exec = g:syntastic_perl_interpreter
+ endif
+
+ " don't call executable() here, to allow things like
+ " let g:syntastic_perl_interpreter='/usr/bin/env perl'
+ silent! call system(self.getExecEscaped() . ' ' . s:Modules() . ' -e ' . syntastic#util#shescape('exit(0)'))
+ return v:shell_error == 0
+endfunction
+
+function! SyntaxCheckers_yaml_yamlxs_GetLocList() dict
+ let makeprg = self.makeprgBuild({
+ \ '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:Modules()
+ if type(g:syntastic_perl_lib_path) == type('')
+ call syntastic#log#oneTimeWarn('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/sources_non_forked/syntastic/syntax_checkers/z80/z80syntaxchecker.vim b/sources_non_forked/syntastic/syntax_checkers/z80/z80syntaxchecker.vim
new file mode 100644
index 00000000..6a3998a3
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/z80/z80syntaxchecker.vim
@@ -0,0 +1,45 @@
+"============================================================================
+"File: z80.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Romain Giot
+"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.
+"
+"============================================================================
+"
+" 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.githubusercontent.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
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_z80_z80syntaxchecker_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat = '%f:%l %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+endfunction
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'z80',
+ \ '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/sources_non_forked/syntastic/syntax_checkers/zpt/zptlint.vim b/sources_non_forked/syntastic/syntax_checkers/zpt/zptlint.vim
new file mode 100644
index 00000000..6769b55b
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/zpt/zptlint.vim
@@ -0,0 +1,51 @@
+"============================================================================
+"File: zpt.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: claytron
+"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.
+"
+"============================================================================
+"
+" In order for this plugin to be useful, you will need to set up the
+" zpt filetype in your vimrc
+"
+" " set up zope page templates as the zpt filetype
+" au BufNewFile,BufRead *.pt,*.cpt,*.zpt set filetype=zpt syntax=xml
+"
+" Then install the zptlint program, found on pypi:
+" http://pypi.python.org/pypi/zptlint
+
+if exists("g:loaded_syntastic_zpt_zptlint_checker")
+ finish
+endif
+let g:loaded_syntastic_zpt_zptlint_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_zpt_zptlint_GetLocList() dict
+ let makeprg = self.makeprgBuild({})
+
+ let errorformat=
+ \ '%-P*** Error in: %f,'.
+ \ '%Z%*\s\, at line %l\, column %c,'.
+ \ '%E%*\s%m,'.
+ \ '%-Q'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat })
+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/sources_non_forked/syntastic/syntax_checkers/zsh/shellcheck.vim b/sources_non_forked/syntastic/syntax_checkers/zsh/shellcheck.vim
new file mode 100644
index 00000000..42f6fcf1
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/zsh/shellcheck.vim
@@ -0,0 +1,25 @@
+"============================================================================
+"File: shellcheck.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_zsh_shellcheck_checker")
+ finish
+endif
+let g:loaded_syntastic_zsh_shellcheck_checker = 1
+
+runtime! syntax_checkers/sh/*.vim
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+ \ 'filetype': 'zsh',
+ \ 'name': 'shellcheck',
+ \ 'redirect': 'sh/shellcheck'})
+
+" vim: set et sts=4 sw=4:
diff --git a/sources_non_forked/syntastic/syntax_checkers/zsh/zsh.vim b/sources_non_forked/syntastic/syntax_checkers/zsh/zsh.vim
new file mode 100644
index 00000000..48057631
--- /dev/null
+++ b/sources_non_forked/syntastic/syntax_checkers/zsh/zsh.vim
@@ -0,0 +1,38 @@
+"============================================================================
+"File: zsh.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Martin Grenfell
+"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_zsh_zsh_checker")
+ finish
+endif
+let g:loaded_syntastic_zsh_zsh_checker = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_zsh_zsh_GetLocList() dict
+ let makeprg = self.makeprgBuild({ 'args_after': '-n' })
+
+ let errorformat = '%f:%l: %m'
+
+ return SyntasticMake({
+ \ 'makeprg': makeprg,
+ \ 'errorformat': errorformat})
+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:
diff --git a/sources_non_forked/vim-colors-solarized/doc/tags b/sources_non_forked/vim-colors-solarized/doc/tags
deleted file mode 100644
index 3785a094..00000000
--- a/sources_non_forked/vim-colors-solarized/doc/tags
+++ /dev/null
@@ -1,27 +0,0 @@
-'solarized_bold' solarized.txt /*'solarized_bold'*
-'solarized_contrast' solarized.txt /*'solarized_contrast'*
-'solarized_degrade' solarized.txt /*'solarized_degrade'*
-'solarized_hitrail' solarized.txt /*'solarized_hitrail'*
-'solarized_italic' solarized.txt /*'solarized_italic'*
-'solarized_menu' solarized.txt /*'solarized_menu'*
-'solarized_termcolors' solarized.txt /*'solarized_termcolors'*
-'solarized_termtrans' solarized.txt /*'solarized_termtrans'*
-'solarized_underline' solarized.txt /*'solarized_underline'*
-'solarized_visibility' solarized.txt /*'solarized_visibility'*
-before solarized.txt /*before*
-solarized solarized.txt /*solarized*
-solarized-colors solarized.txt /*solarized-colors*
-solarized-colorscheme solarized.txt /*solarized-colorscheme*
-solarized-help solarized.txt /*solarized-help*
-solarized-install solarized.txt /*solarized-install*
-solarized-menu solarized.txt /*solarized-menu*
-solarized-options solarized.txt /*solarized-options*
-solarized-term solarized.txt /*solarized-term*
-solarized-togglebg solarized.txt /*solarized-togglebg*
-solarized.vim solarized.txt /*solarized.vim*
-toggle-background solarized.txt /*toggle-background*
-toggle-bg solarized.txt /*toggle-bg*
-togglebg solarized.txt /*togglebg*
-urxvt solarized.txt /*urxvt*
-vim-colors-solarized solarized.txt /*vim-colors-solarized*
-without solarized.txt /*without*
diff --git a/sources_non_forked/vim-marked b/sources_non_forked/vim-marked
deleted file mode 160000
index a7c1cba2..00000000
--- a/sources_non_forked/vim-marked
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit a7c1cba232cabd96af800f82aad21cc180a09764
diff --git a/sources_non_forked/vim-marked/README.markdown b/sources_non_forked/vim-marked/README.markdown
new file mode 100644
index 00000000..2ce98952
--- /dev/null
+++ b/sources_non_forked/vim-marked/README.markdown
@@ -0,0 +1,22 @@
+# marked.vim
+
+Open the current Markdown buffer in [Marked.app](http://markedapp.com/).
+
+## Usage
+
+This plugin adds the following commands to Markdown buffers:
+
+ :MarkedOpen[!] Open the current Markdown buffer in Marked.app.
+ Call with a bang to prevent Marked.app from stealing
+ focus from Vim.
+
+ :MarkedQuit Close the current Markdown buffer in Marked.app.
+ Quit Marked.app if no other documents are open.
+
+If you run `:MarkedOpen`, the document in Marked.app will be automatically
+closed when Vim exists, and Marked.app will quit if no other documents are
+open.
+
+## License
+
+Same as Vim itself, see `:help license`.
diff --git a/sources_non_forked/vim-marked/plugin/marked.vim b/sources_non_forked/vim-marked/plugin/marked.vim
new file mode 100644
index 00000000..1009d513
--- /dev/null
+++ b/sources_non_forked/vim-marked/plugin/marked.vim
@@ -0,0 +1,55 @@
+" marked.vim
+" Author: Joshua Priddle
+" URL: https://github.com/itspriddle/vim-marked
+" Version: 0.4.0
+" License: Same as Vim itself (see :help license)
+
+if &cp || exists("g:marked_loaded") && g:marked_loaded
+ finish
+endif
+let g:marked_loaded = 1
+let s:save_cpo = &cpo
+set cpo&vim
+
+function s:OpenMarked(background)
+ let l:filename = expand("%:p")
+ silent exe "!open -a Marked.app ".(a:background ? '-g' : '')." '".l:filename."'"
+
+ silent exe "augroup marked_autoclose_".l:filename
+ autocmd!
+ silent exe 'autocmd VimLeavePre * call s:QuitMarked("'.l:filename.'")'
+ augroup END
+ redraw!
+endfunction
+
+function s:QuitMarked(path)
+ silent exe "augroup marked_autoclose_".a:path
+ autocmd!
+ augroup END
+ silent exe "augroup! marked_autoclose_".a:path
+
+ let cmd = " -e 'try'"
+ let cmd .= " -e 'if application \"Marked\" is running then'"
+ let cmd .= " -e 'tell application \"Marked\"'"
+ let cmd .= " -e 'close (first document whose path is equal to \"".a:path."\")'"
+ let cmd .= " -e 'if count of every window is equal to 0 then'"
+ let cmd .= " -e 'quit'"
+ let cmd .= " -e 'end if'"
+ let cmd .= " -e 'end tell'"
+ let cmd .= " -e 'end if'"
+ let cmd .= " -e 'end try'"
+
+ silent exe "!osascript ".cmd
+ redraw!
+endfunction
+
+augroup marked_commands
+ autocmd!
+ autocmd FileType markdown,mkd command! -buffer -bang MarkedOpen :call s:OpenMarked(0)
+ autocmd FileType markdown,mkd command! -buffer MarkedQuit :call s:QuitMarked(expand('%:p'))
+augroup END
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim:ft=vim:fdm=marker:ts=2:sw=2:sts=2:et
diff --git a/sources_non_forked/vim-misc b/sources_non_forked/vim-misc
deleted file mode 160000
index 8551f2b9..00000000
--- a/sources_non_forked/vim-misc
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 8551f2b9dec7fd17dd5c3476d7869957185d692d
diff --git a/sources_non_forked/vim-misc/.gitignore b/sources_non_forked/vim-misc/.gitignore
new file mode 100644
index 00000000..926ccaaf
--- /dev/null
+++ b/sources_non_forked/vim-misc/.gitignore
@@ -0,0 +1 @@
+doc/tags
diff --git a/sources_non_forked/vim-misc/README.md b/sources_non_forked/vim-misc/README.md
new file mode 100644
index 00000000..2a9949b0
--- /dev/null
+++ b/sources_non_forked/vim-misc/README.md
@@ -0,0 +1,672 @@
+# Miscellaneous auto-load Vim scripts
+
+The vim-misc plug-in contains Vim scripts that are used by most of the [Vim
+plug-ins I've written] [plugins] yet don't really belong with any single one of
+the plug-ins. Basically it's an extended standard library of Vim script
+functions that I wrote during the development of my Vim profile and plug-ins.
+
+In the past these scripts were bundled with each plug-in, however that turned
+out to be a maintenance nightmare for me. That's why the miscellaneous scripts
+are now a proper plug-in with their own page on Vim Online.
+
+Because the miscellaneous scripts are no longer bundled with my Vim plug-ins,
+users are now required to install the miscellaneous scripts separately. This is
+unfortunate for users who are upgrading from a previous release that did bundle
+the miscellaneous scripts, but I don't see any way around this. Sorry!
+
+## Installation
+
+Unzip the most recent [ZIP archive] [] file inside your Vim profile
+directory (usually this is `~/.vim` on UNIX and `%USERPROFILE%\vimfiles` on
+Windows), restart Vim and execute the command `:helptags ~/.vim/doc` (use
+`:helptags ~\vimfiles\doc` instead on Windows).
+
+If you prefer you can also use [Pathogen] [], [Vundle] [] or a similar tool to
+install & update the plug-in using a local clone of the git repository.
+
+## Function documentation
+
+Below is the documentation for the functions included in the miscellaneous
+scripts. Anyone is free to use these functions in their own Vim profile and/or
+plug-ins. I care about backwards compatibility so won't break it without a good
+reason to do so.
+
+For those who are curious: The function descriptions given below were extracted
+from the source code of the miscellaneous scripts using the Python module
+`vimdoctool.py` included in [vim-tools] [].
+
+
+
+The documentation of the 80 functions below was extracted from
+15 Vim scripts on July 20, 2013 at 10:41.
+
+### Handling of special buffers
+
+The functions defined here make it easier to deal with special Vim buffers
+that contain text generated by a Vim plug-in. For example my [vim-notes
+plug-in] [vim-notes] generates several such buffers:
+
+- [:RecentNotes] [RecentNotes] lists recently modified notes
+- [:ShowTaggedNotes] [ShowTaggedNotes] lists notes grouped by tags
+- etc.
+
+Because the text in these buffers is generated, Vim shouldn't bother with
+swap files and it should never prompt the user whether to save changes to
+the generated text.
+
+[vim-notes]: http://peterodding.com/code/vim/notes/
+[RecentNotes]: http://peterodding.com/code/vim/notes/#recentnotes_command
+[ShowTaggedNotes]: http://peterodding.com/code/vim/notes/#showtaggednotes_command
+
+#### The `xolox#misc#buffer#is_empty()` function
+
+Checks if the current buffer is an empty, unchanged buffer which can be
+reused. Returns 1 if an empty buffer is found, 0 otherwise.
+
+#### The `xolox#misc#buffer#prepare()` function
+
+Open a special buffer, i.e. a buffer that will hold generated contents,
+not directly edited by the user. The buffer can be customized by passing a
+dictionary with the following key/value pairs as the first argument:
+
+- **name** (required): The base name of the buffer (i.e. the base name of
+ the file loaded in the buffer, even though it isn't really a file and
+ nothing is really 'loaded' :-)
+- **path** (required): The pathname of the buffer. May be relevant if
+ [:lcd] [lcd] or ['autochdir'] [acd] is being used.
+
+[lcd]: http://vimdoc.sourceforge.net/htmldoc/editing.html#:lcd
+[acd]: http://vimdoc.sourceforge.net/htmldoc/options.html#'autochdir'
+
+#### The `xolox#misc#buffer#lock()` function
+
+Lock a special buffer so that its contents can no longer be edited.
+
+#### The `xolox#misc#buffer#unlock()` function
+
+Unlock a special buffer so that its content can be updated.
+
+### Tab completion for user defined commands
+
+#### The `xolox#misc#complete#keywords()` function
+
+This function can be used to perform keyword completion for user defined
+Vim commands based on the contents of the current buffer. Here's an
+example of how you would use it:
+
+ :command -nargs=* -complete=customlist,xolox#misc#complete#keywords MyCmd call s:MyCmd()
+
+### String escaping functions
+
+#### The `xolox#misc#escape#pattern()` function
+
+Takes a single string argument and converts it into a [:substitute]
+[subcmd] / [substitute()] [subfun] pattern string that matches the given
+string literally.
+
+[subfun]: http://vimdoc.sourceforge.net/htmldoc/eval.html#substitute()
+[subcmd]: http://vimdoc.sourceforge.net/htmldoc/change.html#:substitute
+
+#### The `xolox#misc#escape#substitute()` function
+
+Takes a single string argument and converts it into a [:substitute]
+[subcmd] / [substitute()] [subfun] replacement string that inserts the
+given string literally.
+
+#### The `xolox#misc#escape#shell()` function
+
+Takes a single string argument and converts it into a quoted command line
+argument.
+
+I was going to add a long rant here about Vim's ['shellslash' option]
+[shellslash], but really, it won't make any difference. Let's just suffice
+to say that I have yet to encounter a single person out there who uses
+this option for its intended purpose (running a UNIX style shell on
+Microsoft Windows).
+
+[shellslash]: http://vimdoc.sourceforge.net/htmldoc/options.html#'shellslash'
+
+### Human friendly string formatting for Vim
+
+#### The `xolox#misc#format#pluralize()` function
+
+Concatenate a counter (the first argument, expected to be an integer) with
+a singular or plural label (the second and third arguments, both expected
+to be strings).
+
+#### The `xolox#misc#format#timestamp()` function
+
+Format a time stamp (a string containing a formatted floating point
+number) into a human friendly format, for example 70 seconds is phrased as
+"1 minute and 10 seconds".
+
+### List handling functions
+
+#### The `xolox#misc#list#unique()` function
+
+Remove duplicate values from the given list in-place (preserves order).
+
+#### The `xolox#misc#list#binsert()` function
+
+Performs in-place binary insertion, which depending on your use case can
+be more efficient than calling Vim's [sort()] [sort] function after each
+insertion (in cases where a single, final sort is not an option). Expects
+three arguments:
+
+1. A list
+2. A value to insert
+3. 1 (true) when case should be ignored, 0 (false) otherwise
+
+[sort]: http://vimdoc.sourceforge.net/htmldoc/eval.html#sort()
+
+### Functions to interact with the user
+
+#### The `xolox#misc#msg#info()` function
+
+Show a formatted informational message to the user.
+
+This function has the same argument handling as Vim's [printf()] []
+function with one notable difference: Any arguments which are not numbers
+or strings are coerced to strings using Vim's [string()] [] function.
+
+In the case of `xolox#misc#msg#info()`, automatic string coercion simply
+makes the function a bit easier to use.
+
+[printf()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#printf()
+[string()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#string()
+
+#### The `xolox#misc#msg#warn()` function
+
+Show a formatted warning message to the user.
+
+This function has the same argument handling as the
+`xolox#misc#msg#info()` function.
+
+#### The `xolox#misc#msg#debug()` function
+
+Show a formatted debugging message to the user, *if the user has enabled
+increased verbosity by setting Vim's ['verbose'] [] option to one
+(1) or higher*.
+
+This function has the same argument handling as the
+`xolox#misc#msg#info()` function.
+
+In the case of `xolox#misc#msg#debug()`, automatic string coercion
+provides lazy evaluation in the sense that complex data structures are
+only converted to strings when the user has enabled increased verbosity.
+
+['verbose']: http://vimdoc.sourceforge.net/htmldoc/options.html#'verbose'
+
+### Integration between Vim and its environment
+
+#### The `xolox#misc#open#file()` function
+
+Given a pathname or URL as the first argument, this opens the file with
+the program associated with the file type. So for example a text file
+might open in Vim, an `*.html` file would probably open in your web
+browser and a media file would open in a media player.
+
+This should work on Windows, Mac OS X and most Linux distributions. If
+this fails to find a file association, you can pass one or more external
+commands to try as additional arguments. For example:
+
+ :call xolox#misc#open#file('/path/to/my/file', 'firefox', 'google-chrome')
+
+This generally shouldn't be necessary but it might come in handy now and
+then.
+
+#### The `xolox#misc#open#url()` function
+
+Given a URL as the first argument, this opens the URL in your preferred or
+best available web browser:
+
+- In GUI environments a graphical web browser will open (or a new tab will
+ be created in an existing window)
+- In console Vim without a GUI environment, when you have any of `lynx`,
+ `links` or `w3m` installed it will launch a command line web browser in
+ front of Vim (temporarily suspending Vim)
+
+### Vim and plug-in option handling
+
+#### The `xolox#misc#option#get()` function
+
+Expects one or two arguments: 1. The name of a variable and 2. the default
+value if the variable does not exist.
+
+Returns the value of the variable from a buffer local variable, global
+variable or the default value, depending on which is defined.
+
+This is used by some of my Vim plug-ins for option handling, so that users
+can customize options for specific buffers.
+
+#### The `xolox#misc#option#split()` function
+
+Given a multi-value Vim option like ['runtimepath'] [rtp] this returns a
+list of strings. For example:
+
+ :echo xolox#misc#option#split(&runtimepath)
+ ['/home/peter/Projects/Vim/misc',
+ '/home/peter/Projects/Vim/colorscheme-switcher',
+ '/home/peter/Projects/Vim/easytags',
+ ...]
+
+[rtp]: http://vimdoc.sourceforge.net/htmldoc/options.html#'runtimepath'
+
+#### The `xolox#misc#option#join()` function
+
+Given a list of strings like the ones returned by
+`xolox#misc#option#split()`, this joins the strings together into a
+single value that can be used to set a Vim option.
+
+#### The `xolox#misc#option#split_tags()` function
+
+Customized version of `xolox#misc#option#split()` with specialized
+handling for Vim's ['tags' option] [tags].
+
+[tags]: http://vimdoc.sourceforge.net/htmldoc/options.html#'tags'
+
+#### The `xolox#misc#option#join_tags()` function
+
+Customized version of `xolox#misc#option#join()` with specialized
+handling for Vim's ['tags' option] [tags].
+
+#### The `xolox#misc#option#eval_tags()` function
+
+Evaluate Vim's ['tags' option] [tags] without looking at the file
+system, i.e. this will report tags files that don't exist yet. Expects
+the value of the ['tags' option] [tags] as the first argument. If the
+optional second argument is 1 (true) only the first match is returned,
+otherwise (so by default) a list with all matches is returned.
+
+### Operating system interfaces
+
+#### The `xolox#misc#os#is_mac()` function
+
+Returns 1 (true) when on Mac OS X, 0 (false) otherwise. You would expect
+this to simply check the Vim feature list, but for some obscure reason the
+`/usr/bin/vim` included in Mac OS X (verified on version 10.7.5) returns 0
+(false) in response to `has('mac')`, so we check the output of `uname`
+to avoid false negatives.
+
+#### The `xolox#misc#os#is_win()` function
+
+Returns 1 (true) when on Microsoft Windows, 0 (false) otherwise.
+
+#### The `xolox#misc#os#find_vim()` function
+
+Returns the program name of Vim as a string. On Windows and UNIX this just
+[v:progname] [] as an absolute pathname while on Mac OS X there is
+some special magic to find MacVim's executable even though it's usually
+not on the executable search path. If you want, you can override the
+value returned from this function by setting the global variable
+`g:xolox#misc#os#vim_progname`.
+
+By default the choice of console Vim vs graphical Vim is made based on
+the value of [v:progname] [], but if you have a preference you can pass
+the string `vim` or `gvim` as the first and only argument.
+
+[v:progname]: http://vimdoc.sourceforge.net/htmldoc/eval.html#v:progname
+
+#### The `xolox#misc#os#exec()` function
+
+Execute an external command (hiding the console on Microsoft Windows when
+my [vim-shell plug-in] [vim-shell] is installed).
+
+Expects a dictionary with the following key/value pairs as the first
+argument:
+
+- **command** (required): The command line to execute
+- **async** (optional): set this to 1 (true) to execute the command in the
+ background (asynchronously)
+- **stdin** (optional): a string or list of strings with the input for the
+ external command
+- **check** (optional): set this to 0 (false) to disable checking of the
+ exit code of the external command (by default an exception will be
+ raised when the command fails)
+
+Returns a dictionary with one or more of the following key/value pairs:
+
+- **command** (always available): the generated command line that was used
+ to run the external command
+- **exit_code** (only in synchronous mode): the exit status of the
+ external command (an integer, zero on success)
+- **stdout** (only in synchronous mode): the output of the command on the
+ standard output stream (a list of strings, one for each line)
+- **stderr** (only in synchronous mode): the output of the command on the
+ standard error stream (as a list of strings, one for each line)
+
+[vim-shell]: http://peterodding.com/code/vim/shell/
+
+#### The `xolox#misc#os#can_use_dll()` function
+
+If a) we're on Microsoft Windows, b) the vim-shell plug-in is installed
+and c) the compiled DLL included in vim-shell works, we can use the
+vim-shell plug-in to execute external commands! Returns 1 (true)
+if we can use the DLL, 0 (false) otherwise.
+
+### Pathname manipulation functions
+
+#### The `xolox#misc#path#which()` function
+
+Scan the executable search path (`$PATH`) for one or more external
+programs. Expects one or more string arguments with program names. Returns
+a list with the absolute pathnames of all found programs. Here's an
+example:
+
+ :echo xolox#misc#path#which('gvim', 'vim')
+ ['/usr/local/bin/gvim',
+ '/usr/bin/gvim',
+ '/usr/local/bin/vim',
+ '/usr/bin/vim']
+
+#### The `xolox#misc#path#split()` function
+
+Split a pathname (the first and only argument) into a list of pathname
+components.
+
+On Windows, pathnames starting with two slashes or backslashes are UNC
+paths where the leading slashes are significant... In this case we split
+like this:
+
+- Input: `'//server/share/directory'`
+- Result: `['//server', 'share', 'directory']`
+
+Everything except Windows is treated like UNIX until someone has a better
+suggestion :-). In this case we split like this:
+
+- Input: `'/foo/bar/baz'`
+- Result: `['/', 'foo', 'bar', 'baz']`
+
+To join a list of pathname components back into a single pathname string,
+use the `xolox#misc#path#join()` function.
+
+#### The `xolox#misc#path#join()` function
+
+Join a list of pathname components (the first and only argument) into a
+single pathname string. This is the counterpart to the
+`xolox#misc#path#split()` function and it expects a list of pathname
+components as returned by `xolox#misc#path#split()`.
+
+#### The `xolox#misc#path#directory_separator()` function
+
+Find the preferred directory separator for the platform and settings.
+
+#### The `xolox#misc#path#absolute()` function
+
+Canonicalize and resolve a pathname, *regardless of whether it exists*.
+This is intended to support string comparison to determine whether two
+pathnames point to the same directory or file.
+
+#### The `xolox#misc#path#relative()` function
+
+Make an absolute pathname (the first argument) relative to a directory
+(the second argument).
+
+#### The `xolox#misc#path#merge()` function
+
+Join a directory pathname and filename into a single pathname.
+
+#### The `xolox#misc#path#commonprefix()` function
+
+Find the common prefix of path components in a list of pathnames.
+
+#### The `xolox#misc#path#encode()` function
+
+Encode a pathname so it can be used as a filename. This uses URL encoding
+to encode special characters.
+
+#### The `xolox#misc#path#decode()` function
+
+Decode a pathname previously encoded with `xolox#misc#path#encode()`.
+
+#### The `xolox#misc#path#is_relative()` function
+
+Returns true (1) when the pathname given as the first argument is
+relative, false (0) otherwise.
+
+#### The `xolox#misc#path#tempdir()` function
+
+Create a temporary directory and return the pathname of the directory.
+
+### String handling
+
+#### The `xolox#misc#str#slug()` function
+
+Convert a string to a "slug" - something that can be safely used in
+filenames and URLs without worrying about quoting/escaping of special
+characters.
+
+#### The `xolox#misc#str#ucfirst()` function
+
+Uppercase the first character in a string (the first argument).
+
+#### The `xolox#misc#str#compact()` function
+
+Compact whitespace in a string (the first argument).
+
+#### The `xolox#misc#str#trim()` function
+
+Trim all whitespace from the start and end of a string (the first
+argument).
+
+#### The `xolox#misc#str#indent()` function
+
+Indent all lines in a multi-line string (the first argument) with a
+specific number of *space characters* (the second argument, an integer).
+
+#### The `xolox#misc#str#dedent()` function
+
+Remove common whitespace from a multi line string.
+
+### Test runner & infrastructure for Vim plug-ins
+
+The Vim auto-load script `autoload/xolox/misc/test.vim` contains
+infrastructure that can be used to run an automated Vim plug-in test suite.
+It provides a framework for running test functions, keeping track of the
+test status, making assertions and reporting test results to the user.
+
+#### The `xolox#misc#test#reset()` function
+
+Reset counters for executed tests and passed/failed assertions.
+
+#### The `xolox#misc#test#summarize()` function
+
+Print a summary of test results, to be interpreted interactively.
+
+#### The `xolox#misc#test#wrap()` function
+
+Call a function in a try/catch block and prevent exceptions from bubbling.
+The name of the function should be passed as the first and only argument;
+it should be a string containing the name of a Vim auto-load function.
+
+#### The `xolox#misc#test#passed()` function
+
+Record a test which succeeded.
+
+#### The `xolox#misc#test#failed()` function
+
+Record a test which failed.
+
+#### The `xolox#misc#test#assert_true()` function
+
+Check whether an expression is true.
+
+#### The `xolox#misc#test#assert_equals()` function
+
+Check whether two values are the same.
+
+#### The `xolox#misc#test#assert_same_type()` function
+
+Check whether two values are of the same type.
+
+### Tests for the miscellaneous Vim scripts
+
+The Vim auto-load script `autoload/xolox/misc/tests.vim` contains the
+automated test suite of the miscellaneous Vim scripts. Right now the
+coverage is not very high yet, but this will improve over time.
+
+#### The `xolox#misc#tests#run()` function
+
+Run the automated test suite of the miscellaneous Vim scripts. To be used
+interactively. Intended to be safe to execute irrespective of context.
+
+#### The `xolox#misc#tests#pattern_escaping()` function
+
+Test escaping of regular expression patterns with
+`xolox#misc#escape#pattern()`.
+
+#### The `xolox#misc#tests#substitute_escaping()` function
+
+Test escaping of substitution strings with
+`xolox#misc#escape#substitute()`.
+
+#### The `xolox#misc#tests#shell_escaping()` function
+
+Test escaping of shell arguments with `xolox#misc#escape#shell()`.
+
+#### The `xolox#misc#tests#making_a_list_unique()` function
+
+Test removing of duplicate values from lists with
+`xolox#misc#list#unique()`.
+
+#### The `xolox#misc#tests#binary_insertion()` function
+
+Test the binary insertion algorithm implemented in
+`xolox#misc#list#binsert()`.
+
+#### The `xolox#misc#tests#getting_configuration_options()` function
+
+Test getting of scoped plug-in configuration "options" with
+`xolox#misc#option#get()`.
+
+#### The `xolox#misc#tests#splitting_of_multi_valued_options()` function
+
+Test splitting of multi-valued Vim options with
+`xolox#misc#option#split()`.
+
+#### The `xolox#misc#tests#joining_of_multi_valued_options()` function
+
+Test joining of multi-valued Vim options with `xolox#misc#option#join()`.
+
+#### The `xolox#misc#tests#finding_vim_on_the_search_path()` function
+
+Test looking up Vim's executable on the search path using [v:progname] []
+with `xolox#misc#os#find_vim()`.
+
+[v:progname]: http://vimdoc.sourceforge.net/htmldoc/eval.html#v:progname
+
+#### The `xolox#misc#tests#synchronous_command_execution()` function
+
+Test basic functionality of synchronous command execution with
+`xolox#misc#os#exec()`.
+
+#### The `xolox#misc#tests#synchronous_command_execution_with_stderr()` function
+
+Test basic functionality of synchronous command execution with
+`xolox#misc#os#exec()` including the standard error stream (not available
+on Windows when vim-shell is not installed).
+
+#### The `xolox#misc#tests#synchronous_command_execution_with_raising_of_errors()` function
+
+Test raising of errors during synchronous command execution with
+`xolox#misc#os#exec()`.
+
+#### The `xolox#misc#tests#synchronous_command_execution_without_raising_errors()` function
+
+Test synchronous command execution without raising of errors with
+`xolox#misc#os#exec()`.
+
+#### The `xolox#misc#tests#asynchronous_command_execution()` function
+
+Test the basic functionality of asynchronous command execution with
+`xolox#misc#os#exec()`. This runs the external command `mkdir` and tests
+that the side effect of creating the directory takes place. This might
+seem like a peculiar choice, but it's one of the few 100% portable
+commands (Windows + UNIX) that doesn't involve input/output streams.
+
+#### The `xolox#misc#tests#string_case_transformation()` function
+
+Test string case transformation with `xolox#misc#str#ucfirst()`.
+
+#### The `xolox#misc#tests#string_whitespace_compaction()` function
+
+Test compaction of whitespace in strings with `xolox#misc#str#compact()`.
+
+#### The `xolox#misc#tests#string_whitespace_trimming()` function
+
+Test trimming of whitespace in strings with `xolox#misc#str#trim()`.
+
+#### The `xolox#misc#tests#multiline_string_dedent()` function
+
+Test dedenting of multi-line strings with `xolox#misc#str#dedent()`.
+
+#### The `xolox#misc#tests#version_string_parsing()` function
+
+Test parsing of version strings with `xolox#misc#version#parse()`.
+
+#### The `xolox#misc#tests#version_string_comparison()` function
+
+Test comparison of version strings with `xolox#misc#version#at_least()`.
+
+### Timing of long during operations
+
+#### The `xolox#misc#timer#start()` function
+
+Start a timer. This returns a list which can later be passed to
+`xolox#misc#timer#stop()`.
+
+#### The `xolox#misc#timer#stop()` function
+
+Show a formatted debugging message to the user, if the user has enabled
+increased verbosity by setting Vim's ['verbose'] [verbose] option to one
+(1) or higher.
+
+This function has the same argument handling as Vim's [printf()] [printf]
+function with one difference: At the point where you want the elapsed time
+to be embedded, you write `%s` and you pass the list returned by
+`xolox#misc#timer#start()` as an argument.
+
+[verbose]: http://vimdoc.sourceforge.net/htmldoc/options.html#'verbose'
+[printf]: http://vimdoc.sourceforge.net/htmldoc/eval.html#printf()
+
+#### The `xolox#misc#timer#force()` function
+
+Show a formatted message to the user. This function has the same argument
+handling as Vim's [printf()] [printf] function with one difference: At the
+point where you want the elapsed time to be embedded, you write `%s` and
+you pass the list returned by `xolox#misc#timer#start()` as an argument.
+
+### Version string handling
+
+#### The `xolox#misc#version#parse()` function
+
+Convert a version string to a list of integers.
+
+#### The `xolox#misc#version#at_least()` function
+
+Check whether the second version string is equal to or greater than the
+first version string. Returns 1 (true) when it is, 0 (false) otherwise.
+
+
+
+## Contact
+
+If you have questions, bug reports, suggestions, etc. the author can be
+contacted at . The latest version is available at
+ and .
+If you like the script please vote for it on [Vim Online] [].
+
+## License
+
+This software is licensed under the [MIT license] [].
+© 2013 Peter Odding <>.
+
+
+[MIT license]: http://en.wikipedia.org/wiki/MIT_License
+[Pathogen]: http://www.vim.org/scripts/script.php?script_id=2332
+[plugins]: http://peterodding.com/code/vim/
+[repository]: https://github.com/xolox/vim-misc
+[Vim Online]: http://www.vim.org/scripts/script.php?script_id=4597
+[vim-tools]: http://peterodding.com/code/vim/tools/
+[Vundle]: https://github.com/gmarik/vundle
+[ZIP archive]: http://peterodding.com/code/vim/downloads/misc.zip
diff --git a/sources_non_forked/vim-misc/addon-info.json b/sources_non_forked/vim-misc/addon-info.json
new file mode 100644
index 00000000..934bcf72
--- /dev/null
+++ b/sources_non_forked/vim-misc/addon-info.json
@@ -0,0 +1 @@
+{"vim_script_nr": 4597, "dependencies": {}, "homepage": "http://peterodding.com/code/vim/misc", "name": "vim-misc"}
\ No newline at end of file
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc.vim b/sources_non_forked/vim-misc/autoload/xolox/misc.vim
new file mode 100644
index 00000000..f7de4f38
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc.vim
@@ -0,0 +1,7 @@
+" The version of my miscellaneous scripts.
+"
+" Author: Peter Odding
+" Last Change: July 20, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+let g:xolox#misc#version = '1.8.5'
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/buffer.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/buffer.vim
new file mode 100644
index 00000000..01dca6ef
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/buffer.vim
@@ -0,0 +1,80 @@
+" Handling of special buffers
+"
+" Author: Peter Odding
+" Last Change: May 19, 2013
+" URL: http://peterodding.com/code/vim/misc/
+"
+" The functions defined here make it easier to deal with special Vim buffers
+" that contain text generated by a Vim plug-in. For example my [vim-notes
+" plug-in] [vim-notes] generates several such buffers:
+"
+" - [:RecentNotes] [RecentNotes] lists recently modified notes
+" - [:ShowTaggedNotes] [ShowTaggedNotes] lists notes grouped by tags
+" - etc.
+"
+" Because the text in these buffers is generated, Vim shouldn't bother with
+" swap files and it should never prompt the user whether to save changes to
+" the generated text.
+"
+" [vim-notes]: http://peterodding.com/code/vim/notes/
+" [RecentNotes]: http://peterodding.com/code/vim/notes/#recentnotes_command
+" [ShowTaggedNotes]: http://peterodding.com/code/vim/notes/#showtaggednotes_command
+
+function! xolox#misc#buffer#is_empty() " {{{1
+ " Checks if the current buffer is an empty, unchanged buffer which can be
+ " reused. Returns 1 if an empty buffer is found, 0 otherwise.
+ return !&modified && expand('%') == '' && line('$') <= 1 && getline(1) == ''
+endfunction
+
+function! xolox#misc#buffer#prepare(...) " {{{1
+ " Open a special buffer, i.e. a buffer that will hold generated contents,
+ " not directly edited by the user. The buffer can be customized by passing a
+ " dictionary with the following key/value pairs as the first argument:
+ "
+ " - **name** (required): The base name of the buffer (i.e. the base name of
+ " the file loaded in the buffer, even though it isn't really a file and
+ " nothing is really 'loaded' :-)
+ " - **path** (required): The pathname of the buffer. May be relevant if
+ " [:lcd] [lcd] or ['autochdir'] [acd] is being used.
+ "
+ " [lcd]: http://vimdoc.sourceforge.net/htmldoc/editing.html#:lcd
+ " [acd]: http://vimdoc.sourceforge.net/htmldoc/options.html#'autochdir'
+ if a:0 == 1 && type(a:1) == type('')
+ " Backwards compatibility with old interface.
+ let options = {'name': a:1, 'path': a:1}
+ elseif type(a:1) == type({})
+ let options = a:1
+ else
+ throw "Invalid arguments"
+ endif
+ let winnr = 1
+ let found = 0
+ for bufnr in tabpagebuflist()
+ if xolox#misc#path#equals(options['path'], bufname(bufnr))
+ execute winnr . 'wincmd w'
+ let found = 1
+ break
+ else
+ let winnr += 1
+ endif
+ endfor
+ if !(found || xolox#misc#buffer#is_empty())
+ vsplit
+ endif
+ silent execute 'edit' fnameescape(options['path'])
+ lcd " clear working directory
+ setlocal buftype=nofile bufhidden=hide noswapfile
+ let &l:statusline = '[' . options['name'] . ']'
+ call xolox#misc#buffer#unlock()
+ silent %delete
+endfunction
+
+function! xolox#misc#buffer#lock() " {{{1
+ " Lock a special buffer so that its contents can no longer be edited.
+ setlocal readonly nomodifiable nomodified
+endfunction
+
+function! xolox#misc#buffer#unlock() " {{{1
+ " Unlock a special buffer so that its content can be updated.
+ setlocal noreadonly modifiable
+endfunction
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/complete.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/complete.vim
new file mode 100644
index 00000000..763e0b91
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/complete.vim
@@ -0,0 +1,22 @@
+" Tab completion for user defined commands.
+"
+" Author: Peter Odding
+" Last Change: May 19, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+function! xolox#misc#complete#keywords(arglead, cmdline, cursorpos)
+ " This function can be used to perform keyword completion for user defined
+ " Vim commands based on the contents of the current buffer. Here's an
+ " example of how you would use it:
+ "
+ " :command -nargs=* -complete=customlist,xolox#misc#complete#keywords MyCmd call s:MyCmd()
+ let words = {}
+ for line in getline(1, '$')
+ for word in split(line, '\W\+')
+ let words[word] = 1
+ endfor
+ endfor
+ return sort(keys(filter(words, 'v:key =~# a:arglead')))
+endfunction
+
+" vim: ts=2 sw=2 et
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/echo.exe b/sources_non_forked/vim-misc/autoload/xolox/misc/echo.exe
new file mode 100644
index 00000000..52f4e792
Binary files /dev/null and b/sources_non_forked/vim-misc/autoload/xolox/misc/echo.exe differ
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/escape.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/escape.vim
new file mode 100644
index 00000000..29a16ca1
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/escape.vim
@@ -0,0 +1,56 @@
+" String escaping functions.
+"
+" Author: Peter Odding
+" Last Change: May 19, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+function! xolox#misc#escape#pattern(string) " {{{1
+ " Takes a single string argument and converts it into a [:substitute]
+ " [subcmd] / [substitute()] [subfun] pattern string that matches the given
+ " string literally.
+ "
+ " [subfun]: http://vimdoc.sourceforge.net/htmldoc/eval.html#substitute()
+ " [subcmd]: http://vimdoc.sourceforge.net/htmldoc/change.html#:substitute
+ if type(a:string) == type('')
+ let string = escape(a:string, '^$.*\~[]')
+ return substitute(string, '\n', '\\n', 'g')
+ endif
+ return ''
+endfunction
+
+function! xolox#misc#escape#substitute(string) " {{{1
+ " Takes a single string argument and converts it into a [:substitute]
+ " [subcmd] / [substitute()] [subfun] replacement string that inserts the
+ " given string literally.
+ if type(a:string) == type('')
+ let string = escape(a:string, '\&~%')
+ return substitute(string, '\n', '\\r', 'g')
+ endif
+ return ''
+endfunction
+
+function! xolox#misc#escape#shell(string) " {{{1
+ " Takes a single string argument and converts it into a quoted command line
+ " argument.
+ "
+ " I was going to add a long rant here about Vim's ['shellslash' option]
+ " [shellslash], but really, it won't make any difference. Let's just suffice
+ " to say that I have yet to encounter a single person out there who uses
+ " this option for its intended purpose (running a UNIX style shell on
+ " Microsoft Windows).
+ "
+ " [shellslash]: http://vimdoc.sourceforge.net/htmldoc/options.html#'shellslash'
+ if xolox#misc#os#is_win()
+ try
+ let ssl_save = &shellslash
+ set noshellslash
+ return shellescape(a:string)
+ finally
+ let &shellslash = ssl_save
+ endtry
+ else
+ return shellescape(a:string)
+ endif
+endfunction
+
+" vim: ts=2 sw=2 et
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/format.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/format.vim
new file mode 100644
index 00000000..44f7b543
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/format.vim
@@ -0,0 +1,46 @@
+" Human friendly string formatting for Vim.
+"
+" Author: Peter Odding
+" Last Change: June 2, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+function! xolox#misc#format#pluralize(count, singular, plural) " {{{1
+ " Concatenate a counter (the first argument, expected to be an integer) with
+ " a singular or plural label (the second and third arguments, both expected
+ " to be strings).
+ if a:count == 0
+ return printf('no %s', a:plural)
+ else
+ return printf('%i %s', a:count, a:count == 1 ? a:singular : a:plural)
+ endif
+endfunction
+
+function! xolox#misc#format#timestamp(ts) " {{{1
+ " Format a time stamp (a string containing a formatted floating point
+ " number) into a human friendly format, for example 70 seconds is phrased as
+ " "1 minute and 10 seconds".
+ let seconds = a:ts + 0
+ " Fast common case with extra precision from reltime().
+ if seconds < 5
+ let extract = matchstr(a:ts, '^\d\+\(\.0*[1-9][1-9]\?\)\?')
+ if extract =~ '[123456789]'
+ return extract . ' second' . (extract != '1' ? 's' : '')
+ endif
+ endif
+ " Generic but slow code.
+ let result = []
+ for [name, size] in [['day', 60 * 60 * 24], ['hour', 60 * 60], ['minute', 60], ['second', 1]]
+ if seconds >= size
+ let counter = seconds / size
+ let seconds = seconds % size
+ let suffix = counter != 1 ? 's' : ''
+ call add(result, printf('%i %s%s', counter, name, suffix))
+ endif
+ endfor
+ " Format the resulting text?
+ if len(result) == 1
+ return result[0]
+ else
+ return join(result[0:-2], ', ') . ' and ' . result[-1]
+ endif
+endfunction
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/list.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/list.vim
new file mode 100644
index 00000000..548592a3
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/list.vim
@@ -0,0 +1,42 @@
+" List handling functions.
+"
+" Author: Peter Odding
+" Last Change: June 2, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+function! xolox#misc#list#unique(list) " {{{1
+ " Remove duplicate values from the given list in-place (preserves order).
+ call reverse(a:list)
+ call filter(a:list, 'count(a:list, v:val) == 1')
+ return reverse(a:list)
+endfunction
+
+function! xolox#misc#list#binsert(list, value, ...) " {{{1
+ " Performs in-place binary insertion, which depending on your use case can
+ " be more efficient than calling Vim's [sort()] [sort] function after each
+ " insertion (in cases where a single, final sort is not an option). Expects
+ " three arguments:
+ "
+ " 1. A list
+ " 2. A value to insert
+ " 3. 1 (true) when case should be ignored, 0 (false) otherwise
+ "
+ " [sort]: http://vimdoc.sourceforge.net/htmldoc/eval.html#sort()
+ let idx = s:binsert_r(a:list, 0, len(a:list), a:value, exists('a:1') && a:1)
+ return insert(a:list, a:value, idx)
+endfunction
+
+function! s:binsert_r(list, low, high, value, ignorecase)
+ let mid = a:low + (a:high - a:low) / 2
+ if a:low == a:high
+ return a:low
+ elseif a:ignorecase ? a:value >? a:list[mid] : a:value > a:list[mid]
+ return s:binsert_r(a:list, mid + 1, a:high, a:value, a:ignorecase)
+ elseif a:ignorecase ? a:value a:list[mid] : a:value < a:list[mid]
+ return s:binsert_r(a:list, a:low, mid, a:value, a:ignorecase)
+ else
+ return mid
+ endif
+endfunction
+
+" vim: ts=2 sw=2 et
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/msg.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/msg.vim
new file mode 100644
index 00000000..761f1e72
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/msg.vim
@@ -0,0 +1,119 @@
+" Functions to interact with the user.
+"
+" Author: Peter Odding
+" Last Change: June 2, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+if !exists('g:xolox_message_buffer')
+ " For when I lose my :messages history :-\
+ let g:xolox_message_buffer = 100
+endif
+
+if !exists('g:xolox_messages')
+ let g:xolox_messages = []
+endif
+
+function! xolox#misc#msg#info(...) " {{{1
+ " Show a formatted informational message to the user.
+ "
+ " This function has the same argument handling as Vim's [printf()] []
+ " function with one notable difference: Any arguments which are not numbers
+ " or strings are coerced to strings using Vim's [string()] [] function.
+ "
+ " In the case of `xolox#misc#msg#info()`, automatic string coercion simply
+ " makes the function a bit easier to use.
+ "
+ " [printf()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#printf()
+ " [string()]: http://vimdoc.sourceforge.net/htmldoc/eval.html#string()
+ call s:show_message('title', a:000)
+endfunction
+
+function! xolox#misc#msg#warn(...) " {{{1
+ " Show a formatted warning message to the user.
+ "
+ " This function has the same argument handling as the
+ " `xolox#misc#msg#info()` function.
+ call s:show_message('warningmsg', a:000)
+endfunction
+
+function! xolox#misc#msg#debug(...) " {{{1
+ " Show a formatted debugging message to the user, *if the user has enabled
+ " increased verbosity by setting Vim's ['verbose'] [] option to one
+ " (1) or higher*.
+ "
+ " This function has the same argument handling as the
+ " `xolox#misc#msg#info()` function.
+ "
+ " In the case of `xolox#misc#msg#debug()`, automatic string coercion
+ " provides lazy evaluation in the sense that complex data structures are
+ " only converted to strings when the user has enabled increased verbosity.
+ "
+ " ['verbose']: http://vimdoc.sourceforge.net/htmldoc/options.html#'verbose'
+ if &vbs >= 1
+ call s:show_message('question', a:000)
+ endif
+endfunction
+
+function! s:show_message(hlgroup, args) " {{{1
+ " The implementation of info() and warn().
+ let nargs = len(a:args)
+ if nargs == 1
+ let message = a:args[0]
+ elseif nargs >= 2
+ let args = map(copy(a:args), 's:coerce_argument(v:val)')
+ let message = call('printf', args)
+ endif
+ if exists('message')
+ try
+ " Temporarily disable Vim's |hit-enter| prompt and mode display.
+ if !exists('s:more_save')
+ let s:more_save = &more
+ let s:ruler_save = &ruler
+ let s:smd_save = &showmode
+ endif
+ set nomore noshowmode
+ if winnr('$') == 1 | set noruler | endif
+ augroup PluginXoloxHideMode
+ autocmd! CursorHold,CursorHoldI * call s:clear_message()
+ augroup END
+ execute 'echohl' a:hlgroup
+ " Redraw to avoid |hit-enter| prompt.
+ redraw
+ for line in split(message, "\n")
+ echomsg line
+ endfor
+ if g:xolox_message_buffer > 0
+ call add(g:xolox_messages, message)
+ if len(g:xolox_messages) > g:xolox_message_buffer
+ call remove(g:xolox_messages, 0)
+ endif
+ endif
+ finally
+ " Always clear message highlighting, even when interrupted by Ctrl-C.
+ echohl none
+ endtry
+ endif
+endfunction
+
+function! s:coerce_argument(value) " {{{1
+ " Callback to coerce printf() arguments into strings.
+ let value_type = type(a:value)
+ if value_type != type(0) && value_type != type('')
+ return string(a:value)
+ else
+ return a:value
+ endif
+endfunction
+
+function! s:clear_message() " {{{1
+ " Callback to clear message after some time has passed.
+ echo ''
+ let &more = s:more_save
+ let &showmode = s:smd_save
+ let &ruler = s:ruler_save
+ unlet s:more_save s:ruler_save s:smd_save
+ autocmd! PluginXoloxHideMode
+ augroup! PluginXoloxHideMode
+endfunction
+
+" vim: ts=2 sw=2 et
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/open.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/open.vim
new file mode 100644
index 00000000..270b2873
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/open.vim
@@ -0,0 +1,100 @@
+" Integration between Vim and its environment.
+"
+" Author: Peter Odding
+" Last Change: June 19, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+let s:enoimpl = "vim-misc %s: %s() hasn't been implemented for your platform! If you have suggestions, please get in touch at https://github.com/xolox/vim-misc/issues"
+let s:handlers = ['gnome-open', 'kde-open', 'exo-open', 'xdg-open']
+
+function! xolox#misc#open#file(location, ...) " {{{1
+ " Given a pathname or URL as the first argument, this opens the file with
+ " the program associated with the file type. So for example a text file
+ " might open in Vim, an `*.html` file would probably open in your web
+ " browser and a media file would open in a media player.
+ "
+ " This should work on Windows, Mac OS X and most Linux distributions. If
+ " this fails to find a file association, you can pass one or more external
+ " commands to try as additional arguments. For example:
+ "
+ " :call xolox#misc#open#file('/path/to/my/file', 'firefox', 'google-chrome')
+ "
+ " This generally shouldn't be necessary but it might come in handy now and
+ " then.
+ if xolox#misc#os#is_win()
+ try
+ call xolox#shell#open_with_windows_shell(a:location)
+ catch /^Vim\%((\a\+)\)\=:E117/
+ let command = '!start CMD /C START "" %s'
+ silent execute printf(command, xolox#misc#escape#shell(a:location))
+ endtry
+ return
+ elseif xolox#misc#os#is_mac()
+ call xolox#misc#msg#debug("vim-misc %s: Detected Mac OS X, using 'open' command to open %s ..", g:xolox#misc#version, string(a:location))
+ let cmd = 'open ' . shellescape(a:location) . ' 2>&1'
+ call s:handle_error(cmd, system(cmd))
+ return
+ else
+ for handler in s:handlers + a:000
+ if executable(handler)
+ call xolox#misc#msg#debug("vim-misc %s: Using '%s' to open '%s'.", g:xolox#misc#version, handler, a:location)
+ let cmd = shellescape(handler) . ' ' . shellescape(a:location) . ' 2>&1'
+ call s:handle_error(cmd, system(cmd))
+ return
+ endif
+ endfor
+ endif
+ throw printf(s:enoimpl, g:xolox#misc#version, 'xolox#misc#open#file')
+endfunction
+
+function! xolox#misc#open#url(url) " {{{1
+ " Given a URL as the first argument, this opens the URL in your preferred or
+ " best available web browser:
+ "
+ " - In GUI environments a graphical web browser will open (or a new tab will
+ " be created in an existing window)
+ " - In console Vim without a GUI environment, when you have any of `lynx`,
+ " `links` or `w3m` installed it will launch a command line web browser in
+ " front of Vim (temporarily suspending Vim)
+ let url = a:url
+ if url !~ '^\w\+://'
+ call xolox#misc#msg#debug("vim-misc %s: The URL %s doesn't contain a scheme, improvising ..", g:xolox#misc#version, string(url))
+ if url !~ '@'
+ call xolox#misc#msg#debug("vim-misc %s: Defaulting to http:// URL scheme ..", g:xolox#misc#version)
+ let url = 'http://' . url
+ elseif url !~ '^mailto:'
+ call xolox#misc#msg#debug("vim-misc %s: Defaulting to mailto: URL scheme ..", g:xolox#misc#version)
+ let url = 'mailto:' . url
+ endif
+ endif
+ let on_unix = has('unix')
+ let not_on_mac = !xolox#misc#os#is_mac()
+ let no_gui_available = (has('gui_running') == 0 && $DISPLAY == '')
+ if on_unix && not_on_mac && no_gui_available
+ call xolox#misc#msg#debug("vim-misc %s: Using command line web browser because no GUI seems to be available ..", g:xolox#misc#version)
+ for browser in ['lynx', 'links', 'w3m']
+ call xolox#misc#msg#debug("vim-misc %s: Checking whether %s command line web browser is installed ..", g:xolox#misc#version, string(browser))
+ if executable(browser)
+ call xolox#misc#msg#debug("vim-misc %s: Found %s, using it to open %s ..", g:xolox#misc#version, string(browser), string(url))
+ execute '!' . browser fnameescape(url)
+ call s:handle_error(browser . ' ' . url, '')
+ return
+ endif
+ endfor
+ endif
+ call xolox#misc#msg#debug("vim-misc %s: Defaulting to GUI web browser to open %s ..", g:xolox#misc#version, string(url))
+ call xolox#misc#open#file(url, 'firefox', 'google-chrome')
+endfunction
+
+function! s:handle_error(cmd, output) " {{{1
+ if v:shell_error
+ let message = "vim-misc %s: Failed to execute program! (command line: %s%s)"
+ let output = strtrans(xolox#misc#str#trim(a:output))
+ if output != ''
+ let output = ", output: " . string(output)
+ endif
+ throw printf(message, g:xolox#misc#version, a:cmd, output)
+ endif
+endfunction
+
+" vim: et ts=2 sw=2 fdm=marker
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/option.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/option.vim
new file mode 100644
index 00000000..97fc88e6
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/option.vim
@@ -0,0 +1,115 @@
+" Vim and plug-in option handling.
+"
+" Author: Peter Odding
+" Last Change: June 2, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+function! xolox#misc#option#get(name, ...) " {{{1
+ " Expects one or two arguments: 1. The name of a variable and 2. the default
+ " value if the variable does not exist.
+ "
+ " Returns the value of the variable from a buffer local variable, global
+ " variable or the default value, depending on which is defined.
+ "
+ " This is used by some of my Vim plug-ins for option handling, so that users
+ " can customize options for specific buffers.
+ if exists('b:' . a:name)
+ " Buffer local variable.
+ return eval('b:' . a:name)
+ elseif exists('g:' . a:name)
+ " Global variable.
+ return eval('g:' . a:name)
+ elseif exists('a:1')
+ " Default value.
+ return a:1
+ endif
+endfunction
+
+function! xolox#misc#option#split(value) " {{{1
+ " Given a multi-value Vim option like ['runtimepath'] [rtp] this returns a
+ " list of strings. For example:
+ "
+ " :echo xolox#misc#option#split(&runtimepath)
+ " ['/home/peter/Projects/Vim/misc',
+ " '/home/peter/Projects/Vim/colorscheme-switcher',
+ " '/home/peter/Projects/Vim/easytags',
+ " ...]
+ "
+ " [rtp]: http://vimdoc.sourceforge.net/htmldoc/options.html#'runtimepath'
+ let values = split(a:value, '[^\\]\zs,')
+ return map(values, 's:unescape(v:val)')
+endfunction
+
+function! s:unescape(s)
+ return substitute(a:s, '\\\([\\,]\)', '\1', 'g')
+endfunction
+
+function! xolox#misc#option#join(values) " {{{1
+ " Given a list of strings like the ones returned by
+ " `xolox#misc#option#split()`, this joins the strings together into a
+ " single value that can be used to set a Vim option.
+ let values = copy(a:values)
+ call map(values, 's:escape(v:val)')
+ return join(values, ',')
+endfunction
+
+function! s:escape(s)
+ return escape(a:s, ',\')
+endfunction
+
+function! xolox#misc#option#split_tags(value) " {{{1
+ " Customized version of `xolox#misc#option#split()` with specialized
+ " handling for Vim's ['tags' option] [tags].
+ "
+ " [tags]: http://vimdoc.sourceforge.net/htmldoc/options.html#'tags'
+ let values = split(a:value, '[^\\]\zs,')
+ return map(values, 's:unescape_tags(v:val)')
+endfunction
+
+function! s:unescape_tags(s)
+ return substitute(a:s, '\\\([\\, ]\)', '\1', 'g')
+endfunction
+
+function! xolox#misc#option#join_tags(values) " {{{1
+ " Customized version of `xolox#misc#option#join()` with specialized
+ " handling for Vim's ['tags' option] [tags].
+ let values = copy(a:values)
+ call map(values, 's:escape_tags(v:val)')
+ return join(values, ',')
+endfunction
+
+function! s:escape_tags(s)
+ return escape(a:s, ', ')
+endfunction
+
+function! xolox#misc#option#eval_tags(value, ...) " {{{1
+ " Evaluate Vim's ['tags' option] [tags] without looking at the file
+ " system, i.e. this will report tags files that don't exist yet. Expects
+ " the value of the ['tags' option] [tags] as the first argument. If the
+ " optional second argument is 1 (true) only the first match is returned,
+ " otherwise (so by default) a list with all matches is returned.
+ let pathnames = []
+ let first_only = exists('a:1') ? a:1 : 0
+ for pattern in xolox#misc#option#split_tags(a:value)
+ " Make buffer relative pathnames absolute.
+ if pattern =~ '^\./'
+ let suffix = matchstr(pattern, '^./\zs.*$')
+ let pattern = xolox#misc#path#merge(expand('%:p:h'), suffix)
+ endif
+ " Make working directory relative pathnames absolute.
+ if xolox#misc#path#is_relative(pattern)
+ let pattern = xolox#misc#path#merge(getcwd(), pattern)
+ endif
+ " Ignore the trailing `;' for recursive upwards searching because we
+ " always want the most specific pathname available.
+ let pattern = substitute(pattern, ';$', '', '')
+ " Expand the pattern.
+ call extend(pathnames, split(expand(pattern), "\n"))
+ if first_only && !empty(pathnames)
+ return pathnames[0]
+ endif
+ endfor
+ return first_only ? '' : pathnames
+endfunction
+
+" vim: ts=2 sw=2 et
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/os.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/os.vim
new file mode 100644
index 00000000..ea96116a
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/os.vim
@@ -0,0 +1,271 @@
+" Operating system interfaces.
+"
+" Author: Peter Odding
+" Last Change: June , 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+function! xolox#misc#os#is_mac() " {{{1
+ " Returns 1 (true) when on Mac OS X, 0 (false) otherwise. You would expect
+ " this to simply check the Vim feature list, but for some obscure reason the
+ " `/usr/bin/vim` included in Mac OS X (verified on version 10.7.5) returns 0
+ " (false) in response to `has('mac')`, so we check the output of `uname`
+ " to avoid false negatives.
+ if !exists('s:is_mac')
+ " By default we assume we are *not* on Mac OS X.
+ let s:is_mac = 0
+ if has('mac') || has('macunix') || has('gui_mac')
+ " If Vim's feature list indicates we are on Mac OS X, we have our answer :-).
+ let s:is_mac = 1
+ elseif !xolox#misc#os#is_win()
+ " Otherwise we check the output of `uname' to avoid false negatives.
+ let result = xolox#misc#os#exec({'command': 'uname', 'check': 0})
+ if result['exit_code'] == 0 && get(result['stdout'], 0, '') == 'Darwin'
+ let s:is_mac = 1
+ endif
+ endif
+ endif
+ return s:is_mac
+endfunction
+
+function! xolox#misc#os#is_win() " {{{1
+ " Returns 1 (true) when on Microsoft Windows, 0 (false) otherwise.
+ return has('win16') || has('win32') || has('win64')
+endfunction
+
+function! xolox#misc#os#find_vim(...) " {{{1
+ " Returns the program name of Vim as a string. On Windows and UNIX this just
+ " [v:progname] [] as an absolute pathname while on Mac OS X there is
+ " some special magic to find MacVim's executable even though it's usually
+ " not on the executable search path. If you want, you can override the
+ " value returned from this function by setting the global variable
+ " `g:xolox#misc#os#vim_progname`.
+ "
+ " By default the choice of console Vim vs graphical Vim is made based on
+ " the value of [v:progname] [], but if you have a preference you can pass
+ " the string `vim` or `gvim` as the first and only argument.
+ "
+ " [v:progname]: http://vimdoc.sourceforge.net/htmldoc/eval.html#v:progname
+ if exists('a:1')
+ let program_name = a:1
+ else
+ let program_name = v:progname
+ endif
+ if exists('g:xolox#misc#os#vim_progname')
+ let pathname = g:xolox#misc#os#vim_progname
+ else
+ let pathname = ''
+ endif
+ if empty(pathname) && xolox#misc#os#is_mac()
+ " Special handling for Mac OS X where MacVim is usually not on the $PATH.
+ " This always returns the "Vim" executable and not "MacVim" (regardless of
+ " the caller's preference) because "MacVim" has funky dock magic going on.
+ call xolox#misc#msg#debug("vim-misc %s: Trying MacVim workaround to find Vim executable ..", g:xolox#misc#version)
+ let segments = xolox#misc#path#split($VIMRUNTIME)
+ if segments[-3:] == ['Resources', 'vim', 'runtime']
+ let pathname = xolox#misc#path#join(segments[0:-4] + ['MacOS', 'Vim'])
+ call xolox#misc#msg#debug("vim-misc %s: The MacVim workaround resulted in the Vim executable %s.", g:xolox#misc#version, string(pathname))
+ endif
+ endif
+ if empty(pathname)
+ " Default logic.
+ call xolox#misc#msg#debug("vim-misc %s: Looking for Vim executable named %s on search path ..", g:xolox#misc#version, string(program_name))
+ let candidates = xolox#misc#path#which(program_name)
+ if !empty(candidates)
+ call xolox#misc#msg#debug("vim-misc %s: Found %i candidate(s) on search path: %s.", g:xolox#misc#version, len(candidates), string(candidates))
+ let pathname = candidates[0]
+ endif
+ endif
+ call xolox#misc#msg#debug("vim-misc %s: Reporting Vim executable %s.", g:xolox#misc#version, string(pathname))
+ return pathname
+endfunction
+
+function! xolox#misc#os#exec(options) " {{{1
+ " Execute an external command (hiding the console on Microsoft Windows when
+ " my [vim-shell plug-in] [vim-shell] is installed).
+ "
+ " Expects a dictionary with the following key/value pairs as the first
+ " argument:
+ "
+ " - **command** (required): The command line to execute
+ " - **async** (optional): set this to 1 (true) to execute the command in the
+ " background (asynchronously)
+ " - **stdin** (optional): a string or list of strings with the input for the
+ " external command
+ " - **check** (optional): set this to 0 (false) to disable checking of the
+ " exit code of the external command (by default an exception will be
+ " raised when the command fails)
+ "
+ " Returns a dictionary with one or more of the following key/value pairs:
+ "
+ " - **command** (always available): the generated command line that was used
+ " to run the external command
+ " - **exit_code** (only in synchronous mode): the exit status of the
+ " external command (an integer, zero on success)
+ " - **stdout** (only in synchronous mode): the output of the command on the
+ " standard output stream (a list of strings, one for each line)
+ " - **stderr** (only in synchronous mode): the output of the command on the
+ " standard error stream (as a list of strings, one for each line)
+ "
+ " [vim-shell]: http://peterodding.com/code/vim/shell/
+ try
+
+ " Unpack the options.
+ let cmd = a:options['command']
+ let async = get(a:options, 'async', 0)
+
+ " We need to know in a couple of places whether we are on Windows.
+ let is_win = xolox#misc#os#is_win()
+
+ " Use vim-shell so we don't pop up a console window on Windows? If the
+ " caller specifically asks us *not* to use vim-shell, we'll respect that
+ " choice; this is very useful for automated tests :-).
+ if get(a:options, 'use_dll', 1) == 0
+ let use_dll = 0
+ else
+ let use_dll = xolox#misc#os#can_use_dll()
+ endif
+
+ " Decide whether to redirect the standard output and standard error
+ " streams to temporary files.
+ let redirect_output = !async && (use_dll || !is_win)
+
+ " Write the input for the external command to a temporary file?
+ if has_key(a:options, 'stdin') && use_dll
+ let tempin = tempname()
+ if type(a:options['stdin']) == type([])
+ let lines = a:options['stdin']
+ else
+ let lines = split(a:options['stdin'], "\n")
+ endif
+ call writefile(lines, tempin)
+ let cmd .= ' < ' . xolox#misc#escape#shell(tempin)
+ endif
+
+ " Redirect the standard output and/or standard error streams of the
+ " external process to temporary files? (only in synchronous mode)
+ if redirect_output
+ let tempout = tempname()
+ let temperr = tempname()
+ let cmd = printf('(%s) 1>%s 2>%s', cmd, xolox#misc#escape#shell(tempout), xolox#misc#escape#shell(temperr))
+ endif
+
+ " Use vim-shell or system() to execute the external command?
+ if use_dll
+ call xolox#misc#msg#debug("vim-misc %s: Executing external command using compiled DLL: %s", g:xolox#misc#version, cmd)
+ let exit_code = xolox#shell#execute_with_dll(cmd, async)
+ else
+
+ " Enable asynchronous mode (very platform specific).
+ if async
+ if is_win
+ let cmd = printf('start /b %s', cmd)
+ elseif has('unix')
+ let cmd = printf('(%s) &', cmd)
+ else
+ call xolox#misc#msg#warn("vim-misc %s: I don't know how to execute the command %s asynchronously on your platform! Falling back to synchronous mode...", g:xolox#misc#version, cmd)
+ endif
+ endif
+
+ " On UNIX we explicitly execute the command line using 'sh' instead of
+ " the default shell, because we assume that standard output and standard
+ " error can be redirected separately, but (t)csh does not support this
+ " (and it might be the default shell).
+ if has('unix')
+ call xolox#misc#msg#debug("vim-misc %s: Generated shell expression: %s", g:xolox#misc#version, cmd)
+ let cmd = printf('sh -c %s', xolox#misc#escape#shell(cmd))
+ endif
+
+ " Let the user know what's happening (in case they're interested).
+ if async && is_win
+ call xolox#misc#msg#debug("vim-misc %s: Executing external command using !start command: %s", g:xolox#misc#version, cmd)
+ silent execute '!' . cmd
+ else
+ call xolox#misc#msg#debug("vim-misc %s: Executing external command using system() function: %s", g:xolox#misc#version, cmd)
+ let arguments = [cmd]
+ if has_key(a:options, 'stdin')
+ if type(a:options['stdin']) == type([])
+ call add(arguments, join(a:options['stdin'], "\n"))
+ else
+ call add(arguments, a:options['stdin'])
+ endif
+ endif
+ let stdout = call('system', arguments)
+ let exit_code = v:shell_error
+ endif
+
+ endif
+
+ " Return the results as a dictionary with one or more key/value pairs.
+ let result = {'command': cmd}
+ if !async
+ let result['exit_code'] = exit_code
+ " Get the standard output of the command.
+ if redirect_output
+ let result['stdout'] = s:readfile(tempout, 'standard output', a:options['command'])
+ elseif exists('stdout')
+ let result['stdout'] = split(stdout, "\n")
+ else
+ let result['stdout'] = []
+ endif
+ " Get the standard error of the command.
+ if exists('temperr')
+ let result['stderr'] = s:readfile(temperr, 'standard error', a:options['command'])
+ else
+ let result['stderr'] = []
+ endif
+ " If we just executed a synchronous command and the caller didn't
+ " specifically ask us *not* to check the exit code of the external
+ " command, we'll do so now. The idea here is that it should be easy
+ " to 'do the right thing'.
+ if get(a:options, 'check', 1) && exit_code != 0
+ " Prepare an error message with enough details so the user can investigate.
+ let msg = printf("vim-misc %s: External command failed with exit code %d!", g:xolox#misc#version, result['exit_code'])
+ let msg .= printf("\nCommand line: %s", result['command'])
+ " If the external command reported an error, we'll include it in our message.
+ if !empty(result['stderr'])
+ " This is where we would normally expect to find an error message.
+ let msg .= printf("\nOutput on standard output stream:\n%s", join(result['stderr'], "\n"))
+ elseif !empty(result['stdout'])
+ " Exuberant Ctags on Windows XP reports errors on standard output :-x.
+ let msg .= printf("\nOutput on standard error stream:\n%s", join(result['stdout'], "\n"))
+ endif
+ throw msg
+ endif
+ endif
+ return result
+
+ finally
+ " Cleanup any temporary files we created.
+ for name in ['tempin', 'tempout', 'temperr']
+ if exists(name)
+ call delete({name})
+ endif
+ endfor
+ endtry
+
+endfunction
+
+function! xolox#misc#os#can_use_dll() " {{{1
+ " If a) we're on Microsoft Windows, b) the vim-shell plug-in is installed
+ " and c) the compiled DLL included in vim-shell works, we can use the
+ " vim-shell plug-in to execute external commands! Returns 1 (true)
+ " if we can use the DLL, 0 (false) otherwise.
+ let can_use_dll = 0
+ try
+ let can_use_dll = xolox#shell#can_use_dll()
+ catch /^Vim\%((\a\+)\)\=:E117/
+ " Silence E117.
+ endtry
+ return can_use_dll
+endfunction
+
+function! s:readfile(fname, label, cmd) " {{{1
+ try
+ return readfile(a:fname)
+ catch
+ call xolox#misc#msg#warn("vim-misc %s: Failed to read temporary file (%s) with %s of external command: %s! (external command: %s)", g:xolox#misc#version, a:fname, a:label, v:exception, a:cmd)
+ return []
+ endtry
+endfunction
+
+" vim: ts=2 sw=2 et
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/path.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/path.vim
new file mode 100644
index 00000000..82cdf0a0
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/path.vim
@@ -0,0 +1,263 @@
+" Pathname manipulation functions.
+"
+" Author: Peter Odding
+" Last Change: June 25, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+let s:windows_compatible = xolox#misc#os#is_win()
+let s:mac_os_x_compatible = xolox#misc#os#is_mac()
+
+function! xolox#misc#path#which(...) " {{{1
+ " Scan the executable search path (`$PATH`) for one or more external
+ " programs. Expects one or more string arguments with program names. Returns
+ " a list with the absolute pathnames of all found programs. Here's an
+ " example:
+ "
+ " :echo xolox#misc#path#which('gvim', 'vim')
+ " ['/usr/local/bin/gvim',
+ " '/usr/bin/gvim',
+ " '/usr/local/bin/vim',
+ " '/usr/bin/vim']
+ let extensions = s:windows_compatible ? split($PATHEXT, ';') : ['']
+ let matches = []
+ let checked = {}
+ for program in a:000
+ for directory in split($PATH, s:windows_compatible ? ';' : ':')
+ let directory = xolox#misc#path#absolute(directory)
+ if isdirectory(directory)
+ let found = 0
+ for extension in extensions
+ let path = xolox#misc#path#merge(directory, program . extension)
+ if executable(path)
+ call add(matches, path)
+ let found = 1
+ endif
+ endfor
+ if s:windows_compatible && ! found
+ " Maybe the extension is already contained in program; try without
+ " $PATHEXT.
+ let path = xolox#misc#path#merge(directory, program)
+ if executable(path)
+ call add(matches, path)
+ endif
+ endif
+ endif
+ endfor
+ endfor
+ return xolox#misc#list#unique(matches)
+endfunction
+
+function! xolox#misc#path#split(path) " {{{1
+ " Split a pathname (the first and only argument) into a list of pathname
+ " components.
+ "
+ " On Windows, pathnames starting with two slashes or backslashes are UNC
+ " paths where the leading slashes are significant... In this case we split
+ " like this:
+ "
+ " - Input: `'//server/share/directory'`
+ " - Result: `['//server', 'share', 'directory']`
+ "
+ " Everything except Windows is treated like UNIX until someone has a better
+ " suggestion :-). In this case we split like this:
+ "
+ " - Input: `'/foo/bar/baz'`
+ " - Result: `['/', 'foo', 'bar', 'baz']`
+ "
+ " To join a list of pathname components back into a single pathname string,
+ " use the `xolox#misc#path#join()` function.
+ if type(a:path) == type('')
+ if s:windows_compatible
+ if a:path =~ '^[\/][\/]'
+ " UNC pathname.
+ return split(a:path, '\%>2c[\/]\+')
+ else
+ " If it's not a UNC path we can simply split on slashes & backslashes.
+ return split(a:path, '[\/]\+')
+ endif
+ else
+ " Everything else is treated as UNIX.
+ let absolute = (a:path =~ '^/')
+ let segments = split(a:path, '/\+')
+ return absolute ? insert(segments, '/') : segments
+ endif
+ endif
+ return []
+endfunction
+
+function! xolox#misc#path#join(parts) " {{{1
+ " Join a list of pathname components (the first and only argument) into a
+ " single pathname string. This is the counterpart to the
+ " `xolox#misc#path#split()` function and it expects a list of pathname
+ " components as returned by `xolox#misc#path#split()`.
+ if type(a:parts) == type([])
+ if s:windows_compatible
+ return join(a:parts, xolox#misc#path#directory_separator())
+ elseif get(a:parts, 0) == '/'
+ " Absolute path on UNIX (non-Windows).
+ return '/' . join(a:parts[1:], '/')
+ else
+ " Relative path on UNIX (non-Windows).
+ return join(a:parts, '/')
+ endif
+ endif
+ return ''
+endfunction
+
+function! xolox#misc#path#directory_separator() " {{{1
+ " Find the preferred directory separator for the platform and settings.
+ return exists('+shellslash') && &shellslash ? '/' : '\'
+endfunction
+
+function! xolox#misc#path#absolute(path) " {{{1
+ " Canonicalize and resolve a pathname, *regardless of whether it exists*.
+ " This is intended to support string comparison to determine whether two
+ " pathnames point to the same directory or file.
+ if type(a:path) == type('')
+ let path = a:path
+ " Make the pathname absolute.
+ if path =~ '^\~'
+ " Expand ~ to $HOME.
+ let path = $HOME . '/' . path[1:]
+ elseif xolox#misc#path#is_relative(path)
+ " Make relative pathnames absolute.
+ let path = getcwd() . '/' . path
+ endif
+ " Resolve symbolic links to find the canonical pathname. In my tests this
+ " also removes all symbolic pathname segments (`.' and `..'), even when
+ " the pathname does not exist. Also there used to be a bug in resolve()
+ " where it wouldn't resolve pathnames ending in a directory separator.
+ " Since it's not much trouble to work around, that's what we do.
+ let path = resolve(substitute(path, s:windows_compatible ? '[\/]\+$' : '/\+$', '', ''))
+ " Normalize directory separators (especially relevant on Windows).
+ let parts = xolox#misc#path#split(path)
+ if s:windows_compatible && parts[0] =~ '^[\/][\/]'
+ " Also normalize the two leading "directory separators" (I'm not
+ " sure what else to call them :-) in Windows UNC pathnames.
+ let parts[0] = repeat(xolox#misc#path#directory_separator(), 2) . parts[0][2:]
+ endif
+ return xolox#misc#path#join(parts)
+ endif
+ return ''
+endfunction
+
+function! xolox#misc#path#relative(path, base) " {{{1
+ " Make an absolute pathname (the first argument) relative to a directory
+ " (the second argument).
+ let path = xolox#misc#path#split(a:path)
+ let base = xolox#misc#path#split(a:base)
+ while path != [] && base != [] && path[0] == base[0]
+ call remove(path, 0)
+ call remove(base, 0)
+ endwhile
+ let distance = repeat(['..'], len(base))
+ return xolox#misc#path#join(distance + path)
+endfunction
+
+
+function! xolox#misc#path#merge(parent, child, ...) " {{{1
+ " Join a directory pathname and filename into a single pathname.
+ if type(a:parent) == type('') && type(a:child) == type('')
+ " TODO Use xolox#misc#path#is_relative()?
+ if s:windows_compatible
+ let parent = substitute(a:parent, '[\\/]\+$', '', '')
+ let child = substitute(a:child, '^[\\/]\+', '', '')
+ return parent . '\' . child
+ else
+ let parent = substitute(a:parent, '/\+$', '', '')
+ let child = substitute(a:child, '^/\+', '', '')
+ return parent . '/' . child
+ endif
+ endif
+ return ''
+endfunction
+
+function! xolox#misc#path#commonprefix(paths) " {{{1
+ " Find the common prefix of path components in a list of pathnames.
+ let common = xolox#misc#path#split(a:paths[0])
+ for path in a:paths
+ let index = 0
+ for segment in xolox#misc#path#split(path)
+ if len(common) <= index
+ break
+ elseif common[index] != segment
+ call remove(common, index, -1)
+ break
+ endif
+ let index += 1
+ endfor
+ endfor
+ return xolox#misc#path#join(common)
+endfunction
+
+function! xolox#misc#path#encode(path) " {{{1
+ " Encode a pathname so it can be used as a filename. This uses URL encoding
+ " to encode special characters.
+ if s:windows_compatible
+ let mask = '[*|\\/:"<>?%]'
+ elseif s:mac_os_x_compatible
+ let mask = '[\\/%:]'
+ else
+ let mask = '[\\/%]'
+ endif
+ return substitute(a:path, mask, '\=printf("%%%x", char2nr(submatch(0)))', 'g')
+endfunction
+
+
+function! xolox#misc#path#decode(encoded_path) " {{{1
+ " Decode a pathname previously encoded with `xolox#misc#path#encode()`.
+ return substitute(a:encoded_path, '%\(\x\x\?\)', '\=nr2char("0x" . submatch(1))', 'g')
+endfunction
+
+" xolox#misc#path#equals(a, b) - Check whether two pathnames point to the same file. {{{1
+
+if s:windows_compatible
+ function! xolox#misc#path#equals(a, b)
+ return a:a ==? a:b || xolox#misc#path#absolute(a:a) ==? xolox#misc#path#absolute(a:b)
+ endfunction
+else
+ function! xolox#misc#path#equals(a, b)
+ return a:a ==# a:b || xolox#misc#path#absolute(a:a) ==# xolox#misc#path#absolute(a:b)
+ endfunction
+endif
+
+function! xolox#misc#path#is_relative(path) " {{{1
+ " Returns true (1) when the pathname given as the first argument is
+ " relative, false (0) otherwise.
+ if a:path =~ '^\w\+://'
+ return 0
+ elseif s:windows_compatible
+ return a:path !~ '^\(\w:\|[\\/]\)'
+ else
+ return a:path !~ '^/'
+ endif
+endfunction
+
+function! xolox#misc#path#tempdir() " {{{1
+ " Create a temporary directory and return the pathname of the directory.
+ if !exists('s:tempdir_counter')
+ let s:tempdir_counter = 1
+ endif
+ if exists('*mkdir')
+ if s:windows_compatible
+ let template = $TMP . '\vim_tempdir_'
+ elseif filewritable('/tmp') == 2
+ let template = '/tmp/vim_tempdir_'
+ endif
+ endif
+ if !exists('template')
+ throw "xolox#misc#path#tempdir() hasn't been implemented on your platform!"
+ endif
+ while 1
+ let directory = template . s:tempdir_counter
+ try
+ call mkdir(directory, '', 0700)
+ return directory
+ catch /^Vim\%((\a\+)\)\=:E739/
+ " Keep looking for a non-existing directory.
+ endtry
+ let s:tempdir_counter += 1
+ endwhile
+endfunction
+
+" vim: ts=2 sw=2 et
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/str.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/str.vim
new file mode 100644
index 00000000..4623de93
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/str.vim
@@ -0,0 +1,69 @@
+" String handling.
+"
+" Author: Peter Odding
+" Last Change: June 23, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+function! xolox#misc#str#slug(s) " {{{1
+ " Convert a string to a "slug" - something that can be safely used in
+ " filenames and URLs without worrying about quoting/escaping of special
+ " characters.
+ return join(split(tolower(a:s), '\W\+'), '-')
+endfunction
+
+function! xolox#misc#str#ucfirst(s) " {{{1
+ " Uppercase the first character in a string (the first argument).
+ return substitute(a:s, '^.', '\U\0', '')
+endfunction
+
+function! xolox#misc#str#compact(s) " {{{1
+ " Compact whitespace in a string (the first argument).
+ return join(split(a:s), " ")
+endfunction
+
+function! xolox#misc#str#trim(s) " {{{1
+ " Trim all whitespace from the start and end of a string (the first
+ " argument).
+ return substitute(a:s, '^\_s*\(.\{-}\)\_s*$', '\1', '')
+endfunction
+
+function! xolox#misc#str#indent(text, num_spaces) " {{{1
+ " Indent all lines in a multi-line string (the first argument) with a
+ " specific number of *space characters* (the second argument, an integer).
+ let lines = split(a:text, "\n")
+ let indent = repeat(' ', a:num_spaces)
+ let [idx, limit] = [0, len(lines)]
+ while idx < limit
+ if lines[idx] =~ '\S'
+ let lines[idx] = indent . lines[idx]
+ endif
+ let idx += 1
+ endwhile
+ return join(lines, "\n")
+endfunction
+
+function! xolox#misc#str#dedent(text) " {{{1
+ " Remove common whitespace from a multi line string.
+ let lines = split(a:text, "\n")
+ " First we need to determine the common indentation of all non-empty lines.
+ for line in lines
+ if line =~ '\S'
+ let indent = matchstr(line, '^\s*')
+ if !exists('common_indent')
+ let common_indent = indent
+ elseif len(indent) < len(common_indent)
+ let common_indent = indent
+ endif
+ endif
+ endfor
+ " Now we will strip the common indentation.
+ let [idx, limit] = [0, len(lines)]
+ let pattern = '^' . common_indent
+ while idx < limit
+ let lines[idx] = substitute(lines[idx], pattern, '', '')
+ let idx += 1
+ endwhile
+ return join(lines, "\n")
+endfunction
+
+" vim: ts=2 sw=2 et
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/test.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/test.vim
new file mode 100644
index 00000000..df4d4651
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/test.vim
@@ -0,0 +1,125 @@
+" Test runner & infrastructure for Vim plug-ins.
+"
+" Author: Peter Odding
+" Last Change: June 2, 2013
+" URL: http://peterodding.com/code/vim/misc/
+"
+" The Vim auto-load script `autoload/xolox/misc/test.vim` contains
+" infrastructure that can be used to run an automated Vim plug-in test suite.
+" It provides a framework for running test functions, keeping track of the
+" test status, making assertions and reporting test results to the user.
+
+" The process handling tests cannot use the built-in "echo" command from the
+" Windows shell because it has way too much idiosyncrasies for me to put up
+" with. Seriously. Instead I'm using an "echo.exe" from the UnxUtils project.
+if xolox#misc#os#is_win()
+ let g:xolox#misc#test#echo = xolox#misc#escape#shell(xolox#misc#path#merge(expand(':p:h'), 'echo.exe'))
+else
+ let g:xolox#misc#test#echo = 'echo'
+endif
+
+function! xolox#misc#test#reset() " {{{1
+ " Reset counters for executed tests and passed/failed assertions.
+ let s:num_executed = 0
+ let s:num_passed = 0
+ let s:num_failed = 0
+ let s:tests_started_at = xolox#misc#timer#start()
+endfunction
+
+function! xolox#misc#test#summarize() " {{{1
+ " Print a summary of test results, to be interpreted interactively.
+ call s:delimit_output()
+ call xolox#misc#timer#force("Took %s to run %s: %s passed, %s failed.",
+ \ s:tests_started_at,
+ \ xolox#misc#format#pluralize(s:num_executed, 'test', 'tests'),
+ \ xolox#misc#format#pluralize(s:num_passed, 'assertion', 'assertions'),
+ \ xolox#misc#format#pluralize(s:num_failed, 'assertion', 'assertions'))
+endfunction
+
+function! xolox#misc#test#wrap(function) " {{{1
+ " Call a function in a try/catch block and prevent exceptions from bubbling.
+ " The name of the function should be passed as the first and only argument;
+ " it should be a string containing the name of a Vim auto-load function.
+ let num_failed = s:num_failed
+ try
+ if s:num_passed + s:num_failed > 0
+ call s:delimit_output()
+ endif
+ let test_name = split(a:function, '#')[-1]
+ let test_name = substitute(test_name, '_', ' ', 'g')
+ let test_name = substitute(test_name, '^.', '\U\0', '')
+ call xolox#misc#msg#info("Running test #%i: %s", s:num_executed + 1, test_name)
+ call call(a:function, [])
+ catch
+ call xolox#misc#msg#warn("Test %s raised exception:", a:function)
+ call xolox#misc#msg#warn("%s", v:exception)
+ call xolox#misc#msg#warn("(at %s)", v:throwpoint)
+ if num_failed == s:num_failed
+ " Make sure exceptions are counted as failures, but don't inflate the
+ " number of failed assertions when it's not needed (it can produce
+ " confusing test output).
+ call xolox#misc#test#failed()
+ endif
+ endtry
+ let s:num_executed += 1
+endfunction
+
+function! xolox#misc#test#passed() " {{{1
+ " Record a test which succeeded.
+ let s:num_passed += 1
+ call s:print_feedback()
+endfunction
+
+function! xolox#misc#test#failed() " {{{1
+ " Record a test which failed.
+ let s:num_failed += 1
+ call s:print_feedback()
+endfunction
+
+function! s:delimit_output() " {{{1
+ " Print a delimiter between output of tests.
+ call xolox#misc#msg#info("%s", repeat("-", 40))
+endfunction
+
+function! s:print_feedback() " {{{1
+ " Let the user know the status of the test suite.
+ call xolox#misc#msg#info("Test status: %s passed, %s failed ..",
+ \ xolox#misc#format#pluralize(s:num_passed, 'assertion', 'assertions'),
+ \ xolox#misc#format#pluralize(s:num_failed, 'assertion', 'assertions'))
+endfunction
+
+function! xolox#misc#test#assert_true(expr) " {{{1
+ " Check whether an expression is true.
+ if a:expr
+ call xolox#misc#test#passed()
+ else
+ call xolox#misc#test#failed()
+ let msg = "Expected value to be true, got %s instead"
+ throw printf(msg, string(a:expr))
+ endif
+endfunction
+
+function! xolox#misc#test#assert_equals(expected, received) " {{{1
+ " Check whether two values are the same.
+ call xolox#misc#test#assert_same_type(a:expected, a:received)
+ if a:expected == a:received
+ call xolox#misc#test#passed()
+ else
+ call xolox#misc#test#failed()
+ let msg = "Expected value %s, received value %s!"
+ throw printf(msg, string(a:expected), string(a:received))
+ endif
+endfunction
+
+function! xolox#misc#test#assert_same_type(expected, received) " {{{1
+ " Check whether two values are of the same type.
+ if type(a:expected) == type(a:received)
+ call xolox#misc#test#passed()
+ else
+ call xolox#misc#test#failed()
+ let msg = "Expected value of same type as %s, got value %s!"
+ throw printf(msg, string(a:expected), string(a:received))
+ endif
+endfunction
+
+call xolox#misc#test#reset()
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/tests.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/tests.vim
new file mode 100644
index 00000000..f3af1cb8
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/tests.vim
@@ -0,0 +1,301 @@
+" Tests for the miscellaneous Vim scripts.
+"
+" Author: Peter Odding
+" Last Change: June , 2013
+" URL: http://peterodding.com/code/vim/misc/
+"
+" The Vim auto-load script `autoload/xolox/misc/tests.vim` contains the
+" automated test suite of the miscellaneous Vim scripts. Right now the
+" coverage is not very high yet, but this will improve over time.
+
+let s:use_dll = 0
+let s:can_use_dll = xolox#misc#os#can_use_dll()
+
+function! xolox#misc#tests#run() " {{{1
+ " Run the automated test suite of the miscellaneous Vim scripts. To be used
+ " interactively. Intended to be safe to execute irrespective of context.
+ call xolox#misc#test#reset()
+ " Run the tests.
+ call s:test_string_escaping()
+ call s:test_list_handling()
+ call s:test_option_handling()
+ call s:test_command_execution()
+ call s:test_string_handling()
+ call s:test_version_handling()
+ " Report a short summary to the user.
+ call xolox#misc#test#summarize()
+endfunction
+
+function! s:wrap_exec_test(function)
+ " Wrapper for tests that use xolox#misc#os#exec(). If we're on Windows and
+ " the vim-shell plug-in is installed, the test will be run twice: Once with
+ " vim-shell disabled and once with vim-shell enabled. This makes sure that
+ " all code paths are tested as much as possible.
+ call xolox#misc#msg#debug("vim-misc %s: Temporarily disabling vim-shell so we can test vim-misc ..", g:xolox#misc#version)
+ let s:use_dll = 0
+ call xolox#misc#test#wrap(a:function)
+ if s:can_use_dll
+ call xolox#misc#msg#debug("vim-misc %s: Re-enabling vim-shell so we can test that as well ..", g:xolox#misc#version)
+ let s:use_dll = 1
+ call xolox#misc#test#wrap(a:function)
+ endif
+endfunction
+
+" Tests for autoload/xolox/misc/escape.vim {{{1
+
+function! s:test_string_escaping()
+ call xolox#misc#test#wrap('xolox#misc#tests#pattern_escaping')
+ call xolox#misc#test#wrap('xolox#misc#tests#substitute_escaping')
+ call s:wrap_exec_test('xolox#misc#tests#shell_escaping')
+endfunction
+
+function! xolox#misc#tests#pattern_escaping() " {{{2
+ " Test escaping of regular expression patterns with
+ " `xolox#misc#escape#pattern()`.
+ call xolox#misc#test#assert_equals('foo [qux] baz', substitute('foo [bar] baz', xolox#misc#escape#pattern('[bar]'), '[qux]', 'g'))
+ call xolox#misc#test#assert_equals('also very nasty', substitute('also ~ nasty', xolox#misc#escape#pattern('~'), 'very', 'g'))
+endfunction
+
+function! xolox#misc#tests#substitute_escaping() " {{{2
+ " Test escaping of substitution strings with
+ " `xolox#misc#escape#substitute()`.
+ call xolox#misc#test#assert_equals('nasty & tricky stuff', substitute('tricky stuff', 'tricky', xolox#misc#escape#substitute('nasty & tricky'), 'g'))
+endfunction
+
+function! xolox#misc#tests#shell_escaping() " {{{2
+ " Test escaping of shell arguments with `xolox#misc#escape#shell()`.
+ let expected_value = 'this < is > a | very " scary ^ string '' indeed'
+ let result = xolox#misc#os#exec({'command': g:xolox#misc#test#echo . ' ' . xolox#misc#escape#shell(expected_value), 'use_dll': s:use_dll})
+ call xolox#misc#test#assert_equals(0, result['exit_code'])
+ call xolox#misc#test#assert_equals(0, result['exit_code'])
+ call xolox#misc#test#assert_same_type([], result['stdout'])
+ call xolox#misc#test#assert_equals(1, len(result['stdout']))
+ " XXX On Windows using system() there's a trailing space I can't explain.
+ " However the point of this test was to show that all characters pass
+ " through unharmed, so for now I'll just ignore the space :-)
+ call xolox#misc#test#assert_equals(expected_value, xolox#misc#str#trim(result['stdout'][0]))
+endfunction
+
+" Tests for autoload/xolox/misc/list.vim {{{1
+
+function! s:test_list_handling()
+ call xolox#misc#test#wrap('xolox#misc#tests#making_a_list_unique')
+ call xolox#misc#test#wrap('xolox#misc#tests#binary_insertion')
+endfunction
+
+function! xolox#misc#tests#making_a_list_unique() " {{{2
+ " Test removing of duplicate values from lists with
+ " `xolox#misc#list#unique()`.
+ call xolox#misc#test#assert_equals([1, 2, 3, 4, 5], xolox#misc#list#unique([1, 1, 2, 3, 3, 4, 5, 5]))
+ " Should work for strings just as well. And it should preserve order.
+ call xolox#misc#test#assert_equals(['a', 'b', 'c'], xolox#misc#list#unique(['a', 'a', 'b', 'b', 'c']))
+ " Just to make sure that lists without duplicate values pass through unharmed.
+ call xolox#misc#test#assert_equals([1, 2, 3, 4, 5], xolox#misc#list#unique([1, 2, 3, 4, 5]))
+endfunction
+
+function! xolox#misc#tests#binary_insertion() " {{{2
+ " Test the binary insertion algorithm implemented in
+ " `xolox#misc#list#binsert()`.
+ let list = ['a', 'B', 'e']
+ " Insert 'c' (should end up between 'B' and 'e').
+ call xolox#misc#list#binsert(list, 'c', 1)
+ call xolox#misc#test#assert_equals(['a', 'B', 'c', 'e'], list)
+ " Insert 'D' (should end up between 'c' and 'e').
+ call xolox#misc#list#binsert(list, 'D', 1)
+ call xolox#misc#test#assert_equals(['a', 'B', 'c', 'D', 'e'], list)
+ " Insert 'f' (should end up after 'e', at the end).
+ call xolox#misc#list#binsert(list, 'f', 1)
+ call xolox#misc#test#assert_equals(['a', 'B', 'c', 'D', 'e', 'f'], list)
+endfunction
+
+" Tests for autoload/xolox/misc/option.vim {{{1
+
+function! s:test_option_handling()
+ call xolox#misc#test#wrap('xolox#misc#tests#getting_configuration_options')
+ call xolox#misc#test#wrap('xolox#misc#tests#splitting_of_multi_valued_options')
+ call xolox#misc#test#wrap('xolox#misc#tests#joining_of_multi_valued_options')
+endfunction
+
+function! xolox#misc#tests#getting_configuration_options() " {{{2
+ " Test getting of scoped plug-in configuration "options" with
+ " `xolox#misc#option#get()`.
+ let magic_name = 'a_variable_that_none_would_use'
+ call xolox#misc#test#assert_equals(0, xolox#misc#option#get(magic_name))
+ " Test custom default values.
+ call xolox#misc#test#assert_equals([], xolox#misc#option#get(magic_name, []))
+ " Set the option as a global variable.
+ let global_value = 'global variable'
+ let g:{magic_name} = global_value
+ call xolox#misc#test#assert_equals(global_value, xolox#misc#option#get(magic_name))
+ " Set the option as a buffer local variable, thereby shadowing the global.
+ let local_value = 'buffer local variable'
+ let b:{magic_name} = local_value
+ call xolox#misc#test#assert_equals(local_value, xolox#misc#option#get(magic_name))
+ " Sanity check that it's possible to unshadow as well.
+ unlet b:{magic_name}
+ call xolox#misc#test#assert_equals(global_value, xolox#misc#option#get(magic_name))
+ " Cleanup after ourselves.
+ unlet g:{magic_name}
+ call xolox#misc#test#assert_equals(0, xolox#misc#option#get(magic_name))
+endfunction
+
+function! xolox#misc#tests#splitting_of_multi_valued_options() " {{{2
+ " Test splitting of multi-valued Vim options with
+ " `xolox#misc#option#split()`.
+ call xolox#misc#test#assert_equals([], xolox#misc#option#split(''))
+ call xolox#misc#test#assert_equals(['just one value'], xolox#misc#option#split('just one value'))
+ call xolox#misc#test#assert_equals(['value 1', 'value 2'], xolox#misc#option#split('value 1,value 2'))
+ call xolox#misc#test#assert_equals(['value 1', 'value 2', 'tricky,value'], xolox#misc#option#split('value 1,value 2,tricky\,value'))
+endfunction
+
+function! xolox#misc#tests#joining_of_multi_valued_options() " {{{2
+ " Test joining of multi-valued Vim options with `xolox#misc#option#join()`.
+ call xolox#misc#test#assert_equals('', xolox#misc#option#join([]))
+ call xolox#misc#test#assert_equals('just one value', xolox#misc#option#join(['just one value']))
+ call xolox#misc#test#assert_equals('value 1,value 2', xolox#misc#option#join(['value 1', 'value 2']))
+ call xolox#misc#test#assert_equals('value 1,value 2,tricky\,value', xolox#misc#option#join(['value 1', 'value 2', 'tricky,value']))
+endfunction
+
+" Tests for autoload/xolox/misc/os.vim {{{1
+
+function! s:test_command_execution()
+ call xolox#misc#test#wrap('xolox#misc#tests#finding_vim_on_the_search_path')
+ call s:wrap_exec_test('xolox#misc#tests#synchronous_command_execution')
+ call s:wrap_exec_test('xolox#misc#tests#synchronous_command_execution_with_stderr')
+ call s:wrap_exec_test('xolox#misc#tests#synchronous_command_execution_with_raising_of_errors')
+ call s:wrap_exec_test('xolox#misc#tests#synchronous_command_execution_without_raising_errors')
+ call s:wrap_exec_test('xolox#misc#tests#asynchronous_command_execution')
+endfunction
+
+function! xolox#misc#tests#finding_vim_on_the_search_path() " {{{2
+ " Test looking up Vim's executable on the search path using [v:progname] []
+ " with `xolox#misc#os#find_vim()`.
+ "
+ " [v:progname]: http://vimdoc.sourceforge.net/htmldoc/eval.html#v:progname
+ let pathname = xolox#misc#os#find_vim()
+ call xolox#misc#test#assert_same_type('', pathname)
+ call xolox#misc#test#assert_true(executable(pathname))
+endfunction
+
+function! xolox#misc#tests#synchronous_command_execution() " {{{2
+ " Test basic functionality of synchronous command execution with
+ " `xolox#misc#os#exec()`.
+ let result = xolox#misc#os#exec({'command': printf('%s output', g:xolox#misc#test#echo), 'use_dll': s:use_dll})
+ call xolox#misc#test#assert_same_type({}, result)
+ call xolox#misc#test#assert_equals(0, result['exit_code'])
+ call xolox#misc#test#assert_equals(['output'], result['stdout'])
+endfunction
+
+function! xolox#misc#tests#synchronous_command_execution_with_stderr() " {{{2
+ " Test basic functionality of synchronous command execution with
+ " `xolox#misc#os#exec()` including the standard error stream (not available
+ " on Windows when vim-shell is not installed).
+ if !(xolox#misc#os#is_win() && !s:use_dll)
+ let result = xolox#misc#os#exec({'command': printf('%s output && %s errors >&2', g:xolox#misc#test#echo, g:xolox#misc#test#echo), 'use_dll': s:use_dll})
+ call xolox#misc#test#assert_same_type({}, result)
+ call xolox#misc#test#assert_equals(0, result['exit_code'])
+ call xolox#misc#test#assert_equals(['output'], result['stdout'])
+ call xolox#misc#test#assert_equals(['errors'], result['stderr'])
+ endif
+endfunction
+
+function! xolox#misc#tests#synchronous_command_execution_with_raising_of_errors() " {{{2
+ " Test raising of errors during synchronous command execution with
+ " `xolox#misc#os#exec()`.
+ try
+ call xolox#misc#os#exec({'command': 'exit 1', 'use_dll': s:use_dll})
+ call xolox#misc#test#assert_true(0)
+ catch
+ call xolox#misc#test#assert_true(1)
+ endtry
+endfunction
+
+function! xolox#misc#tests#synchronous_command_execution_without_raising_errors() " {{{2
+ " Test synchronous command execution without raising of errors with
+ " `xolox#misc#os#exec()`.
+ try
+ let result = xolox#misc#os#exec({'command': 'exit 42', 'check': 0, 'use_dll': s:use_dll})
+ call xolox#misc#test#assert_true(1)
+ call xolox#misc#test#assert_equals(42, result['exit_code'])
+ catch
+ call xolox#misc#test#assert_true(0)
+ endtry
+endfunction
+
+function! xolox#misc#tests#asynchronous_command_execution() " {{{2
+ " Test the basic functionality of asynchronous command execution with
+ " `xolox#misc#os#exec()`. This runs the external command `mkdir` and tests
+ " that the side effect of creating the directory takes place. This might
+ " seem like a peculiar choice, but it's one of the few 100% portable
+ " commands (Windows + UNIX) that doesn't involve input/output streams.
+ let temporary_directory = xolox#misc#path#tempdir()
+ let random_name = printf('%i', localtime())
+ let expected_directory = xolox#misc#path#merge(temporary_directory, random_name)
+ let command = 'mkdir ' . xolox#misc#escape#shell(expected_directory)
+ let result = xolox#misc#os#exec({'command': command, 'async': 1, 'use_dll': s:use_dll})
+ call xolox#misc#test#assert_same_type({}, result)
+ " Make sure the command is really executed.
+ let timeout = localtime() + 30
+ while !isdirectory(expected_directory) && localtime() < timeout
+ sleep 500 m
+ endwhile
+ call xolox#misc#test#assert_true(isdirectory(expected_directory))
+endfunction
+
+" Tests for autoload/xolox/misc/str.vim {{{1
+
+function! s:test_string_handling()
+ call xolox#misc#test#wrap('xolox#misc#tests#string_case_transformation')
+ call xolox#misc#test#wrap('xolox#misc#tests#string_whitespace_compaction')
+ call xolox#misc#test#wrap('xolox#misc#tests#string_whitespace_trimming')
+ call xolox#misc#test#wrap('xolox#misc#tests#multiline_string_dedent')
+endfunction
+
+function! xolox#misc#tests#string_case_transformation()
+ " Test string case transformation with `xolox#misc#str#ucfirst()`.
+ call xolox#misc#test#assert_equals('Foo', xolox#misc#str#ucfirst('foo'))
+ call xolox#misc#test#assert_equals('BAR', xolox#misc#str#ucfirst('BAR'))
+endfunction
+
+function! xolox#misc#tests#string_whitespace_compaction()
+ " Test compaction of whitespace in strings with `xolox#misc#str#compact()`.
+ call xolox#misc#test#assert_equals('foo bar baz', xolox#misc#str#compact(' foo bar baz '))
+ call xolox#misc#test#assert_equals('test', xolox#misc#str#compact("\ntest "))
+endfunction
+
+function! xolox#misc#tests#string_whitespace_trimming()
+ " Test trimming of whitespace in strings with `xolox#misc#str#trim()`.
+ call xolox#misc#test#assert_equals('foo bar baz', xolox#misc#str#trim("\nfoo bar baz "))
+endfunction
+
+function! xolox#misc#tests#multiline_string_dedent()
+ " Test dedenting of multi-line strings with `xolox#misc#str#dedent()`.
+ call xolox#misc#test#assert_equals('test', xolox#misc#str#dedent(' test'))
+ call xolox#misc#test#assert_equals("1\n\n2", xolox#misc#str#dedent(" 1\n\n 2"))
+ call xolox#misc#test#assert_equals("1\n\n 2", xolox#misc#str#dedent(" 1\n\n 2"))
+endfunction
+
+" Tests for autoload/xolox/misc/version.vim {{{1
+
+function! s:test_version_handling()
+ call xolox#misc#test#wrap('xolox#misc#tests#version_string_parsing')
+ call xolox#misc#test#wrap('xolox#misc#tests#version_string_comparison')
+endfunction
+
+function! xolox#misc#tests#version_string_parsing() " {{{2
+ " Test parsing of version strings with `xolox#misc#version#parse()`.
+ call xolox#misc#test#assert_equals([1], xolox#misc#version#parse('1'))
+ call xolox#misc#test#assert_equals([1, 5], xolox#misc#version#parse('1.5'))
+ call xolox#misc#test#assert_equals([1, 22, 3333, 44444, 55555], xolox#misc#version#parse('1.22.3333.44444.55555'))
+ call xolox#misc#test#assert_equals([1, 5], xolox#misc#version#parse('1x.5y'))
+endfunction
+
+function! xolox#misc#tests#version_string_comparison() " {{{2
+ " Test comparison of version strings with `xolox#misc#version#at_least()`.
+ call xolox#misc#test#assert_true(xolox#misc#version#at_least('1', '1'))
+ call xolox#misc#test#assert_true(!xolox#misc#version#at_least('1', '0'))
+ call xolox#misc#test#assert_true(xolox#misc#version#at_least('1', '2'))
+ call xolox#misc#test#assert_true(xolox#misc#version#at_least('1.2.3', '1.2.3'))
+ call xolox#misc#test#assert_true(!xolox#misc#version#at_least('1.2.3', '1.2'))
+ call xolox#misc#test#assert_true(xolox#misc#version#at_least('1.2.3', '1.2.4'))
+endfunction
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/timer.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/timer.vim
new file mode 100644
index 00000000..079022ba
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/timer.vim
@@ -0,0 +1,62 @@
+" Timing of long during operations.
+"
+" Author: Peter Odding
+" Last Change: June 2, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+if !exists('g:timer_enabled')
+ let g:timer_enabled = 0
+endif
+
+if !exists('g:timer_verbosity')
+ let g:timer_verbosity = 1
+endif
+
+let s:has_reltime = has('reltime')
+let s:unique_marker = 'xolox#misc#timer#value'
+
+function! xolox#misc#timer#start() " {{{1
+ " Start a timer. This returns a list which can later be passed to
+ " `xolox#misc#timer#stop()`.
+ return [s:unique_marker, s:has_reltime ? reltime() : localtime()]
+endfunction
+
+function! xolox#misc#timer#stop(...) " {{{1
+ " Show a formatted debugging message to the user, if the user has enabled
+ " increased verbosity by setting Vim's ['verbose'] [verbose] option to one
+ " (1) or higher.
+ "
+ " This function has the same argument handling as Vim's [printf()] [printf]
+ " function with one difference: At the point where you want the elapsed time
+ " to be embedded, you write `%s` and you pass the list returned by
+ " `xolox#misc#timer#start()` as an argument.
+ "
+ " [verbose]: http://vimdoc.sourceforge.net/htmldoc/options.html#'verbose'
+ " [printf]: http://vimdoc.sourceforge.net/htmldoc/eval.html#printf()
+ if (g:timer_enabled || &verbose >= g:timer_verbosity)
+ call call('xolox#misc#msg#info', map(copy(a:000), 's:convert_value(v:val)'))
+ endif
+endfunction
+
+function! xolox#misc#timer#force(...) " {{{1
+ " Show a formatted message to the user. This function has the same argument
+ " handling as Vim's [printf()] [printf] function with one difference: At the
+ " point where you want the elapsed time to be embedded, you write `%s` and
+ " you pass the list returned by `xolox#misc#timer#start()` as an argument.
+ call call('xolox#misc#msg#info', map(copy(a:000), 's:convert_value(v:val)'))
+endfunction
+
+function! s:convert_value(value) " {{{1
+ if type(a:value) == type([]) && len(a:value) == 2 && a:value[0] == s:unique_marker
+ if s:has_reltime
+ let ts = xolox#misc#str#trim(reltimestr(reltime(a:value[1])))
+ else
+ let ts = localtime() - a:value[1]
+ endif
+ return xolox#misc#format#timestamp(ts)
+ else
+ return a:value
+ endif
+endfunction
+
+" vim: ts=2 sw=2 et
diff --git a/sources_non_forked/vim-misc/autoload/xolox/misc/version.vim b/sources_non_forked/vim-misc/autoload/xolox/misc/version.vim
new file mode 100644
index 00000000..0f3ad673
--- /dev/null
+++ b/sources_non_forked/vim-misc/autoload/xolox/misc/version.vim
@@ -0,0 +1,34 @@
+" Version string handling.
+"
+" Author: Peter Odding
+" Last Change: June 22, 2013
+" URL: http://peterodding.com/code/vim/misc/
+
+function! xolox#misc#version#parse(version_string)
+ " Convert a version string to a list of integers.
+ let result = map(split(a:version_string, '\.'), 'v:val + 0')
+ call xolox#misc#msg#debug("vim-misc %s: Parsed version string %s into %s.", g:xolox#misc#version, string(a:version_string), string(result))
+ return result
+endfunction
+
+function! xolox#misc#version#at_least(expected_version, available_version)
+ " Check whether the second version string is equal to or greater than the
+ " first version string. Returns 1 (true) when it is, 0 (false) otherwise.
+ let expected_version = xolox#misc#version#parse(a:expected_version)
+ let available_version = xolox#misc#version#parse(a:available_version)
+ for idx in range(max([len(expected_version), len(available_version)]))
+ let expected_number = get(expected_version, idx, 0)
+ let available_number = get(available_version, idx, 0)
+ if available_number > expected_number
+ call xolox#misc#msg#debug("vim-misc %s: Available version (%s) is higher than expected version (%s).", g:xolox#misc#version, a:available_version, a:expected_version)
+ return 1
+ elseif available_number < expected_number
+ call xolox#misc#msg#debug("vim-misc %s: Available version (%s) is lower than expected version (%s).", g:xolox#misc#version, a:available_version, a:expected_version)
+ return 0
+ endif
+ endfor
+ call xolox#misc#msg#debug("vim-misc %s: Available version (%s) is equal to expected version (%s).", g:xolox#misc#version, a:available_version, a:expected_version)
+ return 1
+endfunction
+
+" vim: ts=2 sw=2 et
diff --git a/sources_non_forked/vim-misc/doc/misc.txt b/sources_non_forked/vim-misc/doc/misc.txt
new file mode 100644
index 00000000..b16d933c
--- /dev/null
+++ b/sources_non_forked/vim-misc/doc/misc.txt
@@ -0,0 +1,866 @@
+*misc.txt* Miscellaneous auto-load Vim scripts
+
+===============================================================================
+Contents ~
+
+ 1. Introduction |misc-introduction|
+ 2. Installation |misc-installation|
+ 3. Function documentation |misc-function-documentation|
+ 1. Handling of special buffers |misc-handling-of-special-buffers|
+ 1. The |xolox#misc#buffer#is_empty()| function
+ 2. The |xolox#misc#buffer#prepare()| function
+ 3. The |xolox#misc#buffer#lock()| function
+ 4. The |xolox#misc#buffer#unlock()| function
+ 2. Tab completion for user defined commands |misc-tab-completion-for-user-defined-commands|
+ 1. The |xolox#misc#complete#keywords()| function
+ 3. String escaping functions |misc-string-escaping-functions|
+ 1. The |xolox#misc#escape#pattern()| function
+ 2. The |xolox#misc#escape#substitute()| function
+ 3. The |xolox#misc#escape#shell()| function
+ 4. Human friendly string formatting for Vim |misc-human-friendly-string-formatting-for-vim|
+ 1. The |xolox#misc#format#pluralize()| function
+ 2. The |xolox#misc#format#timestamp()| function
+ 5. List handling functions |misc-list-handling-functions|
+ 1. The |xolox#misc#list#unique()| function
+ 2. The |xolox#misc#list#binsert()| function
+ 6. Functions to interact with the user |misc-functions-to-interact-with-user|
+ 1. The |xolox#misc#msg#info()| function
+ 2. The |xolox#misc#msg#warn()| function
+ 3. The |xolox#misc#msg#debug()| function
+ 7. Integration between Vim and its environment |misc-integration-between-vim-its-environment|
+ 1. The |xolox#misc#open#file()| function
+ 2. The |xolox#misc#open#url()| function
+ 8. Vim and plug-in option handling |misc-vim-plug-in-option-handling|
+ 1. The |xolox#misc#option#get()| function
+ 2. The |xolox#misc#option#split()| function
+ 3. The |xolox#misc#option#join()| function
+ 4. The |xolox#misc#option#split_tags()| function
+ 5. The |xolox#misc#option#join_tags()| function
+ 6. The |xolox#misc#option#eval_tags()| function
+ 9. Operating system interfaces |misc-operating-system-interfaces|
+ 1. The |xolox#misc#os#is_mac()| function
+ 2. The |xolox#misc#os#is_win()| function
+ 3. The |xolox#misc#os#find_vim()| function
+ 4. The |xolox#misc#os#exec()| function
+ 5. The |xolox#misc#os#can_use_dll()| function
+ 10. Pathname manipulation functions |misc-pathname-manipulation-functions|
+ 1. The |xolox#misc#path#which()| function
+ 2. The |xolox#misc#path#split()| function
+ 3. The |xolox#misc#path#join()| function
+ 4. The |xolox#misc#path#directory_separator()| function
+ 5. The |xolox#misc#path#absolute()| function
+ 6. The |xolox#misc#path#relative()| function
+ 7. The |xolox#misc#path#merge()| function
+ 8. The |xolox#misc#path#commonprefix()| function
+ 9. The |xolox#misc#path#encode()| function
+ 10. The |xolox#misc#path#decode()| function
+ 11. The |xolox#misc#path#is_relative()| function
+ 12. The |xolox#misc#path#tempdir()| function
+ 11. String handling |misc-string-handling|
+ 1. The |xolox#misc#str#slug()| function
+ 2. The |xolox#misc#str#ucfirst()| function
+ 3. The |xolox#misc#str#compact()| function
+ 4. The |xolox#misc#str#trim()| function
+ 5. The |xolox#misc#str#indent()| function
+ 6. The |xolox#misc#str#dedent()| function
+ 12. Test runner & infrastructure for Vim plug-ins |misc-test-runner-infrastructure-for-vim-plug-ins|
+ 1. The |xolox#misc#test#reset()| function
+ 2. The |xolox#misc#test#summarize()| function
+ 3. The |xolox#misc#test#wrap()| function
+ 4. The |xolox#misc#test#passed()| function
+ 5. The |xolox#misc#test#failed()| function
+ 6. The |xolox#misc#test#assert_true()| function
+ 7. The |xolox#misc#test#assert_equals()| function
+ 8. The |xolox#misc#test#assert_same_type()| function
+ 13. Tests for the miscellaneous Vim scripts |tests-for-miscellaneous-vim-scripts|
+ 1. The |xolox#misc#tests#run()| function
+ 2. The |xolox#misc#tests#pattern_escaping()| function
+ 3. The |xolox#misc#tests#substitute_escaping()| function
+ 4. The |xolox#misc#tests#shell_escaping()| function
+ 5. The |xolox#misc#tests#making_a_list_unique()| function
+ 6. The |xolox#misc#tests#binary_insertion()| function
+ 7. The |xolox#misc#tests#getting_configuration_options()| function
+ 8. The |xolox#misc#tests#splitting_of_multi_valued_options()| function
+ 9. The |xolox#misc#tests#joining_of_multi_valued_options()| function
+ 10. The |xolox#misc#tests#finding_vim_on_the_search_path()| function
+ 11. The |xolox#misc#tests#synchronous_command_execution()| function
+ 12. The |xolox#misc#tests#synchronous_command_execution_with_stderr()| function
+ 13. The |xolox#misc#tests#synchronous_command_execution_with_raising_of_errors()|
+function
+ 14. The |xolox#misc#tests#synchronous_command_execution_without_raising_errors()|
+function
+ 15. The |xolox#misc#tests#asynchronous_command_execution()| function
+ 16. The |xolox#misc#tests#string_case_transformation()| function
+ 17. The |xolox#misc#tests#string_whitespace_compaction()| function
+ 18. The |xolox#misc#tests#string_whitespace_trimming()| function
+ 19. The |xolox#misc#tests#multiline_string_dedent()| function
+ 20. The |xolox#misc#tests#version_string_parsing()| function
+ 21. The |xolox#misc#tests#version_string_comparison()| function
+ 14. Timing of long during operations |misc-timing-of-long-during-operations|
+ 1. The |xolox#misc#timer#start()| function
+ 2. The |xolox#misc#timer#stop()| function
+ 3. The |xolox#misc#timer#force()| function
+ 15. Version string handling |misc-version-string-handling|
+ 1. The |xolox#misc#version#parse()| function
+ 2. The |xolox#misc#version#at_least()| function
+ 4. Contact |misc-contact|
+ 5. License |misc-license|
+ 6. References |misc-references|
+
+===============================================================================
+ *misc-introduction*
+Introduction ~
+
+The vim-misc plug-in contains Vim scripts that are used by most of the Vim
+plug-ins I've written [1] yet don't really belong with any single one of the
+plug-ins. Basically it's an extended standard library of Vim script functions
+that I wrote during the development of my Vim profile and plug-ins.
+
+In the past these scripts were bundled with each plug-in, however that turned
+out to be a maintenance nightmare for me. That's why the miscellaneous scripts
+are now a proper plug-in with their own page on Vim Online.
+
+Because the miscellaneous scripts are no longer bundled with my Vim plug-ins,
+users are now required to install the miscellaneous scripts separately. This is
+unfortunate for users who are upgrading from a previous release that did bundle
+the miscellaneous scripts, but I don't see any way around this. Sorry!
+
+===============================================================================
+ *misc-installation*
+Installation ~
+
+Unzip the most recent ZIP archive [2] file inside your Vim profile directory
+(usually this is '~/.vim' on UNIX and '%USERPROFILE%\vimfiles' on Windows),
+restart Vim and execute the command ':helptags ~/.vim/doc' (use ':helptags
+~\vimfiles\doc' instead on Windows).
+
+If you prefer you can also use Pathogen [3], Vundle [4] or a similar tool to
+install & update the plug-in using a local clone of the git repository.
+
+===============================================================================
+ *misc-function-documentation*
+Function documentation ~
+
+Below is the documentation for the functions included in the miscellaneous
+scripts. Anyone is free to use these functions in their own Vim profile and/or
+plug-ins. I care about backwards compatibility so won't break it without a good
+reason to do so.
+
+For those who are curious: The function descriptions given below were extracted
+from the source code of the miscellaneous scripts using the Python module
+'vimdoctool.py' included in vim-tools [5].
+
+The documentation of the 80 functions below was extracted from 15 Vim scripts
+on July 20, 2013 at 10:41.
+
+-------------------------------------------------------------------------------
+ *misc-handling-of-special-buffers*
+Handling of special buffers ~
+
+The functions defined here make it easier to deal with special Vim buffers that
+contain text generated by a Vim plug-in. For example my vim-notes plug-in [6]
+generates several such buffers:
+
+- :RecentNotes [7] lists recently modified notes
+- :ShowTaggedNotes [8] lists notes grouped by tags
+- etc.
+
+Because the text in these buffers is generated, Vim shouldn't bother with swap
+files and it should never prompt the user whether to save changes to the
+generated text.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#buffer#is_empty()* function
+
+Checks if the current buffer is an empty, unchanged buffer which can be reused.
+Returns 1 if an empty buffer is found, 0 otherwise.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#buffer#prepare()* function
+
+Open a special buffer, i.e. a buffer that will hold generated contents, not
+directly edited by the user. The buffer can be customized by passing a
+dictionary with the following key/value pairs as the first argument:
+
+- **name** (required): The base name of the buffer (i.e. the base name of the
+ file loaded in the buffer, even though it isn't really a file and nothing
+ is really 'loaded' :-)
+
+- **path** (required): The pathname of the buffer. May be relevant if |:lcd|
+ or |'autochdir'| is being used.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#buffer#lock()* function
+
+Lock a special buffer so that its contents can no longer be edited.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#buffer#unlock()* function
+
+Unlock a special buffer so that its content can be updated.
+
+-------------------------------------------------------------------------------
+ *misc-tab-completion-for-user-defined-commands*
+Tab completion for user defined commands ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#complete#keywords()* function
+
+This function can be used to perform keyword completion for user defined Vim
+commands based on the contents of the current buffer. Here's an example of how
+you would use it:
+>
+ :command -nargs=* -complete=customlist,xolox#misc#complete#keywords MyCmd call s:MyCmd()
+<
+-------------------------------------------------------------------------------
+ *misc-string-escaping-functions*
+String escaping functions ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#escape#pattern()* function
+
+Takes a single string argument and converts it into a |:substitute| /
+|substitute()| pattern string that matches the given string literally.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#escape#substitute()* function
+
+Takes a single string argument and converts it into a |:substitute| /
+|substitute()| replacement string that inserts the given string literally.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#escape#shell()* function
+
+Takes a single string argument and converts it into a quoted command line
+argument.
+
+I was going to add a long rant here about Vim's |'shellslash'| option, but
+really, it won't make any difference. Let's just suffice to say that I have yet
+to encounter a single person out there who uses this option for its intended
+purpose (running a UNIX style shell on Microsoft Windows).
+
+-------------------------------------------------------------------------------
+ *misc-human-friendly-string-formatting-for-vim*
+Human friendly string formatting for Vim ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#format#pluralize()* function
+
+Concatenate a counter (the first argument, expected to be an integer) with a
+singular or plural label (the second and third arguments, both expected to be
+strings).
+
+-------------------------------------------------------------------------------
+The *xolox#misc#format#timestamp()* function
+
+Format a time stamp (a string containing a formatted floating point number)
+into a human friendly format, for example 70 seconds is phrased as "1 minute
+and 10 seconds".
+
+-------------------------------------------------------------------------------
+ *misc-list-handling-functions*
+List handling functions ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#list#unique()* function
+
+Remove duplicate values from the given list in-place (preserves order).
+
+-------------------------------------------------------------------------------
+The *xolox#misc#list#binsert()* function
+
+Performs in-place binary insertion, which depending on your use case can be
+more efficient than calling Vim's |sort()| function after each insertion (in
+cases where a single, final sort is not an option). Expects three arguments:
+
+1. A list
+2. A value to insert
+3. 1 (true) when case should be ignored, 0 (false) otherwise
+
+-------------------------------------------------------------------------------
+ *misc-functions-to-interact-with-user*
+Functions to interact with the user ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#msg#info()* function
+
+Show a formatted informational message to the user.
+
+This function has the same argument handling as Vim's |printf()| function with
+one notable difference: Any arguments which are not numbers or strings are
+coerced to strings using Vim's |string()| function.
+
+In the case of |xolox#misc#msg#info()|, automatic string coercion simply makes
+the function a bit easier to use.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#msg#warn()* function
+
+Show a formatted warning message to the user.
+
+This function has the same argument handling as the |xolox#misc#msg#info()|
+function.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#msg#debug()* function
+
+Show a formatted debugging message to the user, _if the user has enabled
+increased verbosity by setting Vim's |'verbose'| option to one (1) or higher_.
+
+This function has the same argument handling as the |xolox#misc#msg#info()|
+function.
+
+In the case of |xolox#misc#msg#debug()|, automatic string coercion provides
+lazy evaluation in the sense that complex data structures are only converted to
+strings when the user has enabled increased verbosity.
+
+-------------------------------------------------------------------------------
+ *misc-integration-between-vim-its-environment*
+Integration between Vim and its environment ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#open#file()* function
+
+Given a pathname or URL as the first argument, this opens the file with the
+program associated with the file type. So for example a text file might open in
+Vim, an '*.html' file would probably open in your web browser and a media file
+would open in a media player.
+
+This should work on Windows, Mac OS X and most Linux distributions. If this
+fails to find a file association, you can pass one or more external commands to
+try as additional arguments. For example:
+>
+ :call xolox#misc#open#file('/path/to/my/file', 'firefox', 'google-chrome')
+<
+This generally shouldn't be necessary but it might come in handy now and then.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#open#url()* function
+
+Given a URL as the first argument, this opens the URL in your preferred or best
+available web browser:
+
+- In GUI environments a graphical web browser will open (or a new tab will be
+ created in an existing window)
+
+- In console Vim without a GUI environment, when you have any of 'lynx',
+ 'links' or 'w3m' installed it will launch a command line web browser in
+ front of Vim (temporarily suspending Vim)
+
+-------------------------------------------------------------------------------
+ *misc-vim-plug-in-option-handling*
+Vim and plug-in option handling ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#option#get()* function
+
+Expects one or two arguments: 1. The name of a variable and 2. the default
+value if the variable does not exist.
+
+Returns the value of the variable from a buffer local variable, global variable
+or the default value, depending on which is defined.
+
+This is used by some of my Vim plug-ins for option handling, so that users can
+customize options for specific buffers.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#option#split()* function
+
+Given a multi-value Vim option like |'runtimepath'| this returns a list of
+strings. For example:
+>
+ :echo xolox#misc#option#split(&runtimepath)
+ ['/home/peter/Projects/Vim/misc',
+ '/home/peter/Projects/Vim/colorscheme-switcher',
+ '/home/peter/Projects/Vim/easytags',
+ ...]
+<
+-------------------------------------------------------------------------------
+The *xolox#misc#option#join()* function
+
+Given a list of strings like the ones returned by |xolox#misc#option#split()|,
+this joins the strings together into a single value that can be used to set a
+Vim option.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#option#split_tags()* function
+
+Customized version of |xolox#misc#option#split()| with specialized handling for
+Vim's |'tags'| option.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#option#join_tags()* function
+
+Customized version of |xolox#misc#option#join()| with specialized handling for
+Vim's |'tags'| option.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#option#eval_tags()* function
+
+Evaluate Vim's |'tags'| option without looking at the file system, i.e. this
+will report tags files that don't exist yet. Expects the value of the |'tags'|
+option as the first argument. If the optional second argument is 1 (true) only
+the first match is returned, otherwise (so by default) a list with all matches
+is returned.
+
+-------------------------------------------------------------------------------
+ *misc-operating-system-interfaces*
+Operating system interfaces ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#os#is_mac()* function
+
+Returns 1 (true) when on Mac OS X, 0 (false) otherwise. You would expect this
+to simply check the Vim feature list, but for some obscure reason the
+'/usr/bin/vim' included in Mac OS X (verified on version 10.7.5) returns 0
+(false) in response to "has('mac')", so we check the output of 'uname' to avoid
+false negatives.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#os#is_win()* function
+
+Returns 1 (true) when on Microsoft Windows, 0 (false) otherwise.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#os#find_vim()* function
+
+Returns the program name of Vim as a string. On Windows and UNIX this just
+|v:progname| as an absolute pathname while on Mac OS X there is some special
+magic to find MacVim's executable even though it's usually not on the
+executable search path. If you want, you can override the value returned from
+this function by setting the global variable 'g:xolox#misc#os#vim_progname'.
+
+By default the choice of console Vim vs graphical Vim is made based on the
+value of |v:progname|, but if you have a preference you can pass the string
+'vim' or 'gvim' as the first and only argument.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#os#exec()* function
+
+Execute an external command (hiding the console on Microsoft Windows when my
+vim-shell plug-in [9] is installed).
+
+Expects a dictionary with the following key/value pairs as the first argument:
+
+- **command** (required): The command line to execute
+
+- **async** (optional): set this to 1 (true) to execute the command in the
+ background (asynchronously)
+
+- **stdin** (optional): a string or list of strings with the input for the
+ external command
+
+- **check** (optional): set this to 0 (false) to disable checking of the exit
+ code of the external command (by default an exception will be raised when
+ the command fails)
+
+Returns a dictionary with one or more of the following key/value pairs:
+
+- **command** (always available): the generated command line that was used to
+ run the external command
+
+- **exit_code** (only in synchronous mode): the exit status of the external
+ command (an integer, zero on success)
+
+- **stdout** (only in synchronous mode): the output of the command on the
+ standard output stream (a list of strings, one for each line)
+
+- **stderr** (only in synchronous mode): the output of the command on the
+ standard error stream (as a list of strings, one for each line)
+
+-------------------------------------------------------------------------------
+The *xolox#misc#os#can_use_dll()* function
+
+If a) we're on Microsoft Windows, b) the vim-shell plug-in is installed and c)
+the compiled DLL included in vim-shell works, we can use the vim-shell plug-in
+to execute external commands! Returns 1 (true) if we can use the DLL, 0 (false)
+otherwise.
+
+-------------------------------------------------------------------------------
+ *misc-pathname-manipulation-functions*
+Pathname manipulation functions ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#which()* function
+
+Scan the executable search path ('$PATH') for one or more external programs.
+Expects one or more string arguments with program names. Returns a list with
+the absolute pathnames of all found programs. Here's an example:
+>
+ :echo xolox#misc#path#which('gvim', 'vim')
+ ['/usr/local/bin/gvim',
+ '/usr/bin/gvim',
+ '/usr/local/bin/vim',
+ '/usr/bin/vim']
+<
+-------------------------------------------------------------------------------
+The *xolox#misc#path#split()* function
+
+Split a pathname (the first and only argument) into a list of pathname
+components.
+
+On Windows, pathnames starting with two slashes or backslashes are UNC paths
+where the leading slashes are significant... In this case we split like this:
+
+- Input: "'//server/share/directory'"
+- Result: "['//server', 'share', 'directory']"
+
+Everything except Windows is treated like UNIX until someone has a better
+suggestion :-). In this case we split like this:
+
+- Input: "'/foo/bar/baz'"
+- Result: "['/', 'foo', 'bar', 'baz']"
+
+To join a list of pathname components back into a single pathname string, use
+the |xolox#misc#path#join()| function.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#join()* function
+
+Join a list of pathname components (the first and only argument) into a single
+pathname string. This is the counterpart to the |xolox#misc#path#split()|
+function and it expects a list of pathname components as returned by
+|xolox#misc#path#split()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#directory_separator()* function
+
+Find the preferred directory separator for the platform and settings.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#absolute()* function
+
+Canonicalize and resolve a pathname, _regardless of whether it exists_. This is
+intended to support string comparison to determine whether two pathnames point
+to the same directory or file.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#relative()* function
+
+Make an absolute pathname (the first argument) relative to a directory (the
+second argument).
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#merge()* function
+
+Join a directory pathname and filename into a single pathname.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#commonprefix()* function
+
+Find the common prefix of path components in a list of pathnames.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#encode()* function
+
+Encode a pathname so it can be used as a filename. This uses URL encoding to
+encode special characters.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#decode()* function
+
+Decode a pathname previously encoded with |xolox#misc#path#encode()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#is_relative()* function
+
+Returns true (1) when the pathname given as the first argument is relative,
+false (0) otherwise.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#path#tempdir()* function
+
+Create a temporary directory and return the pathname of the directory.
+
+-------------------------------------------------------------------------------
+ *misc-string-handling*
+String handling ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#str#slug()* function
+
+Convert a string to a "slug" - something that can be safely used in filenames
+and URLs without worrying about quoting/escaping of special characters.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#str#ucfirst()* function
+
+Uppercase the first character in a string (the first argument).
+
+-------------------------------------------------------------------------------
+The *xolox#misc#str#compact()* function
+
+Compact whitespace in a string (the first argument).
+
+-------------------------------------------------------------------------------
+The *xolox#misc#str#trim()* function
+
+Trim all whitespace from the start and end of a string (the first argument).
+
+-------------------------------------------------------------------------------
+The *xolox#misc#str#indent()* function
+
+Indent all lines in a multi-line string (the first argument) with a specific
+number of _space characters_ (the second argument, an integer).
+
+-------------------------------------------------------------------------------
+The *xolox#misc#str#dedent()* function
+
+Remove common whitespace from a multi line string.
+
+-------------------------------------------------------------------------------
+ *misc-test-runner-infrastructure-for-vim-plug-ins*
+Test runner & infrastructure for Vim plug-ins ~
+
+The Vim auto-load script 'autoload/xolox/misc/test.vim' contains infrastructure
+that can be used to run an automated Vim plug-in test suite. It provides a
+framework for running test functions, keeping track of the test status, making
+assertions and reporting test results to the user.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#test#reset()* function
+
+Reset counters for executed tests and passed/failed assertions.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#test#summarize()* function
+
+Print a summary of test results, to be interpreted interactively.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#test#wrap()* function
+
+Call a function in a try/catch block and prevent exceptions from bubbling. The
+name of the function should be passed as the first and only argument; it should
+be a string containing the name of a Vim auto-load function.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#test#passed()* function
+
+Record a test which succeeded.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#test#failed()* function
+
+Record a test which failed.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#test#assert_true()* function
+
+Check whether an expression is true.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#test#assert_equals()* function
+
+Check whether two values are the same.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#test#assert_same_type()* function
+
+Check whether two values are of the same type.
+
+-------------------------------------------------------------------------------
+ *tests-for-miscellaneous-vim-scripts*
+Tests for the miscellaneous Vim scripts ~
+
+The Vim auto-load script 'autoload/xolox/misc/tests.vim' contains the automated
+test suite of the miscellaneous Vim scripts. Right now the coverage is not very
+high yet, but this will improve over time.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#run()* function
+
+Run the automated test suite of the miscellaneous Vim scripts. To be used
+interactively. Intended to be safe to execute irrespective of context.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#pattern_escaping()* function
+
+Test escaping of regular expression patterns with
+|xolox#misc#escape#pattern()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#substitute_escaping()* function
+
+Test escaping of substitution strings with |xolox#misc#escape#substitute()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#shell_escaping()* function
+
+Test escaping of shell arguments with |xolox#misc#escape#shell()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#making_a_list_unique()* function
+
+Test removing of duplicate values from lists with |xolox#misc#list#unique()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#binary_insertion()* function
+
+Test the binary insertion algorithm implemented in |xolox#misc#list#binsert()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#getting_configuration_options()* function
+
+Test getting of scoped plug-in configuration "options" with
+|xolox#misc#option#get()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#splitting_of_multi_valued_options()* function
+
+Test splitting of multi-valued Vim options with |xolox#misc#option#split()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#joining_of_multi_valued_options()* function
+
+Test joining of multi-valued Vim options with |xolox#misc#option#join()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#finding_vim_on_the_search_path()* function
+
+Test looking up Vim's executable on the search path using |v:progname| with
+|xolox#misc#os#find_vim()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#synchronous_command_execution()* function
+
+Test basic functionality of synchronous command execution with
+|xolox#misc#os#exec()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#synchronous_command_execution_with_stderr()* function
+
+Test basic functionality of synchronous command execution with
+|xolox#misc#os#exec()| including the standard error stream (not available on
+Windows when vim-shell is not installed).
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#synchronous_command_execution_with_raising_of_errors()*
+function
+
+Test raising of errors during synchronous command execution with
+|xolox#misc#os#exec()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#synchronous_command_execution_without_raising_errors()*
+function
+
+Test synchronous command execution without raising of errors with
+|xolox#misc#os#exec()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#asynchronous_command_execution()* function
+
+Test the basic functionality of asynchronous command execution with
+|xolox#misc#os#exec()|. This runs the external command 'mkdir' and tests that
+the side effect of creating the directory takes place. This might seem like a
+peculiar choice, but it's one of the few 100% portable commands (Windows +
+UNIX) that doesn't involve input/output streams.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#string_case_transformation()* function
+
+Test string case transformation with |xolox#misc#str#ucfirst()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#string_whitespace_compaction()* function
+
+Test compaction of whitespace in strings with |xolox#misc#str#compact()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#string_whitespace_trimming()* function
+
+Test trimming of whitespace in strings with |xolox#misc#str#trim()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#multiline_string_dedent()* function
+
+Test dedenting of multi-line strings with |xolox#misc#str#dedent()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#version_string_parsing()* function
+
+Test parsing of version strings with |xolox#misc#version#parse()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#tests#version_string_comparison()* function
+
+Test comparison of version strings with |xolox#misc#version#at_least()|.
+
+-------------------------------------------------------------------------------
+ *misc-timing-of-long-during-operations*
+Timing of long during operations ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#timer#start()* function
+
+Start a timer. This returns a list which can later be passed to
+|xolox#misc#timer#stop()|.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#timer#stop()* function
+
+Show a formatted debugging message to the user, if the user has enabled
+increased verbosity by setting Vim's |'verbose'| option to one (1) or higher.
+
+This function has the same argument handling as Vim's |printf()| function with
+one difference: At the point where you want the elapsed time to be embedded,
+you write '%s' and you pass the list returned by |xolox#misc#timer#start()| as
+an argument.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#timer#force()* function
+
+Show a formatted message to the user. This function has the same argument
+handling as Vim's |printf()| function with one difference: At the point where
+you want the elapsed time to be embedded, you write '%s' and you pass the list
+returned by |xolox#misc#timer#start()| as an argument.
+
+-------------------------------------------------------------------------------
+ *misc-version-string-handling*
+Version string handling ~
+
+-------------------------------------------------------------------------------
+The *xolox#misc#version#parse()* function
+
+Convert a version string to a list of integers.
+
+-------------------------------------------------------------------------------
+The *xolox#misc#version#at_least()* function
+
+Check whether the second version string is equal to or greater than the first
+version string. Returns 1 (true) when it is, 0 (false) otherwise.
+
+===============================================================================
+ *misc-contact*
+Contact ~
+
+If you have questions, bug reports, suggestions, etc. the author can be
+contacted at peter@peterodding.com. The latest version is available at
+http://peterodding.com/code/vim/misc and http://github.com/xolox/vim-misc. If
+you like the script please vote for it on Vim Online [10].
+
+===============================================================================
+ *misc-license*
+License ~
+
+This software is licensed under the MIT license [11]. © 2013 Peter Odding
+.
+
+===============================================================================
+ *misc-references*
+References ~
+
+[1] http://peterodding.com/code/vim/
+[2] http://peterodding.com/code/vim/downloads/misc.zip
+[3] http://www.vim.org/scripts/script.php?script_id=2332
+[4] https://github.com/gmarik/vundle
+[5] http://peterodding.com/code/vim/tools/
+[6] http://peterodding.com/code/vim/notes/
+[7] http://peterodding.com/code/vim/notes/#recentnotes_command
+[8] http://peterodding.com/code/vim/notes/#showtaggednotes_command
+[9] http://peterodding.com/code/vim/shell/
+[10] http://www.vim.org/scripts/script.php?script_id=4597
+[11] http://en.wikipedia.org/wiki/MIT_License
+
+vim: ft=help
diff --git a/sources_non_forked/vim-notes b/sources_non_forked/vim-notes
deleted file mode 160000
index 14838be7..00000000
--- a/sources_non_forked/vim-notes
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 14838be7c5330592578346ef6e69d7a198b48dbe
diff --git a/sources_non_forked/vim-notes/.gitignore b/sources_non_forked/vim-notes/.gitignore
new file mode 100644
index 00000000..9499809b
--- /dev/null
+++ b/sources_non_forked/vim-notes/.gitignore
@@ -0,0 +1,5 @@
+doc/tags
+misc/notes/index.pickle
+misc/notes/recent.txt
+misc/notes/tags.txt
+misc/notes/user/
diff --git a/sources_non_forked/vim-notes/INSTALL.md b/sources_non_forked/vim-notes/INSTALL.md
new file mode 100644
index 00000000..5e9c526d
--- /dev/null
+++ b/sources_non_forked/vim-notes/INSTALL.md
@@ -0,0 +1,13 @@
+*Please note that the vim-notes plug-in requires my vim-misc plug-in which is separately distributed.*
+
+Unzip the most recent ZIP archives of the [vim-notes] [download-notes] and [vim-misc] [download-misc] plug-ins inside your Vim profile directory (usually this is `~/.vim` on UNIX and `%USERPROFILE%\vimfiles` on Windows), restart Vim and execute the command `:helptags ~/.vim/doc` (use `:helptags ~\vimfiles\doc` instead on Windows).
+
+If you prefer you can also use [Pathogen] [pathogen], [Vundle] [vundle] or a similar tool to install & update the [vim-notes] [github-notes] and [vim-misc] [github-misc] plug-ins using a local clone of the git repository.
+
+
+[download-misc]: http://peterodding.com/code/vim/downloads/misc.zip
+[download-notes]: http://peterodding.com/code/vim/downloads/notes.zip
+[github-misc]: http://github.com/xolox/vim-misc
+[github-notes]: http://github.com/xolox/vim-notes
+[pathogen]: http://www.vim.org/scripts/script.php?script_id=2332
+[vundle]: https://github.com/gmarik/vundle
diff --git a/sources_non_forked/vim-notes/README.md b/sources_non_forked/vim-notes/README.md
new file mode 100644
index 00000000..d4da3c42
--- /dev/null
+++ b/sources_non_forked/vim-notes/README.md
@@ -0,0 +1,360 @@
+# Easy note taking in Vim
+
+The vim-notes plug-in for the [Vim text editor] [vim] makes it easy to manage your notes in Vim:
+
+ * **Starting a new note:** Execute the `:Note` command to create a new buffer and load the appropriate file type and syntax
+ * You can also start a note with Vim commands like `:edit`, `:tabedit` and `:split` by starting the filename with `note:`, as in `:edit note:todo` (the part after `note:` doesn't have to be the complete note title and if it's empty a new note will be created)
+ * You can start a new note with the selected text as title in the current window using the `\en` mapping or `:NoteFromSelectedText` command (there are similar mappings and commands for opening split windows and tab pages)
+ * **Saving notes:** Just use Vim's [:write] [write] and [:update] [update] commands, you don't need to provide a filename because it will be set based on the title (first line) of your note (you also don't need to worry about special characters, they'll be escaped)
+ * **Editing existing notes:** Execute `:Note anything` to edit a note containing `anything` in its title (if no notes are found a new one is created with its title set to `anything`)
+ * The `:Note` and `:DeleteNote` commands support tab completion of note titles
+ * **Deleting notes:** The `:DeleteNote` command enables you to delete the current note
+ * **Searching notes:** `:SearchNotes keyword …` searches for keywords and `:SearchNotes /pattern/` searches for regular expressions
+ * The `:SearchNotes` command supports tab completion of keywords and sorts candidates by relevance ([Levenshtein distance] [levenshtein])
+ * **Smart defaults:** Without an argument `:SearchNotes` searches for the word under the cursor (if the word starts with `@` that character will be included in the search, this means you can easily search for *@tagged* notes)
+ * **Back-references:** The `:RelatedNotes` command find all notes referencing the current file
+ * A [Python 2] [python] script is included that accelerates keyword searches using a keyword index
+ * The `:RecentNotes` command lists your notes by modification date, starting with the most recently edited note
+ * **Navigating between notes:** The included syntax script highlights note names as hyper links and the file type plug-in redefines [gf] [gf] to jump between notes (the [Control-w f] [ctrlwf] mapping to jump to a note in a split window and the [Control-w gf] [ctrlwgf] mapping to jump to a note in a new tab page also work)
+ * **Writing aids:** The included file type plug-in contains mappings for automatic curly quotes, arrows and list bullets and supports completion of note titles using Control-X Control-U and completion of tags using Control-X Control-O
+ * **Embedded file types:** The included syntax script supports embedded highlighting using blocks marked with `{{{type … }}}` which allows you to embed highlighted code and configuration snippets in your notes
+
+Here's a screen shot of the syntax mode using the [Slate] [slate] color scheme and the font [Monaco] [monaco]:
+
+
+
+## Install & usage
+
+*Please note that the vim-notes plug-in requires my vim-misc plug-in which is separately distributed.*
+
+Unzip the most recent ZIP archives of the [vim-notes] [download-notes] and [vim-misc] [download-misc] plug-ins inside your Vim profile directory (usually this is `~/.vim` on UNIX and `%USERPROFILE%\vimfiles` on Windows), restart Vim and execute the command `:helptags ~/.vim/doc` (use `:helptags ~\vimfiles\doc` instead on Windows). To get started execute `:Note` or `:edit note:`, this will start a new note that contains instructions on how to continue from there (and how to use the plug-in in general).
+
+If you prefer you can also use [Pathogen] [pathogen], [Vundle] [vundle] or a similar tool to install & update the [vim-notes] [github-notes] and [vim-misc] [github-misc] plug-ins using a local clone of the git repository.
+
+## Options
+
+All options have reasonable defaults so if the plug-in works after installation you don't need to change any options. The options are available for people who like to customize how the plug-in works. You can set these options in your [vimrc script] [vimrc] by including a line like this:
+
+ :let g:notes_directories = ['~/Documents/Notes', '~/Dropbox/Shared Notes']
+
+Note that after changing an option in your [vimrc script] [vimrc] you have to restart Vim for the changes to take effect.
+
+### The `g:notes_directories` option
+
+Your notes are stored in one or more directories. This option defines where you want to store your notes. Its value should be a list (there's an example above) with one or more pathnames. The default is a single value which depends on circumstances but should work for most people:
+
+ * If the profile directory where the plug-in is installed is writable, the directory `misc/notes/user` under the profile directory is used. This is for compatibility with [Pathogen] [pathogen]; the notes will be stored inside the plug-in's bundle.
+
+ * If the above doesn't work out, the default depends on the platform: `~/vimfiles/misc/notes/user` on Windows and `~/.vim/misc/notes/user` on other platforms.
+
+#### Backwards compatibility
+
+In the past the notes plug-in only supported a single directory and the corresponding option was called `g:notes_directory`. When support for multiple notes directories was introduced the option was renamed to `g:notes_directories` to reflect that the value is now a list of directory pathnames.
+
+For backwards compatibility with old configurations (all of them as of this writing :-) the notes plug-in still uses `g:notes_directory` when it is defined (its no longer defined by the plug-in). However when the plug-in warns you to change your configuration you probably should because this compatibility will be removed at some point.
+
+### The `g:notes_suffix` option
+
+The suffix to add to generated filenames. The plug-in generates filenames for your notes based on the title (first line) of each note and by default these filenames don't include an extension like `.txt`. You can use this option to make the plug-in automatically append an extension without having to embed the extension in the note's title, e.g.:
+
+ :let g:notes_suffix = '.txt'
+
+### The `g:notes_title_sync` option
+
+When you rename a file in your notes directory but don't change the title, the plug-in will notice this the next time you open the note in Vim. Likewise when you change the title in another text editor but don't rename the file. By default the plug-in will prompt you whether you want it to update the title of the note, rename the file on disk or dismiss the prompt without doing anything.
+
+If you set this option to the string `'no'` this feature will be completely disabled. If you set it to `'change_title'` it will automatically change the title to match the filename. If you set it to `'rename_file'` it will automatically rename the file on disk to match the title.
+
+### The `g:notes_smart_quotes` option
+
+By default the notes plug-in automatically performs several substitutions on the text you type in insert mode, for example regular quote marks are replaced with curly quotes. The full list of substitutions can be found below in the documentation on mappings. If you don't want the plug-in to perform these substitutions, you can set this option to zero like this:
+
+ :let g:notes_smart_quotes = 0
+
+### The `g:notes_ruler_text` option
+
+The text of the ruler line inserted when you type `***` in quick succession. It defaults to three asterisks separated by spaces, center aligned to the text width.
+
+### The `g:notes_list_bullets` option
+
+A list of characters used as list bullets. When you're using a Unicode encoding this defaults to `['•', '◦', '▸', '▹', '▪', '▫']`, otherwise it defaults to `['*', '-', '+']`.
+
+When you change the nesting level (indentation) of a line containing a bullet point using one of the mappings `Tab`, `Shift-Tab`, `Alt-Left` and `Alt-Right` the bullet point will be automatically changed to correspond to the new nesting level.
+
+The first level of list items gets the first bullet point in `g:notes_list_bullets`, the second level gets the second, etc. When you're indenting a list item to a level where the `g:notes_list_bullets` doesn't have enough bullets, the plug-in starts again at the first bullet in the list (in other words the selection of bullets wraps around).
+
+### The `g:notes_tab_indents` option
+
+By default `Tab` is mapped to indent list items and `Shift-Tab` is mapped to dedent list items. You can disable these mappings by adding the following to your [vimrc script] [vimrc]:
+
+ :let g:notes_tab_indents = 0
+
+### The `g:notes_alt_indents` option
+
+By default `Alt-Right` is mapped to indent list items and `Alt-Left` is mapped to dedent list items. You can disable these mappings by adding the following to your [vimrc script] [vimrc]:
+
+ :let g:notes_alt_indents = 0
+
+### The `g:notes_shadowdir` option
+
+The notes plug-in comes with some default notes containing documentation about the plug-in. This option defines the path of the directory containing these notes.
+
+### The `g:notes_indexfile` option
+
+This option defines the pathname of the optional keyword index used by the `:SearchNotes` to perform accelerated keyword searching.
+
+### The `g:notes_indexscript` option
+
+This option defines the pathname of the Python script that's used to perform accelerated keyword searching with `:SearchNotes`.
+
+### The `g:notes_tagsindex` option
+
+This option defines the pathname of the text file that stores the list of known tags used for tag name completion and the `:ShowTaggedNotes` command. The text file is created automatically when it's first needed, after that you can recreate it manually by executing `:IndexTaggedNotes` (see below).
+
+### The `g:notes_markdown_program` option
+
+The `:NoteToHtml` command requires the [Markdown] [markdown] program. By default the name of this program is assumed to be simply `markdown`. If you want to use a different program for Markdown to HTML conversion, set this option to the name of the program.
+
+## Commands
+
+To edit one of your existing notes (or create a new one) you can use Vim commands such as [:edit] [edit], [:split] [split] and [:tabedit] [tabedit] with a filename that starts with *note:* followed by (part of) the title of one of your notes, e.g.:
+
+ :edit note:todo
+
+This shortcut also works from the command line:
+
+ $ gvim note:todo
+
+When you don't follow *note:* with anything a new note is created like when you execute `:Note` without any arguments.
+
+### The `:Note` command
+
+When executed without any arguments this command starts a new note in the current window. If you pass one or more arguments the command will edit an existing note containing the given words in the title. If more than one note is found you'll be asked which note you want to edit. If no notes are found a new note is started with the given word(s) as title.
+
+This command will fail when changes have been made to the current buffer, unless you use `:Note!` which discards any changes.
+
+When you are using multiple directories to store your notes and you run `:Note` while editing an existing note, a new note will inherit the directory of the note from which you started. Otherwise the note is created in the first directory in `g:notes_directories`.
+
+*This command supports tab completion:* If you complete one word, all existing notes containing the given word somewhere in their title are suggested. If you type more than one word separated by spaces, the plug-in will complete only the missing words so that the resulting command line contains the complete note title and nothing more.
+
+### The `:NoteFromSelectedText` command
+
+Start a new note in the current window with the selected text as the title of the note. The name of this command isn't very well suited to daily use, that's because it's intended to be executed from a mapping. The default mapping for this command is `\en` (the backslash is actually the character defined by the [mapleader] [mapleader] variable).
+
+When you are using multiple directories to store your notes and you run `:NoteFromSelectedText` while editing an existing note, the new note will inherit the directory of the note from which it was created.
+
+### The `:SplitNoteFromSelectedText` command
+
+Same as `:NoteFromSelectedText` but opens the new note in a vertical split window. The default mapping for this command is `\sn`.
+
+### The `:TabNoteFromSelectedText` command
+
+Same as `:NoteFromSelectedText` but opens the new note in a new tab page. The default mapping for this command is `\tn`.
+
+### The `:DeleteNote` command
+
+The `:DeleteNote` command deletes a note file, destroys the buffer and removes the note from the internal cache of filenames and note titles. If you pass a note name as an argument to `:DeleteNote` it will delete the given note, otherwise it will delete the current note. This fails when changes have been made to the buffer, unless you use `:DeleteNote!` which discards any changes.
+
+### The `:SearchNotes` command
+
+This command wraps [:vimgrep] [vimgrep] and enables you to search through your notes using one or more keywords or a regular expression pattern. To search for a pattern you pass a single argument that starts/ends with a slash:
+
+ :SearchNotes /TODO\|FIXME\|XXX/
+
+To search for one or more keywords you can just omit the slashes, this matches notes containing all of the given keywords:
+
+ :SearchNotes syntax highlighting
+
+#### `:SearchNotes` understands @tags
+
+If you don't pass any arguments to the `:SearchNotes` command it will search for the word under the cursor. If the word under the cursor starts with '@' this character will be included in the search, which makes it possible to easily add *@tags* to your *@notes* and then search for those tags. To make searching for tags even easier you can create key mappings for the `:SearchNotes` command:
+
+ " Make the C-] combination search for @tags:
+ imap :SearchNotes