Showing preview only (1,068K chars total). Download the full file or copy to clipboard to get everything.
Repository: vim-syntastic/syntastic
Branch: master
Commit: 8d5e37c29cf5
Files: 287
Total size: 995.6 KB
Directory structure:
gitextract_ps_e7lm5/
├── .gitignore
├── CONTRIBUTING.md
├── LICENCE
├── README.markdown
├── autoload/
│ └── syntastic/
│ ├── c.vim
│ ├── log.vim
│ ├── postprocess.vim
│ ├── preprocess.vim
│ └── util.vim
├── doc/
│ ├── syntastic-checkers.txt
│ └── syntastic.txt
├── plugin/
│ ├── syntastic/
│ │ ├── autoloclist.vim
│ │ ├── balloons.vim
│ │ ├── checker.vim
│ │ ├── cursor.vim
│ │ ├── highlighting.vim
│ │ ├── loclist.vim
│ │ ├── modemap.vim
│ │ ├── notifiers.vim
│ │ ├── registry.vim
│ │ └── signs.vim
│ └── syntastic.vim
└── syntax_checkers/
├── actionscript/
│ └── mxmlc.vim
├── ada/
│ └── gcc.vim
├── ansible/
│ └── ansible_lint.vim
├── apiblueprint/
│ └── drafter.vim
├── applescript/
│ └── osacompile.vim
├── asciidoc/
│ ├── asciidoc.vim
│ └── proselint.vim
├── asl/
│ └── iasl.vim
├── asm/
│ └── gcc.vim
├── bemhtml/
│ └── bemhtmllint.vim
├── bro/
│ └── bro.vim
├── c/
│ ├── avrgcc.vim
│ ├── checkpatch.vim
│ ├── clang_check.vim
│ ├── clang_tidy.vim
│ ├── cppcheck.vim
│ ├── cppclean.vim
│ ├── flawfinder.vim
│ ├── gcc.vim
│ ├── make.vim
│ ├── oclint.vim
│ ├── pc_lint.vim
│ ├── sparse.vim
│ └── splint.vim
├── cabal/
│ └── cabal.vim
├── chef/
│ └── foodcritic.vim
├── cmake/
│ └── cmakelint.vim
├── co/
│ └── coco.vim
├── cobol/
│ └── cobc.vim
├── coffee/
│ ├── coffee.vim
│ ├── coffee_jshint.vim
│ └── coffeelint.vim
├── coq/
│ └── coqtop.vim
├── cpp/
│ ├── avrgcc.vim
│ ├── clang_check.vim
│ ├── clang_tidy.vim
│ ├── cppcheck.vim
│ ├── cppclean.vim
│ ├── cpplint.vim
│ ├── flawfinder.vim
│ ├── gcc.vim
│ ├── oclint.vim
│ ├── pc_lint.vim
│ └── verapp.vim
├── cs/
│ └── mcs.vim
├── css/
│ ├── csslint.vim
│ ├── mixedindentlint.vim
│ ├── phpcs.vim
│ ├── prettycss.vim
│ ├── recess.vim
│ └── stylelint.vim
├── cucumber/
│ └── cucumber.vim
├── cuda/
│ └── nvcc.vim
├── d/
│ ├── dmd.vim
│ └── dscanner.vim
├── dart/
│ └── dartanalyzer.vim
├── docbk/
│ ├── igor.vim
│ └── xmllint.vim
├── dockerfile/
│ ├── dockerfile_lint.vim
│ └── hadolint.vim
├── dustjs/
│ └── swiffer.vim
├── elixir/
│ └── elixir.vim
├── erlang/
│ ├── erlang_check_file.erl
│ ├── escript.vim
│ └── syntaxerl.vim
├── eruby/
│ └── ruby.vim
├── fortran/
│ └── gfortran.vim
├── glsl/
│ └── cgc.vim
├── go/
│ ├── go.vim
│ ├── gofmt.vim
│ ├── golangci_lint.vim
│ ├── golint.vim
│ ├── gometalinter.vim
│ ├── gotype.vim
│ └── govet.vim
├── haml/
│ ├── haml.vim
│ └── haml_lint.vim
├── handlebars/
│ └── handlebars.vim
├── haskell/
│ ├── hdevtools.vim
│ ├── hlint.vim
│ └── scan.vim
├── haxe/
│ └── haxe.vim
├── help/
│ └── proselint.vim
├── hss/
│ └── hss.vim
├── html/
│ ├── eslint.vim
│ ├── gjslint.vim
│ ├── htmlhint.vim
│ ├── jshint.vim
│ ├── proselint.vim
│ ├── stylelint.vim
│ ├── textlint.vim
│ ├── tidy.vim
│ ├── validator.vim
│ └── w3.vim
├── jade/
│ └── jade_lint.vim
├── java/
│ ├── checkstyle.vim
│ └── javac.vim
├── javascript/
│ ├── closurecompiler.vim
│ ├── eslint.vim
│ ├── flow.vim
│ ├── gjslint.vim
│ ├── jscs.vim
│ ├── jshint.vim
│ ├── jsl.vim
│ ├── jslint.vim
│ ├── jsxhint.vim
│ ├── lynt.vim
│ ├── mixedindentlint.vim
│ ├── standard.vim
│ └── tern_lint.vim
├── json/
│ ├── jsonlint.vim
│ └── jsonval.vim
├── less/
│ ├── less-lint.coffee
│ ├── less-lint.js
│ ├── lessc.vim
│ └── recess.vim
├── lex/
│ └── flex.vim
├── limbo/
│ └── limbo.vim
├── lisp/
│ └── clisp.vim
├── llvm/
│ └── llvm.vim
├── lua/
│ ├── luac.vim
│ └── luacheck.vim
├── markdown/
│ ├── mdl.vim
│ ├── proselint.vim
│ ├── remark_lint.vim
│ └── textlint.vim
├── matlab/
│ └── mlint.vim
├── mercury/
│ └── mmc.vim
├── nasm/
│ └── nasm.vim
├── nix/
│ └── nix.vim
├── nroff/
│ ├── igor.vim
│ ├── mandoc.vim
│ └── proselint.vim
├── objc/
│ ├── gcc.vim
│ └── oclint.vim
├── objcpp/
│ ├── gcc.vim
│ └── oclint.vim
├── ocaml/
│ └── camlp4o.vim
├── perl/
│ ├── perl.vim
│ ├── perlcritic.vim
│ └── podchecker.vim
├── perl6/
│ └── perl6.vim
├── php/
│ ├── php.vim
│ ├── phpcs.vim
│ ├── phplint.vim
│ ├── phpmd.vim
│ └── phpstan.vim
├── po/
│ ├── dennis.vim
│ └── msgfmt.vim
├── pod/
│ ├── podchecker.vim
│ └── proselint.vim
├── pug/
│ └── pug_lint.vim
├── puppet/
│ ├── puppet.vim
│ └── puppetlint.vim
├── python/
│ ├── bandit.vim
│ ├── codec.py
│ ├── compile.py
│ ├── flake8.vim
│ ├── frosted.vim
│ ├── mypy.vim
│ ├── pep257.vim
│ ├── pep8.vim
│ ├── prospector.vim
│ ├── py3kwarn.vim
│ ├── pycodestyle.vim
│ ├── pydocstyle.vim
│ ├── pyflakes.vim
│ ├── pylama.vim
│ ├── pylint.vim
│ └── python.vim
├── qml/
│ └── qmllint.vim
├── r/
│ ├── lint.vim
│ ├── lintr.vim
│ └── svtools.vim
├── racket/
│ ├── code-ayatollah.vim
│ └── racket.vim
├── raku/
│ └── raku.vim
├── rmd/
│ └── lintr.vim
├── rnc/
│ └── rnv.vim
├── rst/
│ ├── proselint.vim
│ ├── rst2pseudoxml.vim
│ ├── rstcheck.vim
│ └── sphinx.vim
├── ruby/
│ ├── flog.vim
│ ├── jruby.vim
│ ├── macruby.vim
│ ├── mri.vim
│ ├── reek.vim
│ ├── rubocop.vim
│ ├── rubylint.vim
│ └── sorbet.vim
├── sass/
│ ├── sass.vim
│ ├── sass_lint.vim
│ └── sassc.vim
├── scala/
│ ├── fsc.vim
│ ├── scalac.vim
│ └── scalastyle.vim
├── scss/
│ ├── mixedindentlint.vim
│ ├── sass.vim
│ ├── sass_lint.vim
│ ├── sassc.vim
│ └── scss_lint.vim
├── sh/
│ ├── bashate.vim
│ ├── checkbashisms.vim
│ ├── sh.vim
│ ├── shellcheck.vim
│ └── shfmt.vim
├── slim/
│ ├── slim_lint.vim
│ └── slimrb.vim
├── sml/
│ └── smlnj.vim
├── solidity/
│ ├── solc.vim
│ ├── solhint.vim
│ └── solium.vim
├── spec/
│ └── rpmlint.vim
├── sql/
│ ├── sqlint.vim
│ └── tsqllint.vim
├── stylus/
│ └── stylint.vim
├── svg/
│ ├── validator.vim
│ └── w3.vim
├── tcl/
│ └── nagelfar.vim
├── tex/
│ ├── chktex.vim
│ ├── lacheck.vim
│ └── proselint.vim
├── texinfo/
│ ├── makeinfo.vim
│ └── proselint.vim
├── text/
│ ├── atdtool.vim
│ ├── igor.vim
│ ├── language_check.vim
│ ├── proselint.vim
│ └── textlint.vim
├── trig/
│ └── rapper.vim
├── turtle/
│ ├── rapper.vim
│ └── ttl.vim
├── twig/
│ ├── twigcs.vim
│ └── twiglint.vim
├── typescript/
│ ├── eslint.vim
│ ├── lynt.vim
│ └── tslint.vim
├── verilog/
│ ├── iverilog.vim
│ └── verilator.vim
├── vhdl/
│ ├── ghdl.vim
│ └── vcom.vim
├── vim/
│ ├── vimlint.vim
│ └── vint.vim
├── vue/
│ ├── eslint.vim
│ ├── pug_lint_vue.vim
│ └── stylelint.vim
├── xhtml/
│ ├── jshint.vim
│ ├── proselint.vim
│ ├── tidy.vim
│ ├── validator.vim
│ └── w3.vim
├── xml/
│ ├── plutil.vim
│ └── xmllint.vim
├── xquery/
│ └── basex.vim
├── xslt/
│ └── xmllint.vim
├── yacc/
│ └── bison.vim
├── yaml/
│ ├── jsyaml.vim
│ ├── yamllint.vim
│ └── yamlxs.vim
├── yang/
│ └── pyang.vim
├── yara/
│ └── yara.vim
├── z80/
│ └── z80syntaxchecker.vim
├── zpt/
│ └── zptlint.vim
└── zsh/
└── zsh.vim
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*~
*.swp
tags
.DS_Store
================================================
FILE: CONTRIBUTING.md
================================================
# CONTRIBUTING
- - -
1\. [Deprecation note](#deprecation)
2\. [Bug reports / GitHub issues](#bugreps)
3\. [Submitting a patch](#patches)
4\. [General style notes](#generalstyle)
5\. [Syntax checker notes](#checkerstyle)
- - -
<a name="deprecation"></a>
## 1. Deprecation note
This project is no longer maintained. If you need a syntax checking plugin
for [Vim][vim] you might be interested in Syntastic's spiritual succesor,
[ALE][ale]. Although it shares no code with syntastic and it takes a very
different approach to design, [ALE][ale] can be considered a natural evolution
of syntastic in terms of goals and functionality. Check it out, you probably
won't be disappointed.
<a name="bugreps"></a>
## 2. Bug reports / GitHub issues
Please note that the preferred channel for posting bug reports is the
[issue tracker at GitHub][bug_tracker]. 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`.
<a name="patches"></a>
## 3. Submitting a patch
Before you consider adding features to syntastic, _please_ spend a few minutes
(re-)reading the latest version of the [manual][manual]. Syntastic is changing
rapidly at times, and it's possible that some features you want to add exist
already.
To submit a patch:
* fork the [repo][github] on GitHub;
* make a [topic branch][branches] 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.
<a name="generalstyle"></a>
## 4. 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][variables] to
aid readability.
<a name="checkerstyle"></a>
## 5. Syntax checker notes
Make sure to read the [guide][guide] 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%.%#'
```
[ale]: https://github.com/dense-analysis/ale
[bug_tracker]: https://github.com/vim-syntastic/syntastic/issues
[manual]: https://github.com/vim-syntastic/syntastic/blob/master/doc/syntastic.txt
[github]: https://github.com/vim-syntastic/syntastic
[branches]: https://github.com/dchelimsky/rspec/wiki/Topic-Branches#using-topic-branches-when-contributing-patches
[variables]: http://www.refactoring.com/catalog/extractVariable.html
[guide]: https://github.com/vim-syntastic/syntastic/wiki/Syntax-Checker-Guide
[vim]: http://www.vim.org/
================================================
FILE: LICENCE
================================================
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
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.
================================================
FILE: README.markdown
================================================
,
/ \,,_ .'|
,{{| /}}}}/_.' _____________________________________________
}}}}` '{{' '. / \
{{{{{ _ ;, \ / Ladies and Gentlemen, \
,}}}}}} /o`\ ` ;) | |
{{{{{{ / ( | this is ... |
}}}}}} | \ | |
{{{{{{{{ \ \ | |
}}}}}}}}} '.__ _ | | _____ __ __ _ |
{{{{{{{{ /`._ (_\ / | / ___/__ ______ / /_____ ______/ /_(_)____ |
}}}}}}' | //___/ --=: \__ \/ / / / __ \/ __/ __ `/ ___/ __/ / ___/ |
jgs `{{{{` | '--' | ___/ / /_/ / / / / /_/ /_/ (__ ) /_/ / /__ |
}}}` | /____/\__, /_/ /_/\__/\__,_/____/\__/_/\___/ |
| /____/ |
| /
\_____________________________________________/
- - -
1. [Deprecation note](#deprecation)
2. [Introduction](#introduction)
3. [Installation](#installation)
3.1. [Requirements](#requirements)
3.2. [Installing syntastic with Pathogen](#installpathogen)
4. [Recommended settings](#settings)
5. [FAQ](#faq)
5.1. [I installed syntastic but it isn't reporting any errors...](#faqinfo)
5.2. [Syntastic supports several checkers for my filetype, how do I tell it which one(s) to use?](#faqcheckers)
5.3. [How can I run checkers for "foreign" filetypes against the current file?](#faqforeign)
5.4. [I have enabled multiple checkers for the current filetype. How can I display all errors from all checkers together?](#faqaggregate)
5.5. [How can I pass additional arguments to a checker?](#faqargs)
5.6. [I run a checker and the location list is not updated...](#faqloclist)
5.6. [I run`:lopen` or `:lwindow` and the error window is empty...](#faqloclist)
5.7. [How can I jump between the different errors without using the location list at the bottom of the window?](#faqlnext)
5.8. [The error window is closed automatically when I `:quit` the current buffer but not when I `:bdelete` it?](#faqbdelete)
5.9. [My favourite checker needs to load a configuration file from the project's root rather than the current directory...](#faqconfig)
5.10. [What is the difference between syntax checkers and style checkers?](#faqstyle)
5.11. [How can I check scripts written for different versions of Python?](#faqpython)
5.12. [How can I check scripts written for different versions of Ruby?](#faqruby)
5.13. [The `perl` checker has stopped working...](#faqperl)
5.14. [What happened to the `rustc` checker?](#faqrust)
5.15. [What happened to the `tsc` checker?](#faqtsc)
5.16. [What happened to the `xcrun` checker?](#faqxcrun)
5.17. [What happened to the `valac` checker?](#faqvalac)
5.18. [What happened to the Julia `lint` checker?](#faqjulialint)
6. [Resources](#otherresources)
- - -
<a name="deprecation"></a>
## 1\. Deprecation note
This project is no longer maintained. If you need a syntax checking plugin
for [Vim][vim] you might be interested in Syntastic's spiritual succesor,
[ALE][ale]. Although it shares no code with syntastic and it takes a very
different approach to design, [ALE][ale] can be considered a natural evolution
of syntastic in terms of goals and functionality. Check it out, you probably
won't be disappointed.
<a name="introduction"></a>
## 2\. Introduction
Syntastic is a syntax checking plugin for [Vim][vim] created by
[Martin Grenfell][scrooloose]. It 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, syntastic has checking plugins for ACPI
Source Language, ActionScript, Ada, Ansible configurations, API Blueprint,
AppleScript, AsciiDoc, Assembly languages, BEMHTML, Bro, Bourne shell, C, C++,
C#, Cabal, Chef, CMake, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart,
DocBook, Dockerfile, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata,
GLSL, Go, Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON,
JSX, LESS, Lex, Limbo, LISP, LLVM intermediate language, Lua, Markdown,
MATLAB, Mercury, NASM, Nix, Objective-C, Objective-C++, OCaml, Perl, Perl
POD, PHP, gettext Portable Object, Raku, OS X and iOS property lists, Pug
(formerly Jade), Puppet, Python, QML, R, Racket, RDF TriG, RDF Turtle, Relax
NG, reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, SML, Solidity,
Sphinx, SQL, Stylus, Tcl, TeX, Texinfo, Twig, TypeScript, Verilog, VHDL, Vim
help, VimL, Vue.js, xHtml, XML, XSLT, XQuery, YACC, YAML, YANG data models,
YARA rules, z80, Zope page templates, and Zsh. See the [manual][checkers] for
details about the corresponding supported checkers (`:help syntastic-checkers`
in Vim).
A number of third-party Vim plugins also provide checkers for syntastic, for
example: [merlin][merlin], [omnisharp-vim][omnisharp], [rust.vim][rust],
[syntastic-extras][myint], [syntastic-more][roktas], [tsuquyomi][tsuquyomi],
[vim-crystal][crystal], [vim-eastwood][eastwood], and [vim-swift][swift].
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][screenshot]
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.
<a name="installation"></a>
## 3\. Installation
<a name="requirements"></a>
### 3.1\. Requirements
Syntastic itself has rather relaxed requirements: it doesn't have any external
dependencies, and it needs a version of [Vim][vim] compiled with a few common
features: `autocmd`, `eval`, `file_in_path`, `modify_fname`, `quickfix`,
`reltime`, `statusline`, and `user_commands`. Not all possible combinations of
features that include the ones above make equal sense on all operating systems,
but Vim version 7 or later with the "normal", "big", or "huge" feature sets
should be fine.
Syntastic should work with any modern plugin managers for Vim, such as
[NeoBundle][neobundle], [Pathogen][pathogen], [Vim-Addon-Manager][vam],
[Vim-Plug][plug], or [Vundle][vundle]. Instructions for installing syntastic
with [Pathogen][pathogen] are included below for completeness.
Starting with Vim version 7.4.1486 you can also load syntastic using the
standard mechanism of packages, without the help of third-party plugin managers
(see `:help packages` in Vim for details). Beware however that, while support
for packages has been added in Vim 7.4.1384, the functionality needed by
syntastic is present only in versions 7.4.1486 and later.
Last but not least: syntastic doesn't know how to do any syntax checks by
itself. In order to get meaningful results you need to install external
checkers corresponding to the types of files you use. Please consult the
[manual][checkers] (`:help syntastic-checkers` in Vim) for a list of supported
checkers.
<a name="installpathogen"></a>
### 3.2\. Installing syntastic with Pathogen
If you already have [Pathogen][pathogen] working then skip [Step 1](#step1) and go to
[Step 2](#step2).
<a name="step1"></a>
#### 3.2.1\. Step 1: Install pathogen.vim
First I'll show you how to install Tim Pope's [Pathogen][pathogen] so that it's easy to
install syntastic. Do this in your terminal so that you get the `pathogen.vim`
file and the directories it needs:
```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()
```
<a name="step2"></a>
#### 3.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 --depth=1 https://github.com/vim-syntastic/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][pathogen] 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 `execute pathogen#infect()` line to your `~/.vimrc` file
3. Did the `git clone` of syntastic inside `~/.vim/bundle`
4. Have permissions to access all of these directories.
<a name="settings"></a>
## 4\. Recommended settings
Syntastic has numerous options that can be configured, and the defaults
are not particularly well suitable for new users. It is recommended
that you start by adding the following lines to your `vimrc` file, and
return to them after reading the manual (see `:help syntastic` in Vim):
```vim
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
```
<a name="faq"></a>
## 5\. FAQ
<a name="faqinfo"></a>
__5.1. Q. I installed syntastic but it isn't reporting any errors...__
A. The most likely reason is that none of the syntax checkers that it requires
are installed. For example: by default, python requires either `flake8` or
`pylint` to be installed and in your `$PATH`. Read the [manual][checkers]
(`:help syntastic-checkers` in Vim) to find out what executables are
supported. 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`.
A second probable reason is that none of the available checkers are
enabled. Syntastic comes preconfigured with a default list of enabled checkers
per filetype, but this list is kept short in order to prevent slowing down Vim
or trying to run conflicting checks. The command `:SyntasticInfo` will show you
which checkers are enabled. You can tell syntastic which checkers (among the
available ones) you want to run by setting `g:syntastic_<filetype>_checkers` in
your `vimrc` (see [below](#faqcheckers)).
A third possible reason is that the `$PATH` seen by syntastic might not be same
as the `$PATH` in your login shell. Syntastic runs checkers using the shell
pointed to by Vim's `shell` (or by `g:syntastic_shell`, if set), and that's the
shell you need to configure to set the proper `$PATH` and environment variables
for your checkers. You can see syntastic's idea of `$PATH` by running
```vim
:echo syntastic#util#system('echo "$PATH"')
```
on UNIX and Mac OS-X systems, or
```vim
:echo syntastic#util#system('echo %PATH%')
```
on Windows.
Finally, 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 post an [issue][bug_tracker] - or better yet, create a pull request.
<a name="faqcheckers"></a>
__5.2. Q. Syntastic supports several checkers for my filetype, how do I tell it
which one(s) to use?__
A. Add a line like this to your `vimrc`:
```vim
let g:syntastic_<filetype>_checkers = ['<checker-name>']
```
To see the list of supported checkers for your filetype read the
[manual][checkers] (`:help syntastic-checkers` in Vim).
For example, 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']
```
Checkers 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 <checker>`.
For example 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_<filetype>_checkers`.
<a name="faqforeign"></a>
__5.3. Q. How can I run checkers for "foreign" filetypes against the current
file?__
A. You need to qualify the name of the "foreign" checker with the name
of its filetype. For example to check `tex` files with the checker
`language_check` (which normally acts only on files of type `text`), you can
add `text/language_check` to the list fo checkers for `tex`:
```vim
let g:syntastic_tex_checkers = ['lacheck', 'text/language_check']
```
This also works with `:SyntasticCheck`, e.g. the following command runs
`text/language_check` against the current file regardless of the current
filetype:
```vim
:SyntasticCheck text/language_check
```
Of course, the checkers specified this way need to be known to syntastic, and
they need to be shown as available when you run `:SyntasticInfo`. You can't
just make up a combination of a filetype and a program name and expect it to
work as a checker.
<a name="faqaggregate"></a>
__5.4. Q. I have enabled multiple checkers for the current filetype. How can I
display all errors from all checkers together?__
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.
<a name="faqargs"></a>
__5.5. Q. How can I pass additional arguments to a checker?__
A. In most cases a command line is constructed using an internal function
named `makeprgBuild()`, which provides a number of options that allow you to
customise every part of the command that gets run. You can set these options
using global variables.
The general form of the global `args` variable is
`syntastic_<filetype>_<checker>_args`. Thus 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.
A number of checkers don't use the `makeprgBuild()` function mentioned above,
or have additional options that can be configured. For these checkers the exact
list of options should be included in the [manual][checkers]
(`:help syntastic-checkers` in Vim).
<a name="faqloclist"></a>
__5.6. Q. I run a checker and the location list is not updated...__
__5.6. Q. I run`:lopen` or `:lwindow` and the error window is empty...__
A. By default the location list is changed only when you run the `:Errors`
command, in order to minimise conflicts with other plugins. If you want the
location list to always be updated when you run the checkers, add this line to
your `vimrc`:
```vim
let g:syntastic_always_populate_loc_list = 1
```
<a name="faqlnext"></a>
__5.7. 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 :lprevious`.
If you use these commands a lot then you may want to add shortcut mappings to
your `vimrc`, or install something like [unimpaired][unimpaired], which provides such
mappings (among other things).
<a name="faqbdelete"></a>
__5.8. 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 <silent> <C-d> :lclose<CR>:bdelete<CR>
cabbrev <silent> bd <C-r>=(getcmdtype()==#':' && getcmdpos()==1 ? 'lclose\|bdelete' : 'bd')<CR>
```
<a name="faqconfig"></a>
__5.9. My favourite checker needs to load a configuration file from the
project's root rather than the current directory...__
A. You can set up an `autocmd` to search for the configuration file in the
current directory and upwards, and add it to the checker's options when found.
For example for `jscs`:
```vim
function! FindConfig(prefix, what, where)
let cfg = findfile(a:what, escape(a:where, ' ') . ';')
return cfg !=# '' ? ' ' . a:prefix . ' ' . shellescape(cfg) : ''
endfunction
autocmd FileType javascript let b:syntastic_javascript_jscs_args =
\ get(g:, 'syntastic_javascript_jscs_args', '') .
\ FindConfig('-c', '.jscsrc', expand('<afile>:p:h', 1))
```
<a name="faqstyle"></a>
__5.10. Q. What is the difference between syntax checkers and style checkers?__
A. The errors and warnings they produce are highlighted differently and can
be filtered by different rules, but otherwise the distinction is pretty much
arbitrary. There is an ongoing effort to keep things consistent, so you can
_generally_ expect messages produced by syntax checkers to be _mostly_ related
to syntax, and messages produced by style checkers to be _mostly_ about style.
But there can be no formal guarantee that, say, a style checker that runs into
a syntax error wouldn't die with a fatal message, nor that a syntax checker
wouldn't give you warnings against using some constructs as being bad practice.
There is also no guarantee that messages marked as `style` are less severe than
the ones marked as `syntax` (whatever that might mean). And there are even a
few Frankenstein checkers (for example `flake8` and `pylama`) that, by their
nature, produce both kinds of messages. Syntastic is not smart enough to be
able to sort out these things by itself.
Generally it's more useful to look at this from the perspective of filtering
unwanted messages, rather than as an indicator of severity levels. The
distinction between syntax and style is orthogonal to the distinction between
errors and warnings, and thus you can turn off messages based on level, on
type, or both.
e.g. To disable all style messages:
```vim
let g:syntastic_quiet_messages = { "type": "style" }
```
See `:help syntastic_quiet_messages` for more information.
<a name="faqpython"></a>
__5.11. Q. How can I check scripts written for different versions of Python?__
A. Install a Python version manager such as [virtualenv][virtualenv]
or [pyenv][pyenv], activate the environment for the relevant version
of Python, and install in it the checkers you want to use. Set
`g:syntastic_python_checkers` accordingly in your `vimrc`, and run [Vim][vim]
from the virtual environment.
If you're starting Vim from a desktop manager rather than from a terminal you
might need to write wrapper scripts around your checkers, to activate the
virtual environment before running the actual checks. Then you'll need to
point the relevant `g:syntastic_python_<checker>_exec` variables to the wrapper
scripts.
<a name="faqruby"></a>
__5.12. Q. How can I check scripts written for different versions of Ruby?__
A. Install a Ruby version manager such as [rvm][rvm] or [rbenv][rbenv],
activate the relevant version of Ruby, and install in it the checkers you want
to use. Set `g:syntastic_ruby_checkers` accordingly in your `vimrc`, and run
[Vim][vim] under the relevant Ruby version.
If you're starting Vim from a desktop manager rather than from a terminal
and depending on the version manager you use you might need to write wrapper
scripts around your checkers, to activate the relevant version of Ruby
before running the actual checks. Then you'll need to point the relevant
`g:syntastic_ruby_<checker>_exec` variables to the wrapper scripts.
<a name="faqperl"></a>
__5.13. 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][perlrun]). 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
```
<a name="faqrust"></a>
__5.14. Q. What happened to the `rustc` checker?__
A. It is now part of the [rust.vim][rust] plugin. If you install this plugin the
checker should be picked up automatically by syntastic.
<a name="faqtsc"></a>
__5.15. Q. What happened to the `tsc` checker?__
A. It didn't meet people's expectations and it has been removed. The plugin
[tsuquyomi][tsuquyomi] comes packaged with a checker for TypeScript. If you
install this plugin the checker should be picked up automatically by syntastic.
<a name="faqxcrun"></a>
__5.16. Q. What happened to the `xcrun` checker?__
A. The `xcrun` checker used to have a security problem and it has been removed.
A better checker for __Swift__ is part of the [vim-swift][swift] plugin. If you
install this plugin the checker should be picked up automatically by syntastic.
<a name="faqvalac"></a>
__5.17. Q. What happened to the `valac` checker?__
A. It is now part of the [vala.vim][vala] plugin. If you install this plugin the
checker should be picked up automatically by syntastic.
<a name="julialint"></a>
__5.18. Q. What happened to the Julia `lint` checker?__
A. It was removed, since the `Lint.jl` package [has been deprecated][julialint]
and no longer works with recent Julia versions.
<a name="otherresources"></a>
## 6\. Resources
The preferred place for posting suggestions, reporting bugs, and general
discussions related to syntastic is the [issue tracker at GitHub][bug_tracker].
A guide for writing syntax checkers can be found in the [wiki][guide].
There are also a dedicated [google group][google_group], and a
[syntastic tag at StackOverflow][stack_overflow].
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 [ghcmod-vim][ghcmod], [jedi-vim][jedi], [python-mode][python_mode], [vim-go][vimgo], or
[YouCompleteMe][ycm].
[scrooloose]: https://github.com/scrooloose
[screenshot]: https://github.com/vim-syntastic/syntastic/raw/master/_assets/screenshot_1.png
[ale]: https://github.com/dense-analysis/ale
[bug_tracker]: https://github.com/vim-syntastic/syntastic/issues
[checkers]: https://github.com/vim-syntastic/syntastic/blob/master/doc/syntastic-checkers.txt
[crystal]: https://github.com/rhysd/vim-crystal
[eastwood]: https://github.com/venantius/vim-eastwood
[ghcmod]: https://github.com/eagletmt/ghcmod-vim
[google_group]: https://groups.google.com/group/vim-syntastic
[guide]: https://github.com/vim-syntastic/syntastic/wiki/Syntax-Checker-Guide
[jedi]: https://github.com/davidhalter/jedi-vim
[julialint]: https://github.com/tonyhffong/Lint.jl/issues/269
[merlin]: https://github.com/the-lambda-church/merlin
[myint]: https://github.com/myint/syntastic-extras
[neobundle]: https://github.com/Shougo/neobundle.vim
[omnisharp]: https://github.com/OmniSharp/omnisharp-vim
[pathogen]: https://github.com/tpope/vim-pathogen
[perlrun]: http://perldoc.perl.org/perlrun.html#*-c*
[plug]: https://github.com/junegunn/vim-plug/
[pyenv]: https://github.com/yyuu/pyenv
[python_mode]: https://github.com/klen/python-mode
[rbenv]: https://github.com/rbenv/rbenv
[roktas]: https://github.com/roktas/syntastic-more
[rust]: https://github.com/rust-lang/rust.vim
[rvm]: https://rvm.io/
[stack_overflow]: http://stackoverflow.com/questions/tagged/syntastic
[swift]: https://github.com/kballard/vim-swift
[tsuquyomi]: https://github.com/Quramy/tsuquyomi/
[unimpaired]: https://github.com/tpope/vim-unimpaired
[vala]: https://github.com/arrufat/vala.vim
[vam]: https://github.com/MarcWeber/vim-addon-manager
[vim]: http://www.vim.org/
[vimgo]: https://github.com/fatih/vim-go
[virtualenv]: https://virtualenv.pypa.io/en/stable/
[vundle]: https://github.com/gmarik/Vundle.vim
[ycm]: https://github.com/ycm-core/YouCompleteMe
<!--
vim:tw=79:sw=4:
-->
================================================
FILE: autoload/syntastic/c.vim
================================================
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() abort " {{{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) abort " {{{2
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: looking for', a:file)
" search upwards from the current file's directory
let config = syntastic#util#findFileInParent(a:file, expand('%:p:h', 1))
if config ==# ''
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: file not found')
return ''
endif
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: config file:', config)
if !filereadable(config)
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: file unreadable')
return ''
endif
" 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]/
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, 'ReadConfig: error reading file')
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) abort " {{{2
try
let flags = s:_get_cflags(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:_get_checker_var('g', a:filetype, a:subchecker, 'errorformat', a:options['errorformat'])
let postprocess = s:_get_checker_var('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() abort " {{{2
let s:handlers = []
let s:cflags = {}
call s:_registerHandler('\m\<cairo', 's:_checkPackage', ['cairo', 'cairo'])
call s:_registerHandler('\m\<freetype', 's:_checkPackage', ['freetype', 'freetype2', 'freetype'])
call s:_registerHandler('\m\<glade', 's:_checkPackage', ['glade', 'libglade-2.0', 'libglade'])
call s:_registerHandler('\m\<glib', 's:_checkPackage', ['glib', 'glib-2.0', 'glib'])
call s:_registerHandler('\m\<gtk', 's:_checkPackage', ['gtk', 'gtk+-2.0', 'gtk+', 'glib-2.0', 'glib'])
call s:_registerHandler('\m\<libsoup', 's:_checkPackage', ['libsoup', 'libsoup-2.4', 'libsoup-2.2'])
call s:_registerHandler('\m\<libxml', 's:_checkPackage', ['libxml', 'libxml-2.0', 'libxml'])
call s:_registerHandler('\m\<pango', 's:_checkPackage', ['pango', 'pango'])
call s:_registerHandler('\m\<SDL', 's:_checkPackage', ['sdl', 'sdl'])
call s:_registerHandler('\m\<opengl', 's:_checkPackage', ['opengl', 'gl'])
call s:_registerHandler('\m\<webkit', 's:_checkPackage', ['webkit', 'webkit-1.0'])
call s:_registerHandler('\m\<php\.h\>', 's:_checkPhp', [])
call s:_registerHandler('\m\<Python\.h\>', 's:_checkPython', [])
call s:_registerHandler('\m\<ruby', 's:_checkRuby', [])
endfunction " }}}2
" register a handler dictionary object
function! s:_registerHandler(regex, function, args) abort " {{{2
let handler = {}
let handler['regex'] = a:regex
let handler['func'] = function(a:function)
let handler['args'] = a:args
call add(s:handlers, handler)
endfunction " }}}2
" try to find library with 'pkg-config'
" search possible libraries from first to last given
" argument until one is found
function! s:_checkPackage(name, ...) abort " {{{2
if executable('pkg-config')
if !has_key(s:cflags, a:name)
for pkg in a:000
let pkg_flags = syntastic#util#system('pkg-config --cflags ' . pkg)
" since we cannot necessarily trust the pkg-config exit code
" we have to check for an error output as well
if v:shell_error == 0 && pkg_flags !~? 'not found'
let pkg_flags = ' ' . substitute(pkg_flags, "\n", '', '')
let s:cflags[a:name] = pkg_flags
return pkg_flags
endif
endfor
else
return s:cflags[a:name]
endif
endif
return ''
endfunction " }}}2
" try to find PHP includes with 'php-config'
function! s:_checkPhp() abort " {{{2
if executable('php-config')
if !has_key(s:cflags, 'php')
let s:cflags['php'] = syntastic#util#system('php-config --includes')
let s:cflags['php'] = ' ' . substitute(s:cflags['php'], "\n", '', '')
endif
return s:cflags['php']
endif
return ''
endfunction " }}}2
" try to find the python headers with distutils
function! s:_checkPython() abort " {{{2
if executable('python')
if !has_key(s:cflags, 'python')
let s:cflags['python'] = syntastic#util#system('python -c ''from distutils import ' .
\ 'sysconfig; import sys; sys.stdout.write(sysconfig.get_python_inc())''')
let s:cflags['python'] = substitute(s:cflags['python'], "\n", '', '')
let s:cflags['python'] = ' -I' . s:cflags['python']
endif
return s:cflags['python']
endif
return ''
endfunction " }}}2
" try to find the ruby headers with 'rbconfig'
function! s:_checkRuby() abort " {{{2
if executable('ruby')
if !has_key(s:cflags, 'ruby')
let s:cflags['ruby'] = syntastic#util#system('ruby -r rbconfig -e ' .
\ '''puts RbConfig::CONFIG["rubyhdrdir"] || RbConfig::CONFIG["archdir"]''')
let s:cflags['ruby'] = substitute(s:cflags['ruby'], "\n", '', '')
let s:cflags['ruby'] = ' -I' . s:cflags['ruby']
endif
return s:cflags['ruby']
endif
return ''
endfunction " }}}2
" }}}1
" Utilities {{{1
" resolve checker-related user variables
function! s:_get_checker_var(scope, filetype, subchecker, name, default) abort " {{{2
let prefix = a:scope . ':' . 'syntastic_'
if exists(prefix . a:filetype . '_' . a:subchecker . '_' . a:name)
return {a:scope}:syntastic_{a:filetype}_{a:subchecker}_{a:name}
elseif exists(prefix . a:filetype . '_' . a:name)
return {a:scope}:syntastic_{a:filetype}_{a:name}
else
return a:default
endif
endfunction " }}}2
" resolve user CFLAGS
function! s:_get_cflags(ft, ck, opts) abort " {{{2
" determine whether to parse header files as well
if has_key(a:opts, 'header_names') && expand('%', 1) =~? a:opts['header_names']
if s:_get_checker_var('g', a:ft, a:ck, 'check_header', 0)
let flags = get(a:opts, 'header_flags', '') . ' -c ' . syntastic#c#NullOutput()
else
" checking headers when check_header is unset: bail out
throw 'Syntastic: skip checks'
endif
else
let flags = get(a:opts, 'main_flags', '')
endif
let flags .= ' ' . s:_get_checker_var('g', a:ft, a:ck, 'compiler_options', '') . ' ' . s:_get_include_dirs(a:ft)
" check if the user manually set some cflags
let b_cflags = s:_get_checker_var('b', a:ft, a:ck, 'cflags', '')
if b_cflags !=# ''
let flags .= ' ' . b_cflags
endif
" add optional config file parameters
let config_file = s:_get_checker_var('b', a:ft, a:ck, 'config_file', s:_get_checker_var('g', a:ft, a:ck, 'config_file', ''))
let flags .= ' ' . syntastic#c#ReadConfig(config_file)
if b_cflags ==# '' && (a:ft ==# 'c' || a:ft ==# 'cpp') && !s:_get_checker_var('g', a:ft, a:ck, 'no_include_search', 0)
" refresh the include file search if desired
if s:_get_checker_var('g', a:ft, a:ck, 'auto_refresh_includes', 0)
let flags .= ' ' . s:_search_headers()
else
" search for header includes if not cached already
if !exists('b:syntastic_' . a:ft . '_includes')
let b:syntastic_{a:ft}_includes = s:_search_headers()
endif
let flags .= ' ' . b:syntastic_{a:ft}_includes
endif
endif
return flags
endfunction " }}}2
" get the gcc include directory argument depending on the default
" includes and the optional user-defined 'g:syntastic_c_include_dirs'
function! s:_get_include_dirs(filetype) abort " {{{2
let include_dirs = []
if a:filetype =~# '\v^%(c|cpp|objc|objcpp)$' &&
\ (!exists('g:syntastic_'.a:filetype.'_no_default_include_dirs') ||
\ !g:syntastic_{a:filetype}_no_default_include_dirs)
let include_dirs = copy(s:default_includes)
endif
if exists('g:syntastic_'.a:filetype.'_include_dirs')
call extend(include_dirs, g:syntastic_{a:filetype}_include_dirs)
endif
return join(map(syntastic#util#unique(include_dirs), 'syntastic#util#shescape("-I" . v:val)'))
endfunction " }}}2
" search the first 100 lines for include statements that are
" given in the handlers dictionary
function! s:_search_headers() abort " {{{2
let includes = ''
let files = []
let found = []
let lines = filter(getline(1, 100), 'v:val =~# ''\m^\s*#\s*include''')
" search current buffer
for line in lines
let file = matchstr(line, '\m"\zs\S\+\ze"')
if file !=# ''
call add(files, file)
continue
endif
for handler in s:handlers
if line =~# handler['regex']
let includes .= call(handler['func'], handler['args'])
call add(found, handler['regex'])
break
endif
endfor
endfor
" search included headers
for hfile in files
if hfile !=# ''
let filename = expand('%:p:h', 1) . syntastic#util#Slash() . hfile
try
let lines = readfile(filename, '', 100)
catch /\m^Vim\%((\a\+)\)\=:E484/
continue
endtry
call filter(lines, 'v:val =~# ''\m^\s*#\s*include''')
for handler in s:handlers
if index(found, handler['regex']) != -1
continue
endif
for line in lines
if line =~# handler['regex']
let includes .= call(handler['func'], handler['args'])
call add(found, handler['regex'])
break
endif
endfor
endfor
endif
endfor
return includes
endfunction " }}}2
" }}}1
" default include directories
let s:default_includes = [
\ '.',
\ '..',
\ 'include',
\ 'includes',
\ '..' . syntastic#util#Slash() . 'include',
\ '..' . syntastic#util#Slash() . 'includes' ]
call s:_init()
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: set sw=4 sts=4 et fdm=marker:
================================================
FILE: autoload/syntastic/log.vim
================================================
if exists('g:loaded_syntastic_log_autoload') || !exists('g:loaded_syntastic_plugin')
finish
endif
let g:loaded_syntastic_log_autoload = 1
let s:save_cpo = &cpo
set cpo&vim
let s:one_time_notices_issued = []
" Public functions {{{1
function! syntastic#log#info(msg) abort " {{{2
echomsg 'syntastic: info: ' . a:msg
endfunction " }}}2
function! syntastic#log#warn(msg) abort " {{{2
echohl WarningMsg
echomsg 'syntastic: warning: ' . a:msg
echohl None
endfunction " }}}2
function! syntastic#log#error(msg) abort " {{{2
execute 'normal! \<Esc>'
echohl ErrorMsg
echomsg 'syntastic: error: ' . a:msg
echohl None
endfunction " }}}2
function! syntastic#log#oneTimeWarn(msg) abort " {{{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, ...) abort " {{{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, ...) abort " {{{2
if !s:_isDebugEnabled(a:level)
return
endif
let leader = s:_log_timestamp()
call s:_logRedirect(1)
if a: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) abort " {{{2
if !s:_isDebugEnabled(a:level)
return
endif
let leader = s:_log_timestamp()
call s:_logRedirect(1)
let vlist = copy(type(a:names) == type('') ? [a:names] : a:names)
let add_shell = index(vlist, 'shell') >= 0 && &shell !=# syntastic#util#var('shell')
if !empty(vlist)
call map(vlist, "'&' . v:val . ' = ' . strtrans(string(eval('&' . v:val))) . (s:_is_modified(v:val) ? ' (!)' : '')")
if add_shell
call add(vlist, 'u:shell = ' . strtrans(string(syntastic#util#var('shell'))) . ' (!)')
endif
echomsg leader . join(vlist, ', ')
endif
call s:_logRedirect(0)
endfunction " }}}2
function! syntastic#log#debugShowVariables(level, names) abort " {{{2
if !s:_isDebugEnabled(a:level)
return
endif
let leader = s:_log_timestamp()
call s:_logRedirect(1)
let vlist = type(a:names) == type('') ? [a:names] : a:names
for name in vlist
let msg = s:_format_variable(name)
if msg !=# ''
echomsg leader . msg
endif
endfor
call s:_logRedirect(0)
endfunction " }}}2
function! syntastic#log#debugDump(level) abort " {{{2
if !s:_isDebugEnabled(a:level)
return
endif
call syntastic#log#debugShowVariables( a:level, sort(keys(g:_SYNTASTIC_DEFAULTS)) )
endfunction " }}}2
function! syntastic#log#ndebug(level, title, messages) abort " {{{2
if s:_isDebugEnabled(a:level)
return
endif
call syntastic#log#error(a:title)
if type(a:messages) == type([])
for msg in a:messages
echomsg msg
endfor
else
echomsg a:messages
endif
endfunction " }}}2
" }}}1
" Private functions {{{1
function! s:_isDebugEnabled_smart(level) abort " {{{2
return and(g:syntastic_debug, a:level)
endfunction " }}}2
function! s:_isDebugEnabled_dumb(level) abort " {{{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) abort " {{{2
if exists('g:syntastic_debug_file')
if a:on
try
execute 'redir >> ' . fnameescape(expand(g:syntastic_debug_file, 1))
catch /\m^Vim\%((\a\+)\)\=:/
silent! redir END
unlet g:syntastic_debug_file
endtry
else
silent! redir END
endif
endif
endfunction " }}}2
" }}}1
" Utilities {{{1
function! s:_log_timestamp_smart() abort " {{{2
return printf('syntastic: %f: ', reltimefloat(reltime(g:_SYNTASTIC_START)))
endfunction " }}}2
function! s:_log_timestamp_dumb() abort " {{{2
return 'syntastic: ' . split(reltimestr(reltime(g:_SYNTASTIC_START)))[0] . ': '
endfunction " }}}2
let s:_log_timestamp = function(has('float') && exists('*reltimefloat') ? 's:_log_timestamp_smart' : 's:_log_timestamp_dumb')
lockvar s:_log_timestamp
function! s:_format_variable(name) abort " {{{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
function! s:_is_modified(name) abort " {{{2
if !exists('s:option_defaults')
let s:option_defaults = {}
endif
if !has_key(s:option_defaults, a:name)
let opt_save = eval('&' . a:name)
execute 'set ' . a:name . '&'
let s:option_defaults[a:name] = eval('&' . a:name)
execute 'let &' . a:name . ' = ' . string(opt_save)
endif
return s:option_defaults[a:name] !=# eval('&' . a:name)
endfunction " }}}2
" }}}1
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: set sw=4 sts=4 et fdm=marker:
================================================
FILE: autoload/syntastic/postprocess.vim
================================================
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) abort " {{{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) abort " {{{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) abort " {{{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) abort " {{{2
return filter(copy(a:errors), 'get(v:val, "bufnr") == ' . bufnr(''))
endfunction " }}}2
" make sure line numbers are not past end of buffers
" XXX: this loads all referenced buffers in memory
function! syntastic#postprocess#guards(errors) abort " {{{2
let buffers = syntastic#util#unique(map(filter(copy(a:errors), 'v:val["valid"]'), 'str2nr(v:val["bufnr"])'))
let guards = {}
for b in buffers
let guards[b] = len(getbufline(b, 1, '$'))
endfor
for e in a:errors
if e['valid'] && e['lnum'] > guards[e['bufnr']]
let e['lnum'] = guards[e['bufnr']]
endif
endfor
return a:errors
endfunction " }}}2
" convert error messages from UTF-8 to the current encoding
function! syntastic#postprocess#iconv(errors) abort " {{{2
if has('iconv') && &encoding !=# '' && &encoding !=# 'utf-8'
for e in a:errors
let e['text'] = iconv(e['text'], "utf-8", &encoding)
endfor
endif
return a:errors
endfunction " }}}2
" }}}1
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: set sw=4 sts=4 et fdm=marker:
================================================
FILE: autoload/syntastic/preprocess.vim
================================================
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#bandit(errors) abort " {{{2
let out = []
let json = s:_decode_JSON(join(a:errors, ''))
if type(json) == type({}) && has_key(json, 'results') && type(json['results']) == type([])
for issue in json['results']
if type(issue) == type({})
try
call add(out,
\ issue['filename'] . ':' .
\ issue['line_number'] . ':' .
\ { 'LOW': 'I', 'MEDIUM': 'W', 'HIGH': 'E' }[issue['issue_severity']] . ':' .
\ issue['test_id'][1:] . ':' .
\ issue['issue_text'] .
\ ' [' . issue['test_name'] . '] (confidence: ' . issue['issue_confidence'] . ')')
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker python/bandit: unrecognized error item ' . string(issue))
let out = []
break
endtry
else
call syntastic#log#warn('checker python/bandit: unrecognized error item ' . string(issue))
endif
endfor
else
call syntastic#log#warn('checker python/bandit: unrecognized error format (crashed checker?)')
endif
return out
endfunction " }}}2
function! syntastic#preprocess#cabal(errors) abort " {{{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) abort " {{{2
let out = []
let fname = expand('%', 1)
for err in a:errors
if match(err, '\m<error\>') > -1
let line = str2nr(matchstr(err, '\m\<line="\zs\d\+\ze"'))
if line == 0
continue
endif
let col = str2nr(matchstr(err, '\m\<column="\zs\d\+\ze"'))
let type = matchstr(err, '\m\<severity="\zs.\ze')
if type !~? '^[EW]'
let type = 'E'
endif
let message = syntastic#util#decodeXMLEntities(matchstr(err, '\m\<message="\zs[^"]\+\ze"'))
call add(out, join([fname, type, line, col, message], ':'))
elseif match(err, '\m<file name="') > -1
let fname = syntastic#util#decodeXMLEntities(matchstr(err, '\v\<file name\="\zs[^"]+\ze"'))
endif
endfor
return out
endfunction " }}}2
function! syntastic#preprocess#cppcheck(errors) abort " {{{2
return map(copy(a:errors), 'substitute(v:val, ''\v^\[[^]]+\]\zs( -\> \[[^]]+\])+\ze:'', "", "")')
endfunction " }}}2
function! syntastic#preprocess#dockerfile_lint(errors) abort " {{{2
let out = []
let json = s:_decode_JSON(join(a:errors, ''))
if type(json) == type({})
try
let data = json['error']['data'] + json['warn']['data'] + json['info']['data']
for e in data
let type = toupper(e['level'][0])
if type ==# 'I'
let type = 'W'
let style = 1
else
let style = 0
endif
let line = get(e, 'line', 1)
let message = e['message']
if has_key(e, 'description') && e['description'] !=# 'None'
let message = message . '. ' . e['description']
endif
let msg =
\ type . ':' .
\ style . ':' .
\ line . ':' .
\ message
call add(out, msg)
endfor
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker dockerfile/dockerfile_lint: unrecognized error format (crashed checker?)')
let out = []
endtry
else
call syntastic#log#warn('checker dockerfile/dockerfile_lint: unrecognized error format (crashed checker?)')
endif
return out
endfunction " }}}2
function! syntastic#preprocess#dscanner(errors) abort " {{{2
let idx = 0
while idx < len(a:errors) && a:errors[idx][0] !=# '{'
let idx += 1
endwhile
let errs = s:_decode_JSON(join(a:errors[idx :], ''))
let out = []
if type(errs) == type({}) && has_key(errs, 'issues') && type(errs['issues']) == type([])
for issue in errs['issues']
try
call add(out,
\ issue['fileName'] . ':' .
\ issue['line'] . ':' .
\ issue['column'] . ':' .
\ issue['message'] . ' [' . issue['key'] . ']')
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker d/dscanner: unrecognized error item ' . string(issue))
let out = []
break
endtry
endfor
else
call syntastic#log#warn('checker d/dscanner: unrecognized error format (crashed checker?)')
endif
return out
endfunction " }}}2
function! syntastic#preprocess#flow(errors) abort " {{{2
let idx = 0
while idx < len(a:errors) && a:errors[idx][0] !=# '{'
let idx += 1
endwhile
let errs = s:_decode_JSON(join(a:errors[idx :], ''))
let out = []
if type(errs) == type({}) && has_key(errs, 'errors') && type(errs['errors']) == type([])
for e in errs['errors']
if type(e) == type({}) && has_key(e, 'message') && type(e['message']) == type([]) && len(e['message'])
let m = e['message'][0]
let t = e['message'][1:]
try
let msg =
\ m['path'] . ':' .
\ m['line'] . ':' .
\ m['start'] . ':' .
\ (m['line'] ==# m['endline'] && str2nr(m['end']) > 0 ? m['end'] . ':' : '') .
\ ' ' . m['descr']
if len(t)
let msg .= ' ' . join(map(t,
\ 'v:val["descr"] . " (" . v:val["path"] . ":" . v:val["line"] . ":" . v:val["start"] . ' .
\ '"," . (v:val["line"] !=# v:val["endline"] ? v:val["endline"] . ":" : "") . ' .
\ 'v:val["end"] . ")"'))
endif
let msg = substitute(msg, '\r', '', 'g')
let msg = substitute(msg, '\n', ' ', 'g')
call add(out, msg)
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker javascript/flow: unrecognized error format (crashed checker?)')
let out = []
break
endtry
else
call syntastic#log#warn('checker javascript/flow: unrecognized error format (crashed checker?)')
let out = []
break
endif
endfor
else
call syntastic#log#warn('checker javascript/flow: unrecognized error format (crashed checker?)')
endif
return out
endfunction " }}}2
function! syntastic#preprocess#iconv(errors) abort " {{{2
return
\ has('iconv') && &encoding !=# '' && &encoding !=# 'utf-8' ?
\ map(a:errors, 'iconv(v:val, "utf-8", &encoding)') :
\ a:errors
endfunction " }}}2
function! syntastic#preprocess#jscs(errors) abort " {{{2
let errs = join(a:errors, '')
if errs ==# ''
return []
endif
let json = s:_decode_JSON(errs)
let out = []
if type(json) == type({})
for fname in keys(json)
if type(json[fname]) == type([])
for e in json[fname]
try
let e['message'] = substitute(e['message'], "\n", ' ', 'g')
cal add(out, fname . ':' . e['line'] . ':' . e['column'] . ':' . e['message'])
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker javascript/jscs: unrecognized error item ' . string(e))
let out = []
endtry
endfor
else
call syntastic#log#warn('checker javascript/jscs: unrecognized error format (crashed checker?)')
endif
endfor
else
call syntastic#log#warn('checker javascript/jscs: unrecognized error format (crashed checker?)')
endif
return out
endfunction " }}}2
function! syntastic#preprocess#killEmpty(errors) abort " {{{2
return filter(copy(a:errors), 'v:val !=# ""')
endfunction " }}}2
function! syntastic#preprocess#lynt(errors) abort " {{{2
let errs = join(a:errors, '')
if errs ==# ''
return []
endif
let json = s:_decode_JSON(errs)
let out = []
if type(json) == type([])
for err in json
if type(err) == type({}) && type(get(err, 'filePath')) == type('') && type(get(err, 'errors')) == type([])
let fname = get(err, 'filePath')
for e in get(err, 'errors')
if type(e) == type({})
try
let line = e['line']
let col = e['column']
let ecol = line == get(e, 'endLine') ? get(e, 'endColumn') : 0
let msg = e['message'] . ' [' . e['ruleName'] . ']'
cal add(out, join([fname, line, col, ecol, msg], ':'))
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker javascript/lynt: unrecognized error item ' . string(e))
endtry
else
call syntastic#log#warn('checker javascript/lynt unrecognized error item ' . string(e))
endif
endfor
endif
endfor
else
call syntastic#log#warn('checker javascript/lynt unrecognized error format (crashed checker?)')
endif
return out
endfunction " }}}2
function! syntastic#preprocess#perl(errors) abort " {{{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#prospector(errors) abort " {{{2
let errs = join(a:errors, '')
if errs ==# ''
return []
endif
let json = s:_decode_JSON(errs)
let out = []
if type(json) == type({}) && has_key(json, 'messages')
if type(json['messages']) == type([])
for e in json['messages']
if type(e) == type({})
try
if e['source'] ==# 'pylint'
let e['location']['character'] += 1
endif
let msg =
\ e['location']['path'] . ':' .
\ e['location']['line'] . ':' .
\ e['location']['character'] . ': ' .
\ e['code'] . ' ' .
\ e['message'] . ' ' .
\ '[' . e['source'] . ']'
call add(out, msg)
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker python/prospector: unrecognized error item ' . string(e))
let out = []
break
endtry
else
call syntastic#log#warn('checker python/prospector: unrecognized error item ' . string(e))
let out = []
break
endif
endfor
else
call syntastic#log#warn('checker python/prospector: unrecognized error format (crashed checker?)')
endif
else
call syntastic#log#warn('checker python/prospector: unrecognized error format (crashed checker?)')
endif
return out
endfunction " }}}2
function! syntastic#preprocess#rparse(errors) abort " {{{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#raku(errors) abort " {{{2
if a:errors[0] ==# 'Syntax OK'
return []
endif
let errs = s:_decode_JSON(join(a:errors, ''))
let out = []
if type(errs) == type({})
try
for val in values(errs)
let line = get(val, 'line', 0)
let pos = get(val, 'pos', 0)
if pos && has('byte_offset')
let line_pos = byte2line(pos + 1)
let column = line_pos > 0 ? pos - line2byte(line_pos) + 2 : 0
else
let column = 0
endif
call add(out, join([
\ get(val, 'filename', ''),
\ line,
\ column,
\ get(val, 'message', '') ], ':'))
endfor
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker raku/raku: unrecognized error item ' . string(val))
let out = []
endtry
else
call syntastic#log#warn('checker raku/raku: unrecognized error format')
endif
return out
endfunction " }}}2
function! syntastic#preprocess#remark_lint(errors) abort " {{{2
let out = []
let fname = expand('%', 1)
for err in a:errors
if err =~# '\m^\f\+$'
let fname = err
elseif err =~# '\v^\s+\d+:\d+\s+%(warning|error)\s.*remark-lint$'
let parts = matchlist(err, '\v^\s+(\d+):(\d+)\s+([ew])\S+\s+(.{-})\s+(\S+)\s+remark-lint$')
if len(parts) >6
let line = str2nr(parts[1])
let col = str2nr(parts[2])
let type = parts[3]
let message = parts[4] . ' [' . parts[5] . ']'
call add(out, join([fname, type, line, col, message], ':'))
else
call syntastic#log#warn('checker markdown/remark_lint: unrecognized error item ' . string(err))
endif
elseif err =~# '\v^\s+\d+:\d+-\d+:\d+\s+%(warning|error)\s.*remark-lint$'
let parts = matchlist(err, '\v^\s+(\d+):(\d+)-(\d+):(\d+)\s+([ew])\S+\s+(.{-})\s+(\S+)\s+remark-lint$')
if len(parts) >8
let line1 = str2nr(parts[1])
let col1 = str2nr(parts[2])
let line2 = str2nr(parts[3])
let col2 = str2nr(parts[4]) - 1
let type = parts[5]
let message = parts[6] . ' [' . parts[7] . ']'
if line1 == line2
call add(out, join([fname, type, line1, col1, col2, message], ':'))
else
call add(out, join([fname, type, line1, col1, message], ':'))
endif
else
call syntastic#log#warn('checker markdown/remark_lint: unrecognized error item ' . string(err))
endif
endif
endfor
return out
endfunction " }}}2
function! syntastic#preprocess#scss_lint(errors) abort " {{{2
let errs = join(a:errors, '')
if errs ==# ''
return []
endif
let json = s:_decode_JSON(errs)
let out = []
if type(json) == type({})
for fname in keys(json)
if type(json[fname]) == type([])
for e in json[fname]
try
cal add(out, fname . ':' .
\ e['severity'][0] . ':' .
\ e['line'] . ':' .
\ e['column'] . ':' .
\ e['length'] . ':' .
\ ( has_key(e, 'linter') ? e['linter'] . ': ' : '' ) .
\ e['reason'])
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker scss/scss_lint: unrecognized error item ' . string(e))
let out = []
endtry
endfor
else
call syntastic#log#warn('checker scss/scss_lint: unrecognized error format (crashed checker?)')
endif
endfor
else
call syntastic#log#warn('checker scss/scss_lint: unrecognized error format (crashed checker?)')
endif
return out
endfunction " }}}2
function! syntastic#preprocess#stylelint(errors) abort " {{{2
let out = []
" CssSyntaxError: /path/to/file.css:2:11: Missed semicolon
let parts = matchlist(a:errors[0], '\v^CssSyntaxError: (.{-1,}):(\d+):(\d+): (.+)')
if len(parts) > 4
call add(out, 'E:' . join(parts[1:4], ':'))
else
let errs = s:_decode_JSON(join(a:errors, ''))
let out = []
if type(errs) == type([]) && len(errs) == 1 && type(errs[0]) == type({}) &&
\ has_key(errs[0], 'source') && has_key(errs[0], 'warnings') && type(errs[0]['warnings']) == type([])
for e in errs[0]['warnings']
try
let severity = type(e['severity']) == type(0) ? ['W', 'E'][e['severity']-1] : e['severity'][0]
let msg =
\ severity . ':' .
\ errs[0]['source'] . ':' .
\ e['line'] . ':' .
\ e['column'] . ':' .
\ e['text']
call add(out, msg)
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker css/stylelint: unrecognized error item ' . string(e))
let out = []
break
endtry
endfor
else
call syntastic#log#warn('checker css/stylelint: unrecognized error format (crashed checker?)')
endif
endif
return out
endfunction " }}}2
function! syntastic#preprocess#tern_lint(errors) abort " {{{2
let errs = join(a:errors, '')
let json = s:_decode_JSON(errs)
echomsg string(json)
let out = []
if type(json) == type({}) && has_key(json, 'messages') && type(json['messages']) == type([])
for e in json['messages']
try
let line_from = byte2line(e['from'] + 1)
if line_from > 0
let line = line_from
let column = e['from'] - line2byte(line_from) + 2
let line_to = byte2line(e['from'] + 1)
let hl = line_to == line ? e['to'] - line2byte(line_to) + 1 : 0
else
let line = 0
let column = 0
let hl = 0
endif
if column < 0
let column = 0
endif
if hl < 0
let hl = 0
endif
call add(out,
\ e['file'] . ':' .
\ e['severity'][0] . ':' .
\ line . ':' .
\ column . ':' .
\ hl . ':' .
\ e['message'])
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker javascript/tern_lint: unrecognized error item ' . string(e))
let out = []
endtry
endfor
else
call syntastic#log#warn('checker javascript/tern_lint: unrecognized error format (crashed checker?)')
endif
echomsg string(out)
return out
endfunction " }}}2
function! syntastic#preprocess#tslint(errors) abort " {{{2
return map(copy(a:errors), 'substitute(v:val, ''\v^((ERROR|WARNING): )?\zs(\([^)]+\))\s(.+)$'', ''\4 \3'', "")')
endfunction " }}}2
function! syntastic#preprocess#validator(errors) abort " {{{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
function! syntastic#preprocess#vint(errors) abort " {{{2
let errs = s:_decode_JSON(join(a:errors, ''))
let out = []
if type(errs) == type([])
for e in errs
if type(e) == type({})
try
let msg =
\ e['file_path'] . ':' .
\ e['line_number'] . ':' .
\ e['column_number'] . ':' .
\ e['severity'][0] . ': ' .
\ e['description'] . ' (' .
\ e['policy_name'] . ')'
call add(out, msg)
catch /\m^Vim\%((\a\+)\)\=:E716/
call syntastic#log#warn('checker vim/vint: unrecognized error item ' . string(e))
let out = []
break
endtry
else
call syntastic#log#warn('checker vim/vint: unrecognized error item ' . string(e))
let out = []
break
endif
endfor
else
call syntastic#log#warn('checker vim/vint: unrecognized error format (crashed checker?)')
endif
return out
endfunction " }}}2
" }}}1
" Workarounds {{{1
" In errorformat, \ or % following %f make it depend on isfname. The default
" setting of isfname is crafted to work with completion, rather than general
" filename matching. The result for syntastic is that filenames containing
" spaces (or a few other special characters) can't be matched.
"
" Fixing isfname to address this problem would depend on the set of legal
" characters for filenames on the filesystem the project's files lives on.
" Inferring the kind of filesystem a file lives on, in advance to parsing the
" file's name, is an interesting problem (think f.i. a file loaded from a VFAT
" partition, mounted on Linux). A problem syntastic is not prepared to solve.
"
" As a result, the functions below exist for the only reason to avoid using
" things like %f\, in errorformat.
"
" References:
" https://groups.google.com/forum/#!topic/vim_dev/pTKmZmouhio
" https://vimhelp.appspot.com/quickfix.txt.html#error-file-format
function! syntastic#preprocess#basex(errors) abort " {{{2
let out = []
let idx = 0
while idx < len(a:errors)
let parts = matchlist(a:errors[idx], '\v^\[\S+\] Stopped at (.+), (\d+)/(\d+):')
if len(parts) > 3
let err = parts[1] . ':' . parts[2] . ':' . parts[3] . ':'
let parts = matchlist(a:errors[idx+1], '\v^\[(.)\D+(\d+)\] (.+)')
if len(parts) > 3
let err .= (parts[1] ==? 'W' || parts[1] ==? 'E' ? parts[1] : 'E') . ':' . parts[2] . ':' . parts[3]
call add(out, err)
let idx +=1
endif
elseif a:errors[idx] =~# '\m^\['
" unparseable errors
call add(out, a:errors[idx])
endif
let idx +=1
endwhile
return out
endfunction " }}}2
function! syntastic#preprocess#bro(errors) abort " {{{2
let out = []
for e in a:errors
let parts = matchlist(e, '\v^%(fatal )?(error|warning) in (.{-1,}), line (\d+): (.+)')
if len(parts) > 4
let parts[1] = parts[1][0]
call add(out, join(parts[1:4], ':'))
endif
endfor
return out
endfunction " }}}2
function! syntastic#preprocess#coffeelint(errors) abort " {{{2
let out = []
for e in a:errors
let parts = matchlist(e, '\v^(.{-1,}),(\d+)%(,\d*)?,(error|warn),(.+)')
if len(parts) > 4
let parts[3] = parts[3][0]
call add(out, join(parts[1:4], ':'))
endif
endfor
return out
endfunction " }}}2
function! syntastic#preprocess#mypy(errors) abort " {{{2
let out = []
for e in a:errors
" column numbers
let parts = matchlist(e, '\v^(.{-1,}):(\d+):(\d+): ([ew])%(rror|arning): (.+)')
if len(parts) > 5
let parts[3] += 1
call add(out, join(parts[1:5], ':'))
continue
endif
" no column numbers
let parts = matchlist(e, '\v^(.{-1,}):(\d+): ([ew])%(rror|arning): (.+)')
if len(parts) > 4
call add(out, join(parts[1:4], ':'))
continue
endif
" obsolete format
let parts = matchlist(e, '\v^(.{-1,}), line (\d+): (.+)')
if len(parts) > 3
let parts[4] = parts[3]
let parts[3] = 'e'
call add(out, join(parts[1:4], ':'))
endif
endfor
return out
endfunction " }}}2
function! syntastic#preprocess#nix(errors) abort " {{{2
let out = []
for e in a:errors
let parts = matchlist(e, '\v^(.{-1,}), at (.{-1,}):(\d+):(\d+)$')
if len(parts) > 4
call add(out, join(parts[2:4], ':') . ':' . parts[1])
continue
endif
let parts = matchlist(e, '\v^(.{-1,}) at (.{-1,}), line (\d+):')
if len(parts) > 3
call add(out, parts[2] . ':' . parts[3] . ':' . parts[1])
continue
endif
let parts = matchlist(e, '\v^error: (.{-1,}), in (.{-1,})$')
if len(parts) > 2
call add(out, parts[2] . ':' . parts[1])
endif
endfor
return out
endfunction " }}}2
" }}}1
" Private functions {{{1
" @vimlint(EVL102, 1, l:true)
" @vimlint(EVL102, 1, l:false)
" @vimlint(EVL102, 1, l:null)
function! s:_decode_JSON(json) abort " {{{2
if a:json ==# ''
return []
endif
" The following is inspired by https://github.com/MarcWeber/vim-addon-manager and
" http://stackoverflow.com/questions/17751186/iterating-over-a-string-in-vimscript-or-parse-a-json-file/19105763#19105763
" A hat tip to Marc Weber for this trick
if substitute(a:json, '\v\"%(\\.|[^"\\])*\"|true|false|null|[+-]?\d+%(\.\d+%([Ee][+-]?\d+)?)?', '', 'g') !~# "[^,:{}[\\] \t]"
" JSON artifacts
let true = 1
let false = 0
let null = ''
try
let object = eval(a:json)
catch
" malformed JSON
let object = ''
endtry
else
let object = ''
endif
return object
endfunction " }}}2
" @vimlint(EVL102, 0, l:true)
" @vimlint(EVL102, 0, l:false)
" @vimlint(EVL102, 0, l:null)
" }}}1
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: set sw=4 sts=4 et fdm=marker:
================================================
FILE: autoload/syntastic/util.vim
================================================
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() abort " {{{2
return has('win16') || has('win32') || has('win64')
endfunction " }}}2
function! syntastic#util#DevNull() abort " {{{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
function! syntastic#util#CygwinPath(path) abort " {{{2
return substitute(syntastic#util#system('cygpath -m ' . syntastic#util#shescape(a:path)), "\n", '', 'g')
endfunction " }}}2
function! syntastic#util#system(command) abort " {{{2
let old_shell = &shell
let old_lc_messages = $LC_MESSAGES
let old_lc_all = $LC_ALL
let &shell = syntastic#util#var('shell')
let $LC_MESSAGES = 'C'
let $LC_ALL = ''
let crashed = 0
let cmd_start = reltime()
try
let out = system(a:command)
catch
if v:exception =~# '\m^Vim\%((\a\+)\)\=:\%(E145\|E484\|E684\)'
" XXX re-throwing unmodified v:exception triggers E608
throw substitute(v:exception, '.*:\(E145\|E484\|E684\).*', '\1', '')
endif
let crashed = 1
call syntastic#log#error('exception running system(' . string(a:command) . '): ' . v:exception)
if syntastic#util#isRunningWindows()
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, '$TMP = ' . string($TMP) . ', $TEMP = ' . string($TEMP))
else
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, '$TERM = ' . string($TERM))
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_CHECKERS, '$TMPDIR = ' . string($TMPDIR))
endif
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, '$PATH = ' . string($PATH))
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'getcwd() = ' . string(getcwd()))
call syntastic#log#debugShowOptions(g:_SYNTASTIC_DEBUG_TRACE, g:_SYNTASTIC_SHELL_OPTIONS)
let out = ''
endtry
let cmd_time = split(reltimestr(reltime(cmd_start)))[0]
let $LC_ALL = old_lc_all
let $LC_MESSAGES = old_lc_messages
let &shell = old_shell
if !crashed && exists('g:_SYNTASTIC_DEBUG_TRACE')
call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, 'system: command run in ' . cmd_time . 's')
endif
return out
endfunction " }}}2
" Create a temporary directory
function! syntastic#util#tmpdir() abort " {{{2
let tempdir = ''
if (has('unix') || has('mac')) && executable('mktemp') && !has('win32unix')
" TODO: option "-t" to mktemp(1) is not portable
let tmp = $TMPDIR !=# '' ? $TMPDIR : $TMP !=# '' ? $TMP : '/tmp'
let out = split(syntastic#util#system('mktemp -q -d ' . tmp . '/vim-syntastic-' . s:_fuzz() . '-XXXXXXXX'), "\n")
if v:shell_error == 0 && len(out) == 1
let tempdir = out[0]
endif
endif
if tempdir ==# ''
if has('win32') || has('win64')
let tempdir = $TEMP . syntastic#util#Slash() . 'vim-syntastic-' . s:_fuzz()
elseif has('win32unix')
let tempdir = syntastic#util#CygwinPath('/tmp/vim-syntastic-' . s:_fuzz())
elseif $TMPDIR !=# ''
let tempdir = $TMPDIR . '/vim-syntastic-' . s:_fuzz()
else
let tempdir = '/tmp/vim-syntastic-' . s:_fuzz()
endif
try
call mkdir(tempdir, 'p', 0700)
catch /\m^Vim\%((\a\+)\)\=:E739/
call syntastic#log#error(v:exception)
let tempdir = '.'
endtry
endif
return tempdir
endfunction " }}}2
" Recursively remove a directory
function! syntastic#util#rmrf(what) abort " {{{2
" try to make sure we don't delete directories we didn't create
if a:what !~? 'vim-syntastic-'
return
endif
if getftype(a:what) ==# 'dir'
call s:_delete(a:what, 'rf')
else
silent! call delete(a:what)
endif
endfunction " }}}2
function! syntastic#util#getbufvar(buf, name, ...) abort " {{{2
return a:0 ? s:_getbufvar(a:buf, a:name, a:1) : getbufvar(a:buf, a:name)
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(buf) abort " {{{2
for lnum in range(1, 5)
let line = get(getbufline(a:buf, lnum), 0, '')
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 Vim variable. Allow buffer variables to override global ones.
function! syntastic#util#bufRawVar(buf, name, ...) abort " {{{2
return s:_getbufvar(a:buf, a:name, get(g:, a:name, a:0 ? a:1 : ''))
endfunction "}}}2
" Get the value of a syntastic variable. Allow buffer variables to override global ones.
function! syntastic#util#bufVar(buf, name, ...) abort " {{{2
return call('syntastic#util#bufRawVar', [a:buf, 'syntastic_' . a:name] + a:000)
endfunction "}}}2
" Get the value of a Vim variable. Allow local variables to override global ones.
function! syntastic#util#rawVar(name, ...) abort " {{{2
return get(b:, a:name, get(g:, a:name, a:0 ? a:1 : ''))
endfunction " }}}2
" Get the value of a syntastic variable. Allow local variables to override global ones.
function! syntastic#util#var(name, ...) abort " {{{2
return call('syntastic#util#rawVar', ['syntastic_' . a:name] + a:000)
endfunction " }}}2
" Parse a version string. Return an array of version components.
function! syntastic#util#parseVersion(version, ...) abort " {{{2
return map(split(matchstr( a:version, a:0 ? a:1 : '\v^\D*\zs\d+(\.\d+)+\ze' ), '\m\.'), 'str2nr(v:val)')
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) abort " {{{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) abort " {{{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
" still here, thus everything matched
return 0
endfunction " }}}2
function! syntastic#util#screenWidth(str, tabstop) abort " {{{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) abort " {{{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) abort " {{{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 named a:what; return path to that file
function! syntastic#util#findFileInParent(what, where) abort " {{{2
let old_suffixesadd = &suffixesadd
let &suffixesadd = ''
let file = findfile(a:what, escape(a:where, ' ,') . ';')
let &suffixesadd = old_suffixesadd
return file
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#findGlobInParent(what, where) abort " {{{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 !=# ''
try
" Vim 7.4.279 and later
let p = globpath(here, a:what, 1, 1)
catch /\m^Vim\%((\a\+)\)\=:E118/
let p = split(globpath(here, a:what, 1), "\n")
endtry
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 the buffer number of a filename
" @vimlint(EVL104, 1, l:old_shellslash)
function! syntastic#util#fname2buf(fname) abort " {{{2
if exists('+shellslash')
" bufnr() can't cope with backslashes
let old_shellslash = &shellslash
let &shellslash = 1
endif
" this is a best-effort attempt to escape file patterns (cf. :h file-pattern)
" XXX it fails for filenames containing something like \{2,3}
let buf = -1
for md in [':~:.', ':~', ':p']
try
" Older versions of Vim can throw E94 here
let buf = bufnr('^' . escape(fnamemodify(a:fname, md), '\*?,{}[') . '$')
catch
" catch everything
endtry
if buf != -1
break
endif
endfor
if buf == -1
" XXX definitely wrong, but hope is the last thing to die :)
let buf = bufnr(fnamemodify(a:fname, ':p'))
endif
if exists('+shellslash')
let &shellslash = old_shellslash
endif
return buf
endfunction " }}}2
" @vimlint(EVL104, 0, l:old_shellslash)
" Returns unique elements in a list
function! syntastic#util#unique(list) abort " {{{2
let seen = {}
let uniques = []
for e in a:list
let k = string(e)
if !has_key(seen, k)
let seen[k] = 1
call add(uniques, e)
endif
endfor
return uniques
endfunction " }}}2
" A less noisy shellescape()
function! syntastic#util#shescape(string) abort " {{{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, ...) abort " {{{2
return syntastic#util#shescape(a:0 ? expand(a:string, a:1) : expand(a:string, 1))
endfunction " }}}2
" Escape arguments
function! syntastic#util#argsescape(opt) abort " {{{2
if type(a:opt) == type('') && a:opt !=# ''
return [a:opt]
elseif type(a:opt) == type([])
return map(copy(a:opt), 'syntastic#util#shescape(v:val)')
endif
return []
endfunction " }}}2
" Decode XML entities
function! syntastic#util#decodeXMLEntities(string) abort " {{{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) abort " {{{2
if a:full
redraw!
else
redraw
endif
endfunction " }}}2
function! syntastic#util#dictFilter(errors, filter) abort " {{{2
let rules = s:_translateFilter(a:filter)
" call syntastic#log#debug(g:_SYNTASTIC_DEBUG_TRACE, "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 [seconds, fractions] list of strings, representing the
" (hopefully high resolution) time since program start
function! syntastic#util#stamp() abort " {{{2
return split( split(reltimestr(reltime(g:_SYNTASTIC_START)))[0], '\.' )
endfunction " }}}2
function! syntastic#util#setLastTick(buf) abort " {{{2
call setbufvar(a:buf, 'syntastic_lasttick', getbufvar(a:buf, 'changedtick'))
endfunction " }}}2
" Add unique IDs to windows
function! syntastic#util#setWids() abort " {{{2
for tab in range(1, tabpagenr('$'))
for win in range(1, tabpagewinnr(tab, '$'))
if gettabwinvar(tab, win, 'syntastic_wid') ==# ''
call settabwinvar(tab, win, 'syntastic_wid', s:_wid_base . s:_wid_pool)
let s:_wid_pool += 1
endif
endfor
endfor
endfunction " }}}2
function! syntastic#util#str2float(val) abort " {{{2
return s:_str2float(a:val)
endfunction " }}}2
function! syntastic#util#float2str(val) abort " {{{2
return s:_float2str(a:val)
endfunction " }}}2
" Crude printf()-like width formatter. Handles wide characters.
function! syntastic#util#wformat(format, str) abort " {{{2
if a:format ==# ''
return a:str
endif
echomsg string(a:format) . ', ' . string(a:str)
let specs = matchlist(a:format, '\v^(-?)(0?)(%([1-9]\d*))?%(\.(\d+))?$')
if len(specs) < 5
return a:str
endif
let flushleft = specs[1] ==# '-'
let lpad = specs[2] ==# '0' ? '0' : ' '
let minlen = str2nr(specs[3])
let maxlen = str2nr(specs[4])
let out = substitute(a:str, "\t", ' ', 'g')
if maxlen && s:_width(out) > maxlen
let chars = filter(split(out, '\zs\ze', 1), 'v:val !=# ""')
let out = ''
if flushleft
for c in chars
if s:_width(out . c) < maxlen
let out .= c
else
let out .= &encoding ==# 'utf-8' && &termencoding ==# 'utf-8' ? "\u2026" : '>'
break
endif
endfor
else
call reverse(chars)
for c in chars
if s:_width(c . out) < maxlen
let out = c . out
else
let out = (&encoding ==# 'utf-8' && &termencoding ==# 'utf-8' ? "\u2026" : '<') . out
break
endif
endfor
endif
endif
if minlen && s:_width(out) < minlen
if flushleft
let out .= repeat(' ', minlen - s:_width(out))
else
let out = repeat(lpad, minlen - s:_width(out)) . out
endif
endif
return out
endfunction " }}}2
" }}}1
" Private functions {{{1
function! s:_translateFilter(filters) abort " {{{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) abort " {{{2
let fkey = a:key
if fkey[0] ==# '!'
let fkey = fkey[1:]
let not = 1
else
let not = 0
endif
if fkey ==? 'level'
let op = not ? ' ==? ' : ' !=? '
let ret = 'v:val["type"]' . op . string(a:term[0])
elseif fkey ==? 'type'
if a:term ==? 'style'
let op = not ? ' ==? ' : ' !=? '
let ret = 'get(v:val, "subtype", "")' . op . '"style"'
else
let op = not ? '!' : ''
let ret = op . 'has_key(v:val, "subtype")'
endif
elseif fkey ==? 'regex'
let op = not ? ' =~? ' : ' !~? '
let ret = 'v:val["text"]' . op . string(a:term)
elseif fkey ==? 'file' || fkey[:4] ==? 'file:'
let op = not ? ' =~# ' : ' !~# '
let ret = 'bufname(str2nr(v:val["bufnr"]))'
let mod = fkey[4:]
if mod !=# ''
let ret = 'fnamemodify(' . ret . ', ' . string(mod) . ')'
endif
let ret .= op . string(a:term)
else
call syntastic#log#warn('quiet_messages: ignoring invalid key ' . strtrans(string(fkey)))
let ret = '1'
endif
return ret
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
" @vimlint(EVL103, 1, a:flags)
function! s:_delete_dumb(what, flags) abort " {{{2
if !exists('s:rmrf')
let s:rmrf =
\ has('unix') || has('mac') ? 'rm -rf' :
\ has('win32') || has('win64') ? 'rmdir /S /Q' :
\ has('win16') || has('win95') || has('dos16') || has('dos32') ? 'deltree /Y' : ''
endif
if s:rmrf !=# ''
silent! call syntastic#util#system(s:rmrf . ' ' . syntastic#util#shescape(a:what))
else
call s:_rmrf(a:what)
endif
endfunction " }}}2
" @vimlint(EVL103, 0, a:flags)
" delete(dir, 'rf') was added in Vim 7.4.1107, but it didn't become usable until 7.4.1128
let s:_delete = function(v:version > 704 || (v:version == 704 && has('patch1128')) ? 'delete' : 's:_delete_dumb')
lockvar s:_delete
function! s:_rmrf(what) abort " {{{2
if !exists('s:rmdir')
let s:rmdir = syntastic#util#shescape(get(g:, 'netrw_localrmdir', 'rmdir'))
endif
if getftype(a:what) ==# 'dir'
if filewritable(a:what) != 2
return
endif
try
" Vim 7.4.279 and later
let entries = globpath(a:what, '*', 1, 1)
catch /\m^Vim\%((\a\+)\)\=:E118/
let entries = split(globpath(a:what, '*', 1), "\n")
endtry
for f in entries
call s:_rmrf(f)
endfor
silent! call syntastic#util#system(s:rmdir . ' ' . syntastic#util#shescape(a:what))
else
silent! call delete(a:what)
endif
endfunction " }}}2
let s:_str2float = function(exists('*str2float') ? 'str2float' : 'str2nr')
lockvar s:_str2float
function! s:_float2str_smart(val) abort " {{{2
return printf('%.1f', a:val)
endfunction " }}}2
function! s:_float2str_dumb(val) abort " {{{2
return a:val
endfunction " }}}2
let s:_float2str = function(has('float') ? 's:_float2str_smart' : 's:_float2str_dumb')
lockvar s:_float2str
function! s:_getbufvar_dumb(buf, name, ...) abort " {{{2
let ret = getbufvar(a:buf, a:name)
if a:0 && type(ret) == type('') && ret ==# ''
unlet! ret
let ret = a:1
endif
return ret
endfunction "}}}2
let s:_getbufvar = function(v:version > 703 || (v:version == 703 && has('patch831')) ? 'getbufvar' : 's:_getbufvar_dumb')
lockvar s:_getbufvar
function! s:_fuzz_dumb() abort " {{{2
return 'tmp'
endfunction " }}}2
let s:_fuzz = function(exists('*getpid') ? 'getpid' : 's:_fuzz_dumb')
lockvar s:_fuzz
" }}}1
let s:_wid_base = 'syntastic_' . s:_fuzz() . '_' . reltimestr(g:_SYNTASTIC_START) . '_'
let s:_wid_pool = 0
let &cpo = s:save_cpo
unlet s:save_cpo
" vim: set sw=4 sts=4 et fdm=marker:
================================================
FILE: doc/syntastic-checkers.txt
================================================
*syntastic-checkers.txt* Syntastic checkers
*syntastic-checkers*
==============================================================================
SYNTAX CHECKERS BY LANGUAGE *syntastic-checkers-lang*
|syntastic| comes with checkers for the following languages:
ACPI Source Language.....................|syntastic-checkers-asl|
ActionScript.............................|syntastic-checkers-actionscript|
Ada......................................|syntastic-checkers-ada|
Ansible..................................|syntastic-checkers-ansible|
API Blueprint............................|syntastic-checkers-apiblueprint|
AppleScript..............................|syntastic-checkers-applescript|
AsciiDoc.................................|syntastic-checkers-asciidoc|
Assembly Languages.......................|syntastic-checkers-asm|
BEMHTML..................................|syntastic-checkers-bemhtml|
Bro......................................|syntastic-checkers-bro|
C........................................|syntastic-checkers-c|
C#.......................................|syntastic-checkers-cs|
C++......................................|syntastic-checkers-cpp|
Cabal....................................|syntastic-checkers-cabal|
Chef.....................................|syntastic-checkers-chef|
CMake....................................|syntastic-checkers-cmake|
COBOL....................................|syntastic-checkers-cobol|
Coco.....................................|syntastic-checkers-co|
CoffeeScript.............................|syntastic-checkers-coffee|
Coq......................................|syntastic-checkers-coq|
CSS......................................|syntastic-checkers-css|
Cucumber.................................|syntastic-checkers-cucumber|
CUDA.....................................|syntastic-checkers-cuda|
D........................................|syntastic-checkers-d|
Dart.....................................|syntastic-checkers-dart|
DocBook..................................|syntastic-checkers-docbk|
Dockerfile...............................|syntastic-checkers-dockerfile|
Dust.....................................|syntastic-checkers-dustjs|
Elixir...................................|syntastic-checkers-elixir|
Erlang...................................|syntastic-checkers-erlang|
eRuby....................................|syntastic-checkers-eruby|
Fortran..................................|syntastic-checkers-fortran|
Gentoo Metadata..........................|syntastic-checkers-gentoo|
Gettext PO...............................|syntastic-checkers-po|
GLSL.....................................|syntastic-checkers-glsl|
Go.......................................|syntastic-checkers-go|
Haml.....................................|syntastic-checkers-haml|
Handlebars...............................|syntastic-checkers-handlebars|
Haskell..................................|syntastic-checkers-haskell|
Haxe.....................................|syntastic-checkers-haxe|
HSS......................................|syntastic-checkers-hss|
HTML.....................................|syntastic-checkers-html|
Java.....................................|syntastic-checkers-java|
JavaScript...............................|syntastic-checkers-javascript|
JSON.....................................|syntastic-checkers-json|
LESS.....................................|syntastic-checkers-less|
Lex......................................|syntastic-checkers-lex|
Limbo....................................|syntastic-checkers-limbo|
LISP.....................................|syntastic-checkers-lisp|
LLVM.....................................|syntastic-checkers-llvm|
Lua......................................|syntastic-checkers-lua|
Markdown.................................|syntastic-checkers-markdown|
MATLAB...................................|syntastic-checkers-matlab|
Mercury..................................|syntastic-checkers-mercury|
NASM.....................................|syntastic-checkers-nasm|
Nix......................................|syntastic-checkers-nix|
nroff....................................|syntastic-checkers-nroff|
Objective-C..............................|syntastic-checkers-objc|
Objective-C++............................|syntastic-checkers-objcpp|
OCaml....................................|syntastic-checkers-ocaml|
Perl.....................................|syntastic-checkers-perl|
PHP......................................|syntastic-checkers-php|
POD......................................|syntastic-checkers-pod|
Pug (formerly Jade)......................|syntastic-checkers-pug|
Puppet...................................|syntastic-checkers-puppet|
Python...................................|syntastic-checkers-python|
QML......................................|syntastic-checkers-qml|
R........................................|syntastic-checkers-r|
R Markdown...............................|syntastic-checkers-rmd|
Racket...................................|syntastic-checkers-racket|
Raku.....................................|syntastic-checkers-raku|
Relax NG.................................|syntastic-checkers-rnc|
reStructuredText.........................|syntastic-checkers-rst|
RPM spec.................................|syntastic-checkers-spec|
Ruby.....................................|syntastic-checkers-ruby|
SASS.....................................|syntastic-checkers-sass|
Scala....................................|syntastic-checkers-scala|
SCSS.....................................|syntastic-checkers-scss|
Sh.......................................|syntastic-checkers-sh|
Slim.....................................|syntastic-checkers-slim|
SML......................................|syntastic-checkers-sml|
Solidity.................................|syntastic-checkers-solidity|
SQL......................................|syntastic-checkers-sql|
Stylus...................................|syntastic-checkers-stylus|
SVG......................................|syntastic-checkers-svg|
Tcl......................................|syntastic-checkers-tcl|
TeX......................................|syntastic-checkers-tex|
Texinfo..................................|syntastic-checkers-texinfo|
Text.....................................|syntastic-checkers-text|
Turtle...................................|syntastic-checkers-turtle|
TriG.....................................|syntastic-checkers-trig|
Twig.....................................|syntastic-checkers-twig|
TypeScript...............................|syntastic-checkers-typescript|
Verilog..................................|syntastic-checkers-verilog|
VHDL.....................................|syntastic-checkers-vhdl|
Vim help.................................|syntastic-checkers-help|
VimL.....................................|syntastic-checkers-vim|
Vue.js...................................|syntastic-checkers-vue|
xHTML....................................|syntastic-checkers-xhtml|
XML......................................|syntastic-checkers-xml|
XQuery...................................|syntastic-checkers-xquery|
XSLT.....................................|syntastic-checkers-xslt|
YACC.....................................|syntastic-checkers-yacc|
YAML.....................................|syntastic-checkers-yaml|
YANG.....................................|syntastic-checkers-yang|
YARA.....................................|syntastic-checkers-yara|
Z80......................................|syntastic-checkers-z80|
Zope Page Templates......................|syntastic-checkers-zpt|
Zsh......................................|syntastic-checkers-zsh|
Third-party checkers are available for additional languages.
==============================================================================
SYNTAX CHECKERS FOR ACPI SOURCE LANGUAGE *syntastic-checkers-asl*
The following checkers are available for the ACPI Source Language (filetype
"asl"):
1. iasl.....................|syntastic-asl-iasl|
------------------------------------------------------------------------------
1. iasl *syntastic-asl-iasl*
Name: iasl
Maintainer: Peter Wu <peter@lekensteyn.nl>
"iasl" is a compiler/decompiler for ACPI Source Language (ASL) and ACPI
Machine Language (AML). See the project's page for details:
https://acpica.org/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
You probably also need a plugin to set |filetype| for ASL files, such as
"vim-acpi-asl":
https://github.com/martinlroth/vim-acpi-asl
==============================================================================
SYNTAX CHECKERS FOR ACTIONSCRIPT *syntastic-checkers-actionscript*
The following checkers are available for ActionScript (filetype
"actionscript"):
1. mxmlc....................|syntastic-actionscript-mxmlc|
------------------------------------------------------------------------------
1. mxmlc *syntastic-actionscript-mxmlc*
Name: mxmlc
Maintainer: Andy Earnshaw <andyearnshaw@gmail.com>
"mxmlc" is a compiler for ActionScript. See Apache Flex for details:
http://flex.apache.org/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR ADA *syntastic-checkers-ada*
The following checkers are available for Ada (filetype "ada"):
1. GCC......................|syntastic-ada-gcc|
------------------------------------------------------------------------------
1. GCC *syntastic-ada-gcc*
Name: gcc
Maintainer: Alfredo Di Napoli <alfredo.dinapoli@gmail.com>
Checker options~
*'g:syntastic_ada_compiler'*
Type: string
Default: "gcc"
Compiler executable.
*'g:syntastic_ada_errorformat'*
Type: string
Default: unset
Override for the default |'errorformat'|.
*'g:syntastic_ada_remove_include_errors'*
Type: boolean
Default: 0
By default, errors in files included from the file being checked are shown.
Set this variable to 1 to remove messages about errors in included files.
Please note that this means syntastic will silently abort checks if there are
fatal errors in one of the included files.
*'g:syntastic_ada_compiler_options'*
Type: string
Default: unset
Compilation flags (such as defines or include directories) to be passed to the
linter.
*'g:syntastic_ada_config_file'*
Type: string
Default: unset
File containing additional compilation flags to be passed to the linter, one
option per line (cf. |syntastic-config-files|).
*'g:syntastic_ada_include_dirs'*
Type: array of strings
Default: []
Include directories to be passed to the linter, in addition to the above
compilation flags. You can set it like this: >
let g:syntastic_ada_include_dirs = ["includes", "headers"]
<
and the corresponding "-Iincludes -Iheaders" will be added to the compilation
flags.
*'b:syntastic_ada_cflags'*
Type: string
Default: unset
Buffer-local variable. Additional compilation flags specific to the current
buffer.
*'g:syntastic_ada_check_header'*
Type: boolean
Default: 0
If the current file is a header (namely if its extension is "ads"), all checks
are silently skipped. You can force syntastic to check header files by
setting the above variable to 1.
Note~
This checker doesn't call the "makeprgBuild()" function, and thus it ignores
the usual 'g:syntastic_ada_gcc_<option>' variables. The only exception is
'g:syntastic_ada_gcc_exec', which can still be used to override the linter's
executable.
==============================================================================
SYNTAX CHECKERS FOR ANSIBLE *syntastic-checkers-ansible*
The following checkers are available for Ansible (filetype "ansible"):
1. Ansible-lint.............|syntastic-ansible-ansible_lint|
------------------------------------------------------------------------------
1. Ansible-lint *syntastic-ansible-ansible_lint*
Name: ansible_lint
Maintainer: Erik Zaadi <erik.zaadi@gmail.com>
"Ansible-lint" is a style linter for Ansible playbooks. See the project's
page at GitHub for details:
https://github.com/willthames/ansible-lint
Syntastic requires "Ansible-lint" version 2.0.4 or later.
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
You probably also need a plugin to set |filetype| for Ansible playbooks, such
as "ansible-vim":
https://github.com/pearofducks/ansible-vim
==============================================================================
SYNTAX CHECKERS FOR API BLUEPRINT *syntastic-checkers-apiblueprint*
The following checkers are available for API Blueprint (filetype "apiblueprint"):
1. Drafter..................|syntastic-apiblueprint-drafter|
------------------------------------------------------------------------------
1. Drafter *syntastic-apiblueprint-drafter*
Name: drafter
Maintainer: LCD 47 <lcd047@gmail.com>
"Drafter" is a parser for Apiary's "API Blueprint" (http://apiblueprint.org/).
See the project's page at GitHub for details:
https://github.com/apiaryio/drafter
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
You probably also need a plugin to set |filetype| for API Blueprint files, such
as "apiblueprint.vim":
https://github.com/kylef/apiblueprint.vim
==============================================================================
SYNTAX CHECKERS FOR APPLESCRIPT *syntastic-checkers-applescript*
The following checkers are available for AppleScript (filetype "applescript"):
1. osacompile...............|syntastic-applescript-osacompile|
------------------------------------------------------------------------------
1. osacompile *syntastic-applescript-osacompile*
Name: osacompile
Author: Zhao Cai <caizhaoff@gmail.com>
"osacompile" is a compiler for "AppleScript". See the program's manual for
details:
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/osacompile.1.html
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR ASCIIDOC *syntastic-checkers-asciidoc*
The following checkers are available for AsciiDoc (filetype "asciidoc"):
1. Asciidoc.................|syntastic-asciidoc-asciidoc|
2. proselint................|syntastic-asciidoc-proselint|
------------------------------------------------------------------------------
1. Asciidoc *syntastic-asciidoc-asciidoc*
Name: asciidoc
Maintainer: LCD 47 <lcd047@gmail.com>
"Asciidoc" is a translator for AsciiDoc documents (http://asciidoc.org/).
Note~
If you would prefer to use Asciidoctor (http://asciidoctor.org/)
as a linter instead of "Asciidoc", you can do that by pointing
'g:syntastic_asciidoc_asciidoc_exec' to it: >
let g:syntastic_asciidoc_asciidoc_exec = "asciidoctor"
<
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
2. proselint *syntastic-asciidoc-proselint*
Name: proselint
Maintainer: LCD 47 <lcd047@gmail.com>
"proselint" is a linter for prose. See the page for details:
http://proselint.com/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
See also: |syntastic-help-proselint|, |syntastic-html-proselint|,
|syntastic-markdown-proselint|, |syntastic-nroff-proselint|,
|syntastic-pod-proselint|, |syntastic-rst-proselint|,
|syntastic-tex-proselint|, |syntastic-texinfo-proselint|,
|syntastic-text-proselint|, |syntastic-xhtml-proselint|.
==============================================================================
SYNTAX CHECKERS FOR ASSEMBLY LANGUAGES *syntastic-checkers-asm*
The following checkers are available for assembly languages (filetype "asm"):
1. GCC......................|syntastic-asm-gcc|
------------------------------------------------------------------------------
1. GCC *syntastic-asm-gcc*
Name: gcc
Maintainer: Joshua Rahm <joshuarahm@gmail.com>
This plugin supports both the AT&T and Intel dialects.
Checker Options~
*'g:syntastic_asm_compiler'*
Type: string
Default: "gcc"
Compiler executable. Set it to something like "mipsel-linux-gcc": >
let g:syntastic_asm_compiler = "mipsel-linux-gcc"
<
*'g:syntastic_asm_errorformat'*
Type: string
Default: unset
Override for the default |'errorformat'|.
*'g:syntastic_asm_dialect'*
Type: string
Default: unset
Normally the assembler will select the dialect to use for checking based on
the file extension (AT&T for ".s", Intel for ".asm"). If you want to override
the automatic choice set this variable to either "att" or "intel".
*'g:syntastic_asm_remove_include_errors'*
Type: boolean
Default: 0
By default, errors in files included from the file being checked are shown.
Set this variable to 1 to remove messages about errors in included files.
Please note that this means syntastic will silently abort checks if there are
fatal errors in one of the included files.
*'g:syntastic_asm_compiler_options'*
Type: string
Default: unset
Compilation flags (such as defines or include directories) to be passed to the
assembler. Set it to something like "-mtune=native": >
let g:syntastic_asm_compiler_options = "-mtune=native"
<
*'g:syntastic_asm_config_file'*
Type: string
Default: unset
File containing additional compilation flags to be passed to the assembler,
one option per line (see |syntastic-config-files|).
*'g:syntastic_asm_include_dirs'*
Type: array of strings
Default: []
Include directories to be passed to the assembler, in addition to the
above compilation flags. You can set it like this: >
let g:syntastic_asm_include_dirs = ["inc", "asm/src/include"]
<
and the corresponding "-Iinc -Iasm/src/include" will be added to the
compilation flags.
*'b:syntastic_asm_cflags'*
Type: string
Default: unset
Buffer-local variable. Additional compilation flags specific to the current
buffer.
Note~
This checker doesn't call the "makeprgBuild()" function, and thus it ignores
the usual 'g:syntastic_asm_gcc_<option>' variables. The only exception is
'g:syntastic_asm_gcc_exec', which can still be used to override the linter's
executable.
==============================================================================
SYNTAX CHECKERS FOR BEMHTML *syntastic-checkers-bemhtml*
The following checkers are available for BEMHTML (filetype "bemhtml"):
1. bemhtml-lint.............|syntastic-bemhtml-bemhtmllint|
------------------------------------------------------------------------------
1. bemhtml-lint *syntastic-bemhtml-bemhtmllint*
Name: bemhtmllint
Maintainer: Sergej Tatarincev
BEMHTML is a template engine intended for using with the BEM methodology
(http://bem.info/method/). See the project's page at GitHub for details:
https://github.com/SevInf/bemhtml-lint
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR BRO *syntastic-checkers-bro*
The following checkers are available for Bro (filetype "bro"):
1. Bro......................|syntastic-bro-bro|
------------------------------------------------------------------------------
1. Bro *syntastic-bro-bro*
Name: bro
Maintainer: Justin Azoff <justin.azoff@gmail.com>
"Bro" is a network security monitor. See the project's page for details:
https://www.bro.org/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR C *syntastic-checkers-c*
The following checkers are available for C (filetype "c"):
1. AVR-GCC..................|syntastic-c-avrgcc|
2. Checkpatch...............|syntastic-c-checkpatch|
3. ClangCheck...............|syntastic-c-clang_check|
4. Clang-Tidy...............|syntastic-c-clang_tidy|
5. Cppcheck.................|syntastic-c-cppcheck|
6. cppclean.................|syntastic-c-cppclean|
7. Flawfinder...............|syntastic-c-flawfinder|
8. GCC......................|syntastic-c-gcc|
9. make.....................|syntastic-c-make|
10. OClint..................|syntastic-c-oclint|
11. PC-Lint.................|syntastic-c-pc_lint|
12. Sparse..................|syntastic-c-sparse|
13. Splint..................|syntastic-c-splint|
------------------------------------------------------------------------------
1. AVR-GCC *syntastic-c-avrgcc*
Name: avrgcc
Maintainer: Karel <karelishere@gmail.com>
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_avrgcc_config_file'*
Type: string
Default: unset
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
------------------------------------------------------------------------------
2. Checkpatch *syntastic-c-checkpatch*
Name: checkpatch
Maintainer: Daniel Walker <dwalker@fifo99.com>
"Checkpatch" is a style linter for the Linux kernel sources. It's
distributed along with the Linux kernel sources:
https://github.com/torvalds/linux/blob/master/scripts/checkpatch.pl
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
3. ClangCheck *syntastic-c-clang_check*
Name: clang_check
Maintainer: Benjamin Bannier <bbannier@gmail.com>
"ClangCheck" is a wrapper around Clang's "LibTooling"
(http://clang.llvm.org/docs/LibTooling.html). See the official page for
details:
http://clang.llvm.org/docs/ClangCheck.html
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_clang_check_config_file'*
Type: string
Default: unset
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
Note~
By default you can set "ClangCheck" parameters in
'g:syntastic_c_clang_check_args', and compilation parameters
(defines, optimisation flags, etc.) in the configuration file.
However, if you want "ClangCheck" to use compilation databases
(http://clang.llvm.org/docs/JSONCompilationDatabase.html) -- perhaps
generated by "CMake" (https://github.com/rizsotto/Bear) or "Build EAR"
(https://github.com/rizsotto/Bear) -- rather than pass compilation flags
explicitly, set 'g:syntastic_c_clang_check_post_args' to an empty string: >
let g:syntastic_c_clang_check_post_args = ""
<
Configuration files pointed to by 'g:syntastic_clang_check_config_file' are
then ignored.
See also: |syntastic-cpp-clang_check|.
------------------------------------------------------------------------------
4. Clang-Tidy *syntastic-c-clang_tidy*
Name: clang_tidy
Maintainer: Benjamin Bannier <bbannier@gmail.com>
"Clang-Tidy" is a lint tool based on "Clang" (http://clang.llvm.org/). See
the project's page for details:
http://clang.llvm.org/extra/clang-tidy.html
Installation~
"Clang-Tidy" is part of the "Clang" (http://clang.llvm.org/) project, but it
isn't built by default. You need to enable compilation of the "Extra Clang
Tools" (http://clang.llvm.org/docs/ClangTools.html#extra-clang-tools) to get
it. See the build tutorial for details:
http://clang.llvm.org/docs/LibASTMatchersTutorial.html
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_clang_tidy_config_file'*
Type: string
Default: unset
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
Note~
By default you can set "ClangTidy" parameters in
'g:syntastic_c_clang_tidy_args', and compilation parameters
(defines, optimisation flags, etc.) in the configuration file.
If you want "ClangTidy" to use compilation databases
(http://clang.llvm.org/docs/JSONCompilationDatabase.html) --
perhaps generated by "CMake" (http://cmake.org/) or "Build EAR"
(https://github.com/rizsotto/Bear) -- rather than pass compilation flags
explicitly, set 'g:syntastic_c_clang_tidy_post_args' to an empty string: >
let g:syntastic_c_clang_tidy_post_args = ""
<
Configuration files pointed to by 'g:syntastic_clang_tidy_config_file' are
then ignored.
See also: |syntastic-cpp-clang_tidy|.
------------------------------------------------------------------------------
5. Cppcheck *syntastic-c-cppcheck*
Name: cppcheck
Maintainer: LCD 47 <lcd047@gmail.com>
"Cppcheck" is a static analysis tool for C/C++ code. See the project's page
for details:
http://cppcheck.sourceforge.net/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_cppcheck_config_file'*
Type: string
Default: unset
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
See also: |syntastic-cpp-cppcheck|.
------------------------------------------------------------------------------
6. cppclean *syntastic-c-cppclean*
Name: cppclean
Maintainer: LCD 47 <lcd047@gmail.com>
"cppclean" attempts to find problems in C++ source that slow development in
large code bases, for example various forms of unused code. See the project's
page at GitHub for more information:
https://github.com/myint/cppclean
Installation~
Install it with "pip": >
pip install cppclean
<
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
See also: |syntastic-cpp-cppclean|.
------------------------------------------------------------------------------
7. Flawfinder *syntastic-c-flawfinder*
Name: flawfinder
Maintainer: LCD 47 <lcd047@gmail.com>
"Flawfinder" scans C/C++ source code for possible security weaknesses. See the
project's page for more information:
https://www.dwheeler.com/flawfinder
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_c_flawfinder_thres'*
Type: integer
Default: 3
Error threshold. Policy violations with a severity above this value are
highlighted as errors, the others are considered warnings by syntastic.
See also: |syntastic-cpp-flawfinder|.
------------------------------------------------------------------------------
8. GCC *syntastic-c-gcc*
Name: gcc
Maintainer: Gregor Uhlenheuer <kongo2002@gmail.com>
Checker options~
*'g:syntastic_c_compiler'*
Type: string
Default: "gcc", or "clang" if GCC is not found
Compiler executable.
*'g:syntastic_c_errorformat'*
Type: string
Default: unset
Override for the default |'errorformat'|.
*'g:syntastic_c_remove_include_errors'*
Type: boolean
Default: 0
By default, errors in files included from the file being checked are shown.
Set this variable to 1 to remove messages about errors in included files.
Please note that this means syntastic will silently abort checks if there are
fatal errors in one of the included files.
*'g:syntastic_c_compiler_options'*
Type: string
Default: "-std=gnu99"
Compilation flags (such as defines or include directories) to be passed to the
linter.
*'g:syntastic_c_config_file'*
Type: string
Default: unset
File containing additional compilation flags to be passed to the linter, one
option per line (cf. |syntastic-config-files|).
*'g:syntastic_c_include_dirs'*
Type: array of strings
Default: []
Include directories to be passed to the linter, in addition to the above
compilation flags. You can set it to something like this: >
let g:syntastic_c_include_dirs = ["includes", "headers"]
<
and the corresponding "-Iincludes -Iheaders" will be added to the compilation
flags.
*'g:syntastic_c_no_default_include_dirs'*
Type: boolean
Default: 0
By default syntastic adds a number of common include directories to the
compilation flags, namely: >
-I. -I.. -Iinclude -Iincludes -I../include -I../includes
<
You can disable this behaviour by setting the above variable to 1.
*'g:syntastic_c_no_include_search'*
Type: boolean
Default: 0
By default syntastic looks at the first 100 lines of the file being checked,
and tries to determine if it needs to include headers for some common
libraries, such as "GLib" or "Gtk". It then tries to add the corresponding
include directories to the compilation flags. You can disable this behaviour
by setting the above variable to 1.
*'g:syntastic_c_auto_refresh_includes'*
Type: boolean
Default: 0
Used only if "g:syntastic_c_no_include_search" is set to a false value. By
default syntastic searches for common libraries only the first time the
current file is checked. Setting the above variable to 1 instructs syntastic
to refresh the list of common libraries every time the current file is
checked. You can also force a refresh even when the above variable is 0, by
`:unlet`-ing the buffer variable 'b:syntastic_c_includes'.
*'b:syntastic_c_cflags'*
Type: string
Default: unset
Buffer-local variable. When set, no search for common libraries is performed,
and the contents of the variable are added to the compilation flags.
*'g:syntastic_c_check_header'*
Type: boolean
Default: 0
If the current file is a header (namely if its extension is "h"), all checks
are silently skipped. You can force syntastic to check header files by
setting the above variable to 1.
Note~
This checker doesn't call the "makeprgBuild()" function, and thus it ignores
the usual 'g:syntastic_c_gcc_<option>' variables. The only exception is
'g:syntastic_c_gcc_exec', which can still be used to override the linter's
executable.
See also: |syntastic-cpp-gcc|.
------------------------------------------------------------------------------
9. make *syntastic-c-make*
Name: make
Maintainer: Gregor Uhlenheuer <kongo2002@gmail.com>
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
10. OClint *syntastic-c-oclint*
Name: oclint
Maintainer: "UnCO" Lin <undercooled@lavabit.com>
"OClint" is a static code analysis tool. See the project's page for details:
http://oclint.org/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
'g:syntastic_oclint_config_file'
Type: string
Default: unset
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
Notes~
By default you can set "OClint" parameters in 'g:syntastic_c_oclint_args', and
compilation parameters (defines, optimisation flags, etc.) in the config file.
If you want "OClint" to use "Clang"-style compilation databases
(http://clang.llvm.org/docs/JSONCompilationDatabase.html) --
perhaps generated by "CMake" (http://cmake.org/) or "Build EAR"
(https://github.com/rizsotto/Bear) -- rather than pass compilation flags
explicitly, set 'g:syntastic_c_oclint_post_args' to an empty string: >
let g:syntastic_c_oclint_post_args = ""
<
Config files pointed to by 'g:syntastic_oclint_config_file' are then ignored.
See also: |syntastic-cpp-oclint|.
------------------------------------------------------------------------------
11. PC-Lint *syntastic-c-pc_lint*
Name: pc_lint
Maintainer: Steve Bragg <steve@empresseffects.com>
"PC-Lint" is a commercial static code analysis tool for Windows, produced
by "Gimpel Software" (http://www.gimpel.com/). See the project's page for
details:
http://www.gimpel.com/html/pcl.htm
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_pc_lint_config_file'*
Type: string
Default: unset
Name of an indirect (.lnt) file. A file with that name is looked up in the
current directory and in parent directories; first such file found is used.
See also: |syntastic-cpp-pc_lint|.
------------------------------------------------------------------------------
12. Sparse *syntastic-c-sparse*
Name: sparse
Maintainer: Daniel Walker <dwalker@fifo99.com>
"Sparse" is a semantic parser for C, see the official wiki for details:
https://sparse.wiki.kernel.org/index.php/Main_Page
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_sparse_config_file'*
Type: string
Default: unset
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
Notes~
If you use "Sparse" with "GCC" you probably want to add something like this to
your vimrc: >
let g:syntastic_c_sparse_post_args="-gcc-base-dir " .
\ system("gcc -v 2>&1 | sed -n '/^Reading specs/ { s#.* /#/#; s#/[^/]*$##; p; }'")
<
This allows "Sparse" to read "GCC"'s private include files.
------------------------------------------------------------------------------
13. Splint *syntastic-c-splint*
Name: splint
Maintainer: LCD 47 <lcd047@gmail.com>
"Splint" is a tool for statically checking C programs for security
vulnerabilities, see the project's page for details:
http://www.splint.org/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_splint_config_file'*
Type: string
Default: unset
File containing project-specific options to be passed to "Splint"
(such as defines or include directories), one option per line (cf.
|syntastic-config-files|).
==============================================================================
SYNTAX CHECKERS FOR C# *syntastic-checkers-cs*
The following checkers are available for C# (filetype "cs"):
1. mcs......................|syntastic-cs-mcs|
------------------------------------------------------------------------------
1. mcs *syntastic-cs-mcs*
Name: mcs
Maintainer: Daniel Walker <dwalker@fifo99.com>
"mcs" is a compiler for C# from the "Mono" project
(http://www.mono-project.com/Main_Page). See the program's manual for details:
http://mono.wikia.com/wiki/Man_mcs
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR C++ *syntastic-checkers-cpp*
The following checkers are available for C++ (filetype "cpp"):
1. AVR-GCC..................|syntastic-cpp-avrgcc|
2. ClangCheck...............|syntastic-cpp-clang_check|
3. Clang-Tidy...............|syntastic-cpp-clang_tidy|
4. Cppcheck.................|syntastic-cpp-cppcheck|
5. cppclean.................|syntastic-cpp-cppclean|
6. Cpplint..................|syntastic-cpp-cpplint|
7. Flawfinder...............|syntastic-cpp-flawfinder|
8. GCC......................|syntastic-cpp-gcc|
9. OClint...................|syntastic-cpp-oclint|
10. PC-Lint.................|syntastic-cpp-pc_lint|
11. Vera++..................|syntastic-cpp-verapp|
------------------------------------------------------------------------------
1. AVR-GCC *syntastic-cpp-avrgcc*
Name: avrgcc
Maintainer: Sławek Piotrowski <sentinel@atteo.com>
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
'g:syntastic_avrgcc_config_file'
Type: string
Default: unset
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
See also: |syntastic-c-avrgcc|.
------------------------------------------------------------------------------
2. ClangCheck *syntastic-cpp-clang_check*
Name: clang_check
Maintainer: Benjamin Bannier <bbannier@gmail.com>
"ClangCheck" is a wrapper around Clang's "LibTooling"
(http://clang.llvm.org/docs/LibTooling.html). See the official page for
details:
http://clang.llvm.org/docs/ClangCheck.html
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
'g:syntastic_clang_check_config_file'
Type: string
Default: unset
file containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
Note~
By default you can set "ClangCheck" parameters in
'g:syntastic_cpp_clang_check_args', and compilation parameters (defines,
optimisation flags, etc.) in the configuration file.
However, if you want "ClangCheck" to use compilation databases
(http://clang.llvm.org/docs/JSONCompilationDatabase.html) -- perhaps
generated by "CMake" (https://github.com/rizsotto/Bear) or "Build EAR"
(https://github.com/rizsotto/Bear) -- rather than pass compilation flags
explicitly, set 'g:syntastic_cpp_clang_check_post_args' to an empty string: >
let g:syntastic_cpp_clang_check_post_args = ""
<
Configuration files pointed to by 'g:syntastic_clang_check_config_file' are
then ignored.
See also: |syntastic-c-clang_check|.
------------------------------------------------------------------------------
3. Clang-Tidy *syntastic-cpp-clang_tidy*
Name: clang_tidy
Maintainer: Benjamin Bannier <bbannier@gmail.com>
"Clang-Tidy" is a lint tool based on "Clang" (http://clang.llvm.org/). See
the project's page for details:
http://clang.llvm.org/extra/clang-tidy.html
Installation~
"Clang-Tidy" is part of the "Clang" (http://clang.llvm.org/) project, but it
isn't built by default. You need to enable compilation of the "Extra Clang
Tools" (http://clang.llvm.org/docs/ClangTools.html#extra-clang-tools) to get
it. See the build tutorial for details:
http://clang.llvm.org/docs/LibASTMatchersTutorial.html
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
'g:syntastic_clang_tidy_config_file'
Type: string
Default: unset
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
Note~
By default you can set "ClangTidy" parameters in
'g:syntastic_cpp_clang_tidy_args', and compilation parameters (defines,
optimisation flags, etc.) in the configuration file.
If you want "ClangTidy" to use compilation databases
(http://clang.llvm.org/docs/JSONCompilationDatabase.html) --
perhaps generated by "CMake" (http://cmake.org/) or "Build EAR"
(https://github.com/rizsotto/Bear) -- rather than pass compilation flags
explicitly, set 'g:syntastic_cpp_clang_tidy_post_args' to an empty string: >
let g:syntastic_cpp_clang_tidy_post_args = ""
<
Configuration files pointed to by 'g:syntastic_clang_tidy_config_file' are
then ignored.
See also: |syntastic-c-clang_tidy|.
------------------------------------------------------------------------------
4. Cppcheck *syntastic-cpp-cppcheck*
Name: cppcheck
Maintainer: LCD 47 <lcd047@gmail.com>
"Cppcheck" is a static analysis tool for C/C++ code. See the project's page
for details:
http://cppcheck.sourceforge.net/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
'g:syntastic_cppcheck_config_file'
Type: string
Default: unset
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
See also: |syntastic-c-cppcheck|.
------------------------------------------------------------------------------
5. cppclean *syntastic-cpp-cppclean*
Name: cppclean
Maintainer: LCD 47 <lcd047@gmail.com>
"cppclean" attempts to find problems in C++ source that slow development in
large code bases, for example various forms of unused code. See the project's
page at GitHub for more information:
https://github.com/myint/cppclean
Installation~
Install it with "pip": >
pip install cppclean
<
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
See also: |syntastic-c-cppclean|.
------------------------------------------------------------------------------
6. Cpplint *syntastic-cpp-cpplint*
Name: cpplint
Maintainer: LCD 47 <lcd047@gmail.com>
For details about "Cpplint" see the project's page:
https://github.com/google/styleguide/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_cpp_cpplint_thres'*
Type: integer
Default: 5
Error threshold. Policy violations with a severity above this value are
highlighted as errors, the others are considered warnings by syntastic.
*'g:syntastic_cpp_cpplint_args'*
Type: string
Default: "--verbose=3"
Command line options to pass to "Cpplint"
Note~
By default syntastic expects the "cpplint" script to be named "cpplint.py".
However, if your "cpplint" was installed with "pip", the script's name is
"cpplint", and you need to set 'g:syntastic_cpp_cpplint_exec' accordingly:
>
let g:syntastic_cpp_cpplint_exec = "cpplint"
<
------------------------------------------------------------------------------
7. Flawfinder *syntastic-cpp-flawfinder*
Name: flawfinder
Maintainer: LCD 47 <lcd047@gmail.com>
"Flawfinder" scans C/C++ source code for possible security weaknesses. See the
project's page for more information:
https://www.dwheeler.com/flawfinder
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_cpp_flawfinder_thres'*
Type: integer
Default: 3
Error threshold. Policy violations with a severity above this value are
highlighted as errors, the others are considered warnings by syntastic.
See also: |syntastic-c-flawfinder|.
------------------------------------------------------------------------------
8. GCC *syntastic-cpp-gcc*
Name: gcc
Maintainer: Gregor Uhlenheuer <kongo2002@gmail.com>
Checker options~
*'g:syntastic_cpp_compiler'*
Type: string
Default: "g++", or "clang++" if GCC is not found
Compiler executable.
*'g:syntastic_cpp_errorformat'*
Type: string
Default: unset
Override for the default |'errorformat'|.
*'g:syntastic_cpp_remove_include_errors'*
Type: boolean
Default: 0
By default, errors in files included from the file being checked are shown.
Set this variable to 1 to remove messages about errors in included files.
Please note that this means syntastic will silently abort checks if there are
fatal errors in one of the included files.
*'g:syntastic_cpp_compiler_options'*
Type: string
Default: unset
Compilation flags (such as defines or include directories) to be passed to the
linter.
*'g:syntastic_cpp_config_file'*
Type: string
Default: unset
File containing additional compilation flags to be passed to the linter, one
option per line (cf. |syntastic-config-files|).
*'g:syntastic_cpp_include_dirs'*
Type: array of strings
Default: []
Include directories to be passed to the linter, in addition to the above
compilation flags. You can set it to something like this: >
let g:syntastic_cpp_include_dirs = ["includes", "headers"]
>
and the corresponding "-Iincludes -Iheaders" will be added to the compilation
flags.
*'g:syntastic_cpp_no_default_include_dirs'*
Type: boolean
Default: 0
By default syntastic adds a number of common include directories to the
compilation flags, namely: >
-I. -I.. -Iinclude -Iincludes -I../include -I../includes
<
You can disable this behaviour by setting the above variable to 1.
*'g:syntastic_cpp_no_include_search'*
Type: boolean
Default: 0
By default syntastic looks at the first 100 lines of the file being checked,
and tries to determine if it needs to include headers for some common
libraries, such as "GLib" or "Gtk". It then tries to add the corresponding
include directories to the compilation flags. You can disable this behaviour
by setting the above variable to 1.
*'g:syntastic_cpp_auto_refresh_includes'*
Type: boolean
Default: 0
Used only if "g:syntastic_cpp_no_include_search" is set to a false value.
By default syntastic searches for common libraries only the first time the
current file is checked. Setting the above variable to 1 instructs syntastic
to refresh the list of common libraries every time the current file is
checked. You can also force a refresh even when the above variable is 0, by
`:unlet`-ing the buffer variable 'b:syntastic_cpp_includes'.
*'b:syntastic_cpp_cflags'*
Type: string
Default: unset
Buffer-local variable. When set, no search for common libraries is performed,
and the contents of the variable are added to the compilation flags.
*'g:syntastic_cpp_check_header'*
Type: boolean
Default: 0
If the current file is a header (namely if its extension is "h", "hpp", or
"hh"), all checks are silently skipped. You can force syntastic to check
header files by setting the above variable to 1.
Note~
This checker doesn't call the "makeprgBuild()" function, and thus it ignores
the usual 'g:syntastic_cpp_gcc_<option>' variables. The only exception is
'g:syntastic_cpp_gcc_exec', which can still be used to override the linter's
executable.
See also: |syntastic-c-gcc|.
------------------------------------------------------------------------------
9. OClint *syntastic-cpp-oclint*
Name: oclint
Maintainer: "UnCO" Lin <undercooled@lavabit.com>
"OClint" is a static code analysis tool. See the project's page for details:
http://oclint.org/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
'g:syntastic_oclint_config_file'
Type: string
Default: unset
File containing compilation flags (such as defines or include directories),
one option per line (cf. |syntastic-config-files|).
Notes~
By default you can set "OClint" parameters in 'g:syntastic_cpp_oclint_args',
and compilation parameters (defines, optimisation flags, etc.) in the config
file.
If you want "OClint" to use "Clang"-style compilation databases
(http://clang.llvm.org/docs/JSONCompilationDatabase.html) --
perhaps generated by "CMake" (http://cmake.org/) or "Build EAR"
(https://github.com/rizsotto/Bear) -- rather than pass compilation flags
explicitly, set 'g:syntastic_c_oclint_post_args' to an empty string: >
let g:syntastic_cpp_oclint_post_args = ""
<
Config files pointed to by 'g:syntastic_oclint_config_file' are then ignored.
See also: |syntastic-c-oclint|.
------------------------------------------------------------------------------
10. PC-Lint *syntastic-cpp-pc_lint*
Name: pc_lint
Maintainer: Steve Bragg <steve@empresseffects.com>
"PC-Lint" is a commercial static code analysis tool for Windows, produced
by "Gimpel Software" (http://www.gimpel.com/). See the project's page for
details:
http://www.gimpel.com/html/pcl.htm
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
'g:syntastic_pc_lint_config_file'
Type: string
Default: unset
Name of an indirect (.lnt) file. A file with that name is looked up in the
current directory and in parent directories; first such file found is used.
See also: |syntastic-c-pc_lint|.
------------------------------------------------------------------------------
11. Vera++ *syntastic-cpp-verapp*
Name: verapp
Maintainer: Lucas Verney <phyks@phyks.me>
"Vera++" is a programmable tool for verification, analysis and transformation
of C++ source code. See the project's page for details:
https://bitbucket.org/verateam/vera/wiki/Home
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_verapp_config_file'*
Type: string
Default: unset
File containing additional compilation flags to be passed to the linter, one
option per line (cf. |syntastic-config-files|).
==============================================================================
SYNTAX CHECKERS FOR CABAL *syntastic-checkers-cabal*
The following checkers are available for Cabal (filetype "cabal"):
1. Cabal....................|syntastic-cabal-cabal|
------------------------------------------------------------------------------
1. Cabal *syntastic-cabal-cabal*
Name: cabal
Maintainer: Ian D. Bollinger <ian.bollinger@gmail.com>
This checker runs "cabal check" against Haskell Cabal package descriptions.
See the project's page for more information:
http://www.haskell.org/cabal/
Note~
This checker doesn't call the "makeprgBuild()" function, and thus it ignores
the usual 'g:syntastic_cabal_cabal_<option>' variables. The only exception
is 'g:syntastic_cabal_cabal_exec', which can still be used to override the
linter's executable.
==============================================================================
SYNTAX CHECKERS FOR CHEF *syntastic-checkers-chef*
The following checkers are available for Chef (filetype "chef"):
1. Foodcritic...............|syntastic-chef-foodcritic|
------------------------------------------------------------------------------
1. Foodcritic *syntastic-chef-foodcritic*
Name: foodcritic
Maintainer: Doug Ireton
"Foodcritic" is a linter for "Chef" cookbooks (http://www.opscode.com/chef/).
See the project's page for more information:
http://www.foodcritic.io/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
You probably also need a plugin to set |filetype| for Chef files, such as
"vim-chef":
https://github.com/dougireton/vim-chef
==============================================================================
SYNTAX CHECKERS FOR CMAKE *syntastic-checkers-cmake*
The following checkers are available for CMake (filetype "cmake"):
1. cmakelint................|syntastic-cmake-cmakelint|
------------------------------------------------------------------------------
1. cmakelint *syntastic-cmake-cmakelint*
Name: cmakelint
Maintainer: LCD 47 <lcd047@gmail.com>
"cmakelint" is a style linter for "CMake" files (https://cmake.org/).
See the project's page at GitHub more information:
https://github.com/richq/cmake-lint
Installation~
Install it with "pip": >
pip install cmakelint
<
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR COBOL *syntastic-checkers-cobol*
The following checkers are available for COBOL (filetype "cobol"):
1. OpenCOBOL................|syntastic-cobol-cobc|
------------------------------------------------------------------------------
1. OpenCOBOL *syntastic-cobol-cobc*
Name: cobc
Maintainer: LCD 47 <lcd047@gmail.com>
"OpenCOBOL" is a compiler for COBOL. See the project's page for more
information:
http://www.opencobol.org/
Checker options~
*'g:syntastic_cobol_compiler'*
Type: string
Default: "cobc"
Compiler executable.
*'g:syntastic_cobol_errorformat'*
Type: string
Default: unset
Override for the default |'errorformat'|.
*'g:syntastic_cobol_remove_include_errors'*
Type: boolean
Default: 0
By default, errors in files included from the file being checked are shown.
Set this variable to 1 to remove messages about errors in included files.
Please note that this means syntastic will silently abort checks if there are
fatal errors in one of the included files.
*'g:syntastic_cobol_compiler_options'*
Type: string
Default: unset
Compilation flags (such as "-std=cobol2002") to be passed to the linter.
*'g:syntastic_cobol_config_file'*
Type: string
Default: unset
File containing additional compilation flags to be passed to the linter, one
option per line (cf. |syntastic-config-files|).
*'g:syntastic_cobol_include_dirs'*
Type: array of strings
Default: []
Include directories to be passed to the linter, in addition to the above
compilation flags. You can set it to something like this: >
let g:syntastic_cobol_include_dirs = ["includes", "headers"]
<
and the corresponding "-Iincludes -Iheaders" will be added to the compilation
flags.
*'b:syntastic_cobol_cflags'*
Type: string
Default: unset
Buffer-local variable. Additional compilation flags specific to the current
buffer.
Note~
This checker doesn't call the "makeprgBuild()" function, and thus it ignores
the usual 'g:syntastic_cobol_cobc_<option>' variables. The only exception
is 'g:syntastic_cobol_cobc_exec', which can still be used to override the
linter's executable.
==============================================================================
SYNTAX CHECKERS FOR COCO *syntastic-checkers-co*
The following checkers are available for Coco (filetype "co"):
1. Coco.....................|syntastic-co-coco|
------------------------------------------------------------------------------
1. Coco *syntastic-co-coco*
Name: coco
Maintainer: Andrew Kelley <superjoe30@gmail.com>
For details about "Coco" see the project's page:
https://github.com/satyr/coco/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR COFFEESCRIPT *syntastic-checkers-coffee*
The following checkers are available for CoffeeScript (filetype "coffee"):
1. Coffee...................|syntastic-coffee-coffee|
2. Coffee->JSHint...........|syntastic-coffee-coffee_jshint|
3. CoffeeLint...............|syntastic-coffee-coffeelint|
------------------------------------------------------------------------------
1. Coffee *syntastic-coffee-coffee*
Name: coffee
Maintainer: Lincoln Stoll <l@lds.li>
"Coffee" is a compiler for CoffeeScript. See the project's page for details:
http://coffeescript.org/
Syntastic requires "Coffee" version 1.6.2 or later.
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
2. Coffee->JSHint *syntastic-coffee-coffee_jshint*
Name: coffee_jshint
Maintainer: John Krauss <john@johnkrauss.com>
"Coffee->JSHint" is a JSHint validator for CoffeeScript. See the project's
page at GitHub for details:
https://github.com/marviq/coffee-jshint
Installation~
Install it with "npm": >
npm install -g coffee-jshint
<
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
Accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
3. CoffeeLint *syntastic-coffee-coffeelint*
Name: coffeelint
Maintainer: Lincoln Stoll <l@lds.li>
"CoffeeLint" is a style linter for CoffeeScript. See the project's page for
details:
http://www.coffeelint.org/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR COQ *syntastic-checkers-coq*
The following checkers are available for Coq (filetype "coq"):
1. Coqtop...................|syntastic-coq-coqtop|
------------------------------------------------------------------------------
1. Coqtop *syntastic-coq-coqtop*
Name: coqtop
Maintainer: Matvey Aksenov <matvey.aksenov@gmail.com>
"Coqtop" is the top level interface for Coq. See the project's page for
details:
http://coq.inria.fr/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR CSS *syntastic-checkers-css*
The following checkers are available for CSS (filetype "css"):
1. CSSLint..................|syntastic-css-csslint|
2. mixedindentlint..........|syntastic-css-mixedindentlint|
3. PHP_CodeSniffer..........|syntastic-css-phpcs|
4. PrettyCSS................|syntastic-css-prettycss|
5. RECESS...................|syntastic-css-recess|
6. stylelint................|syntastic-css-stylelint|
------------------------------------------------------------------------------
1. CSSLint *syntastic-css-csslint*
Name: csslint
Maintainer: Ory Band <oryband@gmail.com>
"CSSLint" is a lint tool for Cascading Stylesheets. See the project's page
for details:
http://csslint.net/
Installation~
Install it with "npm": >
npm install -g csslint
<
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
2. mixedindentlint *syntastic-css-mixedindentlint*
Name: mixedindentlint
Maintainer: Payton Swick <payton@foolord.com>
"mixedindentlint" is a general-purpose indentation linter. See the project's
page at GitHub for more information:
https://github.com/sirbrillig/mixedindentlint
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
See also: |syntastic-javascript-mixedindentlint|, |syntastic-scss-mixedindentlint|.
------------------------------------------------------------------------------
3. PHP_CodeSniffer *syntastic-css-phpcs*
Name: phpcs
Maintainer: LCD 47 <lcd047@gmail.com>
"PHP_CodeSniffer" is a style linter for PHP and CSS. See the project's page
at GitHub for details:
https://github.com/squizlabs/PHP_CodeSniffer/
Installation~
Install it with: >
pear install PHP_CodeSniffer
<
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
If you're checking files containing tab characters then "PHP_CodeSniffer"'s
idea of tabstop must match Vim's 'tabstop', otherwise syntastic will highlight
the errors at shifted positions. By default syntastic does that by adding
an option "--tab-width=&tabstop" to "PHP_CodeSniffer", but that option
also instructs "PHP_CodeSniffer" to expand tabs, and some code sniffers
(f.i. "CakePHP", see https://github.com/cakephp/cakephp-codesniffer) insist on
indenting lines with tabs. To work around the resulting mess if you're using
one of these sniffers, set "--tab-width=0" and 'tabstop' to 8: >
let g:syntastic_php_phpcs_args = "--tab-width=0"
set tabstop=8
<
See also: |syntastic-php-phpcs|.
------------------------------------------------------------------------------
4. PrettyCSS *syntastic-css-prettycss*
Name: prettycss
Maintainer: LCD 47 <lcd047@gmail.com>
"PrettyCSS" is a beautifier, lint checker, and validator for Cascading
Stylesheets. For more details see:
PrettyCSS Demo:
http://fidian.github.io/PrettyCSS/
The project's page at GitHub:
https://github.com/fidian/PrettyCSS/
Installation~
Install it with: >
npm install -g PrettyCSS
<
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
5. RECESS *syntastic-css-recess*
Name: recess
Maintainer: Tim Carry <tim@pixelastic.com>
"RECESS" is a code quality tool for CSS built on top of LESS. See the
project's page for details:
http://twitter.github.io/recess/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
See also: |syntastic-less-recess|.
------------------------------------------------------------------------------
6. stylelint *syntastic-css-stylelint*
Name: stylelint
Maintainer: Tim Carry <tim@pixelastic.com>
"stylelint" is a style linter for Cascading Stylesheets. See the project's
page for more information:
http://stylelint.io/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
See also: |syntastic-html-stylelint|, |syntastic-vue-stylelint|.
==============================================================================
SYNTAX CHECKERS FOR CUCUMBER *syntastic-checkers-cucumber*
The following checkers are available for Cucumber (filetype "cucumber"):
1. Cucumber.................|syntastic-cucumber-cucumber|
------------------------------------------------------------------------------
1. Cucumber *syntastic-cucumber-cucumber*
Name: cucumber
Maintainer: Martin Grenfell <martin.grenfell@gmail.com>
"Cucumber" is a tool that executes plain-text functional descriptions as
automated tests. See the project's page for more information:
http://cukes.info/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR CUDA *syntastic-checkers-cuda*
The following checkers are available for CUDA (filetype "cuda"):
1. NVCC.....................|syntastic-cuda-nvcc|
------------------------------------------------------------------------------
1. NVCC *syntastic-cuda-nvcc*
Name: nvcc
Author: Hannes Schulz <schulz@ais.uni-bonn.de>
"NVCC" is a CUDA Compiler from nVidia. See the project's page for details:
https://developer.nvidia.com/cuda-llvm-compiler
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_cuda_check_header'*
Type: boolean
Default: 0
Turn this on to check header files. The checker then creates an empty file
".syntastic_dummy.cu" in the base directory of the file being checked.
Example: >
let g:syntastic_cuda_check_header = 1
<
*'g:syntastic_cuda_config_file'*
Type: string
Default: unset
File containing additional compilation flags to be passed to the linter, one
option per line (cf. |syntastic-config-files|).
==============================================================================
SYNTAX CHECKERS FOR D *syntastic-checkers-d*
The following checkers are available for D (filetype "d"):
1. DMD......................|syntastic-d-dmd|
2. D-Scanner................|syntastic-d-dscanner|
------------------------------------------------------------------------------
1. DMD *syntastic-d-dmd*
Name: dmd
Maintainer: Alfredo Di Napoli <alfredo.dinapoli@gmail.com>
Checker options~
*'g:syntastic_d_compiler'*
Type: string
Default: "dmd"
Compiler executable.
*'g:syntastic_d_errorformat'*
Type: string
Default: unset
Override for the default |'errorformat'|.
*'g:syntastic_d_remove_include_errors'*
Type: boolean
Default: 0
By default, errors in files included from the file being checked are shown.
Set this variable to 1 to remove messages about errors in included files.
Please note that this means syntastic will silently abort checks if there are
fatal errors in one of the included files.
*'g:syntastic_d_compiler_options'*
Type: string
Default: unset
Compilation flags (such as defines or include directories) to be passed to the
linter.
*'g:syntastic_d_config_file'*
Type: string
Default: unset
File containing additional compilation flags to be passed to the linter, one
option per line (cf. |syntastic-config-files|).
*'g:syntastic_d_include_dirs'*
Type: array of strings
Default: inferred from ".dub/packages"
Include directories to be passed to the linter, in addition to the above
compilation flags. You can set it like this: >
let g:syntastic_d_include_dirs = ["includes", "headers"]
<
and the corresponding "-Iincludes -Iheaders" will be added to the compilation
flags.
*'g:syntastic_d_use_dub'*
Type: boolean
Default: 1
Whether to use "dub" to find include directories. This requires "dub" version
0.9.24 or later.
*'g:syntastic_d_dub_exec'*
Type: string
Default: "dub"
Path to the "dub" executable. Ignored if |'g:syntastic_d_use_dub'| is unset.
*'b:syntastic_d_cflags'*
Type: string
Default: unset
Buffer-local variable. Additional compilation flags specific to the current
buffer.
*'g:syntastic_d_check_header'*
Type: boolean
Default: 0
If the current file is a header (namely if its extension is "di"), all checks
are silently skipped. You can force syntastic to check header files by setting
the above variable to 1.
Note~
This checker doesn't call the "makeprgBuild()" function, and thus it ignores
the usual 'g:syntastic_d_dmd_<option>' variables. The only exception is
'g:syntastic_d_dmd_exec', which can still be used to override the linter's
executable.
------------------------------------------------------------------------------
2. D-Scanner *syntastic-d-dscanner*
Name: dscanner
Maintainer: ANtlord
"D-Scanner" is a tool for analyzing D source code (https://dlang.org/). See
the project's page at GitHub for more information:
https://github.com/Hackerpilot/Dscanner
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR DART *syntastic-checkers-dart*
The following checkers are available for Dart (filetype "dart"):
1. Analyzer.................|syntastic-dart-dartanalyzer|
------------------------------------------------------------------------------
1. Analyzer *syntastic-dart-dartanalyzer*
Name: dartanalyzer
Maintainer: Maksim Ryzhikov <rv.maksim@gmail.com>
"Analyzer" is a static analysis tool for Dart (https://www.dartlang.org/).
See the manual for more information:
https://www.dartlang.org/tools/analyzer/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR DOCBOOK *syntastic-checkers-docbk*
The following checkers are available for DocBook (filetype "docbk"):
1. Igor.....................|syntastic-docbk-igor|
2. xmllint..................|syntastic-docbk-xmllint|
------------------------------------------------------------------------------
1. Igor *syntastic-docbk-igor*
Name: igor
Maintainer: LCD 47 <lcd047@gmail.com>
"Igor" is a proofreader for DocBook SGML, man pages, and text files used by
the FreeBSD project (https://www.freebsd.org/). See the author's presentation
for details:
http://www.youtube.com/watch?v=sczHqUPygZY
The latest version can be obtained from Glen Barber's repository:
http://docscripts.glenbarber.us/tags/igor/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
See also: |syntastic-nroff-igor|, |syntastic-text-igor|.
------------------------------------------------------------------------------
2. xmllint *syntastic-docbk-xmllint*
Name: xmllint
Maintainer: Martin Grenfell <martin.grenfell@gmail.com>
"xmllint" is a linter and transformer tool for XML files, distributed with
the "libxml" package (http://www.xmlsoft.org/). See the tool's manual for more
information:
http://xmlsoft.org/xmllint.html
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
You can use a local installation of DTDs to significantly speed up validation
and allow you to validate XML data without network access. See the
"xmlcatalog" manual, and the catalog documentation for more information:
http://www.xmlsoft.org/xmlcatalog_man.html
http://www.xmlsoft.org/catalog.html
For an example of a DTD catalog see f.i. "XMLCatalog":
https://github.com/darcyparker/XMLCatalog
In order to use it with syntastic you'll have to clone it to a local
directory, and point the environment variable "XML_CATALOG_FILES" to the file
"catalog.xml" in the said directory: >
XML_CATALOG_FILES=/some/path/XMLCatalog/catalog.xml
export XML_CATALOG_FILES
<
Otherwise "xmllint" will try to load XML catalogs from "/etc/xml/catalog".
See also: |syntastic-xml-xmllint|, |syntastic-xslt-xmllint|.
==============================================================================
SYNTAX CHECKERS FOR DOCKERFILE *syntastic-checkers-dockerfile*
The following checkers are available for Dockerfile (filetype "dockerfile"):
1. dockerfile-lint..........|syntastic-dockerfile-dockerfile_lint|
2. Hadolint.................|syntastic-dockerfile-hadolint|
------------------------------------------------------------------------------
1. dockerfile-lint *syntastic-dockerfile-dockerfile_lint*
Name: dockerfile_lint
Maintainer: Tim Carry <tim@pixelastic.com>
"dockerfile-lint" is a linter for Dockerfiles
(http://docs.docker.com/engine/reference/builder). See the project's page at
GitHub for details:
https://github.com/projectatomic/dockerfile_lint
Installation~
Install it with: >
npm install -g dockerfile_lint
<
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
2. Hadolint *syntastic-dockerfile-hadolint*
Name: hadolint
Maintainer: Jesper B. Rosenkilde <jbr@humppa.dk>
"Hadolint" is a dockerfile linter written in Haskell. See the project's page
at GitHub for details:
https://github.com/lukasmartinelli/hadolint
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR DUST *syntastic-checkers-dustjs*
The following checkers are available for Dust (filetype "dustjs"):
1. Swiffer..................|syntastic-dustjs-swiffer|
------------------------------------------------------------------------------
1. Swiffer *syntastic-dustjs-swiffer*
Name: swiffer
Maintainer: Steven Foote <smfoote@gmail.com>
"Swiffer" is a command line lint tool for Dust. See the project's page for
details:
https://github.com/smfoote/Swiffer.js
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
To enable Dust syntax checking, you must set the filetype of your Dust
template files to "dustjs". An easy way to do this is by installing the dustjs
syntax highlighter:
https://github.com/jimmyhchan/dustjs.vim
==============================================================================
SYNTAX CHECKERS FOR ELIXIR *syntastic-checkers-elixir*
The following checkers are available for Elixir (filetype "elixir"):
1. elixir...................|syntastic-elixir-elixir|
------------------------------------------------------------------------------
1. elixir *syntastic-elixir-elixir*
Name: elixir
Maintainer: Richard Ramsden <rramsden@gmail.com>
See the project's page for details:
http://elixir-lang.org/
Security~
This checker executes the code in the files it checks:
https://github.com/vim-syntastic/syntastic/issues/1141
This is probably fine if you wrote the files 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 files, set 'g:syntastic_enable_elixir_checker' to 1
in your vimrc to enable this checker: >
let g:syntastic_enable_elixir_checker = 1
<
There is also a buffer-local version of this variable, that takes precedence
over a global one in the buffers where it is defined.
Please note that setting this variable doesn't automatically enable the
checker, you still need to add "elixir" to 'g:syntastic_elixir_checkers' if
you plan to use it.
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR ERLANG *syntastic-checkers-erlang*
The following checkers are available for Erlang (filetype "erlang"):
1. escript..................|syntastic-erlang-escript|
2. SyntaxErl................|syntastic-erlang-syntaxerl|
------------------------------------------------------------------------------
1. escript *syntastic-erlang-escript*
Name: escript
Maintainer: Pawel Salata <rockplayer.pl@gmail.com>
"escript" is an interpreter for Erlang programs. See the tool's manual for
more information:
http://www.erlang.org/doc/man/escript.html
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
If you get warning: "behaviour X undefined" with your customize behaviour, add
the following line in your vimrc: >
let g:syntastic_erlc_include_path = "ebin"
<
------------------------------------------------------------------------------
2. SyntaxErl *syntastic-erlang-syntaxerl*
Name: syntaxerl
Maintainer: locojay
"SyntaxErl" is a syntax linter for Erlang. It uses "rebar"
(https://github.com/basho/rebar) to determine correct dependencies and library
paths. See the project's page for more information:
https://github.com/ten0s/syntaxerl
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR ERUBY *syntastic-checkers-eruby*
The following checkers are available for eRuby (filetype "eruby"):
1. Ruby.....................|syntastic-eruby-ruby|
------------------------------------------------------------------------------
1. Ruby *syntastic-eruby-ruby*
Name: ruby
Maintainer: Martin Grenfell <martin.grenfell@gmail.com>
Checker options~
'g:syntastic_ruby_exec'
Type: string
Default: "ruby"
The Ruby executable to use.
Note~
The variable 'g:syntastic_ruby_exec' is also used by the Ruby
"MRI" checker (cf. |syntastic-ruby-mri|), and it can be overriden
by 'g:syntastic_eruby_ruby_exec'. However, this checker doesn't
call the "makeprgBuild()" function, and thus it ignores all other
'g:syntastic_eruby_ruby_<option>' variables.
==============================================================================
SYNTAX CHECKERS FOR FORTRAN *syntastic-checkers-fortran*
The following checkers are available for Fortran (filetype "fortran"):
1. GNU Fortran..............|syntastic-fortran-gfortran|
------------------------------------------------------------------------------
1. GNU Fortran *syntastic-fortran-gfortran*
Name: gfortran
Maintainer: Karl Yngve Lervåg <karl.yngve@lervag.net>
"GNU Fortran" is a checker for Fortran files using either GNU
Fortran (https://gcc.gnu.org/fortran/) or Intel Fortran Compilers
(https://software.intel.com/en-us/fortran-compilers).
Checker options~
*'g:syntastic_fortran_compiler'*
Type: string
Default: "gfortran"
Compiler executable. Set this to either "gfortran" (to use GNU Fortran), or to
"ifort" (for Intel Fortran).
*'g:syntastic_fortran_errorformat'*
Type: string
Default: unset
Override for the default |'errorformat'|.
*'g:syntastic_fortran_remove_include_errors'*
Type: boolean
Default: 0
By default, errors in files included from the file being checked are shown.
Set this variable to 1 to remove messages about errors in included files.
Please note that this means syntastic will silently abort checks if there are
fatal errors in one of the included files.
*'g:syntastic_fortran_compiler_options'*
Type: string
Default: unset
Compilation flags (such as "-std=f95") to be passed to the linter.
*'g:syntastic_fortran_config_file'*
Type: string
Default: unset
File containing additional compilation flags to be passed to the linter, one
option per line (cf. |syntastic-config-files|).
*'g:syntastic_fortran_include_dirs'*
Type: array of strings
Default: []
Include directories to be passed to the linter, in addition to the above
compilation flags. You can set it like this: >
let g:syntastic_fortran_include_dirs = ["includes", "headers"]"
<
and the corresponding "-Iincludes -Iheaders" will be added to the compilation
flags.
*'b:syntastic_fortran_cflags'*
Type: string
Default: unset
Buffer-local variable. Additional compilation flags specific to the current
buffer.
Note~
This checker doesn't call the "makeprgBuild()" function, and thus it ignores
the usual 'g:syntastic_fortran_gfortran_<option>' variables. The only
exception is 'g:syntastic_fortran_gfortran_exec', which can still be used to
override the linter's executable.
==============================================================================
SYNTAX CHECKERS FOR GENTOO METADATA *syntastic-checkers-gentoo*
The following checkers are available for Gentoo Metadata (filetype "gentoo"):
1. xmllint..................|syntastic-gentoo-xmllint|
------------------------------------------------------------------------------
1. xmllint *syntastic-gentoo-xmllint*
Name: xmllint
Maintainer: James Rowe <jnrowe@gmail.com>
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
The DTDs required to validate "metadata.xml" files are available in
"$PORTDIR/metadata/dtd", and these local files can be used to significantly
speed up validation. You can create a catalog file with: >
xmlcatalog --create --add rewriteURI http://www.gentoo.org/dtd/ \
${PORTDIR:-/usr/portage}/metadata/dtd/ /etc/xml/gentoo
<
See "xmlcatalog" for more information:
http://www.xmlsoft.org/catalog.html
==============================================================================
SYNTAX CHECKERS FOR GETTEXT PO *syntastic-checkers-po*
The following checkers are available for gettext .po files (filetype "po"):
1. Dennis...................|syntastic-po-dennis|
2. msgfmt...................|syntastic-po-msgfmt|
------------------------------------------------------------------------------
1. Dennis *syntastic-po-dennis*
Name: dennis
Maintainer: LCD 47 <lcd047@gmail.com>
"Dennis" is a set of utilities for working with gettext Portable Object
(http://www.gnu.org/software/gettext/manual/html_node/PO-Files.html)
translation files:
https://github.com/willkg/dennis/
See the program's manual for further details:
http://dennis.readthedocs.io/en/latest/linting.html
Installation~
Install it with "pip": >
pip install dennis
<
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
2. msgfmt *syntastic-po-msgfmt*
Name: msgfmt
Maintainer: Ryo Okubo <syucream1031@gmail.com>
"msgfmt" is a compiler for gettext Portable Object
(http://www.gnu.org/software/gettext/manual/html_node/PO-Files.html)
translation files. See the program's manual for details:
http://www.gnu.org/software/gettext/manual/html_node/msgfmt-Invocation.html#msgfmt-Invocation
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
==============================================================================
SYNTAX CHECKERS FOR GLSL *syntastic-checkers-glsl*
The following checkers are available for GLSL (filetype "glsl"):
1. cgc......................|syntastic-glsl-cgc|
------------------------------------------------------------------------------
1. cgc *syntastic-glsl-cgc*
Name: cgc
Maintainer: Joshua Rahm <joshuarahm@gmail.com>
"cgc" is a compiler that translates Cg or GLSL programs into OpenGL or DirectX
code. See the manual for more details:
http://http.developer.nvidia.com/Cg/cgc.html
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_glsl_extensions'*
Type: dictionary
Default: unset
You can control the profiles used by "cgc" with magic comments: put the magic
comment "// profile:" followed by the profile for "cgc" to use. For example
use >
// profile: glslf
<
to force the fragment shader profile.
If the magic comment does not exist, then the dictionary
'g:syntastic_glsl_extensions' is used to infer the appropriate profile from
the current file's extension. If this dictionary does not exist either, a
default dictionary is used instead. Finally, if the current file's extension
cannot be found in these dictionaries, the checker assumes a vertex shader
profile.
*'g:syntastic_glsl_options'*
Type: string
Default: unset
Additional arguments to pass to "cgc".
Note~
You probably also need a plugin to set |filetype| for OpenGL files, such as
"vim-glsl":
https://github.com/tikhomirov/vim-glsl
==============================================================================
SYNTAX CHECKERS FOR GO *syntastic-checkers-go*
The following checkers are available for Go (filetype "go"):
1. go.......................|syntastic-go-go|
2. gofmt....................|syntastic-go-gofmt|
3. GolangCI-Lint............|syntastic-go-golangci_lint|
4. Golint...................|syntastic-go-golint|
5. Go Meta Linter...........|syntastic-go-gometalinter|
6. gotype...................|syntastic-go-gotype|
7. vet......................|syntastic-go-govet|
------------------------------------------------------------------------------
1. go *syntastic-go-go*
Name: go
Maintainer: Kamil Kisiel <kamil@kamilkisiel.net>
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Additionally:
*'g:syntastic_go_go_build_args'*
Type: string
Default: "-buildmode=archive"
arguments passed to "go build"
*'g:syntastic_go_go_test_args'*
Type: string
Default: "-buildmode=archive"
arguments passed to "go test".
Note~
This syntax checker does not reformat your source code. Use a |BufWritePre|
autocommand towards that end: >
autocmd FileType go autocmd BufWritePre <buffer> Fmt
<
------------------------------------------------------------------------------
2. gofmt *syntastic-go-gofmt*
Name: gofmt
Maintainer: Brandon Thomson <bt@brandonthomson.com>
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
Note~
This syntax checker does not reformat your source code. Use a |BufWritePre|
autocommand towards that end: >
autocmd FileType go autocmd BufWritePre <buffer> Fmt
<
------------------------------------------------------------------------------
3. GolangCI-Lint *syntastic-go-golangci_lint*
Name: golangci_lint
Maintainer: Elvis Macak <elvis@lnmpy.com>
GolangCI-Lint is a linters aggregator. See the project's page for details:
https://github.com/golangci/golangci-lint
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
4. Golint *syntastic-go-golint*
Name: golint
Maintainer: Hiroshi Ioka <hirochachacha@gmail.com>
"Golint" is a linter for Go. See the project's page for details:
https://github.com/golang/lint
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
5. Go Meta Linter *syntastic-go-gometalinter*
Name: gometalinter
Maintainer: Joshua Rubin <joshua@rubixconsulting.com>
"Go Meta Linter" is a linter for Go. It runs a number of other linters
against your files, and normalises their output to a standard format.
See the project's page at GitHub for details:
https://github.com/alecthomas/gometalinter
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
6. gotype *syntastic-go-gotype*
Name: gotype
Maintainer: luz <ne.tetewi@gmail.com>
See the tool's documentation for details:
https://godoc.org/golang.org/x/tools/cmd/gotype
------------------------------------------------------------------------------
7. vet *syntastic-go-govet*
Name: govet
Maintainer: Kamil Kisiel <kamil@kamilkisiel.net>
See the tool's documentation for details:
https://godoc.org/cmd/vet
Note~
This checker doesn't call the "makeprgBuild()" function, and thus it ignores
the usual 'g:syntastic_go_govet_<option>' variables.
==============================================================================
SYNTAX CHECKERS FOR HAML *syntastic-checkers-haml*
The following checkers are available for Haml (filetype "haml"):
1. Haml.....................|syntastic-haml-haml|
2. HAML-Lint................|syntastic-haml-haml_lint|
------------------------------------------------------------------------------
1. Haml *syntastic-haml-haml*
Name: haml
Maintainer: Martin Grenfell <martin.grenfell@gmail.com>
See the project's page for details:
http://haml.info/
Checker options~
This checker is initialised using the "makeprgBuild()" function and thus it
accepts the standard options described at |syntastic-config-makeprg|.
------------------------------------------------------------------------------
2. HAML-Lint *syntastic-haml-haml_lint*
Name: haml_lint
Maintainer: Shane da Silva <shane@dasilva.io>
"HAML-Lint" is a linter for HAML files. See the project's page for details:
https://github.com/causes/haml-lint
Checker o
gitextract_ps_e7lm5/
├── .gitignore
├── CONTRIBUTING.md
├── LICENCE
├── README.markdown
├── autoload/
│ └── syntastic/
│ ├── c.vim
│ ├── log.vim
│ ├── postprocess.vim
│ ├── preprocess.vim
│ └── util.vim
├── doc/
│ ├── syntastic-checkers.txt
│ └── syntastic.txt
├── plugin/
│ ├── syntastic/
│ │ ├── autoloclist.vim
│ │ ├── balloons.vim
│ │ ├── checker.vim
│ │ ├── cursor.vim
│ │ ├── highlighting.vim
│ │ ├── loclist.vim
│ │ ├── modemap.vim
│ │ ├── notifiers.vim
│ │ ├── registry.vim
│ │ └── signs.vim
│ └── syntastic.vim
└── syntax_checkers/
├── actionscript/
│ └── mxmlc.vim
├── ada/
│ └── gcc.vim
├── ansible/
│ └── ansible_lint.vim
├── apiblueprint/
│ └── drafter.vim
├── applescript/
│ └── osacompile.vim
├── asciidoc/
│ ├── asciidoc.vim
│ └── proselint.vim
├── asl/
│ └── iasl.vim
├── asm/
│ └── gcc.vim
├── bemhtml/
│ └── bemhtmllint.vim
├── bro/
│ └── bro.vim
├── c/
│ ├── avrgcc.vim
│ ├── checkpatch.vim
│ ├── clang_check.vim
│ ├── clang_tidy.vim
│ ├── cppcheck.vim
│ ├── cppclean.vim
│ ├── flawfinder.vim
│ ├── gcc.vim
│ ├── make.vim
│ ├── oclint.vim
│ ├── pc_lint.vim
│ ├── sparse.vim
│ └── splint.vim
├── cabal/
│ └── cabal.vim
├── chef/
│ └── foodcritic.vim
├── cmake/
│ └── cmakelint.vim
├── co/
│ └── coco.vim
├── cobol/
│ └── cobc.vim
├── coffee/
│ ├── coffee.vim
│ ├── coffee_jshint.vim
│ └── coffeelint.vim
├── coq/
│ └── coqtop.vim
├── cpp/
│ ├── avrgcc.vim
│ ├── clang_check.vim
│ ├── clang_tidy.vim
│ ├── cppcheck.vim
│ ├── cppclean.vim
│ ├── cpplint.vim
│ ├── flawfinder.vim
│ ├── gcc.vim
│ ├── oclint.vim
│ ├── pc_lint.vim
│ └── verapp.vim
├── cs/
│ └── mcs.vim
├── css/
│ ├── csslint.vim
│ ├── mixedindentlint.vim
│ ├── phpcs.vim
│ ├── prettycss.vim
│ ├── recess.vim
│ └── stylelint.vim
├── cucumber/
│ └── cucumber.vim
├── cuda/
│ └── nvcc.vim
├── d/
│ ├── dmd.vim
│ └── dscanner.vim
├── dart/
│ └── dartanalyzer.vim
├── docbk/
│ ├── igor.vim
│ └── xmllint.vim
├── dockerfile/
│ ├── dockerfile_lint.vim
│ └── hadolint.vim
├── dustjs/
│ └── swiffer.vim
├── elixir/
│ └── elixir.vim
├── erlang/
│ ├── erlang_check_file.erl
│ ├── escript.vim
│ └── syntaxerl.vim
├── eruby/
│ └── ruby.vim
├── fortran/
│ └── gfortran.vim
├── glsl/
│ └── cgc.vim
├── go/
│ ├── go.vim
│ ├── gofmt.vim
│ ├── golangci_lint.vim
│ ├── golint.vim
│ ├── gometalinter.vim
│ ├── gotype.vim
│ └── govet.vim
├── haml/
│ ├── haml.vim
│ └── haml_lint.vim
├── handlebars/
│ └── handlebars.vim
├── haskell/
│ ├── hdevtools.vim
│ ├── hlint.vim
│ └── scan.vim
├── haxe/
│ └── haxe.vim
├── help/
│ └── proselint.vim
├── hss/
│ └── hss.vim
├── html/
│ ├── eslint.vim
│ ├── gjslint.vim
│ ├── htmlhint.vim
│ ├── jshint.vim
│ ├── proselint.vim
│ ├── stylelint.vim
│ ├── textlint.vim
│ ├── tidy.vim
│ ├── validator.vim
│ └── w3.vim
├── jade/
│ └── jade_lint.vim
├── java/
│ ├── checkstyle.vim
│ └── javac.vim
├── javascript/
│ ├── closurecompiler.vim
│ ├── eslint.vim
│ ├── flow.vim
│ ├── gjslint.vim
│ ├── jscs.vim
│ ├── jshint.vim
│ ├── jsl.vim
│ ├── jslint.vim
│ ├── jsxhint.vim
│ ├── lynt.vim
│ ├── mixedindentlint.vim
│ ├── standard.vim
│ └── tern_lint.vim
├── json/
│ ├── jsonlint.vim
│ └── jsonval.vim
├── less/
│ ├── less-lint.coffee
│ ├── less-lint.js
│ ├── lessc.vim
│ └── recess.vim
├── lex/
│ └── flex.vim
├── limbo/
│ └── limbo.vim
├── lisp/
│ └── clisp.vim
├── llvm/
│ └── llvm.vim
├── lua/
│ ├── luac.vim
│ └── luacheck.vim
├── markdown/
│ ├── mdl.vim
│ ├── proselint.vim
│ ├── remark_lint.vim
│ └── textlint.vim
├── matlab/
│ └── mlint.vim
├── mercury/
│ └── mmc.vim
├── nasm/
│ └── nasm.vim
├── nix/
│ └── nix.vim
├── nroff/
│ ├── igor.vim
│ ├── mandoc.vim
│ └── proselint.vim
├── objc/
│ ├── gcc.vim
│ └── oclint.vim
├── objcpp/
│ ├── gcc.vim
│ └── oclint.vim
├── ocaml/
│ └── camlp4o.vim
├── perl/
│ ├── perl.vim
│ ├── perlcritic.vim
│ └── podchecker.vim
├── perl6/
│ └── perl6.vim
├── php/
│ ├── php.vim
│ ├── phpcs.vim
│ ├── phplint.vim
│ ├── phpmd.vim
│ └── phpstan.vim
├── po/
│ ├── dennis.vim
│ └── msgfmt.vim
├── pod/
│ ├── podchecker.vim
│ └── proselint.vim
├── pug/
│ └── pug_lint.vim
├── puppet/
│ ├── puppet.vim
│ └── puppetlint.vim
├── python/
│ ├── bandit.vim
│ ├── codec.py
│ ├── compile.py
│ ├── flake8.vim
│ ├── frosted.vim
│ ├── mypy.vim
│ ├── pep257.vim
│ ├── pep8.vim
│ ├── prospector.vim
│ ├── py3kwarn.vim
│ ├── pycodestyle.vim
│ ├── pydocstyle.vim
│ ├── pyflakes.vim
│ ├── pylama.vim
│ ├── pylint.vim
│ └── python.vim
├── qml/
│ └── qmllint.vim
├── r/
│ ├── lint.vim
│ ├── lintr.vim
│ └── svtools.vim
├── racket/
│ ├── code-ayatollah.vim
│ └── racket.vim
├── raku/
│ └── raku.vim
├── rmd/
│ └── lintr.vim
├── rnc/
│ └── rnv.vim
├── rst/
│ ├── proselint.vim
│ ├── rst2pseudoxml.vim
│ ├── rstcheck.vim
│ └── sphinx.vim
├── ruby/
│ ├── flog.vim
│ ├── jruby.vim
│ ├── macruby.vim
│ ├── mri.vim
│ ├── reek.vim
│ ├── rubocop.vim
│ ├── rubylint.vim
│ └── sorbet.vim
├── sass/
│ ├── sass.vim
│ ├── sass_lint.vim
│ └── sassc.vim
├── scala/
│ ├── fsc.vim
│ ├── scalac.vim
│ └── scalastyle.vim
├── scss/
│ ├── mixedindentlint.vim
│ ├── sass.vim
│ ├── sass_lint.vim
│ ├── sassc.vim
│ └── scss_lint.vim
├── sh/
│ ├── bashate.vim
│ ├── checkbashisms.vim
│ ├── sh.vim
│ ├── shellcheck.vim
│ └── shfmt.vim
├── slim/
│ ├── slim_lint.vim
│ └── slimrb.vim
├── sml/
│ └── smlnj.vim
├── solidity/
│ ├── solc.vim
│ ├── solhint.vim
│ └── solium.vim
├── spec/
│ └── rpmlint.vim
├── sql/
│ ├── sqlint.vim
│ └── tsqllint.vim
├── stylus/
│ └── stylint.vim
├── svg/
│ ├── validator.vim
│ └── w3.vim
├── tcl/
│ └── nagelfar.vim
├── tex/
│ ├── chktex.vim
│ ├── lacheck.vim
│ └── proselint.vim
├── texinfo/
│ ├── makeinfo.vim
│ └── proselint.vim
├── text/
│ ├── atdtool.vim
│ ├── igor.vim
│ ├── language_check.vim
│ ├── proselint.vim
│ └── textlint.vim
├── trig/
│ └── rapper.vim
├── turtle/
│ ├── rapper.vim
│ └── ttl.vim
├── twig/
│ ├── twigcs.vim
│ └── twiglint.vim
├── typescript/
│ ├── eslint.vim
│ ├── lynt.vim
│ └── tslint.vim
├── verilog/
│ ├── iverilog.vim
│ └── verilator.vim
├── vhdl/
│ ├── ghdl.vim
│ └── vcom.vim
├── vim/
│ ├── vimlint.vim
│ └── vint.vim
├── vue/
│ ├── eslint.vim
│ ├── pug_lint_vue.vim
│ └── stylelint.vim
├── xhtml/
│ ├── jshint.vim
│ ├── proselint.vim
│ ├── tidy.vim
│ ├── validator.vim
│ └── w3.vim
├── xml/
│ ├── plutil.vim
│ └── xmllint.vim
├── xquery/
│ └── basex.vim
├── xslt/
│ └── xmllint.vim
├── yacc/
│ └── bison.vim
├── yaml/
│ ├── jsyaml.vim
│ ├── yamllint.vim
│ └── yamlxs.vim
├── yang/
│ └── pyang.vim
├── yara/
│ └── yara.vim
├── z80/
│ └── z80syntaxchecker.vim
├── zpt/
│ └── zptlint.vim
└── zsh/
└── zsh.vim
Condensed preview — 287 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,079K chars).
[
{
"path": ".gitignore",
"chars": 24,
"preview": "*~\n*.swp\ntags\n.DS_Store\n"
},
{
"path": "CONTRIBUTING.md",
"chars": 4170,
"preview": "# CONTRIBUTING\n- - -\n1\\. [Deprecation note](#deprecation) \n2\\. [Bug reports / GitHub issues](#bugreps) \n3\\. [Submittin"
},
{
"path": "LICENCE",
"chars": 474,
"preview": " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n Version 2, December 2004\n\nCopyright (C) 2004 S"
},
{
"path": "README.markdown",
"chars": 25373,
"preview": " ,\n / \\,,_ .'|\n ,{{| /}}}}/_.' ____________________________"
},
{
"path": "autoload/syntastic/c.vim",
"chars": 12469,
"preview": "if exists('g:loaded_syntastic_c_autoload') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_syntast"
},
{
"path": "autoload/syntastic/log.vim",
"chars": 6363,
"preview": "if exists('g:loaded_syntastic_log_autoload') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_synta"
},
{
"path": "autoload/syntastic/postprocess.vim",
"chars": 2443,
"preview": "if exists('g:loaded_syntastic_postprocess_autoload') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:load"
},
{
"path": "autoload/syntastic/preprocess.vim",
"chars": 28597,
"preview": "if exists('g:loaded_syntastic_preprocess_autoload') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loade"
},
{
"path": "autoload/syntastic/util.vim",
"chars": 20758,
"preview": "if exists('g:loaded_syntastic_util_autoload') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_synt"
},
{
"path": "doc/syntastic-checkers.txt",
"chars": 294524,
"preview": "*syntastic-checkers.txt*\tSyntastic checkers\n*syntastic-checkers*\n\n======================================================"
},
{
"path": "doc/syntastic.txt",
"chars": 58801,
"preview": "*syntastic.txt* Syntax checking on the fly has never been so pimp.\n*syntastic*\n\n\n It's a bird! It's"
},
{
"path": "plugin/syntastic/autoloclist.vim",
"chars": 1954,
"preview": "if exists('g:loaded_syntastic_notifier_autoloclist') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:load"
},
{
"path": "plugin/syntastic/balloons.vim",
"chars": 1684,
"preview": "if exists('g:loaded_syntastic_notifier_balloons') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_"
},
{
"path": "plugin/syntastic/checker.vim",
"chars": 10152,
"preview": "if exists('g:loaded_syntastic_checker') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_syntastic_"
},
{
"path": "plugin/syntastic/cursor.vim",
"chars": 3935,
"preview": "if exists('g:loaded_syntastic_notifier_cursor') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_sy"
},
{
"path": "plugin/syntastic/highlighting.vim",
"chars": 3378,
"preview": "if exists('g:loaded_syntastic_notifier_highlighting') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loa"
},
{
"path": "plugin/syntastic/loclist.vim",
"chars": 14819,
"preview": "if exists('g:loaded_syntastic_loclist') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_syntastic_"
},
{
"path": "plugin/syntastic/modemap.vim",
"chars": 3898,
"preview": "if exists('g:loaded_syntastic_modemap') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_syntastic_"
},
{
"path": "plugin/syntastic/notifiers.vim",
"chars": 3033,
"preview": "if exists('g:loaded_syntastic_notifiers') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_syntasti"
},
{
"path": "plugin/syntastic/registry.vim",
"chars": 15669,
"preview": "if exists('g:loaded_syntastic_registry') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_syntastic"
},
{
"path": "plugin/syntastic/signs.vim",
"chars": 4744,
"preview": "if exists('g:loaded_syntastic_notifier_signs') || !exists('g:loaded_syntastic_plugin')\n finish\nendif\nlet g:loaded_syn"
},
{
"path": "plugin/syntastic.vim",
"chars": 28142,
"preview": "\"============================================================================\n\"File: syntastic.vim\n\"Description: "
},
{
"path": "syntax_checkers/actionscript/mxmlc.vim",
"chars": 2480,
"preview": "\"============================================================================\n\"File: mxmlc.vim\n\"Description: Acti"
},
{
"path": "syntax_checkers/ada/gcc.vim",
"chars": 1450,
"preview": "\"============================================================================\n\"File: ada.vim\n\"Description: Syntax"
},
{
"path": "syntax_checkers/ansible/ansible_lint.vim",
"chars": 1884,
"preview": "\"============================================================================\n\"File: ansible_lint.vim\n\"Descriptio"
},
{
"path": "syntax_checkers/apiblueprint/drafter.vim",
"chars": 2114,
"preview": "\"============================================================================\n\"File: drafter.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/applescript/osacompile.vim",
"chars": 1858,
"preview": "\"==============================================================================\n\" FileName: applescript.vim\n\" "
},
{
"path": "syntax_checkers/asciidoc/asciidoc.vim",
"chars": 1683,
"preview": "\"============================================================================\n\"File: asciidoc.vim\n\"Description: S"
},
{
"path": "syntax_checkers/asciidoc/proselint.vim",
"chars": 979,
"preview": "\"============================================================================\n\"File: proselint.vim\n\"Description: "
},
{
"path": "syntax_checkers/asl/iasl.vim",
"chars": 1847,
"preview": "\"============================================================================\n\"File: iasl.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/asm/gcc.vim",
"chars": 2063,
"preview": "\"============================================================================\n\"File: gcc.vim\n\"Description: Syntax"
},
{
"path": "syntax_checkers/bemhtml/bemhtmllint.vim",
"chars": 1295,
"preview": "\"============================================================================\n\"File: bemhtmllint.vim\n\"Description"
},
{
"path": "syntax_checkers/bro/bro.vim",
"chars": 1887,
"preview": "\"============================================================================\n\"File: bro.vim\n\"Description: Syntax"
},
{
"path": "syntax_checkers/c/avrgcc.vim",
"chars": 1988,
"preview": "\"============================================================================\n\"File: avrgcc.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/c/checkpatch.vim",
"chars": 2236,
"preview": "\"============================================================================\n\"File: checkpatch.vim\n\"Description:"
},
{
"path": "syntax_checkers/c/clang_check.vim",
"chars": 2116,
"preview": "\"============================================================================\n\"File: clang_check.vim\n\"Description"
},
{
"path": "syntax_checkers/c/clang_tidy.vim",
"chars": 2107,
"preview": "\"============================================================================\n\"File: clang_tidy.vim\n\"Description:"
},
{
"path": "syntax_checkers/c/cppcheck.vim",
"chars": 2227,
"preview": "\"============================================================================\n\"File: cppcheck.vim\n\"Description: S"
},
{
"path": "syntax_checkers/c/cppclean.vim",
"chars": 1293,
"preview": "\"============================================================================\n\"File: cppclean.vim\n\"Description: S"
},
{
"path": "syntax_checkers/c/flawfinder.vim",
"chars": 1953,
"preview": "\"============================================================================\n\"File: flawfinder.vim\n\"Description:"
},
{
"path": "syntax_checkers/c/gcc.vim",
"chars": 2165,
"preview": "\"============================================================================\n\"File: c.vim\n\"Description: Syntax c"
},
{
"path": "syntax_checkers/c/make.vim",
"chars": 2095,
"preview": "\"============================================================================\n\"File: make.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/c/oclint.vim",
"chars": 2000,
"preview": "\"============================================================================\n\"File: oclint.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/c/pc_lint.vim",
"chars": 2225,
"preview": "\"============================================================================\n\"File: pc_lint.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/c/sparse.vim",
"chars": 1566,
"preview": "\"============================================================================\n\"File: sparse.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/c/splint.vim",
"chars": 1838,
"preview": "\"============================================================================\n\"File: splint.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/cabal/cabal.vim",
"chars": 1897,
"preview": "\"============================================================================\n\"File: cabal.vim\n\"Description: Hask"
},
{
"path": "syntax_checkers/chef/foodcritic.vim",
"chars": 1330,
"preview": "\"============================================================================\n\"File: foodcritic.vim\n\"Description:"
},
{
"path": "syntax_checkers/cmake/cmakelint.vim",
"chars": 1314,
"preview": "\"============================================================================\n\"File: cmakelint.vim\n\"Description: "
},
{
"path": "syntax_checkers/co/coco.vim",
"chars": 1500,
"preview": "\"============================================================================\n\"File: co.vim\n\"Description: Syntax "
},
{
"path": "syntax_checkers/cobol/cobc.vim",
"chars": 1627,
"preview": "\"============================================================================\n\"File: cobc.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/coffee/coffee.vim",
"chars": 1960,
"preview": "\"============================================================================\n\"File: coffee.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/coffee/coffee_jshint.vim",
"chars": 1400,
"preview": "\"============================================================================\n\"File: coffee_jshint.vim\n\"Descripti"
},
{
"path": "syntax_checkers/coffee/coffeelint.vim",
"chars": 1552,
"preview": "\"============================================================================\n\"File: coffeelint.vim\n\"Description:"
},
{
"path": "syntax_checkers/coq/coqtop.vim",
"chars": 1363,
"preview": "\"============================================================================\n\"File: coqtop.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/cpp/avrgcc.vim",
"chars": 984,
"preview": "\"============================================================================\n\"File: avrgcc.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/cpp/clang_check.vim",
"chars": 981,
"preview": "\"============================================================================\n\"File: clang_check.vim\n\"Description"
},
{
"path": "syntax_checkers/cpp/clang_tidy.vim",
"chars": 976,
"preview": "\"============================================================================\n\"File: clang_tidy.vim\n\"Description:"
},
{
"path": "syntax_checkers/cpp/cppcheck.vim",
"chars": 972,
"preview": "\"============================================================================\n\"File: cppcheck.vim\n\"Description: S"
},
{
"path": "syntax_checkers/cpp/cppclean.vim",
"chars": 966,
"preview": "\"============================================================================\n\"File: cppclean.vim\n\"Description: S"
},
{
"path": "syntax_checkers/cpp/cpplint.vim",
"chars": 1656,
"preview": "\"============================================================================\n\"File: cpplint.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/cpp/flawfinder.vim",
"chars": 1075,
"preview": "\"============================================================================\n\"File: flawfinder.vim\n\"Description:"
},
{
"path": "syntax_checkers/cpp/gcc.vim",
"chars": 1978,
"preview": "\"============================================================================\n\"File: cpp.vim\n\"Description: Syntax"
},
{
"path": "syntax_checkers/cpp/oclint.vim",
"chars": 951,
"preview": "\"============================================================================\n\"File: oclint.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/cpp/pc_lint.vim",
"chars": 964,
"preview": "\"============================================================================\n\"File: pc_lint.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/cpp/verapp.vim",
"chars": 1531,
"preview": "\"============================================================================\n\"File: verapp.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/cs/mcs.vim",
"chars": 1294,
"preview": "\"============================================================================\n\"File: cs.vim\n\"Description: Syntax "
},
{
"path": "syntax_checkers/css/csslint.vim",
"chars": 1743,
"preview": "\"============================================================================\n\"File: css.vim\n\"Description: Syntax"
},
{
"path": "syntax_checkers/css/mixedindentlint.vim",
"chars": 984,
"preview": "\"============================================================================\n\"File: mixedindentlint.vim\n\"Descrip"
},
{
"path": "syntax_checkers/css/phpcs.vim",
"chars": 943,
"preview": "\"============================================================================\n\"File: phpcs.vim\n\"Description: Synt"
},
{
"path": "syntax_checkers/css/prettycss.vim",
"chars": 1897,
"preview": "\"============================================================================\n\"File: prettycss.vim\n\"Description: "
},
{
"path": "syntax_checkers/css/recess.vim",
"chars": 1019,
"preview": "\"============================================================================\n\"File: recess.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/css/stylelint.vim",
"chars": 1585,
"preview": "\"============================================================================\n\"File: stylelint.vim\n\"Description: "
},
{
"path": "syntax_checkers/cucumber/cucumber.vim",
"chars": 1435,
"preview": "\"============================================================================\n\"File: cucumber.vim\n\"Description: S"
},
{
"path": "syntax_checkers/cuda/nvcc.vim",
"chars": 2906,
"preview": "\"============================================================================\n\"File: cuda.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/d/dmd.vim",
"chars": 4744,
"preview": "\"============================================================================\n\"File: d.vim\n\"Description: Syntax c"
},
{
"path": "syntax_checkers/d/dscanner.vim",
"chars": 1587,
"preview": "\"============================================================================\n\"File: dscanner.vim\n\"Description: S"
},
{
"path": "syntax_checkers/dart/dartanalyzer.vim",
"chars": 2561,
"preview": "\"============================================================================\n\"File: dartanalyzer.vim\n\"Descriptio"
},
{
"path": "syntax_checkers/docbk/igor.vim",
"chars": 1768,
"preview": "\"============================================================================\n\"File: igor.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/docbk/xmllint.vim",
"chars": 975,
"preview": "\"============================================================================\n\"File: docbk.vim\n\"Description: Synt"
},
{
"path": "syntax_checkers/dockerfile/dockerfile_lint.vim",
"chars": 1738,
"preview": "\"============================================================================\n\"File: dockerfile_lint.vim\n\"Descrip"
},
{
"path": "syntax_checkers/dockerfile/hadolint.vim",
"chars": 1393,
"preview": "\"============================================================================\n\"File: hadolint.vim\n\"Description: D"
},
{
"path": "syntax_checkers/dustjs/swiffer.vim",
"chars": 1276,
"preview": "\"============================================================================\n\"File: swiffer.vim\n\"Description: Du"
},
{
"path": "syntax_checkers/elixir/elixir.vim",
"chars": 2010,
"preview": "\"============================================================================\n\"File: elixir.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/erlang/erlang_check_file.erl",
"chars": 10985,
"preview": "#!/usr/bin/env escript\n\nmain([File]) ->\n Dir = get_root(filename:dirname(File)),\n Defs = [strong_validation,\n "
},
{
"path": "syntax_checkers/erlang/escript.vim",
"chars": 2080,
"preview": "\"============================================================================\n\"File: erlang.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/erlang/syntaxerl.vim",
"chars": 1282,
"preview": "\"============================================================================\n\"File: syntaxerl.vim\n\"Description: "
},
{
"path": "syntax_checkers/eruby/ruby.vim",
"chars": 3041,
"preview": "\"============================================================================\n\"File: ruby.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/fortran/gfortran.vim",
"chars": 3465,
"preview": "\"============================================================================\n\"File: fortran.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/glsl/cgc.vim",
"chars": 2149,
"preview": "\"============================================================================\n\"File: glsl.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/go/go.vim",
"chars": 3709,
"preview": "\"============================================================================\n\"File: go.vim\n\"Description: Check g"
},
{
"path": "syntax_checkers/go/gofmt.vim",
"chars": 1522,
"preview": "\"============================================================================\n\"File: gofmt.vim\n\"Description: Chec"
},
{
"path": "syntax_checkers/go/golangci_lint.vim",
"chars": 1554,
"preview": "\"============================================================================\n\"File: golangci_lint.vim\n\"Descripti"
},
{
"path": "syntax_checkers/go/golint.vim",
"chars": 1330,
"preview": "\"============================================================================\n\"File: golint.vim\n\"Description: Che"
},
{
"path": "syntax_checkers/go/gometalinter.vim",
"chars": 1765,
"preview": "\"============================================================================\n\"File: gometalinter.vim\n\"Descriptio"
},
{
"path": "syntax_checkers/go/gotype.vim",
"chars": 2444,
"preview": "\"============================================================================\n\"File: gotype.vim\n\"Description: Per"
},
{
"path": "syntax_checkers/go/govet.vim",
"chars": 1736,
"preview": "\"============================================================================\n\"File: govet.vim\n\"Description: Perf"
},
{
"path": "syntax_checkers/haml/haml.vim",
"chars": 1537,
"preview": "\"============================================================================\n\"File: haml.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/haml/haml_lint.vim",
"chars": 1322,
"preview": "\"============================================================================\n\"File: haml_lint.vim\n\"Description: "
},
{
"path": "syntax_checkers/handlebars/handlebars.vim",
"chars": 1519,
"preview": "\"============================================================================\n\"File: handlebars.vim\n\"Description:"
},
{
"path": "syntax_checkers/haskell/hdevtools.vim",
"chars": 2155,
"preview": "\"============================================================================\n\"File: hdevtools.vim\n\"Description: "
},
{
"path": "syntax_checkers/haskell/hlint.vim",
"chars": 1831,
"preview": "\"============================================================================\n\"File: hlint.vim\n\"Description: Synt"
},
{
"path": "syntax_checkers/haskell/scan.vim",
"chars": 1363,
"preview": "\"============================================================================\n\"File: scan.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/haxe/haxe.vim",
"chars": 2053,
"preview": "\"============================================================================\n\"File: haxe.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/help/proselint.vim",
"chars": 967,
"preview": "\"============================================================================\n\"File: proselint.vim\n\"Description: "
},
{
"path": "syntax_checkers/hss/hss.vim",
"chars": 1265,
"preview": "\"============================================================================\n\"File: hss.vim\n\"Description: Syntax"
},
{
"path": "syntax_checkers/html/eslint.vim",
"chars": 958,
"preview": "\"============================================================================\n\"File: eslint.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/html/gjslint.vim",
"chars": 963,
"preview": "\"============================================================================\n\"File: gjslint.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/html/htmlhint.vim",
"chars": 1512,
"preview": "\"============================================================================\n\"File: html.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/html/jshint.vim",
"chars": 1800,
"preview": "\"============================================================================\n\"File: jshint.vim\n\"Description: Jav"
},
{
"path": "syntax_checkers/html/proselint.vim",
"chars": 967,
"preview": "\"============================================================================\n\"File: proselint.vim\n\"Description: "
},
{
"path": "syntax_checkers/html/stylelint.vim",
"chars": 1046,
"preview": "\"============================================================================\n\"File: stylelint.vim\n\"Description: "
},
{
"path": "syntax_checkers/html/textlint.vim",
"chars": 962,
"preview": "\"============================================================================\n\"File: textlint.vim\n\"Description: S"
},
{
"path": "syntax_checkers/html/tidy.vim",
"chars": 6770,
"preview": "\"============================================================================\n\"File: tidy.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/html/validator.vim",
"chars": 3306,
"preview": "\"============================================================================\n\"File: validator.vim\n\"Description: "
},
{
"path": "syntax_checkers/html/w3.vim",
"chars": 2942,
"preview": "\"============================================================================\n\"File: w3.vim\n\"Description: Syntax "
},
{
"path": "syntax_checkers/jade/jade_lint.vim",
"chars": 992,
"preview": "\"============================================================================\n\"File: jade_lint.vim\n\"Description: "
},
{
"path": "syntax_checkers/java/checkstyle.vim",
"chars": 2906,
"preview": "\"============================================================================\n\"File: checkstyle.vim\n\"Description:"
},
{
"path": "syntax_checkers/java/javac.vim",
"chars": 15335,
"preview": "\"============================================================================\n\"File: javac.vim\n\"Description: Synt"
},
{
"path": "syntax_checkers/javascript/closurecompiler.vim",
"chars": 2849,
"preview": "\"============================================================================\n\"File: closurecompiler.vim\n\"Descrip"
},
{
"path": "syntax_checkers/javascript/eslint.vim",
"chars": 2613,
"preview": "\"============================================================================\n\"File: eslint.vim\n\"Description: Jav"
},
{
"path": "syntax_checkers/javascript/flow.vim",
"chars": 2202,
"preview": "\"============================================================================\n\"File: flow.vim\n\"Description: Javas"
},
{
"path": "syntax_checkers/javascript/gjslint.vim",
"chars": 1649,
"preview": "\"============================================================================\n\"File: gjslint.vim\n\"Description: Ja"
},
{
"path": "syntax_checkers/javascript/jscs.vim",
"chars": 1747,
"preview": "\"============================================================================\n\"File: jscs.vim\n\"Description: Javas"
},
{
"path": "syntax_checkers/javascript/jshint.vim",
"chars": 2125,
"preview": "\"============================================================================\n\"File: jshint.vim\n\"Description: Jav"
},
{
"path": "syntax_checkers/javascript/jsl.vim",
"chars": 1669,
"preview": "\"============================================================================\n\"File: jsl.vim\n\"Description: Javasc"
},
{
"path": "syntax_checkers/javascript/jslint.vim",
"chars": 1748,
"preview": "\"============================================================================\n\"File: jslint.vim\n\"Description: Jav"
},
{
"path": "syntax_checkers/javascript/jsxhint.vim",
"chars": 2132,
"preview": "\"============================================================================\n\"File: jsxhint.vim\n\"Description: Ja"
},
{
"path": "syntax_checkers/javascript/lynt.vim",
"chars": 1592,
"preview": "\"============================================================================\n\"File: lynt.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/javascript/mixedindentlint.vim",
"chars": 1444,
"preview": "\"============================================================================\n\"File: mixedindentlint.vim\n\"Descrip"
},
{
"path": "syntax_checkers/javascript/standard.vim",
"chars": 1873,
"preview": "\"============================================================================\n\"File: standard.vim\n\"Description: J"
},
{
"path": "syntax_checkers/javascript/tern_lint.vim",
"chars": 1727,
"preview": "\"============================================================================\n\"File: tern_lint.vim\n\"Description: "
},
{
"path": "syntax_checkers/json/jsonlint.vim",
"chars": 1466,
"preview": "\"============================================================================\n\"File: jsonlint.vim\n\"Description: J"
},
{
"path": "syntax_checkers/json/jsonval.vim",
"chars": 1390,
"preview": "\"============================================================================\n\"File: jsonval.vim\n\"Description: JS"
},
{
"path": "syntax_checkers/less/less-lint.coffee",
"chars": 1064,
"preview": "#!/usr/bin/env node\n\nfs = require 'fs'\nless = require 'less'\nargs = process.argv.slice(1)\noptions = {}\n\nargs = args.filt"
},
{
"path": "syntax_checkers/less/less-lint.js",
"chars": 1302,
"preview": "// Generated by CoffeeScript 1.3.3\n(function() {\n var args, fs, less, options, parser;\n\n fs = require('fs');\n\n less ="
},
{
"path": "syntax_checkers/less/lessc.vim",
"chars": 2148,
"preview": "\"============================================================================\n\"File: less.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/less/recess.vim",
"chars": 1454,
"preview": "\"============================================================================\n\"File: recess.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/lex/flex.vim",
"chars": 1701,
"preview": "\"============================================================================\n\"File: lex.vim\n\"Description: Syntax"
},
{
"path": "syntax_checkers/limbo/limbo.vim",
"chars": 1685,
"preview": "\"============================================================================\n\"File: limbo.vim\n\"Description: Synt"
},
{
"path": "syntax_checkers/lisp/clisp.vim",
"chars": 1772,
"preview": "\"============================================================================\n\"File: lisp.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/llvm/llvm.vim",
"chars": 1306,
"preview": "\"============================================================================\n\"File: llvm.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/lua/luac.vim",
"chars": 2327,
"preview": "\"============================================================================\n\"File: lua.vim\n\"Description: Syntax"
},
{
"path": "syntax_checkers/lua/luacheck.vim",
"chars": 2410,
"preview": "\"============================================================================\n\"File: luacheck.vim\n\"Description: L"
},
{
"path": "syntax_checkers/markdown/mdl.vim",
"chars": 1529,
"preview": "\"============================================================================\n\"File: mdl.vim\n\"Description: Syntax"
},
{
"path": "syntax_checkers/markdown/proselint.vim",
"chars": 979,
"preview": "\"============================================================================\n\"File: proselint.vim\n\"Description: "
},
{
"path": "syntax_checkers/markdown/remark_lint.vim",
"chars": 1795,
"preview": "\"============================================================================\n\"File: remark.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/markdown/textlint.vim",
"chars": 974,
"preview": "\"============================================================================\n\"File: textlint.vim\n\"Description: S"
},
{
"path": "syntax_checkers/matlab/mlint.vim",
"chars": 1398,
"preview": "\"============================================================================\n\"File: matlab.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/mercury/mmc.vim",
"chars": 1475,
"preview": "\"============================================================================\n\"File: mercury.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/nasm/nasm.vim",
"chars": 1476,
"preview": "\"============================================================================\n\"File: nasm.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/nix/nix.vim",
"chars": 1425,
"preview": "\"============================================================================\n\"File: nix.vim\n\"Description: Check "
},
{
"path": "syntax_checkers/nroff/igor.vim",
"chars": 946,
"preview": "\"============================================================================\n\"File: igor.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/nroff/mandoc.vim",
"chars": 1361,
"preview": "\"============================================================================\n\"File: mandoc.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/nroff/proselint.vim",
"chars": 970,
"preview": "\"============================================================================\n\"File: proselint.vim\n\"Description: "
},
{
"path": "syntax_checkers/objc/gcc.vim",
"chars": 2241,
"preview": "\"============================================================================\n\"File: objc.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/objc/oclint.vim",
"chars": 954,
"preview": "\"============================================================================\n\"File: oclint.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/objcpp/gcc.vim",
"chars": 2273,
"preview": "\"============================================================================\n\"File: objcpp.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/objcpp/oclint.vim",
"chars": 960,
"preview": "\"============================================================================\n\"File: oclint.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/ocaml/camlp4o.vim",
"chars": 4491,
"preview": "\"============================================================================\n\"File: ocaml.vim\n\"Description: Synt"
},
{
"path": "syntax_checkers/perl/perl.vim",
"chars": 3454,
"preview": "\"============================================================================\n\"File: perl.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/perl/perlcritic.vim",
"chars": 1716,
"preview": "\"============================================================================\n\"File: perlcritic.vim\n\"Description:"
},
{
"path": "syntax_checkers/perl/podchecker.vim",
"chars": 971,
"preview": "\"============================================================================\n\"File: podchecker.vim\n\"Description:"
},
{
"path": "syntax_checkers/perl6/perl6.vim",
"chars": 984,
"preview": "\"============================================================================\n\"File: perl6.vim\n\"Description: Synt"
},
{
"path": "syntax_checkers/php/php.vim",
"chars": 1875,
"preview": "\"============================================================================\n\"File: php.vim\n\"Description: Syntax"
},
{
"path": "syntax_checkers/php/phpcs.vim",
"chars": 1442,
"preview": "\"============================================================================\n\"File: phpcs.vim\n\"Description: Synt"
},
{
"path": "syntax_checkers/php/phplint.vim",
"chars": 3206,
"preview": "\"============================================================================\n\"File: phplint.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/php/phpmd.vim",
"chars": 3406,
"preview": "\"============================================================================\n\"File: phpmd.vim\n\"Description: Synt"
},
{
"path": "syntax_checkers/php/phpstan.vim",
"chars": 1601,
"preview": "\"============================================================================\n\"File: phpstan.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/po/dennis.vim",
"chars": 1401,
"preview": "\"============================================================================\n\"File: dennis.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/po/msgfmt.vim",
"chars": 1685,
"preview": "\"============================================================================\n\"File: msgfmt.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/pod/podchecker.vim",
"chars": 1727,
"preview": "\"============================================================================\n\"File: podchecker.vim\n\"Description:"
},
{
"path": "syntax_checkers/pod/proselint.vim",
"chars": 964,
"preview": "\"============================================================================\n\"File: proselint.vim\n\"Description: "
},
{
"path": "syntax_checkers/pug/pug_lint.vim",
"chars": 1336,
"preview": "\"============================================================================\n\"File: pug_lint.vim\n\"Description: S"
},
{
"path": "syntax_checkers/puppet/puppet.vim",
"chars": 1815,
"preview": "\"============================================================================\n\"File: puppet.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/puppet/puppetlint.vim",
"chars": 1874,
"preview": "\"============================================================================\n\"File: puppetlint.vim\n\"Description:"
},
{
"path": "syntax_checkers/python/bandit.vim",
"chars": 1672,
"preview": "\"============================================================================\n\"File: bandit\n\"Description: Syntax "
},
{
"path": "syntax_checkers/python/codec.py",
"chars": 794,
"preview": "#!/usr/bin/env python\n\nfrom __future__ import print_function\nfrom sys import argv, exit\n\nimport codecs\nimport re\nimport "
},
{
"path": "syntax_checkers/python/compile.py",
"chars": 287,
"preview": "#!/usr/bin/env python\n\nfrom __future__ import print_function\nfrom sys import argv, exit\n\n\nif len(argv) != 2:\n exit(1)"
},
{
"path": "syntax_checkers/python/flake8.vim",
"chars": 2005,
"preview": "\"============================================================================\n\"File: flake8.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/python/frosted.vim",
"chars": 1954,
"preview": "\"============================================================================\n\"File: frosted.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/python/mypy.vim",
"chars": 1411,
"preview": "\"============================================================================\n\"File: mypy.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/python/pep257.vim",
"chars": 964,
"preview": "\"============================================================================\n\"File: pep257.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/python/pep8.vim",
"chars": 957,
"preview": "\"============================================================================\n\"File: pep8.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/python/prospector.vim",
"chars": 2407,
"preview": "\"============================================================================\n\"File: prospector.vim\n\"Description:"
},
{
"path": "syntax_checkers/python/py3kwarn.vim",
"chars": 972,
"preview": "\"============================================================================\n\"File: py3kwarn.vim\n\"Description: S"
},
{
"path": "syntax_checkers/python/pycodestyle.vim",
"chars": 1513,
"preview": "\"============================================================================\n\"File: pycodestyle.vim\n\"Description"
},
{
"path": "syntax_checkers/python/pydocstyle.vim",
"chars": 2056,
"preview": "\"============================================================================\n\"File: pydocstyle.vim\n\"Description:"
},
{
"path": "syntax_checkers/python/pyflakes.vim",
"chars": 2319,
"preview": "\"============================================================================\n\"File: pyflakes.vim\n\"Description: S"
},
{
"path": "syntax_checkers/python/pylama.vim",
"chars": 2526,
"preview": "\"============================================================================\n\"File: pylama.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/python/pylint.vim",
"chars": 3137,
"preview": "\"============================================================================\n\"File: pylint.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/python/python.vim",
"chars": 1935,
"preview": "\"============================================================================\n\"File: python.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/qml/qmllint.vim",
"chars": 1315,
"preview": "\"============================================================================\n\"File: qmllint.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/r/lint.vim",
"chars": 2692,
"preview": "\"============================================================================\n\"File: lint.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/r/lintr.vim",
"chars": 2948,
"preview": "\"============================================================================\n\"File: lintr.vim\n\"Description: Synt"
},
{
"path": "syntax_checkers/r/svtools.vim",
"chars": 2772,
"preview": "\"============================================================================\n\"File: svtools.vim\n\"Description: Sy"
},
{
"path": "syntax_checkers/racket/code-ayatollah.vim",
"chars": 1984,
"preview": "\"============================================================================\n\"File: code-ayatollah.vim\n\"Descript"
},
{
"path": "syntax_checkers/racket/racket.vim",
"chars": 1585,
"preview": "\"============================================================================\n\"File: racket.vim\n\"Description: Syn"
},
{
"path": "syntax_checkers/raku/raku.vim",
"chars": 3774,
"preview": "\"============================================================================\n\"File: raku.vim\n\"Description: Synta"
},
{
"path": "syntax_checkers/rmd/lintr.vim",
"chars": 953,
"preview": "\"============================================================================\n\"File: lintr.vim\n\"Description: Synt"
}
]
// ... and 87 more files (download for full content)
About this extraction
This page contains the full source code of the vim-syntastic/syntastic GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 287 files (995.6 KB), approximately 271.8k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.