Fix - #883 Document linting behavior better, sync up the lists of supported tools, andautomatically demand that they stay in sync
This commit is contained in:
		
							parent
							
								
									b031531e79
								
							
						
					
					
						commit
						8e3c1dbd11
					
				
							
								
								
									
										45
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								README.md
									
									
									
									
									
								
							| @ -55,50 +55,59 @@ tools will be run in combination, so they can be complementary. | ||||
| Keep the table rows sorted alphabetically by the language name, | ||||
| and the tools in the tools column sorted alphabetically by the tool | ||||
| name. That seems to be the fairest way to arrange this table. | ||||
| 
 | ||||
| Remember to also update doc/ale.txt, which has a similar list with different | ||||
| formatting. | ||||
| --> | ||||
| 
 | ||||
| <a name="table-notes"></a> | ||||
| **Notes:** | ||||
| 
 | ||||
| * *^ No linters for text or Vim help filetypes are enabled by default.* | ||||
| * *! These linters check only files on disk. See `:help ale-lint-file-linters`* | ||||
| 
 | ||||
| | Language | Tools | | ||||
| | -------- | ----- | | ||||
| | ASM | [gcc](https://gcc.gnu.org) | | ||||
| | Ansible | [ansible-lint](https://github.com/willthames/ansible-lint) | | ||||
| | AsciiDoc | [proselint](http://proselint.com/)| | ||||
| | AsciiDoc | [proselint](http://proselint.com/) | | ||||
| | Awk | [gawk](https://www.gnu.org/software/gawk/)| | ||||
| | Bash | [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/) | | ||||
| | Bourne Shell | [-n flag](http://linux.die.net/man/1/sh), [shellcheck](https://www.shellcheck.net/) | | ||||
| | C | [cppcheck](http://cppcheck.sourceforge.net), [gcc](https://gcc.gnu.org/), [clang](http://clang.llvm.org/), [clang-format](https://clang.llvm.org/docs/ClangFormat.html)| | ||||
| | C++ (filetype cpp) | [clang](http://clang.llvm.org/), [clangcheck](http://clang.llvm.org/docs/ClangCheck.html), [clangtidy](http://clang.llvm.org/extra/clang-tidy/), [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint), [gcc](https://gcc.gnu.org/), [clang-format](https://clang.llvm.org/docs/ClangFormat.html)| | ||||
| | Bash | shell [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/) | | ||||
| | Bourne Shell | shell [-n flag](http://linux.die.net/man/1/sh), [shellcheck](https://www.shellcheck.net/) | | ||||
| | C | [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint), [gcc](https://gcc.gnu.org/), [clang](http://clang.llvm.org/), [clang-format](https://clang.llvm.org/docs/ClangFormat.html)| | ||||
| | C++ (filetype cpp) | [clang](http://clang.llvm.org/), [clangcheck](http://clang.llvm.org/docs/ClangCheck.html)[!](#table-notes), [clangtidy](http://clang.llvm.org/extra/clang-tidy/)[!](#table-notes), [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint)[!](#table-notes), [gcc](https://gcc.gnu.org/), [clang-format](https://clang.llvm.org/docs/ClangFormat.html)| | ||||
| | C# | [mcs](http://www.mono-project.com/docs/about-mono/languages/csharp/) | | ||||
| | Chef | [foodcritic](http://www.foodcritic.io/) | | ||||
| | CMake | [cmakelint](https://github.com/richq/cmake-lint) | | ||||
| | CoffeeScript | [coffee](http://coffeescript.org/), [coffeelint](https://www.npmjs.com/package/coffeelint) | | ||||
| | Crystal | [crystal](https://crystal-lang.org/) | | ||||
| | Crystal | [crystal](https://crystal-lang.org/)[!](#table-notes) | | ||||
| | CSS | [csslint](http://csslint.net/), [stylelint](https://github.com/stylelint/stylelint) | | ||||
| | Cython (pyrex filetype) | [cython](http://cython.org/) | | ||||
| | D | [dmd](https://dlang.org/dmd-linux.html) | | ||||
| | Dart | [dartanalyzer](https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_cli) | | ||||
| | Dockerfile | [hadolint](https://github.com/lukasmartinelli/hadolint) | | ||||
| | Elixir | [credo](https://github.com/rrrene/credo), [dogma](https://github.com/lpil/dogma) | | ||||
| | Elixir | [credo](https://github.com/rrrene/credo), [dogma](https://github.com/lpil/dogma)[!](#table-notes) | | ||||
| | Elm | [elm-make](https://github.com/elm-lang/elm-make) | | ||||
| | Erb | [erb](https://github.com/jeremyevans/erubi), [erubis](https://github.com/kwatch/erubis) | | ||||
| | Erlang | [erlc](http://erlang.org/doc/man/erlc.html), [SyntaxErl](https://github.com/ten0s/syntaxerl) | | ||||
| | Fortran | [gcc](https://gcc.gnu.org/) | | ||||
| | FusionScript | [fusion-lint](https://github.com/RyanSquared/fusionscript) | | ||||
| | Go | [gofmt -e](https://golang.org/cmd/gofmt/), [go vet](https://golang.org/cmd/vet/), [golint](https://godoc.org/github.com/golang/lint), [gometalinter](https://github.com/alecthomas/gometalinter), [go build](https://golang.org/cmd/go/), [gosimple](https://github.com/dominikh/go-tools/tree/master/cmd/gosimple), [staticcheck](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) | | ||||
| | Go | [gofmt](https://golang.org/cmd/gofmt/), [go vet](https://golang.org/cmd/vet/), [golint](https://godoc.org/github.com/golang/lint), [gometalinter](https://github.com/alecthomas/gometalinter)[!](#table-notes), [go build](https://golang.org/cmd/go/)[!](#table-notes), [gosimple](https://github.com/dominikh/go-tools/tree/master/cmd/gosimple), [staticcheck](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) | | ||||
| | GraphQL | [gqlint](https://github.com/happylinks/gqlint) | | ||||
| | Haml | [haml-lint](https://github.com/brigade/haml-lint) | ||||
| | Handlebars | [ember-template-lint](https://github.com/rwjblue/ember-template-lint) | | ||||
| | Haskell | [ghc](https://www.haskell.org/ghc/), [stack-ghc](https://haskellstack.org/), [stack-build](https://haskellstack.org/), [ghc-mod](https://github.com/DanielG/ghc-mod), [stack-ghc-mod](https://github.com/DanielG/ghc-mod), [hlint](https://hackage.haskell.org/package/hlint), [hdevtools](https://hackage.haskell.org/package/hdevtools) | | ||||
| | Haskell | [ghc](https://www.haskell.org/ghc/), [stack-ghc](https://haskellstack.org/), [stack-build](https://haskellstack.org/)[!](#table-notes), [ghc-mod](https://github.com/DanielG/ghc-mod), [stack-ghc-mod](https://github.com/DanielG/ghc-mod), [hlint](https://hackage.haskell.org/package/hlint), [hdevtools](https://hackage.haskell.org/package/hdevtools) | | ||||
| | HTML | [HTMLHint](http://htmlhint.com/), [proselint](http://proselint.com/), [tidy](http://www.html-tidy.org/) | | ||||
| | Idris | [idris](http://www.idris-lang.org/) | | ||||
| | Java | [checkstyle](http://checkstyle.sourceforge.net), [javac](http://www.oracle.com/technetwork/java/javase/downloads/index.html) | | ||||
| | JavaScript | [eslint](http://eslint.org/), [jscs](http://jscs.info/), [jshint](http://jshint.com/), [flow](https://flowtype.org/), [standard](http://standardjs.com/), [prettier](https://github.com/prettier/prettier) (and `prettier-eslint`, `prettier-standard`), [xo](https://github.com/sindresorhus/xo) | ||||
| | JavaScript | [eslint](http://eslint.org/), [jscs](http://jscs.info/), [jshint](http://jshint.com/), [flow](https://flowtype.org/), [prettier](https://github.com/prettier/prettier), prettier-eslint, prettier-standard, [standard](http://standardjs.com/), [xo](https://github.com/sindresorhus/xo) | ||||
| | JSON | [jsonlint](http://zaa.ch/jsonlint/) | | ||||
| | Kotlin | [kotlinc](https://kotlinlang.org), [ktlint](https://ktlint.github.io) see `:help ale-integration-kotlin` for configuration instructions | ||||
| | Kotlin | [kotlinc](https://kotlinlang.org)[!](#table-notes), [ktlint](https://ktlint.github.io)[!](#table-notes) see `:help ale-integration-kotlin` for configuration instructions | ||||
| | LaTeX | [chktex](http://www.nongnu.org/chktex/), [lacheck](https://www.ctan.org/pkg/lacheck), [proselint](http://proselint.com/) | | ||||
| | Lua | [luacheck](https://github.com/mpeterv/luacheck) | | ||||
| | Markdown | [mdl](https://github.com/mivok/markdownlint), [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) | | ||||
| | MATLAB | [mlint](https://www.mathworks.com/help/matlab/ref/mlint.html) | | ||||
| | Nim | [nim](https://nim-lang.org/docs/nimc.html) | | ||||
| | Nim | [nim check](https://nim-lang.org/docs/nimc.html)[!](#table-notes) | | ||||
| | nix | [nix-instantiate](http://nixos.org/nix/manual/#sec-nix-instantiate) | | ||||
| | nroff | [proselint](http://proselint.com/)| | ||||
| | Objective-C | [clang](http://clang.llvm.org/) | | ||||
| @ -109,13 +118,13 @@ name. That seems to be the fairest way to arrange this table. | ||||
| | Pod | [proselint](http://proselint.com/)| | ||||
| | Pug | [pug-lint](https://github.com/pugjs/pug-lint) | | ||||
| | Puppet | [puppet](https://puppet.com), [puppet-lint](https://puppet-lint.com) | | ||||
| | Python | [autopep8](https://github.com/hhatto/autopep8), [flake8](http://flake8.pycqa.org/en/latest/), [isort](https://github.com/timothycrosley/isort), [mypy](http://mypy-lang.org/), [pycodestyle](https://github.com/PyCQA/pycodestyle), [pylint](https://www.pylint.org/), [yapf](https://github.com/google/yapf) | | ||||
| | Python | [autopep8](https://github.com/hhatto/autopep8), [flake8](http://flake8.pycqa.org/en/latest/), [isort](https://github.com/timothycrosley/isort), [mypy](http://mypy-lang.org/), [pycodestyle](https://github.com/PyCQA/pycodestyle), [pylint](https://www.pylint.org/)[!](#table-notes), [yapf](https://github.com/google/yapf) | | ||||
| | R | [lintr](https://github.com/jimhester/lintr) | | ||||
| | ReasonML | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-integration-reason-merlin` for configuration instructions | ||||
| | reStructuredText | [proselint](http://proselint.com/)| | ||||
| | reStructuredText | [proselint](http://proselint.com/) | | ||||
| | RPM spec | [rpmlint](https://github.com/rpm-software-management/rpmlint) (disabled by default; see `:help ale-integration-spec`) | | ||||
| | Ruby | [brakeman](http://brakemanscanner.org/), [rails_best_practices](https://github.com/flyerhzm/rails_best_practices), [reek](https://github.com/troessner/reek), [rubocop](https://github.com/bbatsov/rubocop), [ruby](https://www.ruby-lang.org) | | ||||
| | Rust |  cargo (see `:help ale-integration-rust` for configuration instructions), [rls](https://github.com/rust-lang-nursery/rls), [rustc](https://www.rust-lang.org/) | | ||||
| | Ruby | [brakeman](http://brakemanscanner.org/)[!](#table-notes), [rails_best_practices](https://github.com/flyerhzm/rails_best_practices)[!](#table-notes), [reek](https://github.com/troessner/reek), [rubocop](https://github.com/bbatsov/rubocop), [ruby](https://www.ruby-lang.org) | | ||||
| | Rust |  cargo[!](#table-notes) (see `:help ale-integration-rust` for configuration instructions), [rls](https://github.com/rust-lang-nursery/rls), [rustc](https://www.rust-lang.org/) | | ||||
| | SASS | [sass-lint](https://www.npmjs.com/package/sass-lint), [stylelint](https://github.com/stylelint/stylelint) | | ||||
| | SCSS | [sass-lint](https://www.npmjs.com/package/sass-lint), [scss-lint](https://github.com/brigade/scss-lint), [stylelint](https://github.com/stylelint/stylelint) | | ||||
| | Scala | [scalac](http://scala-lang.org), [scalastyle](http://www.scalastyle.org) | | ||||
| @ -124,7 +133,7 @@ name. That seems to be the fairest way to arrange this table. | ||||
| | Stylus | [stylelint](https://github.com/stylelint/stylelint) | | ||||
| | SQL | [sqlint](https://github.com/purcell/sqlint) | | ||||
| | Swift | [swiftlint](https://github.com/realm/SwiftLint), [swiftformat](https://github.com/nicklockwood/SwiftFormat) | | ||||
| | Tcl | [nagelfar](http://nagelfar.sourceforge.net)| | ||||
| | Tcl | [nagelfar](http://nagelfar.sourceforge.net)[!](#table-notes) | | ||||
| | Texinfo | [proselint](http://proselint.com/)| | ||||
| | Text^ | [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) | | ||||
| | TypeScript | [eslint](http://eslint.org/), [tslint](https://github.com/palantir/tslint), tsserver, typecheck | | ||||
| @ -135,8 +144,6 @@ name. That seems to be the fairest way to arrange this table. | ||||
| | XML | [xmllint](http://xmlsoft.org/xmllint.html/)| | ||||
| | YAML | [swaglint](https://github.com/byCedric/swaglint), [yamllint](https://yamllint.readthedocs.io/) | | ||||
| 
 | ||||
| * *^ No linters for text or Vim help filetypes are enabled by default.* | ||||
| 
 | ||||
| <a name="usage"></a> | ||||
| 
 | ||||
| ## 2. Usage | ||||
|  | ||||
							
								
								
									
										65
									
								
								check-supported-tools-tables
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										65
									
								
								check-supported-tools-tables
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,65 @@ | ||||
| #!/bin/bash -eu | ||||
| 
 | ||||
| # This script compares the table of supported tools in both the README file | ||||
| # and the doc/ale.txt file, so we can complain if they don't match up. | ||||
| 
 | ||||
| # Find the start and end lines for the help section. | ||||
| ale_help_start_line="$( \ | ||||
|     grep -m1 -n '^[0-9][0-9]*\. *Supported Languages' doc/ale.txt \ | ||||
|     | sed 's/\([0-9]*\).*/\1/' \ | ||||
| )" | ||||
| ale_help_section_size="$( \ | ||||
|     tail -n +"$ale_help_start_line" doc/ale.txt \ | ||||
|     | grep -m1 -n '================' \ | ||||
|     | sed 's/\([0-9]*\).*/\1/' \ | ||||
| )" | ||||
| ale_help_end_line="$(("$ale_help_start_line" + "$ale_help_section_size"))" | ||||
| 
 | ||||
| # Find the start and end lines for the same section in the README. | ||||
| readme_start_line="$( \ | ||||
|     grep -m1 -n '^.*[0-9][0-9]*\. *Supported Languages' README.md \ | ||||
|     | sed 's/\([0-9]*\).*/\1/' \ | ||||
| )" | ||||
| readme_section_size="$( \ | ||||
|     tail -n +"$readme_start_line" README.md \ | ||||
|     | grep -m1 -n '^##.*Usage' \ | ||||
|     | sed 's/\([0-9]*\).*/\1/' \ | ||||
| )" | ||||
| readme_end_line="$(("$readme_start_line" + "$readme_section_size"))" | ||||
| 
 | ||||
| doc_file="$(mktemp)" | ||||
| readme_file="$(mktemp)" | ||||
| 
 | ||||
| sed -n "$ale_help_start_line,$ale_help_end_line"p doc/ale.txt \ | ||||
|     | grep '\* .*: ' \ | ||||
|     | sed 's/^*//' \ | ||||
|     | sed 's/[`!^]\|([^)]*)//g' \ | ||||
|     | sed 's/ *\([,:]\)/\1/g' \ | ||||
|     | sed 's/  */ /g' \ | ||||
|     | sed 's/^ *\| *$//g' \ | ||||
|     | sed 's/^/ /' \ | ||||
|     > "$doc_file" | ||||
| 
 | ||||
| sed -n "$readme_start_line,$readme_end_line"p README.md \ | ||||
|     | grep '| .* |' \ | ||||
|     | sed '/^| Language\|^| ---/d' \ | ||||
|     | sed 's/^|//' \ | ||||
|     | sed 's/ \?|/:/' \ | ||||
|     | sed 's/[`!^|]\|([^)]*)//g' \ | ||||
|     | sed 's/\[\|\]//g' \ | ||||
|     | sed 's/see.*\(,\|$\)/\1/g' \ | ||||
|     | sed 's/ *\([,:]\)/\1/g' \ | ||||
|     | sed 's/  */ /g' \ | ||||
|     | sed 's/^ *\| *$//g' \ | ||||
|     | sed 's/^/ /' \ | ||||
|     | sed 's/ *-n flag//g' \ | ||||
|     > "$readme_file" | ||||
| 
 | ||||
| exit_code=0 | ||||
| 
 | ||||
| diff -U0 "$readme_file" "$doc_file" || exit_code=$? | ||||
| 
 | ||||
| rm "$doc_file" | ||||
| rm "$readme_file" | ||||
| 
 | ||||
| exit "$exit_code" | ||||
							
								
								
									
										432
									
								
								doc/ale.txt
									
									
									
									
									
								
							
							
						
						
									
										432
									
								
								doc/ale.txt
									
									
									
									
									
								
							| @ -8,11 +8,12 @@ CONTENTS                                                         *ale-contents* | ||||
| 
 | ||||
|   1. Introduction.........................|ale-introduction| | ||||
|   2. Supported Languages & Tools..........|ale-support| | ||||
|   3. Global Options.......................|ale-options| | ||||
|     3.1 Highlights........................|ale-highlights| | ||||
|   3. Linting..............................|ale-lint| | ||||
|   4. Fixing Problems......................|ale-fix| | ||||
|   5. Completion...........................|ale-completion| | ||||
|   6. Integration Documentation............|ale-integrations| | ||||
|   6. Global Options.......................|ale-options| | ||||
|     6.1 Highlights........................|ale-highlights| | ||||
|   7. Integration Documentation............|ale-integrations| | ||||
|     asm...................................|ale-asm-options| | ||||
|       gcc.................................|ale-asm-gcc| | ||||
|     c.....................................|ale-c-options| | ||||
| @ -140,10 +141,10 @@ CONTENTS                                                         *ale-contents* | ||||
|     yaml..................................|ale-yaml-options| | ||||
|       swaglint............................|ale-yaml-swaglint| | ||||
|       yamllint............................|ale-yaml-yamllint| | ||||
|   7. Commands/Keybinds....................|ale-commands| | ||||
|   8. API..................................|ale-api| | ||||
|   9. Special Thanks.......................|ale-special-thanks| | ||||
|   10. Contact.............................|ale-contact| | ||||
|   8. Commands/Keybinds....................|ale-commands| | ||||
|   9. API..................................|ale-api| | ||||
|   10. Special Thanks......................|ale-special-thanks| | ||||
|   11. Contact.............................|ale-contact| | ||||
| 
 | ||||
| =============================================================================== | ||||
| 1. Introduction                                              *ale-introduction* | ||||
| @ -174,80 +175,246 @@ for the current buffer. | ||||
| 
 | ||||
| The following languages and tools are supported. | ||||
| 
 | ||||
| * ASM: 'gcc' | ||||
| * Ansible: 'ansible-lint' | ||||
| * Asciidoc: 'proselint' | ||||
| * Bash: 'shell' (-n flag), 'shellcheck' | ||||
| * Bourne Shell: 'shell' (-n flag), 'shellcheck' | ||||
| * C: 'cppcheck', 'gcc', 'clang', 'clang-format' | ||||
| * C++ (filetype cpp): 'clang', 'clangtidy', 'cppcheck', 'cpplint', 'gcc', 'clang-format' | ||||
| * C#: 'mcs' | ||||
| * Chef: 'foodcritic' | ||||
| * CMake: 'cmakelint' | ||||
| * CoffeeScript: 'coffee', 'coffelint' | ||||
| * Crystal: 'crystal' | ||||
| * CSS: 'csslint', 'stylelint' | ||||
| * Cython (pyrex filetype): 'cython' | ||||
| * D: 'dmd' | ||||
| * Dart: 'dartanalyzer' | ||||
| * Dockerfile: 'hadolint' | ||||
| * Elixir: 'credo', 'dogma' | ||||
| * Elm: 'elm-make' | ||||
| * Erlang: 'erlc' | ||||
| * Fortran: 'gcc' | ||||
| * Go: 'gofmt', 'go vet', 'golint', 'go build', 'gosimple', 'staticcheck' | ||||
| * FusionScript: 'fusion-lint' | ||||
| * Haml: 'hamllint' | ||||
| * Handlebars: 'ember-template-lint' | ||||
| * Haskell: 'ghc', 'stack-ghc', 'stack-build', 'ghc-mod', 'stack-ghc-mod', 'hlint', 'hdevtools' | ||||
| * HTML: 'HTMLHint', 'proselint', 'tidy' | ||||
| * Idris: 'idris' | ||||
| * Java: 'javac' | ||||
| * JavaScript: 'eslint', 'jscs', 'jshint', 'flow', 'prettier', 'prettier-eslint', 'xo' | ||||
| * JSON: 'jsonlint' | ||||
| * Kotlin: 'kotlinc' | ||||
| * LaTeX (tex): 'chktex', 'lacheck', 'proselint' | ||||
| * Lua: 'luacheck' | ||||
| * Markdown: 'mdl', 'proselint', 'vale' | ||||
| * MATLAB: 'mlint' | ||||
| * nim: 'nim check' | ||||
| * nix: 'nix-instantiate' | ||||
| * nroff: 'proselint' | ||||
| * Objective-C: 'clang' | ||||
| * Objective-C++: 'clang' | ||||
| * OCaml: 'merlin' (see |ale-ocaml-merlin|) | ||||
| * Perl: 'perl' (-c flag), 'perlcritic' | ||||
| * PHP: 'hack', 'langserver', 'php' (-l flag), 'phpcs', 'phpmd', 'phpstan', 'phpcbf' | ||||
| * Pod: 'proselint' | ||||
| * Pug: 'pug-lint' | ||||
| * Puppet: 'puppet', 'puppet-lint' | ||||
| * Python: 'autopep8', 'flake8', 'isort', 'mypy', 'pylint', 'yapf' | ||||
| * R: 'lintr' | ||||
| * ReasonML: 'merlin' | ||||
| * reStructuredText: 'proselint' | ||||
| * RPM spec: 'spec' | ||||
| * Rust: 'cargo', 'rls', 'rustc' (see |ale-integration-rust|) | ||||
| * Ruby: 'reek', 'rubocop' | ||||
| * SASS: 'sasslint', 'stylelint' | ||||
| * SCSS: 'sasslint', 'scsslint', 'stylelint' | ||||
| * Scala: 'scalac', 'scalastyle' | ||||
| * Slim: 'slim-lint' | ||||
| * SML: 'smlnj' | ||||
| * Stylus: 'stylelint' | ||||
| * SQL: 'sqlint' | ||||
| * Swift: 'swiftlint', 'swiftformat' | ||||
| * Texinfo: 'proselint' | ||||
| * Text: 'proselint', 'vale' | ||||
| * TypeScript: 'eslint', 'tslint', 'tsserver', 'typecheck' | ||||
| * Verilog: 'iverilog', 'verilator' | ||||
| * Vim: 'vint' | ||||
| * Vim help: 'proselint' | ||||
| * XHTML: 'proselint' | ||||
| * XML: 'xmllint' | ||||
| * YAML: 'swaglint', 'yamllint' | ||||
| Notes: | ||||
| 
 | ||||
| `^` No linters for text or Vim help filetypes are enabled by default. | ||||
| `!` These linters check only files on disk. See |ale-lint-file-linters| | ||||
| 
 | ||||
| * ASM: `gcc` | ||||
| * Ansible: `ansible-lint` | ||||
| * AsciiDoc: `proselint` | ||||
| * Awk: `gawk` | ||||
| * Bash: `shell` (-n flag), `shellcheck` | ||||
| * Bourne Shell: `shell` (-n flag), `shellcheck` | ||||
| * C: `cppcheck`, `cpplint`!, `gcc`, `clang`, `clang-format` | ||||
| * C++ (filetype cpp): `clang`, `clangcheck`!, `clangtidy`!, `cppcheck`, `cpplint`!, `gcc`, `clang-format` | ||||
| * C#: `mcs` | ||||
| * Chef: `foodcritic` | ||||
| * CMake: `cmakelint` | ||||
| * CoffeeScript: `coffee`, `coffeelint` | ||||
| * Crystal: `crystal`! | ||||
| * CSS: `csslint`, `stylelint` | ||||
| * Cython (pyrex filetype): `cython` | ||||
| * D: `dmd` | ||||
| * Dart: `dartanalyzer` | ||||
| * Dockerfile: `hadolint` | ||||
| * Elixir: `credo`, `dogma`! | ||||
| * Elm: `elm-make` | ||||
| * Erb: `erb`, `erubis` | ||||
| * Erlang: `erlc`, `SyntaxErl` | ||||
| * Fortran: `gcc` | ||||
| * FusionScript: `fusion-lint` | ||||
| * Go: `gofmt`, `go vet`, `golint`, `gometalinter`!, `go build`!, `gosimple`, `staticcheck` | ||||
| * GraphQL: `gqlint` | ||||
| * Haml: `haml-lint` | ||||
| * Handlebars: `ember-template-lint` | ||||
| * Haskell: `ghc`, `stack-ghc`, `stack-build`!, `ghc-mod`, `stack-ghc-mod`, `hlint`, `hdevtools` | ||||
| * HTML: `HTMLHint`, `proselint`, `tidy` | ||||
| * Idris: `idris` | ||||
| * Java: `checkstyle`, `javac` | ||||
| * JavaScript: `eslint`, `jscs`, `jshint`, `flow`, `prettier`, `prettier-eslint`, `prettier-standard`, `standard`, `xo` | ||||
| * JSON: `jsonlint` | ||||
| * Kotlin: `kotlinc`, `ktlint` | ||||
| * LaTeX (tex): `chktex`, `lacheck`, `proselint` | ||||
| * Lua: `luacheck` | ||||
| * Markdown: `mdl`, `proselint`, `vale` | ||||
| * MATLAB: `mlint` | ||||
| * Nim: `nim check`! | ||||
| * nix: `nix-instantiate` | ||||
| * nroff: `proselint` | ||||
| * Objective-C: `clang` | ||||
| * Objective-C++: `clang` | ||||
| * OCaml: `merlin` (see |ale-ocaml-merlin|) | ||||
| * Perl: `perl -c`, `perl-critic` | ||||
| * PHP: `hack`, `langserver`, `php -l`, `phpcs`, `phpmd`, `phpstan`, `phpcbf` | ||||
| * Pod: `proselint` | ||||
| * Pug: `pug-lint` | ||||
| * Puppet: `puppet`, `puppet-lint` | ||||
| * Python: `autopep8`, `flake8`, `isort`, `mypy`, `pycodestyle`, `pylint`!, `yapf` | ||||
| * R: `lintr` | ||||
| * ReasonML: `merlin` | ||||
| * reStructuredText: `proselint` | ||||
| * RPM spec: `rpmlint` | ||||
| * Ruby: `brakeman`, `rails_best_practices`!, `reek`, `rubocop`, `ruby` | ||||
| * Rust: `cargo`!, `rls`, `rustc` (see |ale-integration-rust|) | ||||
| * SASS: `sass-lint`, `stylelint` | ||||
| * SCSS: `sass-lint`, `scss-lint`, `stylelint` | ||||
| * Scala: `scalac`, `scalastyle` | ||||
| * Slim: `slim-lint` | ||||
| * SML: `smlnj` | ||||
| * Stylus: `stylelint` | ||||
| * SQL: `sqlint` | ||||
| * Swift: `swiftlint`, `swiftformat` | ||||
| * Tcl: `nagelfar`! | ||||
| * Texinfo: `proselint` | ||||
| * Text^: `proselint`, `vale` | ||||
| * TypeScript: `eslint`, `tslint`, `tsserver`, `typecheck` | ||||
| * Verilog: `iverilog`, `verilator` | ||||
| * Vim: `vint` | ||||
| * Vim help^: `proselint` | ||||
| * XHTML: `proselint` | ||||
| * XML: `xmllint` | ||||
| * YAML: `swaglint`, `yamllint` | ||||
| 
 | ||||
| =============================================================================== | ||||
| 3. Global Options                                                 *ale-options* | ||||
| 3. Linting                                                           *ale-lint* | ||||
| 
 | ||||
| ALE's primary focus is on checking for problems with your code with various | ||||
| programs via some Vim code for integrating with those programs, referred to | ||||
| as 'linters.' ALE supports a wide array of programs for linting by default, | ||||
| but additional programs can be added easily by defining files in |runtimepath| | ||||
| with the filename pattern `ale_linters/<filetype>/<filename>.vim`. For more | ||||
| information on defining new linters, see the extensive documentation | ||||
| for |ale#linter#Define()|. | ||||
| 
 | ||||
| Without any configuration, ALE will attempt to check all of the code for every | ||||
| file you open in Vim with all available tools by default. To see what ALE | ||||
| is doing, and what options have been set, try using the |:ALEInfo| command. | ||||
| 
 | ||||
| Most of the linters ALE runs will check the Vim buffer you are editing instead | ||||
| of the file on disk. This allows you to check your code for errors before you | ||||
| have even saved your changes. ALE will check your code in the following | ||||
| circumstances, which can be configured with the associated options. | ||||
| 
 | ||||
| * When you modify a buffer.                - |g:ale_lint_on_text_changed| | ||||
| * When you open a new or modified buffer.  - |g:ale_lint_on_enter| | ||||
| * When you save a buffer.                  - |g:ale_lint_on_save| | ||||
| * When the filetype changes for a buffer.  - |g:ale_lint_on_filetype_changed| | ||||
| * If ALE is used to check ccode manually.  - |:ALELint| | ||||
| 
 | ||||
| In addition to the above options, ALE can also check buffers for errors when | ||||
| you leave insert mode with |g:ale_lint_on_insert_leave|, which is off by | ||||
| default. It is worth reading the documentation for every option. | ||||
| 
 | ||||
|                                                         *ale-lint-file-linters* | ||||
| 
 | ||||
| Some programs must be run against files which have been saved to disk, and | ||||
| simply do not support reading temporary files or stdin, either of which are | ||||
| required for ALE to be able to check for errors as you type. The programs | ||||
| which behave this way are documented in the lists and tables of supported | ||||
| programs. ALE will only lint files with these programs in the following | ||||
| circumstances. | ||||
| 
 | ||||
| * When you open a new or modified buffer.  - |g:ale_lint_on_enter| | ||||
| * When you save a buffer.                  - |g:ale_lint_on_save| | ||||
| * When the filetype changes for a buffer.  - |g:ale_lint_on_filetype_changed| | ||||
| * If ALE is used to check ccode manually.  - |:ALELint| | ||||
| 
 | ||||
| ALE will report problems with your code in the following ways, listed with | ||||
| their relevant options. | ||||
| 
 | ||||
| * By updating loclist. (On by default)       - |g:ale_set_loclist| | ||||
| * By updating quickfix. (Off by default)     - |g:ale_set_quickfix| | ||||
| * By setting error highlights.               - |g:ale_set_highlights| | ||||
| * By creating signs in the sign column.      - |g:ale_set_signs| | ||||
| * By echoing messages based on your cursor.  - |g:ale_echo_cursor| | ||||
| * By showing balloons for your mouse cursor  - |g:ale_set_balloons| | ||||
| 
 | ||||
| Please consult the documentation for each option, which can reveal some other | ||||
| ways of tweaking the behaviour of each way of displaying problems. You can | ||||
| disable or enable whichever options you prefer. | ||||
| 
 | ||||
| Most settings can be configured for each buffer. (|b:| instead of |g:|), | ||||
| including disabling ALE for certain buffers with |b:ale_enabled|. The | ||||
| |g:ale_pattern_options| setting can be used to configure files differently | ||||
| based on regular expressions for filenames. For configuring entire projects, | ||||
| the buffer-local options can be used with external plugins for reading Vim | ||||
| project configuration files. | ||||
| 
 | ||||
| 
 | ||||
| =============================================================================== | ||||
| 4. Fixing Problems                                                    *ale-fix* | ||||
| 
 | ||||
| ALE can fix problems with files with the |ALEFix| command. When |ALEFix| is | ||||
| run, the variable |g:ale_fixers| will be read for getting a |List| of commands | ||||
| for filetypes, split on `.`, and the functions named in |g:ale_fixers| will be | ||||
| executed for fixing the errors. | ||||
| 
 | ||||
| The |ALEFixSuggest| command can be used to suggest tools that be used to | ||||
| fix problems for the current buffer. | ||||
| 
 | ||||
| The values for `g:ale_fixers` can be a list of |String|, |Funcref|, or | ||||
| |lambda| values. String values must either name a function, or a short name | ||||
| for a function set in the ALE fixer registry. | ||||
| 
 | ||||
| Each function for fixing errors must accept either one argument `(buffer)` or | ||||
| two arguments `(buffer, lines)`, representing the buffer being fixed and the | ||||
| lines to fix. The functions must return either `0`, for changing nothing, a | ||||
| |List| for new lines to set, or a |Dictionary| for describing a command to be | ||||
| run in the background. | ||||
| 
 | ||||
| Functions receiving a variable number of arguments will not receive the second | ||||
| argument `lines`. Functions should name two arguments if the `lines` argument | ||||
| is desired. This is required to avoid unnecessary copying of the lines of | ||||
| the buffers being checked. | ||||
| 
 | ||||
| When a |Dictionary| is returned for an |ALEFix| callback, the following keys | ||||
| are supported for running the commands. | ||||
| 
 | ||||
|   `command`             A |String| for the command to run. This key is required. | ||||
| 
 | ||||
|                       When `%t` is included in a command string, a temporary | ||||
|                       file will be created, containing the lines from the file | ||||
|                       after previous adjustment have been done. | ||||
| 
 | ||||
|   `read_temporary_file` When set to `1`, ALE will read the contents of the | ||||
|                       temporary file created for `%t`. This option can be used | ||||
|                       for commands which need to modify some file on disk in | ||||
|                       order to fix files. | ||||
| 
 | ||||
|                                                         *ale-fix-configuration* | ||||
| 
 | ||||
| Synchronous functions and asynchronous jobs will be run in a sequence for | ||||
| fixing files, and can be combined. For example: | ||||
| > | ||||
|   let g:ale_fixers = { | ||||
|   \   'javascript': [ | ||||
|   \       'DoSomething', | ||||
|   \       'eslint', | ||||
|   \       {buffer, lines -> filter(lines, 'v:val !=~ ''^\s*//''')}, | ||||
|   \   ], | ||||
|   \} | ||||
| 
 | ||||
|   ALEFix | ||||
| < | ||||
| The above example will call a function called `DoSomething` which could act | ||||
| upon some lines immediately, then run `eslint` from the ALE registry, and | ||||
| then call a lambda function which will remove every single line comment | ||||
| from the file. | ||||
| 
 | ||||
| For convenience, a plug mapping is defined for |ALEFix|, so you can set up a | ||||
| keybind easily for fixing files. > | ||||
| 
 | ||||
|   " Bind F8 to fixing problems with ALE | ||||
|   nmap <F8> <Plug>(ale_fix) | ||||
| < | ||||
| Files can be fixed automatically with the following options, which are all off | ||||
| by default. | ||||
| 
 | ||||
| |g:ale_fix_on_save| - Fix files when they are saved. | ||||
| 
 | ||||
| 
 | ||||
| =============================================================================== | ||||
| 5. Completion                                                  *ale-completion* | ||||
| 
 | ||||
| ALE offers some limited support for automatic completion of code while you | ||||
| type. Completion is only supported via Language Server Protocol servers which | ||||
| ALE can connect to for linting, which can offer good built-in support for | ||||
| suggesting completion information. ALE will only suggest symbols for | ||||
| completion for LSP linters that are enabled. | ||||
| 
 | ||||
| NOTE: At the moment, only `tsserver` for TypeScript code is supported for | ||||
| completion. | ||||
| 
 | ||||
| Suggestions will be made while you type after completion is enabled. | ||||
| Completion can be enabled by setting |g:ale_completion_enabled| to `1`. The | ||||
| delay for completion can be configured with |g:ale_completion_delay|. ALE will | ||||
| only suggest so many possible matches for completion. The maximum number of | ||||
| items can be controlled with |g:ale_completion_max_suggestions|. | ||||
| 
 | ||||
| 
 | ||||
| =============================================================================== | ||||
| 6. Global Options                                                 *ale-options* | ||||
| 
 | ||||
| g:airline#extensions#ale#enabled             *g:airline#extensions#ale#enabled* | ||||
| 
 | ||||
| @ -919,7 +1086,7 @@ b:ale_warn_about_trailing_whitespace     *b:ale_warn_about_trailing_whitespace* | ||||
| 
 | ||||
| 
 | ||||
| ------------------------------------------------------------------------------- | ||||
| 3.1. Highlights                                                *ale-highlights* | ||||
| 6.1. Highlights                                                *ale-highlights* | ||||
| 
 | ||||
| ALEError                                                             *ALEError* | ||||
| 
 | ||||
| @ -1013,98 +1180,7 @@ ALEWarningSign                                                 *ALEWarningSign* | ||||
| 
 | ||||
| 
 | ||||
| =============================================================================== | ||||
| 4. Fixing Problems                                                    *ale-fix* | ||||
| 
 | ||||
| ALE can fix problems with files with the |ALEFix| command. When |ALEFix| is | ||||
| run, the variable |g:ale_fixers| will be read for getting a |List| of commands | ||||
| for filetypes, split on `.`, and the functions named in |g:ale_fixers| will be | ||||
| executed for fixing the errors. | ||||
| 
 | ||||
| The |ALEFixSuggest| command can be used to suggest tools that be used to | ||||
| fix problems for the current buffer. | ||||
| 
 | ||||
| The values for `g:ale_fixers` can be a list of |String|, |Funcref|, or | ||||
| |lambda| values. String values must either name a function, or a short name | ||||
| for a function set in the ALE fixer registry. | ||||
| 
 | ||||
| Each function for fixing errors must accept either one argument `(buffer)` or | ||||
| two arguments `(buffer, lines)`, representing the buffer being fixed and the | ||||
| lines to fix. The functions must return either `0`, for changing nothing, a | ||||
| |List| for new lines to set, or a |Dictionary| for describing a command to be | ||||
| run in the background. | ||||
| 
 | ||||
| Functions receiving a variable number of arguments will not receive the second | ||||
| argument `lines`. Functions should name two arguments if the `lines` argument | ||||
| is desired. This is required to avoid unnecessary copying of the lines of | ||||
| the buffers being checked. | ||||
| 
 | ||||
| When a |Dictionary| is returned for an |ALEFix| callback, the following keys | ||||
| are supported for running the commands. | ||||
| 
 | ||||
|   `command`             A |String| for the command to run. This key is required. | ||||
| 
 | ||||
|                       When `%t` is included in a command string, a temporary | ||||
|                       file will be created, containing the lines from the file | ||||
|                       after previous adjustment have been done. | ||||
| 
 | ||||
|   `read_temporary_file` When set to `1`, ALE will read the contents of the | ||||
|                       temporary file created for `%t`. This option can be used | ||||
|                       for commands which need to modify some file on disk in | ||||
|                       order to fix files. | ||||
| 
 | ||||
|                                                         *ale-fix-configuration* | ||||
| 
 | ||||
| Synchronous functions and asynchronous jobs will be run in a sequence for | ||||
| fixing files, and can be combined. For example: | ||||
| > | ||||
|   let g:ale_fixers = { | ||||
|   \   'javascript': [ | ||||
|   \       'DoSomething', | ||||
|   \       'eslint', | ||||
|   \       {buffer, lines -> filter(lines, 'v:val !=~ ''^\s*//''')}, | ||||
|   \   ], | ||||
|   \} | ||||
| 
 | ||||
|   ALEFix | ||||
| < | ||||
| The above example will call a function called `DoSomething` which could act | ||||
| upon some lines immediately, then run `eslint` from the ALE registry, and | ||||
| then call a lambda function which will remove every single line comment | ||||
| from the file. | ||||
| 
 | ||||
| For convenience, a plug mapping is defined for |ALEFix|, so you can set up a | ||||
| keybind easily for fixing files. > | ||||
| 
 | ||||
|   " Bind F8 to fixing problems with ALE | ||||
|   nmap <F8> <Plug>(ale_fix) | ||||
| < | ||||
| Files can be fixed automatically with the following options, which are all off | ||||
| by default. | ||||
| 
 | ||||
| |g:ale_fix_on_save| - Fix files when they are saved. | ||||
| 
 | ||||
| 
 | ||||
| =============================================================================== | ||||
| 5. Completion                                                  *ale-completion* | ||||
| 
 | ||||
| ALE offers some limited support for automatic completion of code while you | ||||
| type. Completion is only supported via Language Server Protocol servers which | ||||
| ALE can connect to for linting, which can offer good built-in support for | ||||
| suggesting completion information. ALE will only suggest symbols for | ||||
| completion for LSP linters that are enabled. | ||||
| 
 | ||||
| NOTE: At the moment, only `tsserver` for TypeScript code is supported for | ||||
| completion. | ||||
| 
 | ||||
| Suggestions will be made while you type after completion is enabled. | ||||
| Completion can be enabled by setting |g:ale_completion_enabled| to `1`. The | ||||
| delay for completion can be configured with |g:ale_completion_delay|. ALE will | ||||
| only suggest so many possible matches for completion. The maximum number of | ||||
| items can be controlled with |g:ale_completion_max_suggestions|. | ||||
| 
 | ||||
| 
 | ||||
| =============================================================================== | ||||
| 6. Integration Documentation                                 *ale-integrations* | ||||
| 7. Integration Documentation                                 *ale-integrations* | ||||
| 
 | ||||
| Linter and fixer options are documented in individual help files. See the | ||||
| table of contents at |ale-contents|. | ||||
| @ -1137,7 +1213,7 @@ ALE will use to search for Python executables. | ||||
| 
 | ||||
| 
 | ||||
| =============================================================================== | ||||
| 7. Commands/Keybinds                                             *ale-commands* | ||||
| 8. Commands/Keybinds                                             *ale-commands* | ||||
| 
 | ||||
| ALEFix                                                                 *ALEFix* | ||||
| 
 | ||||
| @ -1153,6 +1229,7 @@ ALEFixSuggest                                                   *ALEFixSuggest* | ||||
|   See |ale-fix| for more information. | ||||
| 
 | ||||
| 
 | ||||
|                                                                      *:ALELint* | ||||
| ALELint                                                               *ALELint* | ||||
| 
 | ||||
|   Run ALE once for the current buffer. This command can be used to run ALE | ||||
| @ -1222,6 +1299,7 @@ ALEDetail                                                           *ALEDetail* | ||||
|   A plug mapping `<Plug>(ale_detail)` is defined for this command. | ||||
| 
 | ||||
| 
 | ||||
|                                                                      *:ALEInfo* | ||||
| ALEInfo                                                               *ALEInfo* | ||||
| ALEInfoToClipboard                                         *ALEInfoToClipboard* | ||||
| 
 | ||||
| @ -1240,7 +1318,7 @@ ALEInfoToClipboard                                         *ALEInfoToClipboard* | ||||
| 
 | ||||
| 
 | ||||
| =============================================================================== | ||||
| 8. API                                                                *ale-api* | ||||
| 9. API                                                                *ale-api* | ||||
| 
 | ||||
| ale#Queue(delay, [linting_flag, buffer_number])                   *ale#Queue()* | ||||
| 
 | ||||
| @ -1648,13 +1726,13 @@ ALELint                                                       *ALELint-autocmd* | ||||
|   echoing messges. | ||||
| 
 | ||||
| =============================================================================== | ||||
| 9. Special Thanks                                          *ale-special-thanks* | ||||
| 10. Special Thanks                                         *ale-special-thanks* | ||||
| 
 | ||||
| Special thanks to Mark Grealish (https://www.bhalash.com/) for providing ALE's | ||||
| snazzy looking ale glass logo. Cheers, Mark! | ||||
| 
 | ||||
| =============================================================================== | ||||
| 10. Contact                                                       *ale-contact* | ||||
| 11. Contact                                                       *ale-contact* | ||||
| 
 | ||||
| If you like this plugin, and wish to get in touch, check out the GitHub | ||||
| page for issues and more at https://github.com/w0rp/ale | ||||
| @ -1662,10 +1740,8 @@ page for issues and more at https://github.com/w0rp/ale | ||||
| If you wish to contact the author of this plugin directly, please feel | ||||
| free to send an email to devw0rp@gmail.com. | ||||
| 
 | ||||
| 
 | ||||
| Please drink responsibly, or not at all, which is ironically the preference | ||||
| of w0rp, who is teetotal. | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: | ||||
|  | ||||
| @ -235,6 +235,14 @@ if ((run_custom_checks)); then | ||||
|         <(grep --exclude=tags -roh "\*$tag_regex\*" doc | sort -u | sed 's/*//g') \ | ||||
|         <(grep --exclude=tags -roh "|$tag_regex|" doc | sort -u | sed 's/|//g') \ | ||||
|         | grep '^+[^+]' && EXIT=1 | ||||
| 
 | ||||
|     echo '========================================' | ||||
|     echo 'diff README.md and doc/ale.txt tables' | ||||
|     echo '========================================' | ||||
|     echo 'Differences follow:' | ||||
|     echo | ||||
| 
 | ||||
|     ./check-supported-tools-tables || EXIT=$? | ||||
| fi | ||||
| 
 | ||||
| exit $EXIT | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 w0rp
						w0rp