mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-07 05:04:28 +08:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae3b13d132 | ||
|
|
a8951cc802 | ||
|
|
fd49c2d207 | ||
|
|
f66027c49e |
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -2,7 +2,6 @@
|
|||||||
/CODE_OF_CONDUCT.md export-ignore
|
/CODE_OF_CONDUCT.md export-ignore
|
||||||
/CONTRIBUTING.md export-ignore
|
/CONTRIBUTING.md export-ignore
|
||||||
/Dockerfile export-ignore
|
/Dockerfile export-ignore
|
||||||
/ISSUE_TEMPLATE export-ignore
|
|
||||||
/ISSUE_TEMPLATE.md export-ignore
|
/ISSUE_TEMPLATE.md export-ignore
|
||||||
/Makefile export-ignore
|
/Makefile export-ignore
|
||||||
/PULL_REQUEST_TEMPLATE.md export-ignore
|
/PULL_REQUEST_TEMPLATE.md export-ignore
|
||||||
|
|||||||
25
.github/CONTRIBUTING.md
vendored
25
.github/CONTRIBUTING.md
vendored
@@ -1,25 +0,0 @@
|
|||||||
## Guidelines
|
|
||||||
|
|
||||||
Have fun, and work on whatever floats your boat. Take It Easy :tm:.
|
|
||||||
|
|
||||||
For help with contributing to ALE, see `:help ale-development` in Vim, or view
|
|
||||||
the help file online [here](/doc/ale-development.txt).
|
|
||||||
|
|
||||||
## Creating Issues
|
|
||||||
|
|
||||||
Before creating any issues, please look through the current list of issues and
|
|
||||||
pull requests, and ensure that the issue hasn't already been reported. If an
|
|
||||||
issue has already been reported, but you have some new insight, please add
|
|
||||||
a comment to the existing issue.
|
|
||||||
|
|
||||||
Please read the FAQ in the README before creating any issues. A feature
|
|
||||||
you desire may already exist and be documented, or the FAQ might explain
|
|
||||||
how to solve a problem you have already.
|
|
||||||
|
|
||||||
Please try and describe any issues reported with as much detail as you can
|
|
||||||
provide about your Vim version, the linter you were trying to run, your
|
|
||||||
operating system, or any other information you think might be helpful.
|
|
||||||
|
|
||||||
Please describe your issue in clear, grammatically correct, and easy to
|
|
||||||
understand English. You are more likely to see an issue resolved if others
|
|
||||||
can understand you.
|
|
||||||
40
.github/ISSUE_TEMPLATE/report-a-bug.md
vendored
40
.github/ISSUE_TEMPLATE/report-a-bug.md
vendored
@@ -1,40 +0,0 @@
|
|||||||
---
|
|
||||||
name: Report a bug
|
|
||||||
about: Report a bug with ALE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
This is the template for reporting ALE bugs. Make sure you try updating ALE
|
|
||||||
to a more recent version before reporting a bug. Look through existing bug
|
|
||||||
reports for similar issues before reporting a new one. Don't leave comments
|
|
||||||
about new bugs in the comment section for old issues.
|
|
||||||
|
|
||||||
Make sure to try disabling other plugins and trying to repeat your bug before
|
|
||||||
reporting it in ALE. Some times problems can arise when two plugins are used
|
|
||||||
together, but often your issues might be problems with other plugins.
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Information
|
|
||||||
|
|
||||||
**VIM version**
|
|
||||||
|
|
||||||
<!-- Paste just the first two lines of :version here. -->
|
|
||||||
|
|
||||||
Operating System: <!-- Describe your operating system version. -->
|
|
||||||
|
|
||||||
### :ALEInfo
|
|
||||||
|
|
||||||
<!-- Paste the output of :ALEInfo here. Try :ALEInfoToClipboard -->
|
|
||||||
<!-- Make sure to run :ALEInfo from the buffer where the bug occurred. -->
|
|
||||||
|
|
||||||
## What went wrong
|
|
||||||
|
|
||||||
<!-- Describe what went wrong here. -->
|
|
||||||
|
|
||||||
## Reproducing the bug
|
|
||||||
|
|
||||||
<!-- Write a list of steps below. -->
|
|
||||||
|
|
||||||
1. I did this.
|
|
||||||
2. Then this happened.
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Suggest a new linter or fixer
|
|
||||||
about: Suggest a new tool ALE can officially integrate with.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Write "Add support for foobar" as the issue title, or similar.
|
|
||||||
|
|
||||||
Fill out the details below.
|
|
||||||
-->
|
|
||||||
|
|
||||||
**Name:** foobar
|
|
||||||
**URL:** https://foo.bar.com
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Write a description of the tool, and add any other information you think might
|
|
||||||
be helpful. Consider creating a pull request to add support for the tool
|
|
||||||
yourself.
|
|
||||||
-->
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
name: Suggest an improvement
|
|
||||||
about: Suggest some way to improve ALE, or add a new feature.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<!-- There's no fixed format for feature requests. Just add your thoughts. -->
|
|
||||||
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,8 +0,0 @@
|
|||||||
<!--
|
|
||||||
Before creating a pull request, do the following.
|
|
||||||
|
|
||||||
* Read the Contributing guide linked above first.
|
|
||||||
* Read the documentation that comes with ALE with `:help ale-development`.
|
|
||||||
|
|
||||||
Have fun!
|
|
||||||
-->
|
|
||||||
@@ -2,11 +2,6 @@
|
|||||||
sudo: required
|
sudo: required
|
||||||
services:
|
services:
|
||||||
- docker
|
- docker
|
||||||
language: generic
|
language: python
|
||||||
env:
|
|
||||||
- OPTIONS=--vim-80-only
|
|
||||||
- OPTIONS=--vim-81-only
|
|
||||||
- OPTIONS=--neovim-only
|
|
||||||
- OPTIONS=--linters-only
|
|
||||||
script: |
|
script: |
|
||||||
./run-tests -v $OPTIONS
|
./run-tests
|
||||||
|
|||||||
173
CONTRIBUTING.md
Normal file
173
CONTRIBUTING.md
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
# Contributing to ALE
|
||||||
|
|
||||||
|
1. [Guidelines](#guidelines)
|
||||||
|
2. [Creating Issues](#issues)
|
||||||
|
3. [Creating Pull Requests](#pull-requests)
|
||||||
|
1. [Adding a New Linter](#adding-a-new-linter)
|
||||||
|
2. [Adding New Options](#adding-new-options)
|
||||||
|
4. [Writing Documentation](#writing-documentation)
|
||||||
|
1. [Documenting New Linters](#documenting-new-linters)
|
||||||
|
2. [Editing the Online Documentation](#editing-online-documentation)
|
||||||
|
3. [Documenting Linter Options](#documenting-linter-options)
|
||||||
|
5. [In Case of Busses](#in-case-of-busses)
|
||||||
|
|
||||||
|
<a name="guidelines"></a>
|
||||||
|
|
||||||
|
## 1. Guidelines
|
||||||
|
|
||||||
|
Have fun, and work on whatever floats your boat. Take It Easy :tm:.
|
||||||
|
|
||||||
|
Don't forget to **write documentation** for whatever it is you are doing.
|
||||||
|
See the ["Writing Documentation"](#writing-documentation) section.
|
||||||
|
|
||||||
|
Remember to write Vader tests for most of the code you write. You can look at
|
||||||
|
existing Vader tests in the `test` directory for examples.
|
||||||
|
|
||||||
|
When writing code, follow the [Google Vimscript Style
|
||||||
|
Guide](https://google.github.io/styleguide/vimscriptguide.xml), and run `vint
|
||||||
|
-s` on your files to check for most of what the guide mentions and more. If you
|
||||||
|
install this plugin (ALE) and install [Vint](https://github.com/Kuniwak/vint), it
|
||||||
|
will check your code while you type.
|
||||||
|
|
||||||
|
<a name="issues"></a>
|
||||||
|
|
||||||
|
## 2. Creating Issues
|
||||||
|
|
||||||
|
Before creating any issues, please look through the current list of issues and
|
||||||
|
pull requests, and ensure that the issue hasn't already been reported. If an
|
||||||
|
issue has already been reported, but you have some new insight, please add
|
||||||
|
a comment to the existing issue.
|
||||||
|
|
||||||
|
Please read the FAQ in the README before creating any issues. A feature
|
||||||
|
you desire may already exist and be documented, or the FAQ might explain
|
||||||
|
how to solve a problem you have already.
|
||||||
|
|
||||||
|
Please try and describe any issues reported with as much detail as you can
|
||||||
|
provide about your Vim version, the linter you were trying to run, your
|
||||||
|
operating system, or any other information you think might be helpful.
|
||||||
|
|
||||||
|
Please describe your issue in clear, grammatically correct, and easy to
|
||||||
|
understand English. You are more likely to see an issue resolved if others
|
||||||
|
can understand you.
|
||||||
|
|
||||||
|
<a name="pull-requests"></a>
|
||||||
|
|
||||||
|
## 3. Creating Pull Requests
|
||||||
|
|
||||||
|
For code you write, make sure to credit yourself at the top of files you add,
|
||||||
|
and probably those you modify. You can write some comments at the top of your
|
||||||
|
VIM files.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Author: John Smith <john.smith@gmail.com>
|
||||||
|
" Description: This file adds support for awesomelinter for the best language ever.
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to credit multiple authors, you can comma separate them.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Author: John Smith <john.smith@gmail.com>, Jane Doe <https://jane-doe.info>
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="adding-a-new-linter"></a>
|
||||||
|
|
||||||
|
### 3.i. Adding a New Linter
|
||||||
|
|
||||||
|
If you add a new linter, look for existing handlers first in the
|
||||||
|
[handlers](autoload/ale/handlers) directory. One of the handlers there may
|
||||||
|
already be able to handle your lines of output. If you find that your new
|
||||||
|
linter replicates an existing error handler, consider pulling it up into the
|
||||||
|
[handlers](autoload/ale/handlers) directory, and use the generic handler in
|
||||||
|
both places.
|
||||||
|
|
||||||
|
When you add a linter, make sure the language for the linter and the linter
|
||||||
|
itself are present in the table in the [README.md](README.md) file and in the
|
||||||
|
Vim [help file](doc/ale.txt). The programs and linters should be sorted
|
||||||
|
alphabetically in the table and list.
|
||||||
|
|
||||||
|
<a name="adding-new-options"></a>
|
||||||
|
|
||||||
|
### 3.ii. Adding New Options
|
||||||
|
|
||||||
|
If you add new options to the plugin, make sure to document those new options
|
||||||
|
in the [README.md](README.md) file, and also in the [help file](doc/ale.txt).
|
||||||
|
Follow the format of other options in each. Global options should appear in the
|
||||||
|
README file, and in the relevant section in the help file. Options specific
|
||||||
|
to a particular linter should appear in the section for that linter.
|
||||||
|
|
||||||
|
Linter options for customizing general argument lists should be named
|
||||||
|
`g:ale_<filetype>_<linter>_options`, so that all linters can have similar
|
||||||
|
global variable names.
|
||||||
|
|
||||||
|
Any options for linters should be set to some default value so it is always
|
||||||
|
easy to see what the default is with `:echo g:ale...`.
|
||||||
|
|
||||||
|
<a name="writing-documentation"></a>
|
||||||
|
|
||||||
|
## 4. Writing Documentation
|
||||||
|
|
||||||
|
If you are adding new linters, changing the API, adding new options, etc., you
|
||||||
|
_must_ write some documentation describing it in the `doc/ale.txt` file. New
|
||||||
|
linters _must_ be added to the `README.md` file too, so other users can get a
|
||||||
|
quick overview of the supported tools.
|
||||||
|
|
||||||
|
<a name="documenting-new-linters"></a>
|
||||||
|
|
||||||
|
### 4.i Documenting New Linters
|
||||||
|
|
||||||
|
If you add a new linter to the project, edit the table in the `README.md` file,
|
||||||
|
and edit the list of linters at the top of the `doc/ale.txt` file. The linters
|
||||||
|
should be sorted vertically in lexicographic (alphabetical) order by the
|
||||||
|
programming language name or filetype, and the tools for each language should
|
||||||
|
be sorted in lexicographic order horizontally. Sorting in this manner is a fair
|
||||||
|
manner of presenting all of the information in an easy to scan way, without
|
||||||
|
giving some unfair preference to any particular tool or language.
|
||||||
|
|
||||||
|
<a name="editing-online-documentation"></a>
|
||||||
|
|
||||||
|
### 4.ii Editing the Online Documentation
|
||||||
|
|
||||||
|
The "online documentation" file used for this project lives in `doc/ale.txt`.
|
||||||
|
This is the file used for generating `:help` text inside Vim itself. There are
|
||||||
|
some guidelines to follow for this file.
|
||||||
|
|
||||||
|
1. Keep all text within a column size of 79 characters, inclusive.
|
||||||
|
2. Open a section with 79 `=` or `-` characters, for headings and subheadings.
|
||||||
|
3. Sections should have a _single_ blank line before or after.
|
||||||
|
4. Between descriptions of variables/functions/commands, use _two_ blank lines.
|
||||||
|
5. Up-indent the description of a variable/function/command by two spaces.
|
||||||
|
6. Place tags at the ends of lines, with the final characters on column 79.
|
||||||
|
All of the tags should line up perfectly on the same column as you scan
|
||||||
|
down through the document.
|
||||||
|
7. Keep the table of contents balanced so the longest tag link ends on column
|
||||||
|
79, and so all links line up perfectly on their first character, on the
|
||||||
|
left.
|
||||||
|
|
||||||
|
<a name="documenting-linter-options"></a>
|
||||||
|
|
||||||
|
### 4.iii Documenting Linter Options
|
||||||
|
|
||||||
|
For documenting new linter options, please add a new sub-section under the
|
||||||
|
"Linter Specific Options" section describing all of the global options added
|
||||||
|
for each linter, and what the default values of the options are. All global
|
||||||
|
options for linters should be set to some default value. This will allow users
|
||||||
|
to look up the default value easily by typing `:echo g:ale_...`.
|
||||||
|
|
||||||
|
<a name="in-case-of-busses"></a>
|
||||||
|
|
||||||
|
## 5. In Case of Busses
|
||||||
|
|
||||||
|
Should the principal author of the ALE project and all collaborators with the
|
||||||
|
required access needed to properly administrate the project on GitHub or any
|
||||||
|
other website either perish or disappear, whether by tragic traffic accident
|
||||||
|
or government abduction, etc., action should be taken to ensure that the
|
||||||
|
project continues. If no one is left to administer the project where it is
|
||||||
|
hosted, please fork the project and nominate someone capable to administer it.
|
||||||
|
Preferably, in such an event, a single fork of the project will replace the
|
||||||
|
original, and life will go on, except the life of whoever vanished, because
|
||||||
|
then they will probably be dead.
|
||||||
|
|
||||||
|
Should w0rp suddenly disappear, then he was probably killed in a traffic
|
||||||
|
accident, or the government finally decided to kill him and make it look like
|
||||||
|
suicide. In the latter event, please subvert said government and restore
|
||||||
|
order to the universe, and ensure peace for mankind.
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
FROM tweekmonster/vim-testbed:latest
|
FROM tweekmonster/vim-testbed:latest
|
||||||
|
|
||||||
RUN install_vim -tag v8.0.0027 -build \
|
RUN install_vim -tag v8.0.0027 -build \
|
||||||
-tag v8.1.0204 -build \
|
-tag neovim:v0.1.7 -build
|
||||||
-tag neovim:v0.2.0 -build \
|
|
||||||
-tag neovim:v0.3.0 -build
|
|
||||||
|
|
||||||
ENV PACKAGES="\
|
ENV PACKAGES="\
|
||||||
bash \
|
bash \
|
||||||
@@ -14,7 +12,7 @@ ENV PACKAGES="\
|
|||||||
RUN apk --update add $PACKAGES && \
|
RUN apk --update add $PACKAGES && \
|
||||||
rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
|
rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
RUN pip install vim-vint==0.3.15
|
RUN pip install vim-vint==0.3.9
|
||||||
|
|
||||||
RUN git clone https://github.com/junegunn/vader.vim vader && \
|
RUN git clone https://github.com/junegunn/vader.vim vader && \
|
||||||
cd vader && git checkout c6243dd81c98350df4dec608fa972df98fa2a3af
|
cd vader && git checkout c6243dd81c98350df4dec608fa972df98fa2a3af
|
||||||
|
|||||||
28
ISSUE_TEMPLATE.md
Normal file
28
ISSUE_TEMPLATE.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<!--
|
||||||
|
This is a template for bug reports. If you want to request a new feature,
|
||||||
|
you can clear this entire form field and write a short description of what
|
||||||
|
you want.
|
||||||
|
-->
|
||||||
|
|
||||||
|
## Information
|
||||||
|
|
||||||
|
**VIM version**
|
||||||
|
|
||||||
|
PASTE JUST THE FIRST TWO LINES OF `:version` HERE.
|
||||||
|
|
||||||
|
Operating System: WHAT OS WERE YOU USING?
|
||||||
|
|
||||||
|
### :ALEInfo
|
||||||
|
|
||||||
|
PASTE OUTPUT OF `:ALEInfo` HERE. YOU CAN TRY `:ALEInfoToClipboard`.
|
||||||
|
|
||||||
|
## What went wrong
|
||||||
|
|
||||||
|
WRITE WHAT WENT WRONG HERE.
|
||||||
|
|
||||||
|
## Reproducing the bug
|
||||||
|
|
||||||
|
Steps for repeating the bug:
|
||||||
|
|
||||||
|
1. Write a list of steps.
|
||||||
|
2. Otherwise nobody will fix the bug.
|
||||||
22
PULL_REQUEST_TEMPLATE.md
Normal file
22
PULL_REQUEST_TEMPLATE.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<!--
|
||||||
|
READ THIS: Before creating a pull request, please consider the following first.
|
||||||
|
|
||||||
|
* The most important thing you can do is write tests. Code without tests
|
||||||
|
probably doesn't work, and will almost certainly stop working later on. Pull
|
||||||
|
requests without tests probably won't be accepted, although there are some
|
||||||
|
exceptions.
|
||||||
|
* Read the Contributing guide linked above first.
|
||||||
|
* If you are adding a new linter, remember to update the README.md file and
|
||||||
|
doc/ale.txt first.
|
||||||
|
* If you add or modify a function for converting error lines into loclist items
|
||||||
|
that ALE can work with, please add Vader tests for them. Look at existing
|
||||||
|
tests in the test/handler directory, etc.
|
||||||
|
* If you add or modify a function for computing a command line string for
|
||||||
|
running a command, please add Vader tests for that. Look at existing
|
||||||
|
tests in the test/command_callback directory, etc.
|
||||||
|
* Generally try and cover anything with Vader tests, although some things just
|
||||||
|
can't be tested with Vader, or at least they can be hard to test. Consider
|
||||||
|
breaking up your code so that some parts can be tested, and generally open up
|
||||||
|
a discussion about it.
|
||||||
|
* Have fun!
|
||||||
|
-->
|
||||||
45
README.md
45
README.md
@@ -4,8 +4,7 @@
|
|||||||

|

|
||||||
|
|
||||||
ALE (Asynchronous Lint Engine) is a plugin for providing linting in NeoVim
|
ALE (Asynchronous Lint Engine) is a plugin for providing linting in NeoVim
|
||||||
0.2.0+ and Vim 8 while you edit your text files, and acts as a Vim
|
0.2.0+ and Vim 8 while you edit your text files.
|
||||||
[Language Server Protocol](https://langserver.org/) client.
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -30,10 +29,6 @@ features, including:
|
|||||||
* Finding references (`:ALEFindReferences`)
|
* Finding references (`:ALEFindReferences`)
|
||||||
* Hover information (`:ALEHover`)
|
* Hover information (`:ALEHover`)
|
||||||
|
|
||||||
If you don't care about Language Server Protocol, ALE won't load any of the code
|
|
||||||
for working with it unless needed. One of ALE's general missions is that you
|
|
||||||
won't pay for the features that you don't use.
|
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
1. [Supported Languages and Tools](#supported-languages)
|
1. [Supported Languages and Tools](#supported-languages)
|
||||||
@@ -95,15 +90,14 @@ formatting.
|
|||||||
| API Blueprint | [drafter](https://github.com/apiaryio/drafter) |
|
| API Blueprint | [drafter](https://github.com/apiaryio/drafter) |
|
||||||
| AsciiDoc | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [write-good](https://github.com/btford/write-good) |
|
| AsciiDoc | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [write-good](https://github.com/btford/write-good) |
|
||||||
| Awk | [gawk](https://www.gnu.org/software/gawk/)|
|
| Awk | [gawk](https://www.gnu.org/software/gawk/)|
|
||||||
| Bash | [language-server](https://github.com/mads-hartmann/bash-language-server), shell [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/), [shfmt](https://github.com/mvdan/sh) |
|
| Bash | shell [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/), [shfmt](https://github.com/mvdan/sh) |
|
||||||
| Bourne Shell | shell [-n flag](http://linux.die.net/man/1/sh), [shellcheck](https://www.shellcheck.net/), [shfmt](https://github.com/mvdan/sh) |
|
| Bourne Shell | shell [-n flag](http://linux.die.net/man/1/sh), [shellcheck](https://www.shellcheck.net/), [shfmt](https://github.com/mvdan/sh) |
|
||||||
| C | [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint), [clang](http://clang.llvm.org/), [clangd](https://clang.llvm.org/extra/clangd.html), [clangtidy](http://clang.llvm.org/extra/clang-tidy/) !!, [clang-format](https://clang.llvm.org/docs/ClangFormat.html), [cquery](https://github.com/cquery-project/cquery), [flawfinder](https://www.dwheeler.com/flawfinder/), [gcc](https://gcc.gnu.org/) |
|
| C | [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint), [clang](http://clang.llvm.org/), [clangtidy](http://clang.llvm.org/extra/clang-tidy/) !!, [clang-format](https://clang.llvm.org/docs/ClangFormat.html), [flawfinder](https://www.dwheeler.com/flawfinder/), [gcc](https://gcc.gnu.org/) |
|
||||||
| C++ (filetype cpp) | [clang](http://clang.llvm.org/), [clangcheck](http://clang.llvm.org/docs/ClangCheck.html) !!, [clangtidy](http://clang.llvm.org/extra/clang-tidy/) !!, [clang-format](https://clang.llvm.org/docs/ClangFormat.html), [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint) !!, [cquery](https://github.com/cquery-project/cquery), [flawfinder](https://www.dwheeler.com/flawfinder/), [gcc](https://gcc.gnu.org/) |
|
| C++ (filetype cpp) | [clang](http://clang.llvm.org/), [clangcheck](http://clang.llvm.org/docs/ClangCheck.html) !!, [clangtidy](http://clang.llvm.org/extra/clang-tidy/) !!, [clang-format](https://clang.llvm.org/docs/ClangFormat.html), [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint) !!, [flawfinder](https://www.dwheeler.com/flawfinder/), [gcc](https://gcc.gnu.org/) |
|
||||||
| CUDA | [nvcc](http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html) |
|
| CUDA | [nvcc](http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html) |
|
||||||
| C# | [mcs](http://www.mono-project.com/docs/about-mono/languages/csharp/) see:`help ale-cs-mcs` for details, [mcsc](http://www.mono-project.com/docs/about-mono/languages/csharp/) !! see:`help ale-cs-mcsc` for details and configuration|
|
| C# | [mcs](http://www.mono-project.com/docs/about-mono/languages/csharp/) see:`help ale-cs-mcs` for details, [mcsc](http://www.mono-project.com/docs/about-mono/languages/csharp/) !! see:`help ale-cs-mcsc` for details and configuration|
|
||||||
| Chef | [foodcritic](http://www.foodcritic.io/) |
|
| Chef | [foodcritic](http://www.foodcritic.io/) |
|
||||||
| Clojure | [joker](https://github.com/candid82/joker) |
|
| Clojure | [joker](https://github.com/candid82/joker) |
|
||||||
| CloudFormation | [cfn-python-lint](https://github.com/awslabs/cfn-python-lint) |
|
|
||||||
| CMake | [cmakelint](https://github.com/richq/cmake-lint) |
|
| CMake | [cmakelint](https://github.com/richq/cmake-lint) |
|
||||||
| CoffeeScript | [coffee](http://coffeescript.org/), [coffeelint](https://www.npmjs.com/package/coffeelint) |
|
| CoffeeScript | [coffee](http://coffeescript.org/), [coffeelint](https://www.npmjs.com/package/coffeelint) |
|
||||||
| Crystal | [crystal](https://crystal-lang.org/) !! |
|
| Crystal | [crystal](https://crystal-lang.org/) !! |
|
||||||
@@ -112,37 +106,36 @@ formatting.
|
|||||||
| Cython (pyrex filetype) | [cython](http://cython.org/) |
|
| Cython (pyrex filetype) | [cython](http://cython.org/) |
|
||||||
| D | [dmd](https://dlang.org/dmd-linux.html) |
|
| D | [dmd](https://dlang.org/dmd-linux.html) |
|
||||||
| Dafny | [dafny](https://rise4fun.com/Dafny) !! |
|
| Dafny | [dafny](https://rise4fun.com/Dafny) !! |
|
||||||
| Dart | [dartanalyzer](https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_cli) !!, [language_server](https://github.com/natebosch/dart_language_server), [dartfmt](https://github.com/dart-lang/sdk/tree/master/utils/dartfmt) |
|
| Dart | [dartanalyzer](https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_cli) !!, [language_server](https://github.com/natebosch/dart_language_server) |
|
||||||
| Dockerfile | [hadolint](https://github.com/hadolint/hadolint) |
|
| Dockerfile | [hadolint](https://github.com/hadolint/hadolint) |
|
||||||
| Elixir | [credo](https://github.com/rrrene/credo), [dialyxir](https://github.com/jeremyjh/dialyxir), [dogma](https://github.com/lpil/dogma), [mix](https://hexdocs.pm/mix/Mix.html) !!|
|
| Elixir | [credo](https://github.com/rrrene/credo), [dialyxir](https://github.com/jeremyjh/dialyxir), [dogma](https://github.com/lpil/dogma) !!|
|
||||||
| Elm | [elm-format](https://github.com/avh4/elm-format), [elm-make](https://github.com/elm-lang/elm-make) |
|
| Elm | [elm-format](https://github.com/avh4/elm-format), [elm-make](https://github.com/elm-lang/elm-make) |
|
||||||
| Erb | [erb](https://apidock.com/ruby/ERB), [erubi](https://github.com/jeremyevans/erubi), [erubis](https://github.com/kwatch/erubis) |
|
| Erb | [erb](https://apidock.com/ruby/ERB), [erubi](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) |
|
| Erlang | [erlc](http://erlang.org/doc/man/erlc.html), [SyntaxErl](https://github.com/ten0s/syntaxerl) |
|
||||||
| Fish | fish [-n flag](https://linux.die.net/man/1/fish)
|
| Fish | fish [-n flag](https://linux.die.net/man/1/fish)
|
||||||
| Fortran | [gcc](https://gcc.gnu.org/), [language_server](https://github.com/hansec/fortran-language-server) |
|
| Fortran | [gcc](https://gcc.gnu.org/) |
|
||||||
| Fountain | [proselint](http://proselint.com/) |
|
| Fountain | [proselint](http://proselint.com/) |
|
||||||
| FusionScript | [fusion-lint](https://github.com/RyanSquared/fusionscript) |
|
| FusionScript | [fusion-lint](https://github.com/RyanSquared/fusionscript) |
|
||||||
| Git Commit Messages | [gitlint](https://github.com/jorisroovers/gitlint) |
|
| Git Commit Messages | [gitlint](https://github.com/jorisroovers/gitlint) |
|
||||||
| GLSL | [glslang](https://github.com/KhronosGroup/glslang), [glslls](https://github.com/svenstaro/glsl-language-server) |
|
| GLSL | [glslang](https://github.com/KhronosGroup/glslang), [glslls](https://github.com/svenstaro/glsl-language-server) |
|
||||||
| Go | [gofmt](https://golang.org/cmd/gofmt/), [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports), [go vet](https://golang.org/cmd/vet/) !!, [golint](https://godoc.org/github.com/golang/lint), [gotype](https://godoc.org/golang.org/x/tools/cmd/gotype) !!, [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/), [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports), [go vet](https://golang.org/cmd/vet/) !!, [golint](https://godoc.org/github.com/golang/lint), [gotype](https://godoc.org/golang.org/x/tools/cmd/gotype) !!, [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) !! |
|
||||||
| GraphQL | [eslint](http://eslint.org/), [gqlint](https://github.com/happylinks/gqlint), [prettier](https://github.com/prettier/prettier) |
|
| GraphQL | [eslint](http://eslint.org/), [gqlint](https://github.com/happylinks/gqlint), [prettier](https://github.com/prettier/prettier) |
|
||||||
| Hack | [hack](http://hacklang.org/), [hackfmt](https://github.com/facebook/hhvm/tree/master/hphp/hack/hackfmt), [hhast](https://github.com/hhvm/hhast) (disabled by default; see `:help ale-integration-hack`) |
|
|
||||||
| Haml | [haml-lint](https://github.com/brigade/haml-lint) |
|
| Haml | [haml-lint](https://github.com/brigade/haml-lint) |
|
||||||
| Handlebars | [ember-template-lint](https://github.com/rwjblue/ember-template-lint) |
|
| Handlebars | [ember-template-lint](https://github.com/rwjblue/ember-template-lint) |
|
||||||
| Haskell | [brittany](https://github.com/lspitzner/brittany), [ghc](https://www.haskell.org/ghc/), [cabal-ghc](https://www.haskell.org/cabal/), [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), [hfmt](https://github.com/danstiner/hfmt), [hie](https://github.com/haskell/haskell-ide-engine) |
|
| Haskell | [brittany](https://github.com/lspitzner/brittany), [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), [hfmt](https://github.com/danstiner/hfmt) |
|
||||||
| HTML | [alex](https://github.com/wooorm/alex) !!, [HTMLHint](http://htmlhint.com/), [proselint](http://proselint.com/), [tidy](http://www.html-tidy.org/), [write-good](https://github.com/btford/write-good) |
|
| HTML | [alex](https://github.com/wooorm/alex) !!, [HTMLHint](http://htmlhint.com/), [proselint](http://proselint.com/), [tidy](http://www.html-tidy.org/), [write-good](https://github.com/btford/write-good) |
|
||||||
| Idris | [idris](http://www.idris-lang.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), [google-java-format](https://github.com/google/google-java-format), [PMD](https://pmd.github.io/) |
|
| Java | [checkstyle](http://checkstyle.sourceforge.net), [javac](http://www.oracle.com/technetwork/java/javase/downloads/index.html), [google-java-format](https://github.com/google/google-java-format), [PMD](https://pmd.github.io/) |
|
||||||
| JavaScript | [eslint](http://eslint.org/), [flow](https://flowtype.org/), [jscs](http://jscs.info/), [jshint](http://jshint.com/), [prettier](https://github.com/prettier/prettier), [prettier-eslint](https://github.com/prettier/prettier-eslint-cli), [prettier-standard](https://github.com/sheerun/prettier-standard), [standard](http://standardjs.com/), [xo](https://github.com/sindresorhus/xo)
|
| JavaScript | [eslint](http://eslint.org/), [flow](https://flowtype.org/), [jscs](http://jscs.info/), [jshint](http://jshint.com/), [prettier](https://github.com/prettier/prettier), [prettier-eslint](https://github.com/prettier/prettier-eslint-cli), [prettier-standard](https://github.com/sheerun/prettier-standard), [standard](http://standardjs.com/), [xo](https://github.com/sindresorhus/xo)
|
||||||
| JSON | [fixjson](https://github.com/rhysd/fixjson), [jsonlint](http://zaa.ch/jsonlint/), [jq](https://stedolan.github.io/jq/), [prettier](https://github.com/prettier/prettier) |
|
| JSON | [fixjson](https://github.com/rhysd/fixjson), [jsonlint](http://zaa.ch/jsonlint/), [jq](https://stedolan.github.io/jq/), [prettier](https://github.com/prettier/prettier) |
|
||||||
| Kotlin | [kotlinc](https://kotlinlang.org) !!, [ktlint](https://ktlint.github.io) !!, [languageserver](https://github.com/fwcd/KotlinLanguageServer) see `:help ale-integration-kotlin` for configuration instructions |
|
| Kotlin | [kotlinc](https://kotlinlang.org) !!, [ktlint](https://ktlint.github.io) !! see `:help ale-integration-kotlin` for configuration instructions |
|
||||||
| LaTeX | [alex](https://github.com/wooorm/alex) !!, [chktex](http://www.nongnu.org/chktex/), [lacheck](https://www.ctan.org/pkg/lacheck), [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [vale](https://github.com/ValeLint/vale), [write-good](https://github.com/btford/write-good) |
|
| LaTeX | [alex](https://github.com/wooorm/alex) !!, [chktex](http://www.nongnu.org/chktex/), [lacheck](https://www.ctan.org/pkg/lacheck), [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [vale](https://github.com/ValeLint/vale), [write-good](https://github.com/btford/write-good) |
|
||||||
| Less | [lessc](https://www.npmjs.com/package/less), [prettier](https://github.com/prettier/prettier), [stylelint](https://github.com/stylelint/stylelint) |
|
| Less | [lessc](https://www.npmjs.com/package/less), [prettier](https://github.com/prettier/prettier), [stylelint](https://github.com/stylelint/stylelint) |
|
||||||
| LLVM | [llc](https://llvm.org/docs/CommandGuide/llc.html) |
|
| LLVM | [llc](https://llvm.org/docs/CommandGuide/llc.html) |
|
||||||
| Lua | [luac](https://www.lua.org/manual/5.1/luac.html), [luacheck](https://github.com/mpeterv/luacheck) |
|
| Lua | [luac](https://www.lua.org/manual/5.1/luac.html), [luacheck](https://github.com/mpeterv/luacheck) |
|
||||||
| Mail | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) |
|
| Mail | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) |
|
||||||
| Make | [checkmake](https://github.com/mrtazz/checkmake) |
|
| Make | [checkmake](https://github.com/mrtazz/checkmake) |
|
||||||
| Markdown | [alex](https://github.com/wooorm/alex) !!, [markdownlint](https://github.com/DavidAnson/markdownlint) !!, [mdl](https://github.com/mivok/markdownlint), [prettier](https://github.com/prettier/prettier), [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [remark-lint](https://github.com/wooorm/remark-lint), [textlint](https://textlint.github.io/), [vale](https://github.com/ValeLint/vale), [write-good](https://github.com/btford/write-good) |
|
| Markdown | [alex](https://github.com/wooorm/alex) !!, [markdownlint](https://github.com/DavidAnson/markdownlint) !!, [mdl](https://github.com/mivok/markdownlint), [prettier](https://github.com/prettier/prettier), [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [remark-lint](https://github.com/wooorm/remark-lint) !!, [textlint](https://textlint.github.io/), [vale](https://github.com/ValeLint/vale), [write-good](https://github.com/btford/write-good) |
|
||||||
| MATLAB | [mlint](https://www.mathworks.com/help/matlab/ref/mlint.html) |
|
| MATLAB | [mlint](https://www.mathworks.com/help/matlab/ref/mlint.html) |
|
||||||
| Mercury | [mmc](http://mercurylang.org) !! |
|
| Mercury | [mmc](http://mercurylang.org) !! |
|
||||||
| NASM | [nasm](https://www.nasm.us/) !! |
|
| NASM | [nasm](https://www.nasm.us/) !! |
|
||||||
@@ -153,14 +146,14 @@ formatting.
|
|||||||
| Objective-C++ | [clang](http://clang.llvm.org/) |
|
| Objective-C++ | [clang](http://clang.llvm.org/) |
|
||||||
| OCaml | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-ocaml-merlin` for configuration instructions, [ols](https://github.com/freebroccolo/ocaml-language-server) |
|
| OCaml | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-ocaml-merlin` for configuration instructions, [ols](https://github.com/freebroccolo/ocaml-language-server) |
|
||||||
| Perl | [perl -c](https://perl.org/), [perl-critic](https://metacpan.org/pod/Perl::Critic), [perltidy](https://metacpan.org/pod/distribution/Perl-Tidy/bin/perltidy) |
|
| Perl | [perl -c](https://perl.org/), [perl-critic](https://metacpan.org/pod/Perl::Critic), [perltidy](https://metacpan.org/pod/distribution/Perl-Tidy/bin/perltidy) |
|
||||||
| PHP | [langserver](https://github.com/felixfbecker/php-language-server), [phan](https://github.com/phan/phan) see `:help ale-php-phan` to instructions, [php -l](https://secure.php.net/), [phpcs](https://github.com/squizlabs/PHP_CodeSniffer), [phpmd](https://phpmd.org), [phpstan](https://github.com/phpstan/phpstan), [phpcbf](https://github.com/squizlabs/PHP_CodeSniffer), [php-cs-fixer](http://cs.sensiolabs.org/) |
|
| PHP | [hack](http://hacklang.org/), [hackfmt](https://github.com/facebook/flow/tree/master/hack/hackfmt), [langserver](https://github.com/felixfbecker/php-language-server), [phan](https://github.com/phan/phan) see `:help ale-php-phan` to instructions, [php -l](https://secure.php.net/), [phpcs](https://github.com/squizlabs/PHP_CodeSniffer), [phpmd](https://phpmd.org), [phpstan](https://github.com/phpstan/phpstan), [phpcbf](https://github.com/squizlabs/PHP_CodeSniffer), [php-cs-fixer](http://cs.sensiolabs.org/) |
|
||||||
| PO | [alex](https://github.com/wooorm/alex) !!, [msgfmt](https://www.gnu.org/software/gettext/manual/html_node/msgfmt-Invocation.html), [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
|
| PO | [alex](https://github.com/wooorm/alex) !!, [msgfmt](https://www.gnu.org/software/gettext/manual/html_node/msgfmt-Invocation.html), [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
|
||||||
| Pod | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
|
| Pod | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
|
||||||
| Pony | [ponyc](https://github.com/ponylang/ponyc) |
|
| Pony | [ponyc](https://github.com/ponylang/ponyc) |
|
||||||
| proto | [protoc-gen-lint](https://github.com/ckaznocha/protoc-gen-lint) |
|
| proto | [protoc-gen-lint](https://github.com/ckaznocha/protoc-gen-lint) |
|
||||||
| Pug | [pug-lint](https://github.com/pugjs/pug-lint) |
|
| Pug | [pug-lint](https://github.com/pugjs/pug-lint) |
|
||||||
| Puppet | [languageserver](https://github.com/lingua-pupuli/puppet-editor-services), [puppet](https://puppet.com), [puppet-lint](https://puppet-lint.com) |
|
| Puppet | [puppet](https://puppet.com), [puppet-lint](https://puppet-lint.com) |
|
||||||
| Python | [autopep8](https://github.com/hhatto/autopep8), [black](https://github.com/ambv/black), [flake8](http://flake8.pycqa.org/en/latest/), [isort](https://github.com/timothycrosley/isort), [mypy](http://mypy-lang.org/), [prospector](http://github.com/landscapeio/prospector), [pycodestyle](https://github.com/PyCQA/pycodestyle), [pyls](https://github.com/palantir/python-language-server), [pyre](https://github.com/facebook/pyre-check), [pylint](https://www.pylint.org/) !!, [vulture](https://github.com/jendrikseipp/vulture) !!, [yapf](https://github.com/google/yapf) |
|
| Python | [autopep8](https://github.com/hhatto/autopep8), [black](https://github.com/ambv/black), [flake8](http://flake8.pycqa.org/en/latest/), [isort](https://github.com/timothycrosley/isort), [mypy](http://mypy-lang.org/), [prospector](http://github.com/landscapeio/prospector), [pycodestyle](https://github.com/PyCQA/pycodestyle), [pyls](https://github.com/palantir/python-language-server), [pylint](https://www.pylint.org/) !!, [yapf](https://github.com/google/yapf) |
|
||||||
| QML | [qmlfmt](https://github.com/jesperhh/qmlfmt), [qmllint](https://github.com/qt/qtdeclarative/tree/5.11/tools/qmllint) |
|
| QML | [qmlfmt](https://github.com/jesperhh/qmlfmt), [qmllint](https://github.com/qt/qtdeclarative/tree/5.11/tools/qmllint) |
|
||||||
| R | [lintr](https://github.com/jimhester/lintr) |
|
| R | [lintr](https://github.com/jimhester/lintr) |
|
||||||
| ReasonML | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-reasonml-ols` for configuration instructions, [ols](https://github.com/freebroccolo/ocaml-language-server), [refmt](https://github.com/reasonml/reason-cli) |
|
| ReasonML | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-reasonml-ols` for configuration instructions, [ols](https://github.com/freebroccolo/ocaml-language-server), [refmt](https://github.com/reasonml/reason-cli) |
|
||||||
@@ -171,7 +164,7 @@ formatting.
|
|||||||
| Rust | cargo !! (see `:help ale-integration-rust` for configuration instructions), [rls](https://github.com/rust-lang-nursery/rls), [rustc](https://www.rust-lang.org/), [rustfmt](https://github.com/rust-lang-nursery/rustfmt) |
|
| Rust | cargo !! (see `:help ale-integration-rust` for configuration instructions), [rls](https://github.com/rust-lang-nursery/rls), [rustc](https://www.rust-lang.org/), [rustfmt](https://github.com/rust-lang-nursery/rustfmt) |
|
||||||
| SASS | [sass-lint](https://www.npmjs.com/package/sass-lint), [stylelint](https://github.com/stylelint/stylelint) |
|
| SASS | [sass-lint](https://www.npmjs.com/package/sass-lint), [stylelint](https://github.com/stylelint/stylelint) |
|
||||||
| SCSS | [prettier](https://github.com/prettier/prettier), [sass-lint](https://www.npmjs.com/package/sass-lint), [scss-lint](https://github.com/brigade/scss-lint), [stylelint](https://github.com/stylelint/stylelint) |
|
| SCSS | [prettier](https://github.com/prettier/prettier), [sass-lint](https://www.npmjs.com/package/sass-lint), [scss-lint](https://github.com/brigade/scss-lint), [stylelint](https://github.com/stylelint/stylelint) |
|
||||||
| Scala | [fsc](https://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/tools/fsc.html), [scalac](http://scala-lang.org), [scalafmt](https://scalameta.org/scalafmt/), [scalastyle](http://www.scalastyle.org) |
|
| Scala | [fsc](https://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/tools/fsc.html), [scalac](http://scala-lang.org), [scalastyle](http://www.scalastyle.org) |
|
||||||
| Slim | [slim-lint](https://github.com/sds/slim-lint) |
|
| Slim | [slim-lint](https://github.com/sds/slim-lint) |
|
||||||
| SML | [smlnj](http://www.smlnj.org/) |
|
| SML | [smlnj](http://www.smlnj.org/) |
|
||||||
| Solidity | [solhint](https://github.com/protofire/solhint), [solium](https://github.com/duaraghav8/Solium) |
|
| Solidity | [solhint](https://github.com/protofire/solhint), [solium](https://github.com/duaraghav8/Solium) |
|
||||||
@@ -187,11 +180,10 @@ formatting.
|
|||||||
| Verilog | [iverilog](https://github.com/steveicarus/iverilog), [verilator](http://www.veripool.org/projects/verilator/wiki/Intro) |
|
| Verilog | [iverilog](https://github.com/steveicarus/iverilog), [verilator](http://www.veripool.org/projects/verilator/wiki/Intro) |
|
||||||
| Vim | [vint](https://github.com/Kuniwak/vint) |
|
| Vim | [vint](https://github.com/Kuniwak/vint) |
|
||||||
| Vim help^ | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
|
| Vim help^ | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
|
||||||
| Vue | [prettier](https://github.com/prettier/prettier), [vls](https://github.com/vuejs/vetur/tree/master/server) |
|
| Vue | [prettier](https://github.com/prettier/prettier) |
|
||||||
| XHTML | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
|
| XHTML | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
|
||||||
| XML | [xmllint](http://xmlsoft.org/xmllint.html) |
|
| XML | [xmllint](http://xmlsoft.org/xmllint.html) |
|
||||||
| YAML | [swaglint](https://github.com/byCedric/swaglint), [yamllint](https://yamllint.readthedocs.io/) |
|
| YAML | [swaglint](https://github.com/byCedric/swaglint), [yamllint](https://yamllint.readthedocs.io/) |
|
||||||
| YANG | [yang-lsp](https://github.com/theia-ide/yang-lsp) |
|
|
||||||
|
|
||||||
<a name="usage"></a>
|
<a name="usage"></a>
|
||||||
|
|
||||||
@@ -261,7 +253,7 @@ See `:help ale-fix` for complete information on how to fix files with ALE.
|
|||||||
|
|
||||||
ALE offers some support for completion via hijacking of omnicompletion while you
|
ALE offers some support for completion via hijacking of omnicompletion while you
|
||||||
type. All of ALE's completion information must come from Language Server
|
type. All of ALE's completion information must come from Language Server
|
||||||
Protocol linters, or from `tsserver` for TypeScript.
|
Protocol linters, or from `tsserver` for TypeSript.
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
" Enable completion where available.
|
" Enable completion where available.
|
||||||
@@ -757,9 +749,8 @@ ALE cannot easily detect which compiler flags to use.
|
|||||||
|
|
||||||
Some tools and build configurations can generate
|
Some tools and build configurations can generate
|
||||||
[compile_commands.json](https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
[compile_commands.json](https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
||||||
files. The `cppcheck`, `clangcheck`, `clangtidy` and `cquery` linters can read
|
files. The `cppcheck`, `clangcheck` and `clangtidy` linters can read these
|
||||||
these files for automatically determining the appropriate compiler flags to
|
files for automatically determining the appropriate compiler flags to use.
|
||||||
use.
|
|
||||||
|
|
||||||
For linting with compilers like `gcc` and `clang`, and with other tools, you
|
For linting with compilers like `gcc` and `clang`, and with other tools, you
|
||||||
will need to tell ALE which compiler flags to use yourself. You can use
|
will need to tell ALE which compiler flags to use yourself. You can use
|
||||||
|
|||||||
@@ -31,6 +31,6 @@ call ale#linter#Define('apiblueprint', {
|
|||||||
\ 'name': 'drafter',
|
\ 'name': 'drafter',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable': 'drafter',
|
\ 'executable': 'drafter',
|
||||||
\ 'command': 'drafter --use-line-num --validate',
|
\ 'command': 'drafter --use-line-num --validate %t',
|
||||||
\ 'callback': 'ale_linters#apiblueprint#drafter#HandleErrors',
|
\ 'callback': 'ale_linters#apiblueprint#drafter#HandleErrors',
|
||||||
\})
|
\})
|
||||||
|
|||||||
9
ale_linters/asciidoc/write-good.vim
Normal file
9
ale_linters/asciidoc/write-good.vim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
||||||
|
" Description: write-good for AsciiDoc files
|
||||||
|
|
||||||
|
call ale#linter#Define('asciidoc', {
|
||||||
|
\ 'name': 'write-good',
|
||||||
|
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#writegood#Handle',
|
||||||
|
\})
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
|
||||||
" Description: write-good for AsciiDoc files
|
|
||||||
|
|
||||||
call ale#handlers#writegood#DefineLinter('asciidoc')
|
|
||||||
@@ -4,10 +4,15 @@
|
|||||||
call ale#Set('asm_gcc_executable', 'gcc')
|
call ale#Set('asm_gcc_executable', 'gcc')
|
||||||
call ale#Set('asm_gcc_options', '-Wall')
|
call ale#Set('asm_gcc_options', '-Wall')
|
||||||
|
|
||||||
|
function! ale_linters#asm#gcc#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'asm_gcc_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#asm#gcc#GetCommand(buffer) abort
|
function! ale_linters#asm#gcc#GetCommand(buffer) abort
|
||||||
return '%e -x assembler -fsyntax-only '
|
return ale#Escape(ale_linters#asm#gcc#GetExecutable(a:buffer))
|
||||||
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h'))
|
\ . ' -x assembler -fsyntax-only '
|
||||||
\ . ' ' . ale#Var(a:buffer, 'asm_gcc_options') . ' -'
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h'))
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'asm_gcc_options') . ' -'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#asm#gcc#Handle(buffer, lines) abort
|
function! ale_linters#asm#gcc#Handle(buffer, lines) abort
|
||||||
@@ -28,7 +33,7 @@ endfunction
|
|||||||
call ale#linter#Define('asm', {
|
call ale#linter#Define('asm', {
|
||||||
\ 'name': 'gcc',
|
\ 'name': 'gcc',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': ale#VarFunc('asm_gcc_executable'),
|
\ 'executable_callback': 'ale_linters#asm#gcc#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#asm#gcc#GetCommand',
|
\ 'command_callback': 'ale_linters#asm#gcc#GetCommand',
|
||||||
\ 'callback': 'ale_linters#asm#gcc#Handle',
|
\ 'callback': 'ale_linters#asm#gcc#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,21 +1,29 @@
|
|||||||
" Author: kmarc <korondi.mark@gmail.com>
|
" Author: kmarc <korondi.mark@gmail.com>
|
||||||
" Description: This file adds support for using GNU awk with sripts.
|
" Description: This file adds support for using GNU awk with sripts.
|
||||||
|
|
||||||
call ale#Set('awk_gawk_executable', 'gawk')
|
let g:ale_awk_gawk_executable =
|
||||||
call ale#Set('awk_gawk_options', '')
|
\ get(g:, 'ale_awk_gawk_executable', 'gawk')
|
||||||
|
|
||||||
|
let g:ale_awk_gawk_options =
|
||||||
|
\ get(g:, 'ale_awk_gawk_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#awk#gawk#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'awk_gawk_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#awk#gawk#GetCommand(buffer) abort
|
function! ale_linters#awk#gawk#GetCommand(buffer) abort
|
||||||
" note the --source 'BEGIN ...' is to prevent
|
" note the --source 'BEGIN ...' is to prevent
|
||||||
" gawk from attempting to execute the body of the script
|
" gawk from attempting to execute the body of the script
|
||||||
" it is linting.
|
" it is linting.
|
||||||
return '%e --source ' . ale#Escape('BEGIN { exit } END { exit 1 }')
|
return ale_linters#awk#gawk#GetExecutable(a:buffer)
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'awk_gawk_options'))
|
\ . " --source 'BEGIN { exit } END { exit 1 }'"
|
||||||
\ . ' -f %t --lint /dev/null'
|
\ . ' ' . ale#Var(a:buffer, 'awk_gawk_options')
|
||||||
|
\ . ' ' . '-f %t --lint /dev/null'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('awk', {
|
call ale#linter#Define('awk', {
|
||||||
\ 'name': 'gawk',
|
\ 'name': 'gawk',
|
||||||
\ 'executable_callback': ale#VarFunc('awk_gawk_executable'),
|
\ 'executable_callback': 'ale_linters#awk#gawk#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#awk#gawk#GetCommand',
|
\ 'command_callback': 'ale_linters#awk#gawk#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#gawk#HandleGawkFormat',
|
\ 'callback': 'ale#handlers#gawk#HandleGawkFormat',
|
||||||
\ 'output_stream': 'both'
|
\ 'output_stream': 'both'
|
||||||
|
|||||||
@@ -4,24 +4,29 @@
|
|||||||
call ale#Set('c_clang_executable', 'clang')
|
call ale#Set('c_clang_executable', 'clang')
|
||||||
call ale#Set('c_clang_options', '-std=c11 -Wall')
|
call ale#Set('c_clang_options', '-std=c11 -Wall')
|
||||||
|
|
||||||
|
function! ale_linters#c#clang#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'c_clang_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#c#clang#GetCommand(buffer, output) abort
|
function! ale_linters#c#clang#GetCommand(buffer, output) abort
|
||||||
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
||||||
|
|
||||||
" -iquote with the directory the file is in makes #include work for
|
" -iquote with the directory the file is in makes #include work for
|
||||||
" headers in the same directory.
|
" headers in the same directory.
|
||||||
return '%e -S -x c -fsyntax-only'
|
return ale#Escape(ale_linters#c#clang#GetExecutable(a:buffer))
|
||||||
\ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h'))
|
\ . ' -S -x c -fsyntax-only '
|
||||||
\ . ale#Pad(l:cflags)
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'c_clang_options')) . ' -'
|
\ . l:cflags
|
||||||
|
\ . ale#Var(a:buffer, 'c_clang_options') . ' -'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('c', {
|
call ale#linter#Define('c', {
|
||||||
\ 'name': 'clang',
|
\ 'name': 'clang',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': ale#VarFunc('c_clang_executable'),
|
\ 'executable_callback': 'ale_linters#c#clang#GetExecutable',
|
||||||
\ 'command_chain': [
|
\ 'command_chain': [
|
||||||
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
||||||
\ {'callback': 'ale_linters#c#clang#GetCommand'}
|
\ {'callback': 'ale_linters#c#clang#GetCommand'}
|
||||||
\ ],
|
\ ],
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
" Author: Andrey Melentyev <andrey.melentyev@protonmail.com>
|
|
||||||
" Description: Clangd language server
|
|
||||||
|
|
||||||
call ale#Set('c_clangd_executable', 'clangd')
|
|
||||||
call ale#Set('c_clangd_options', '')
|
|
||||||
|
|
||||||
function! ale_linters#c#clangd#GetProjectRoot(buffer) abort
|
|
||||||
let l:project_root = ale#path#FindNearestFile(a:buffer, 'compile_commands.json')
|
|
||||||
return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#c#clangd#GetCommand(buffer) abort
|
|
||||||
return '%e' . ale#Pad(ale#Var(a:buffer, 'c_clangd_options'))
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('c', {
|
|
||||||
\ 'name': 'clangd',
|
|
||||||
\ 'lsp': 'stdio',
|
|
||||||
\ 'executable_callback': ale#VarFunc('c_clangd_executable'),
|
|
||||||
\ 'command_callback': 'ale_linters#c#clangd#GetCommand',
|
|
||||||
\ 'project_root_callback': 'ale_linters#c#clangd#GetProjectRoot',
|
|
||||||
\})
|
|
||||||
@@ -16,6 +16,10 @@ call ale#Set('c_clangtidy_checks', ['*'])
|
|||||||
call ale#Set('c_clangtidy_options', '')
|
call ale#Set('c_clangtidy_options', '')
|
||||||
call ale#Set('c_build_dir', '')
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
function! ale_linters#c#clangtidy#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'c_clangtidy_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:GetBuildDirectory(buffer) abort
|
function! s:GetBuildDirectory(buffer) abort
|
||||||
" Don't include build directory for header files, as compile_commands.json
|
" Don't include build directory for header files, as compile_commands.json
|
||||||
" files don't consider headers to be translation units, and provide no
|
" files don't consider headers to be translation units, and provide no
|
||||||
@@ -31,7 +35,7 @@ function! s:GetBuildDirectory(buffer) abort
|
|||||||
return l:build_dir
|
return l:build_dir
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return ale#path#Dirname(ale#c#FindCompileCommands(a:buffer))
|
return ale#c#FindCompileCommands(a:buffer)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#c#clangtidy#GetCommand(buffer) abort
|
function! ale_linters#c#clangtidy#GetCommand(buffer) abort
|
||||||
@@ -43,7 +47,7 @@ function! ale_linters#c#clangtidy#GetCommand(buffer) abort
|
|||||||
\ ? ale#Var(a:buffer, 'c_clangtidy_options')
|
\ ? ale#Var(a:buffer, 'c_clangtidy_options')
|
||||||
\ : ''
|
\ : ''
|
||||||
|
|
||||||
return '%e'
|
return ale#Escape(ale_linters#c#clangtidy#GetExecutable(a:buffer))
|
||||||
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
|
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
|
||||||
\ . ' %s'
|
\ . ' %s'
|
||||||
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
||||||
@@ -53,7 +57,7 @@ endfunction
|
|||||||
call ale#linter#Define('c', {
|
call ale#linter#Define('c', {
|
||||||
\ 'name': 'clangtidy',
|
\ 'name': 'clangtidy',
|
||||||
\ 'output_stream': 'stdout',
|
\ 'output_stream': 'stdout',
|
||||||
\ 'executable_callback': ale#VarFunc('c_clangtidy_executable'),
|
\ 'executable_callback': 'ale_linters#c#clangtidy#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#c#clangtidy#GetCommand',
|
\ 'command_callback': 'ale_linters#c#clangtidy#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
|
|||||||
@@ -4,6 +4,10 @@
|
|||||||
call ale#Set('c_cppcheck_executable', 'cppcheck')
|
call ale#Set('c_cppcheck_executable', 'cppcheck')
|
||||||
call ale#Set('c_cppcheck_options', '--enable=style')
|
call ale#Set('c_cppcheck_options', '--enable=style')
|
||||||
|
|
||||||
|
function! ale_linters#c#cppcheck#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'c_cppcheck_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#c#cppcheck#GetCommand(buffer) abort
|
function! ale_linters#c#cppcheck#GetCommand(buffer) abort
|
||||||
" Search upwards from the file for compile_commands.json.
|
" Search upwards from the file for compile_commands.json.
|
||||||
"
|
"
|
||||||
@@ -19,7 +23,8 @@ function! ale_linters#c#cppcheck#GetCommand(buffer) abort
|
|||||||
\ : ''
|
\ : ''
|
||||||
|
|
||||||
return l:cd_command
|
return l:cd_command
|
||||||
\ . '%e -q --language=c '
|
\ . ale#Escape(ale_linters#c#cppcheck#GetExecutable(a:buffer))
|
||||||
|
\ . ' -q --language=c '
|
||||||
\ . l:compile_commands_option
|
\ . l:compile_commands_option
|
||||||
\ . ale#Var(a:buffer, 'c_cppcheck_options')
|
\ . ale#Var(a:buffer, 'c_cppcheck_options')
|
||||||
\ . ' %t'
|
\ . ' %t'
|
||||||
@@ -28,7 +33,7 @@ endfunction
|
|||||||
call ale#linter#Define('c', {
|
call ale#linter#Define('c', {
|
||||||
\ 'name': 'cppcheck',
|
\ 'name': 'cppcheck',
|
||||||
\ 'output_stream': 'both',
|
\ 'output_stream': 'both',
|
||||||
\ 'executable_callback': ale#VarFunc('c_cppcheck_executable'),
|
\ 'executable_callback': 'ale_linters#c#cppcheck#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#c#cppcheck#GetCommand',
|
\ 'command_callback': 'ale_linters#c#cppcheck#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat',
|
\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
" Author: Ben Falconer <ben@falconers.me.uk>, jtalowell <jtalowell@protonmail.com>
|
|
||||||
" Description: A language server for C
|
|
||||||
|
|
||||||
call ale#Set('c_cquery_executable', 'cquery')
|
|
||||||
call ale#Set('c_cquery_cache_directory', expand('~/.cache/cquery'))
|
|
||||||
|
|
||||||
function! ale_linters#c#cquery#GetProjectRoot(buffer) abort
|
|
||||||
let l:project_root = ale#path#FindNearestFile(a:buffer, 'compile_commands.json')
|
|
||||||
return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#c#cquery#GetInitializationOptions(buffer) abort
|
|
||||||
return {'cacheDirectory': ale#Var(a:buffer, 'c_cquery_cache_directory')}
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('c', {
|
|
||||||
\ 'name': 'cquery',
|
|
||||||
\ 'lsp': 'stdio',
|
|
||||||
\ 'executable_callback': ale#VarFunc('c_cquery_executable'),
|
|
||||||
\ 'command': '%e',
|
|
||||||
\ 'project_root_callback': 'ale_linters#c#cquery#GetProjectRoot',
|
|
||||||
\ 'initialization_options_callback': 'ale_linters#c#cquery#GetInitializationOptions',
|
|
||||||
\})
|
|
||||||
@@ -6,12 +6,18 @@ call ale#Set('c_flawfinder_options', '')
|
|||||||
call ale#Set('c_flawfinder_minlevel', 1)
|
call ale#Set('c_flawfinder_minlevel', 1)
|
||||||
call ale#Set('c_flawfinder_error_severity', 6)
|
call ale#Set('c_flawfinder_error_severity', 6)
|
||||||
|
|
||||||
|
function! ale_linters#c#flawfinder#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'c_flawfinder_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#c#flawfinder#GetCommand(buffer) abort
|
function! ale_linters#c#flawfinder#GetCommand(buffer) abort
|
||||||
|
|
||||||
" Set the minimum vulnerability level for flawfinder to bother with
|
" Set the minimum vulnerability level for flawfinder to bother with
|
||||||
let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'c_flawfinder_minlevel')
|
let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'c_flawfinder_minlevel')
|
||||||
|
|
||||||
return '%e -CDQS'
|
return ale#Escape(ale_linters#c#flawfinder#GetExecutable(a:buffer))
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'c_flawfinder_options'))
|
\ . ' -CDQS'
|
||||||
|
\ . ale#Var(a:buffer, 'c_flawfinder_options')
|
||||||
\ . l:minlevel
|
\ . l:minlevel
|
||||||
\ . ' %t'
|
\ . ' %t'
|
||||||
endfunction
|
endfunction
|
||||||
@@ -19,7 +25,7 @@ endfunction
|
|||||||
call ale#linter#Define('c', {
|
call ale#linter#Define('c', {
|
||||||
\ 'name': 'flawfinder',
|
\ 'name': 'flawfinder',
|
||||||
\ 'output_stream': 'stdout',
|
\ 'output_stream': 'stdout',
|
||||||
\ 'executable_callback': ale#VarFunc('c_flawfinder_executable'),
|
\ 'executable_callback': 'ale_linters#c#flawfinder#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#c#flawfinder#GetCommand',
|
\ 'command_callback': 'ale_linters#c#flawfinder#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat',
|
\ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -4,24 +4,29 @@
|
|||||||
call ale#Set('c_gcc_executable', 'gcc')
|
call ale#Set('c_gcc_executable', 'gcc')
|
||||||
call ale#Set('c_gcc_options', '-std=c11 -Wall')
|
call ale#Set('c_gcc_options', '-std=c11 -Wall')
|
||||||
|
|
||||||
|
function! ale_linters#c#gcc#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'c_gcc_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#c#gcc#GetCommand(buffer, output) abort
|
function! ale_linters#c#gcc#GetCommand(buffer, output) abort
|
||||||
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
||||||
|
|
||||||
" -iquote with the directory the file is in makes #include work for
|
" -iquote with the directory the file is in makes #include work for
|
||||||
" headers in the same directory.
|
" headers in the same directory.
|
||||||
return '%e -S -x c -fsyntax-only'
|
return ale#Escape(ale_linters#c#gcc#GetExecutable(a:buffer))
|
||||||
\ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h'))
|
\ . ' -S -x c -fsyntax-only '
|
||||||
\ . ale#Pad(l:cflags)
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'c_gcc_options')) . ' -'
|
\ . l:cflags
|
||||||
|
\ . ale#Var(a:buffer, 'c_gcc_options') . ' -'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('c', {
|
call ale#linter#Define('c', {
|
||||||
\ 'name': 'gcc',
|
\ 'name': 'gcc',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': ale#VarFunc('c_gcc_executable'),
|
\ 'executable_callback': 'ale_linters#c#gcc#GetExecutable',
|
||||||
\ 'command_chain': [
|
\ 'command_chain': [
|
||||||
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
||||||
\ {'callback': 'ale_linters#c#gcc#GetCommand'}
|
\ {'callback': 'ale_linters#c#gcc#GetCommand'}
|
||||||
\ ],
|
\ ],
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -6,10 +6,17 @@
|
|||||||
call ale#Set('chef_foodcritic_executable', 'foodcritic')
|
call ale#Set('chef_foodcritic_executable', 'foodcritic')
|
||||||
call ale#Set('chef_foodcritic_options', '')
|
call ale#Set('chef_foodcritic_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#chef#foodcritic#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'chef_foodcritic_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#chef#foodcritic#GetCommand(buffer) abort
|
function! ale_linters#chef#foodcritic#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#chef#foodcritic#GetExecutable(a:buffer)
|
||||||
let l:options = ale#Var(a:buffer, 'chef_foodcritic_options')
|
let l:options = ale#Var(a:buffer, 'chef_foodcritic_options')
|
||||||
|
|
||||||
return '%e' . ale#Pad(escape(l:options, '~')) . ' %s'
|
return ale#Escape(l:executable)
|
||||||
|
\ . (!empty(l:options) ? ' ' . escape(l:options, '~') : '')
|
||||||
|
\ . ' %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort
|
function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort
|
||||||
@@ -34,7 +41,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('chef', {
|
call ale#linter#Define('chef', {
|
||||||
\ 'name': 'foodcritic',
|
\ 'name': 'foodcritic',
|
||||||
\ 'executable_callback': ale#VarFunc('chef_foodcritic_executable'),
|
\ 'executable_callback': 'ale_linters#chef#foodcritic#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#chef#foodcritic#GetCommand',
|
\ 'command_callback': 'ale_linters#chef#foodcritic#GetCommand',
|
||||||
\ 'callback': 'ale_linters#chef#foodcritic#Handle',
|
\ 'callback': 'ale_linters#chef#foodcritic#Handle',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
|
|||||||
@@ -27,6 +27,6 @@ call ale#linter#Define('clojure', {
|
|||||||
\ 'name': 'joker',
|
\ 'name': 'joker',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable': 'joker',
|
\ 'executable': 'joker',
|
||||||
\ 'command': 'joker --working-dir %s --lint %t',
|
\ 'command': 'joker --lint %t',
|
||||||
\ 'callback': 'ale_linters#clojure#joker#HandleJokerFormat',
|
\ 'callback': 'ale_linters#clojure#joker#HandleJokerFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
" Author: Yasuhiro Kiyota <yasuhiroki.duck@gmail.com>
|
|
||||||
" Description: Support cfn-python-lint for AWS Cloudformation template file
|
|
||||||
|
|
||||||
function! ale_linters#cloudformation#cfn_python_lint#Handle(buffer, lines) abort
|
|
||||||
" Matches patterns line the following:
|
|
||||||
"
|
|
||||||
" sample.template.yaml:96:7:96:15:E3012:Property Resources/Sample/Properties/FromPort should be of type Integer
|
|
||||||
let l:pattern = '\v^(.*):(\d+):(\d+):(\d+):(\d+):([[:alnum:]]+):(.*)$'
|
|
||||||
let l:output = []
|
|
||||||
|
|
||||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
|
||||||
let l:code = l:match[6]
|
|
||||||
|
|
||||||
if ale#path#IsBufferPath(a:buffer, l:match[1])
|
|
||||||
call add(l:output, {
|
|
||||||
\ 'lnum': l:match[2],
|
|
||||||
\ 'col': l:match[3],
|
|
||||||
\ 'end_lnum': l:match[4],
|
|
||||||
\ 'end_col': l:match[5],
|
|
||||||
\ 'code': l:code,
|
|
||||||
\ 'type': l:code[:0] is# 'E' ? 'E' : 'W',
|
|
||||||
\ 'text': l:match[7]
|
|
||||||
\})
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return l:output
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('cloudformation', {
|
|
||||||
\ 'name': 'cloudformation',
|
|
||||||
\ 'executable': 'cfn-lint',
|
|
||||||
\ 'command': 'cfn-lint --template %t --format parseable',
|
|
||||||
\ 'callback': 'ale_linters#cloudformation#cfn_python_lint#Handle',
|
|
||||||
\})
|
|
||||||
@@ -4,24 +4,29 @@
|
|||||||
call ale#Set('cpp_clang_executable', 'clang++')
|
call ale#Set('cpp_clang_executable', 'clang++')
|
||||||
call ale#Set('cpp_clang_options', '-std=c++14 -Wall')
|
call ale#Set('cpp_clang_options', '-std=c++14 -Wall')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#clang#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cpp_clang_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cpp#clang#GetCommand(buffer, output) abort
|
function! ale_linters#cpp#clang#GetCommand(buffer, output) abort
|
||||||
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
||||||
|
|
||||||
" -iquote with the directory the file is in makes #include work for
|
" -iquote with the directory the file is in makes #include work for
|
||||||
" headers in the same directory.
|
" headers in the same directory.
|
||||||
return '%e -S -x c++ -fsyntax-only'
|
return ale#Escape(ale_linters#cpp#clang#GetExecutable(a:buffer))
|
||||||
\ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h'))
|
\ . ' -S -x c++ -fsyntax-only '
|
||||||
\ . ale#Pad(l:cflags)
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'cpp_clang_options')) . ' -'
|
\ . l:cflags
|
||||||
|
\ . ale#Var(a:buffer, 'cpp_clang_options') . ' -'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('cpp', {
|
call ale#linter#Define('cpp', {
|
||||||
\ 'name': 'clang',
|
\ 'name': 'clang',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': ale#VarFunc('cpp_clang_executable'),
|
\ 'executable_callback': 'ale_linters#cpp#clang#GetExecutable',
|
||||||
\ 'command_chain': [
|
\ 'command_chain': [
|
||||||
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
||||||
\ {'callback': 'ale_linters#cpp#clang#GetCommand'},
|
\ {'callback': 'ale_linters#cpp#clang#GetCommand'},
|
||||||
\ ],
|
\ ],
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ call ale#Set('cpp_clangcheck_executable', 'clang-check')
|
|||||||
call ale#Set('cpp_clangcheck_options', '')
|
call ale#Set('cpp_clangcheck_options', '')
|
||||||
call ale#Set('c_build_dir', '')
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#clangcheck#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cpp_clangcheck_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort
|
function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort
|
||||||
let l:user_options = ale#Var(a:buffer, 'cpp_clangcheck_options')
|
let l:user_options = ale#Var(a:buffer, 'cpp_clangcheck_options')
|
||||||
|
|
||||||
@@ -12,22 +16,23 @@ function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort
|
|||||||
let l:build_dir = ale#Var(a:buffer, 'c_build_dir')
|
let l:build_dir = ale#Var(a:buffer, 'c_build_dir')
|
||||||
|
|
||||||
if empty(l:build_dir)
|
if empty(l:build_dir)
|
||||||
let l:build_dir = ale#path#Dirname(ale#c#FindCompileCommands(a:buffer))
|
let l:build_dir = ale#c#FindCompileCommands(a:buffer)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" The extra arguments in the command are used to prevent .plist files from
|
" The extra arguments in the command are used to prevent .plist files from
|
||||||
" being generated. These are only added if no build directory can be
|
" being generated. These are only added if no build directory can be
|
||||||
" detected.
|
" detected.
|
||||||
return '%e -analyze %s'
|
return ale#Escape(ale_linters#cpp#clangcheck#GetExecutable(a:buffer))
|
||||||
|
\ . ' -analyze %s'
|
||||||
\ . (empty(l:build_dir) ? ' -extra-arg -Xclang -extra-arg -analyzer-output=text' : '')
|
\ . (empty(l:build_dir) ? ' -extra-arg -Xclang -extra-arg -analyzer-output=text' : '')
|
||||||
\ . ale#Pad(l:user_options)
|
\ . (!empty(l:user_options) ? ' ' . l:user_options : '')
|
||||||
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('cpp', {
|
call ale#linter#Define('cpp', {
|
||||||
\ 'name': 'clangcheck',
|
\ 'name': 'clangcheck',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': ale#VarFunc('cpp_clangcheck_executable'),
|
\ 'executable_callback': 'ale_linters#cpp#clangcheck#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#cpp#clangcheck#GetCommand',
|
\ 'command_callback': 'ale_linters#cpp#clangcheck#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ call ale#Set('cpp_clangtidy_checks', ['*'])
|
|||||||
call ale#Set('cpp_clangtidy_options', '')
|
call ale#Set('cpp_clangtidy_options', '')
|
||||||
call ale#Set('c_build_dir', '')
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#clangtidy#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cpp_clangtidy_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:GetBuildDirectory(buffer) abort
|
function! s:GetBuildDirectory(buffer) abort
|
||||||
" Don't include build directory for header files, as compile_commands.json
|
" Don't include build directory for header files, as compile_commands.json
|
||||||
" files don't consider headers to be translation units, and provide no
|
" files don't consider headers to be translation units, and provide no
|
||||||
@@ -25,7 +29,7 @@ function! s:GetBuildDirectory(buffer) abort
|
|||||||
return l:build_dir
|
return l:build_dir
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return ale#path#Dirname(ale#c#FindCompileCommands(a:buffer))
|
return ale#c#FindCompileCommands(a:buffer)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cpp#clangtidy#GetCommand(buffer) abort
|
function! ale_linters#cpp#clangtidy#GetCommand(buffer) abort
|
||||||
@@ -37,7 +41,7 @@ function! ale_linters#cpp#clangtidy#GetCommand(buffer) abort
|
|||||||
\ ? ale#Var(a:buffer, 'cpp_clangtidy_options')
|
\ ? ale#Var(a:buffer, 'cpp_clangtidy_options')
|
||||||
\ : ''
|
\ : ''
|
||||||
|
|
||||||
return '%e'
|
return ale#Escape(ale_linters#cpp#clangtidy#GetExecutable(a:buffer))
|
||||||
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
|
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
|
||||||
\ . ' %s'
|
\ . ' %s'
|
||||||
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
||||||
@@ -47,7 +51,7 @@ endfunction
|
|||||||
call ale#linter#Define('cpp', {
|
call ale#linter#Define('cpp', {
|
||||||
\ 'name': 'clangtidy',
|
\ 'name': 'clangtidy',
|
||||||
\ 'output_stream': 'stdout',
|
\ 'output_stream': 'stdout',
|
||||||
\ 'executable_callback': ale#VarFunc('cpp_clangtidy_executable'),
|
\ 'executable_callback': 'ale_linters#cpp#clangtidy#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#cpp#clangtidy#GetCommand',
|
\ 'command_callback': 'ale_linters#cpp#clangtidy#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
|
|||||||
@@ -4,6 +4,10 @@
|
|||||||
call ale#Set('cpp_cppcheck_executable', 'cppcheck')
|
call ale#Set('cpp_cppcheck_executable', 'cppcheck')
|
||||||
call ale#Set('cpp_cppcheck_options', '--enable=style')
|
call ale#Set('cpp_cppcheck_options', '--enable=style')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#cppcheck#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cpp_cppcheck_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cpp#cppcheck#GetCommand(buffer) abort
|
function! ale_linters#cpp#cppcheck#GetCommand(buffer) abort
|
||||||
" Search upwards from the file for compile_commands.json.
|
" Search upwards from the file for compile_commands.json.
|
||||||
"
|
"
|
||||||
@@ -19,7 +23,8 @@ function! ale_linters#cpp#cppcheck#GetCommand(buffer) abort
|
|||||||
\ : ''
|
\ : ''
|
||||||
|
|
||||||
return l:cd_command
|
return l:cd_command
|
||||||
\ . '%e -q --language=c++ '
|
\ . ale#Escape(ale_linters#cpp#cppcheck#GetExecutable(a:buffer))
|
||||||
|
\ . ' -q --language=c++ '
|
||||||
\ . l:compile_commands_option
|
\ . l:compile_commands_option
|
||||||
\ . ale#Var(a:buffer, 'cpp_cppcheck_options')
|
\ . ale#Var(a:buffer, 'cpp_cppcheck_options')
|
||||||
\ . ' %t'
|
\ . ' %t'
|
||||||
@@ -28,7 +33,7 @@ endfunction
|
|||||||
call ale#linter#Define('cpp', {
|
call ale#linter#Define('cpp', {
|
||||||
\ 'name': 'cppcheck',
|
\ 'name': 'cppcheck',
|
||||||
\ 'output_stream': 'both',
|
\ 'output_stream': 'both',
|
||||||
\ 'executable_callback': ale#VarFunc('cpp_cppcheck_executable'),
|
\ 'executable_callback': 'ale_linters#cpp#cppcheck#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#cpp#cppcheck#GetCommand',
|
\ 'command_callback': 'ale_linters#cpp#cppcheck#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat',
|
\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -4,16 +4,22 @@
|
|||||||
call ale#Set('cpp_cpplint_executable', 'cpplint')
|
call ale#Set('cpp_cpplint_executable', 'cpplint')
|
||||||
call ale#Set('cpp_cpplint_options', '')
|
call ale#Set('cpp_cpplint_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#cpplint#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cpp_cpplint_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cpp#cpplint#GetCommand(buffer) abort
|
function! ale_linters#cpp#cpplint#GetCommand(buffer) abort
|
||||||
let l:options = ale#Var(a:buffer, 'cpp_cpplint_options')
|
let l:options = ale#Var(a:buffer, 'cpp_cpplint_options')
|
||||||
|
|
||||||
return '%e' . ale#Pad(l:options) . ' %s'
|
return ale#Escape(ale_linters#cpp#cpplint#GetExecutable(a:buffer))
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('cpp', {
|
call ale#linter#Define('cpp', {
|
||||||
\ 'name': 'cpplint',
|
\ 'name': 'cpplint',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': ale#VarFunc('cpp_cpplint_executable'),
|
\ 'executable_callback': 'ale_linters#cpp#cpplint#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#cpp#cpplint#GetCommand',
|
\ 'command_callback': 'ale_linters#cpp#cpplint#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat',
|
\ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
" Author: Ben Falconer <ben@falconers.me.uk>
|
|
||||||
" Description: A language server for C++
|
|
||||||
|
|
||||||
call ale#Set('cpp_cquery_executable', 'cquery')
|
|
||||||
call ale#Set('cpp_cquery_cache_directory', expand('~/.cache/cquery'))
|
|
||||||
|
|
||||||
function! ale_linters#cpp#cquery#GetProjectRoot(buffer) abort
|
|
||||||
let l:project_root = ale#path#FindNearestFile(a:buffer, 'compile_commands.json')
|
|
||||||
|
|
||||||
return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#cpp#cquery#GetInitializationOptions(buffer) abort
|
|
||||||
return {'cacheDirectory': ale#Var(a:buffer, 'cpp_cquery_cache_directory')}
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('cpp', {
|
|
||||||
\ 'name': 'cquery',
|
|
||||||
\ 'lsp': 'stdio',
|
|
||||||
\ 'executable_callback': ale#VarFunc('cpp_cquery_executable'),
|
|
||||||
\ 'command': '%e',
|
|
||||||
\ 'project_root_callback': 'ale_linters#cpp#cquery#GetProjectRoot',
|
|
||||||
\ 'initialization_options_callback': 'ale_linters#cpp#cquery#GetInitializationOptions',
|
|
||||||
\})
|
|
||||||
@@ -6,11 +6,17 @@ call ale#Set('cpp_flawfinder_options', '')
|
|||||||
call ale#Set('cpp_flawfinder_minlevel', 1)
|
call ale#Set('cpp_flawfinder_minlevel', 1)
|
||||||
call ale#Set('c_flawfinder_error_severity', 6)
|
call ale#Set('c_flawfinder_error_severity', 6)
|
||||||
|
|
||||||
|
function! ale_linters#cpp#flawfinder#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cpp_flawfinder_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cpp#flawfinder#GetCommand(buffer) abort
|
function! ale_linters#cpp#flawfinder#GetCommand(buffer) abort
|
||||||
|
|
||||||
" Set the minimum vulnerability level for flawfinder to bother with
|
" Set the minimum vulnerability level for flawfinder to bother with
|
||||||
let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'cpp_flawfinder_minlevel')
|
let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'cpp_flawfinder_minlevel')
|
||||||
|
|
||||||
return '%e -CDQS'
|
return ale#Escape(ale_linters#cpp#flawfinder#GetExecutable(a:buffer))
|
||||||
|
\ . ' -CDQS'
|
||||||
\ . ale#Var(a:buffer, 'cpp_flawfinder_options')
|
\ . ale#Var(a:buffer, 'cpp_flawfinder_options')
|
||||||
\ . l:minlevel
|
\ . l:minlevel
|
||||||
\ . ' %t'
|
\ . ' %t'
|
||||||
@@ -19,7 +25,7 @@ endfunction
|
|||||||
call ale#linter#Define('cpp', {
|
call ale#linter#Define('cpp', {
|
||||||
\ 'name': 'flawfinder',
|
\ 'name': 'flawfinder',
|
||||||
\ 'output_stream': 'stdout',
|
\ 'output_stream': 'stdout',
|
||||||
\ 'executable_callback': ale#VarFunc('cpp_flawfinder_executable'),
|
\ 'executable_callback': 'ale_linters#cpp#flawfinder#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#cpp#flawfinder#GetCommand',
|
\ 'command_callback': 'ale_linters#cpp#flawfinder#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat',
|
\ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -4,25 +4,30 @@
|
|||||||
call ale#Set('cpp_gcc_executable', 'gcc')
|
call ale#Set('cpp_gcc_executable', 'gcc')
|
||||||
call ale#Set('cpp_gcc_options', '-std=c++14 -Wall')
|
call ale#Set('cpp_gcc_options', '-std=c++14 -Wall')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#gcc#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cpp_gcc_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cpp#gcc#GetCommand(buffer, output) abort
|
function! ale_linters#cpp#gcc#GetCommand(buffer, output) abort
|
||||||
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
||||||
|
|
||||||
" -iquote with the directory the file is in makes #include work for
|
" -iquote with the directory the file is in makes #include work for
|
||||||
" headers in the same directory.
|
" headers in the same directory.
|
||||||
return '%e -S -x c++ -fsyntax-only'
|
return ale#Escape(ale_linters#cpp#gcc#GetExecutable(a:buffer))
|
||||||
\ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h'))
|
\ . ' -S -x c++ -fsyntax-only '
|
||||||
\ . ale#Pad(l:cflags)
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'cpp_gcc_options')) . ' -'
|
\ . l:cflags
|
||||||
|
\ . ale#Var(a:buffer, 'cpp_gcc_options') . ' -'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('cpp', {
|
call ale#linter#Define('cpp', {
|
||||||
\ 'name': 'gcc',
|
\ 'name': 'gcc',
|
||||||
\ 'aliases': ['g++'],
|
\ 'aliases': ['g++'],
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': ale#VarFunc('cpp_gcc_executable'),
|
\ 'executable_callback': 'ale_linters#cpp#gcc#GetExecutable',
|
||||||
\ 'command_chain': [
|
\ 'command_chain': [
|
||||||
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
||||||
\ {'callback': 'ale_linters#cpp#gcc#GetCommand'},
|
\ {'callback': 'ale_linters#cpp#gcc#GetCommand'},
|
||||||
\ ],
|
\ ],
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
let g:ale_cs_mcs_options = get(g:, 'ale_cs_mcs_options', '')
|
let g:ale_cs_mcs_options = get(g:, 'ale_cs_mcs_options', '')
|
||||||
|
|
||||||
function! ale_linters#cs#mcs#GetCommand(buffer) abort
|
function! ale_linters#cs#mcs#GetCommand(buffer) abort
|
||||||
let l:options = ale#Var(a:buffer, 'cs_mcs_options')
|
return 'mcs -unsafe --parse ' . ale#Var(a:buffer, 'cs_mcs_options') . ' %t'
|
||||||
|
|
||||||
return 'mcs -unsafe --parse'
|
|
||||||
\ . (!empty(l:options) ? ' ' . l:options : '')
|
|
||||||
\ . ' %t'
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cs#mcs#Handle(buffer, lines) abort
|
function! ale_linters#cs#mcs#Handle(buffer, lines) abort
|
||||||
|
|||||||
@@ -29,16 +29,16 @@ function! ale_linters#cs#mcsc#GetCommand(buffer) abort
|
|||||||
\ : ''
|
\ : ''
|
||||||
|
|
||||||
" register temporary module target file with ale
|
" register temporary module target file with ale
|
||||||
" register temporary module target file with ALE.
|
let l:out = tempname()
|
||||||
let l:out = ale#engine#CreateFile(a:buffer)
|
call ale#engine#ManageFile(a:buffer, l:out)
|
||||||
|
|
||||||
" The code is compiled as a module and the output is redirected to a
|
" The code is compiled as a module and the output is redirected to a
|
||||||
" temporary file.
|
" temporary file.
|
||||||
return ale#path#CdString(s:GetWorkingDirectory(a:buffer))
|
return ale#path#CdString(s:GetWorkingDirectory(a:buffer))
|
||||||
\ . 'mcs -unsafe'
|
\ . 'mcs -unsafe'
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'cs_mcsc_options'))
|
\ . ' ' . ale#Var(a:buffer, 'cs_mcsc_options')
|
||||||
\ . ale#Pad(l:lib_option)
|
\ . ' ' . l:lib_option
|
||||||
\ . ale#Pad(l:r_option)
|
\ . ' ' . l:r_option
|
||||||
\ . ' -out:' . l:out
|
\ . ' -out:' . l:out
|
||||||
\ . ' -t:module'
|
\ . ' -t:module'
|
||||||
\ . ' -recurse:' . ale#Escape('*.cs')
|
\ . ' -recurse:' . ale#Escape('*.cs')
|
||||||
|
|||||||
@@ -4,16 +4,21 @@ call ale#Set('css_stylelint_executable', 'stylelint')
|
|||||||
call ale#Set('css_stylelint_options', '')
|
call ale#Set('css_stylelint_options', '')
|
||||||
call ale#Set('css_stylelint_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('css_stylelint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#css#stylelint#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'css_stylelint', [
|
||||||
|
\ 'node_modules/.bin/stylelint',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#css#stylelint#GetCommand(buffer) abort
|
function! ale_linters#css#stylelint#GetCommand(buffer) abort
|
||||||
return '%e ' . ale#Pad(ale#Var(a:buffer, 'css_stylelint_options'))
|
return ale_linters#css#stylelint#GetExecutable(a:buffer)
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'css_stylelint_options')
|
||||||
\ . ' --stdin-filename %s'
|
\ . ' --stdin-filename %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('css', {
|
call ale#linter#Define('css', {
|
||||||
\ 'name': 'stylelint',
|
\ 'name': 'stylelint',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('css_stylelint', [
|
\ 'executable_callback': 'ale_linters#css#stylelint#GetExecutable',
|
||||||
\ 'node_modules/.bin/stylelint',
|
|
||||||
\ ]),
|
|
||||||
\ 'command_callback': 'ale_linters#css#stylelint#GetCommand',
|
\ 'command_callback': 'ale_linters#css#stylelint#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#css#HandleStyleLintFormat',
|
\ 'callback': 'ale#handlers#css#HandleStyleLintFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -4,15 +4,20 @@
|
|||||||
call ale#Set('cuda_nvcc_executable', 'nvcc')
|
call ale#Set('cuda_nvcc_executable', 'nvcc')
|
||||||
call ale#Set('cuda_nvcc_options', '-std=c++11')
|
call ale#Set('cuda_nvcc_options', '-std=c++11')
|
||||||
|
|
||||||
|
function! ale_linters#cuda#nvcc#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cuda_nvcc_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cuda#nvcc#GetCommand(buffer) abort
|
function! ale_linters#cuda#nvcc#GetCommand(buffer) abort
|
||||||
" Unused: use ale#util#nul_file
|
" Unused: use ale#util#nul_file
|
||||||
" let l:output_file = ale#util#Tempname() . '.ii'
|
" let l:output_file = tempname() . '.ii'
|
||||||
" call ale#engine#ManageFile(a:buffer, l:output_file)
|
" call ale#engine#ManageFile(a:buffer, l:output_file)
|
||||||
|
|
||||||
return '%e -cuda'
|
return ale#Escape(ale_linters#cuda#nvcc#GetExecutable(a:buffer))
|
||||||
\ . ale#Pad(ale#c#IncludeOptions(ale#c#FindLocalHeaderPaths(a:buffer)))
|
\ . ' -cuda '
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'cuda_nvcc_options'))
|
\ . ale#c#IncludeOptions(ale#c#FindLocalHeaderPaths(a:buffer))
|
||||||
\ . ' %s -o ' . g:ale#util#nul_file
|
\ . ale#Var(a:buffer, 'cuda_nvcc_options') . ' %s'
|
||||||
|
\ . ' -o ' . g:ale#util#nul_file
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cuda#nvcc#HandleNVCCFormat(buffer, lines) abort
|
function! ale_linters#cuda#nvcc#HandleNVCCFormat(buffer, lines) abort
|
||||||
@@ -44,7 +49,7 @@ endfunction
|
|||||||
call ale#linter#Define('cuda', {
|
call ale#linter#Define('cuda', {
|
||||||
\ 'name': 'nvcc',
|
\ 'name': 'nvcc',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': ale#VarFunc('cuda_nvcc_executable'),
|
\ 'executable_callback': 'ale_linters#cuda#nvcc#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#cuda#nvcc#GetCommand',
|
\ 'command_callback': 'ale_linters#cuda#nvcc#GetCommand',
|
||||||
\ 'callback': 'ale_linters#cuda#nvcc#HandleNVCCFormat',
|
\ 'callback': 'ale_linters#cuda#nvcc#HandleNVCCFormat',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
|
|||||||
@@ -3,10 +3,15 @@
|
|||||||
|
|
||||||
call ale#Set('dart_dartanalyzer_executable', 'dartanalyzer')
|
call ale#Set('dart_dartanalyzer_executable', 'dartanalyzer')
|
||||||
|
|
||||||
|
function! ale_linters#dart#dartanalyzer#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'dart_dartanalyzer_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#dart#dartanalyzer#GetCommand(buffer) abort
|
function! ale_linters#dart#dartanalyzer#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#dart#dartanalyzer#GetExecutable(a:buffer)
|
||||||
let l:path = ale#path#FindNearestFile(a:buffer, '.packages')
|
let l:path = ale#path#FindNearestFile(a:buffer, '.packages')
|
||||||
|
|
||||||
return '%e'
|
return ale#Escape(l:executable)
|
||||||
\ . (!empty(l:path) ? ' --packages ' . ale#Escape(l:path) : '')
|
\ . (!empty(l:path) ? ' --packages ' . ale#Escape(l:path) : '')
|
||||||
\ . ' %s'
|
\ . ' %s'
|
||||||
endfunction
|
endfunction
|
||||||
@@ -29,7 +34,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('dart', {
|
call ale#linter#Define('dart', {
|
||||||
\ 'name': 'dartanalyzer',
|
\ 'name': 'dartanalyzer',
|
||||||
\ 'executable_callback': ale#VarFunc('dart_dartanalyzer_executable'),
|
\ 'executable_callback': 'ale_linters#dart#dartanalyzer#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#dart#dartanalyzer#GetCommand',
|
\ 'command_callback': 'ale_linters#dart#dartanalyzer#GetCommand',
|
||||||
\ 'callback': 'ale_linters#dart#dartanalyzer#Handle',
|
\ 'callback': 'ale_linters#dart#dartanalyzer#Handle',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
|
|
||||||
call ale#Set('dart_language_server_executable', 'dart_language_server')
|
call ale#Set('dart_language_server_executable', 'dart_language_server')
|
||||||
|
|
||||||
|
function! ale_linters#dart#language_server#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'dart_language_server_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#dart#language_server#GetProjectRoot(buffer) abort
|
function! ale_linters#dart#language_server#GetProjectRoot(buffer) abort
|
||||||
" Note: pub only looks for pubspec.yaml, there's no point in adding
|
" Note: pub only looks for pubspec.yaml, there's no point in adding
|
||||||
" support for pubspec.yml
|
" support for pubspec.yml
|
||||||
@@ -14,7 +18,8 @@ endfunction
|
|||||||
call ale#linter#Define('dart', {
|
call ale#linter#Define('dart', {
|
||||||
\ 'name': 'language_server',
|
\ 'name': 'language_server',
|
||||||
\ 'lsp': 'stdio',
|
\ 'lsp': 'stdio',
|
||||||
\ 'executable_callback': ale#VarFunc('dart_language_server_executable'),
|
\ 'executable_callback': 'ale_linters#dart#language_server#GetExecutable',
|
||||||
\ 'command': '%e',
|
\ 'command_callback': 'ale_linters#dart#language_server#GetExecutable',
|
||||||
|
\ 'language': 'dart',
|
||||||
\ 'project_root_callback': 'ale_linters#dart#language_server#GetProjectRoot',
|
\ 'project_root_callback': 'ale_linters#dart#language_server#GetProjectRoot',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ endfunction
|
|||||||
call ale#linter#Define('elixir', {
|
call ale#linter#Define('elixir', {
|
||||||
\ 'name': 'dialyxir',
|
\ 'name': 'dialyxir',
|
||||||
\ 'executable': 'mix',
|
\ 'executable': 'mix',
|
||||||
\ 'command': 'mix help dialyzer && mix dialyzer',
|
\ 'command': 'mix dialyzer',
|
||||||
\ 'callback': 'ale_linters#elixir#dialyxir#Handle',
|
\ 'callback': 'ale_linters#elixir#dialyxir#Handle',
|
||||||
\})
|
\})
|
||||||
|
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
" Author: evnu - https://github.com/evnu
|
|
||||||
" Author: colbydehart - https://github.com/colbydehart
|
|
||||||
" Description: Mix compile checking for Elixir files
|
|
||||||
|
|
||||||
function! ale_linters#elixir#mix#Handle(buffer, lines) abort
|
|
||||||
" Matches patterns like the following:
|
|
||||||
"
|
|
||||||
" Error format
|
|
||||||
" ** (CompileError) apps/sim/lib/sim/server.ex:87: undefined function update_in/4
|
|
||||||
"
|
|
||||||
" TODO: Warning format
|
|
||||||
" warning: variable "foobar" does not exist and is being expanded to "foobar()", please use parentheses to remove the ambiguity or change the variable name
|
|
||||||
|
|
||||||
let l:pattern = '\v\(([^\)]+Error)\) ([^:]+):([^:]+): (.+)$'
|
|
||||||
let l:output = []
|
|
||||||
|
|
||||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
|
||||||
let l:type = 'E'
|
|
||||||
let l:text = l:match[4]
|
|
||||||
|
|
||||||
call add(l:output, {
|
|
||||||
\ 'bufnr': a:buffer,
|
|
||||||
\ 'lnum': l:match[3] + 0,
|
|
||||||
\ 'col': 0,
|
|
||||||
\ 'type': l:type,
|
|
||||||
\ 'text': l:text,
|
|
||||||
\})
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return l:output
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#elixir#mix#FindProjectRoot(buffer) abort
|
|
||||||
let l:mix_file = ale#path#FindNearestFile(a:buffer, 'mix.exs')
|
|
||||||
if !empty(l:mix_file)
|
|
||||||
return fnamemodify(l:mix_file, ':p:h')
|
|
||||||
endif
|
|
||||||
return '.'
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#elixir#mix#GetCommand(buffer) abort
|
|
||||||
let l:project_root = ale_linters#elixir#mix#FindProjectRoot(a:buffer)
|
|
||||||
|
|
||||||
let l:temp_dir = ale#engine#CreateDirectory(a:buffer)
|
|
||||||
|
|
||||||
let l:mix_build_path = has('win32')
|
|
||||||
\ ? 'set MIX_BUILD_PATH=' . ale#Escape(l:temp_dir) . ' &&'
|
|
||||||
\ : 'MIX_BUILD_PATH=' . ale#Escape(l:temp_dir)
|
|
||||||
|
|
||||||
return ale#path#CdString(l:project_root)
|
|
||||||
\ . l:mix_build_path
|
|
||||||
\ . ' mix compile %s'
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('elixir', {
|
|
||||||
\ 'name': 'mix',
|
|
||||||
\ 'executable': 'mix',
|
|
||||||
\ 'command_callback': 'ale_linters#elixir#mix#GetCommand',
|
|
||||||
\ 'callback': 'ale_linters#elixir#mix#Handle',
|
|
||||||
\ 'lint_file': 1,
|
|
||||||
\})
|
|
||||||
@@ -4,6 +4,12 @@
|
|||||||
call ale#Set('elm_make_executable', 'elm')
|
call ale#Set('elm_make_executable', 'elm')
|
||||||
call ale#Set('elm_make_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('elm_make_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#elm#make#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'elm_make', [
|
||||||
|
\ 'node_modules/.bin/elm',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#elm#make#Handle(buffer, lines) abort
|
function! ale_linters#elm#make#Handle(buffer, lines) abort
|
||||||
let l:output = []
|
let l:output = []
|
||||||
let l:unparsed_lines = []
|
let l:unparsed_lines = []
|
||||||
@@ -122,7 +128,14 @@ function! ale_linters#elm#make#HandleElm018Line(line, output) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#elm#make#FileIsBuffer(path) abort
|
function! ale_linters#elm#make#FileIsBuffer(path) abort
|
||||||
return ale#path#IsTempName(a:path)
|
let l:is_windows = has('win32')
|
||||||
|
let l:temp_dir = l:is_windows ? $TMP : $TMPDIR
|
||||||
|
|
||||||
|
if has('win32')
|
||||||
|
return a:path[0:len(l:temp_dir) - 1] is? l:temp_dir
|
||||||
|
else
|
||||||
|
return a:path[0:len(l:temp_dir) - 1] is# l:temp_dir
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#elm#make#ParseMessage(message) abort
|
function! ale_linters#elm#make#ParseMessage(message) abort
|
||||||
@@ -130,7 +143,7 @@ function! ale_linters#elm#make#ParseMessage(message) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#elm#make#ParseMessageItem(item) abort
|
function! ale_linters#elm#make#ParseMessageItem(item) abort
|
||||||
if type(a:item) is v:t_string
|
if type(a:item) == type('')
|
||||||
return a:item
|
return a:item
|
||||||
else
|
else
|
||||||
return a:item.string
|
return a:item.string
|
||||||
@@ -141,6 +154,7 @@ endfunction
|
|||||||
" If it doesn't, then this will fail when imports are needed.
|
" If it doesn't, then this will fail when imports are needed.
|
||||||
function! ale_linters#elm#make#GetCommand(buffer) abort
|
function! ale_linters#elm#make#GetCommand(buffer) abort
|
||||||
let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm.json')
|
let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm.json')
|
||||||
|
let l:elm_exe = ale_linters#elm#make#GetExecutable(a:buffer)
|
||||||
|
|
||||||
if empty(l:elm_json)
|
if empty(l:elm_json)
|
||||||
" Fallback to Elm 0.18
|
" Fallback to Elm 0.18
|
||||||
@@ -158,15 +172,18 @@ function! ale_linters#elm#make#GetCommand(buffer) abort
|
|||||||
" a sort of flag to tell the compiler not to generate an output file,
|
" a sort of flag to tell the compiler not to generate an output file,
|
||||||
" which is why this is hard coded here.
|
" which is why this is hard coded here.
|
||||||
" Source: https://github.com/elm-lang/elm-compiler/blob/19d5a769b30ec0b2fc4475985abb4cd94cd1d6c3/builder/src/Generate/Output.hs#L253
|
" Source: https://github.com/elm-lang/elm-compiler/blob/19d5a769b30ec0b2fc4475985abb4cd94cd1d6c3/builder/src/Generate/Output.hs#L253
|
||||||
return l:dir_set_cmd . '%e make --report=json --output=/dev/null %t'
|
let l:elm_cmd = ale#Escape(l:elm_exe)
|
||||||
|
\ . ' make'
|
||||||
|
\ . ' --report=json'
|
||||||
|
\ . ' --output=/dev/null'
|
||||||
|
|
||||||
|
return l:dir_set_cmd . ' ' . l:elm_cmd . ' %t'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('elm', {
|
call ale#linter#Define('elm', {
|
||||||
\ 'name': 'make',
|
\ 'name': 'make',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('elm_make', [
|
\ 'executable_callback': 'ale_linters#elm#make#GetExecutable',
|
||||||
\ 'node_modules/.bin/elm',
|
\ 'output_stream': 'both',
|
||||||
\ ]),
|
\ 'command_callback': 'ale_linters#elm#make#GetCommand',
|
||||||
\ 'output_stream': 'both',
|
\ 'callback': 'ale_linters#elm#make#Handle'
|
||||||
\ 'command_callback': 'ale_linters#elm#make#GetCommand',
|
|
||||||
\ 'callback': 'ale_linters#elm#make#Handle'
|
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
let g:ale_erlang_erlc_options = get(g:, 'ale_erlang_erlc_options', '')
|
let g:ale_erlang_erlc_options = get(g:, 'ale_erlang_erlc_options', '')
|
||||||
|
|
||||||
function! ale_linters#erlang#erlc#GetCommand(buffer) abort
|
function! ale_linters#erlang#erlc#GetCommand(buffer) abort
|
||||||
let l:output_file = ale#util#Tempname()
|
let l:output_file = tempname()
|
||||||
call ale#engine#ManageFile(a:buffer, l:output_file)
|
call ale#engine#ManageFile(a:buffer, l:output_file)
|
||||||
|
|
||||||
return 'erlc -o ' . ale#Escape(l:output_file)
|
return 'erlc -o ' . ale#Escape(l:output_file)
|
||||||
|
|||||||
@@ -3,12 +3,24 @@
|
|||||||
|
|
||||||
call ale#Set('erlang_syntaxerl_executable', 'syntaxerl')
|
call ale#Set('erlang_syntaxerl_executable', 'syntaxerl')
|
||||||
|
|
||||||
|
|
||||||
|
function! ale_linters#erlang#syntaxerl#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'erlang_syntaxerl_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! ale_linters#erlang#syntaxerl#FeatureCheck(buffer) abort
|
||||||
|
return s:GetEscapedExecutable(a:buffer) . ' -h'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! ale_linters#erlang#syntaxerl#GetCommand(buffer, output) abort
|
function! ale_linters#erlang#syntaxerl#GetCommand(buffer, output) abort
|
||||||
let l:use_b_option = match(a:output, '\C\V-b, --base\>') > -1
|
let l:use_b_option = match(a:output, '\C\V-b, --base\>') > -1
|
||||||
|
|
||||||
return '%e' . (l:use_b_option ? ' -b %s %t' : ' %t')
|
return s:GetEscapedExecutable(a:buffer) . (l:use_b_option ? ' -b %s %t' : ' %t')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! ale_linters#erlang#syntaxerl#Handle(buffer, lines) abort
|
function! ale_linters#erlang#syntaxerl#Handle(buffer, lines) abort
|
||||||
let l:pattern = '\v\C:(\d+):( warning:)? (.+)'
|
let l:pattern = '\v\C:(\d+):( warning:)? (.+)'
|
||||||
let l:loclist = []
|
let l:loclist = []
|
||||||
@@ -24,11 +36,17 @@ function! ale_linters#erlang#syntaxerl#Handle(buffer, lines) abort
|
|||||||
return l:loclist
|
return l:loclist
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! s:GetEscapedExecutable(buffer) abort
|
||||||
|
return ale#Escape(ale_linters#erlang#syntaxerl#GetExecutable(a:buffer))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
call ale#linter#Define('erlang', {
|
call ale#linter#Define('erlang', {
|
||||||
\ 'name': 'syntaxerl',
|
\ 'name': 'syntaxerl',
|
||||||
\ 'executable_callback': ale#VarFunc('erlang_syntaxerl_executable'),
|
\ 'executable_callback': 'ale_linters#erlang#syntaxerl#GetExecutable',
|
||||||
\ 'command_chain': [
|
\ 'command_chain': [
|
||||||
\ {'callback': {-> '%e -h'}},
|
\ {'callback': 'ale_linters#erlang#syntaxerl#FeatureCheck'},
|
||||||
\ {'callback': 'ale_linters#erlang#syntaxerl#GetCommand'},
|
\ {'callback': 'ale_linters#erlang#syntaxerl#GetCommand'},
|
||||||
\ ],
|
\ ],
|
||||||
\ 'callback': 'ale_linters#erlang#syntaxerl#Handle',
|
\ 'callback': 'ale_linters#erlang#syntaxerl#Handle',
|
||||||
|
|||||||
@@ -2,10 +2,18 @@
|
|||||||
" Description: gcc for Fortran files
|
" Description: gcc for Fortran files
|
||||||
|
|
||||||
" This option can be set to 0 to use -ffixed-form
|
" This option can be set to 0 to use -ffixed-form
|
||||||
call ale#Set('fortran_gcc_use_free_form', 1)
|
if !exists('g:ale_fortran_gcc_use_free_form')
|
||||||
call ale#Set('fortran_gcc_executable', 'gcc')
|
let g:ale_fortran_gcc_use_free_form = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('g:ale_fortran_gcc_executable')
|
||||||
|
let g:ale_fortran_gcc_executable = 'gcc'
|
||||||
|
endif
|
||||||
|
|
||||||
" Set this option to change the GCC options for warnings for Fortran.
|
" Set this option to change the GCC options for warnings for Fortran.
|
||||||
call ale#Set('fortran_gcc_options', '-Wall')
|
if !exists('g:ale_fortran_gcc_options')
|
||||||
|
let g:ale_fortran_gcc_options = '-Wall'
|
||||||
|
endif
|
||||||
|
|
||||||
function! ale_linters#fortran#gcc#Handle(buffer, lines) abort
|
function! ale_linters#fortran#gcc#Handle(buffer, lines) abort
|
||||||
" We have to match a starting line and a later ending line together,
|
" We have to match a starting line and a later ending line together,
|
||||||
@@ -53,20 +61,26 @@ function! ale_linters#fortran#gcc#Handle(buffer, lines) abort
|
|||||||
return l:output
|
return l:output
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#fortran#gcc#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'fortran_gcc_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#fortran#gcc#GetCommand(buffer) abort
|
function! ale_linters#fortran#gcc#GetCommand(buffer) abort
|
||||||
let l:layout_option = ale#Var(a:buffer, 'fortran_gcc_use_free_form')
|
let l:layout_option = ale#Var(a:buffer, 'fortran_gcc_use_free_form')
|
||||||
\ ? '-ffree-form'
|
\ ? '-ffree-form'
|
||||||
\ : '-ffixed-form'
|
\ : '-ffixed-form'
|
||||||
|
|
||||||
return '%e -S -x f95 -fsyntax-only ' . l:layout_option
|
return ale_linters#fortran#gcc#GetExecutable(a:buffer)
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'fortran_gcc_options'))
|
\ . ' -S -x f95 -fsyntax-only '
|
||||||
\ . ' -'
|
\ . l:layout_option . ' '
|
||||||
|
\ . ale#Var(a:buffer, 'fortran_gcc_options') . ' '
|
||||||
|
\ . '-'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('fortran', {
|
call ale#linter#Define('fortran', {
|
||||||
\ 'name': 'gcc',
|
\ 'name': 'gcc',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': ale#VarFunc('fortran_gcc_executable'),
|
\ 'executable_callback': 'ale_linters#fortran#gcc#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#fortran#gcc#GetCommand',
|
\ 'command_callback': 'ale_linters#fortran#gcc#GetCommand',
|
||||||
\ 'callback': 'ale_linters#fortran#gcc#Handle',
|
\ 'callback': 'ale_linters#fortran#gcc#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
" Author: unpairedbracket ben.spiers22@gmail.com
|
|
||||||
" Description: A language server for fortran
|
|
||||||
|
|
||||||
call ale#Set('fortran_language_server_executable', 'fortls')
|
|
||||||
call ale#Set('fortran_language_server_use_global', get(g:, 'ale_use_global_executables', 0))
|
|
||||||
|
|
||||||
function! ale_linters#fortran#language_server#GetProjectRoot(buffer) abort
|
|
||||||
let l:fortls_file = ale#path#FindNearestFile(a:buffer, '.fortls')
|
|
||||||
|
|
||||||
return !empty(l:fortls_file) ? fnamemodify(l:fortls_file, ':h') : ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('fortran', {
|
|
||||||
\ 'name': 'language_server',
|
|
||||||
\ 'lsp': 'stdio',
|
|
||||||
\ 'executable_callback': ale#VarFunc('fortran_language_server_executable'),
|
|
||||||
\ 'command': '%e',
|
|
||||||
\ 'project_root_callback': 'ale_linters#fortran#language_server#GetProjectRoot',
|
|
||||||
\})
|
|
||||||
@@ -1,11 +1,19 @@
|
|||||||
" Author: RyanSquared <vandor2012@gmail.com>
|
" Author: RyanSquared <vandor2012@gmail.com>
|
||||||
" Description: `fusion-lint` linter for FusionScript files
|
" Description: `fusion-lint` linter for FusionScript files
|
||||||
|
|
||||||
call ale#Set('fuse_fusionlint_executable', 'fusion-lint')
|
let g:ale_fuse_fusionlint_executable =
|
||||||
call ale#Set('fuse_fusionlint_options', '')
|
\ get(g:, 'ale_fuse_fusionlint_executable', 'fusion-lint')
|
||||||
|
|
||||||
|
let g:ale_fuse_fusionlint_options =
|
||||||
|
\ get(g:, 'ale_fuse_fusionlint_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#fuse#fusionlint#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'fuse_fusionlint_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#fuse#fusionlint#GetCommand(buffer) abort
|
function! ale_linters#fuse#fusionlint#GetCommand(buffer) abort
|
||||||
return '%e' . ale#Pad(ale#Var(a:buffer, 'fuse_fusionlint_options'))
|
return ale#Escape(ale_linters#fuse#fusionlint#GetExecutable(a:buffer))
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'fuse_fusionlint_options')
|
||||||
\ . ' --filename %s -i'
|
\ . ' --filename %s -i'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -27,7 +35,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('fuse', {
|
call ale#linter#Define('fuse', {
|
||||||
\ 'name': 'fusionlint',
|
\ 'name': 'fusionlint',
|
||||||
\ 'executable_callback': ale#VarFunc('fuse_fusionlint_executable'),
|
\ 'executable_callback': 'ale_linters#fuse#fusionlint#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#fuse#fusionlint#GetCommand',
|
\ 'command_callback': 'ale_linters#fuse#fusionlint#GetCommand',
|
||||||
\ 'callback': 'ale_linters#fuse#fusionlint#Handle',
|
\ 'callback': 'ale_linters#fuse#fusionlint#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
" Author: Nick Yamane <nick.diego@gmail.com>
|
" Author: Nick Yamane <nick.diego@gmail.com>
|
||||||
" Description: gitlint for git commit message files
|
" Description: gitlint for git commit message files
|
||||||
|
|
||||||
call ale#Set('gitcommit_gitlint_executable', 'gitlint')
|
let g:ale_gitcommit_gitlint_executable =
|
||||||
call ale#Set('gitcommit_gitlint_options', '')
|
\ get(g:, 'ale_gitcommit_gitlint_executable', 'gitlint')
|
||||||
call ale#Set('gitcommit_gitlint_use_global', get(g:, 'ale_use_global_executables', 0))
|
let g:ale_gitcommit_gitlint_options = get(g:, 'ale_gitcommit_gitlint_options', '')
|
||||||
|
let g:ale_gitcommit_gitlint_use_global = get(g:, 'ale_gitcommit_gitlint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
|
||||||
function! ale_linters#gitcommit#gitlint#GetExecutable(buffer) abort
|
function! ale_linters#gitcommit#gitlint#GetExecutable(buffer) abort
|
||||||
return ale#python#FindExecutable(a:buffer, 'gitcommit_gitlint', ['gitlint'])
|
return ale#python#FindExecutable(a:buffer, 'gitcommit_gitlint', ['gitlint'])
|
||||||
@@ -11,10 +13,13 @@ endfunction
|
|||||||
|
|
||||||
function! ale_linters#gitcommit#gitlint#GetCommand(buffer) abort
|
function! ale_linters#gitcommit#gitlint#GetCommand(buffer) abort
|
||||||
let l:options = ale#Var(a:buffer, 'gitcommit_gitlint_options')
|
let l:options = ale#Var(a:buffer, 'gitcommit_gitlint_options')
|
||||||
|
let l:executable = ale_linters#gitcommit#gitlint#GetExecutable(a:buffer)
|
||||||
return '%e' . ale#Pad(l:options) . ' lint'
|
return ale#Escape(l:executable)
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' lint'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! ale_linters#gitcommit#gitlint#Handle(buffer, lines) abort
|
function! ale_linters#gitcommit#gitlint#Handle(buffer, lines) abort
|
||||||
" Matches patterns line the following:
|
" Matches patterns line the following:
|
||||||
let l:pattern = '\v^(\d+): (\w+) (.*)$'
|
let l:pattern = '\v^(\d+): (\w+) (.*)$'
|
||||||
@@ -23,10 +28,6 @@ function! ale_linters#gitcommit#gitlint#Handle(buffer, lines) abort
|
|||||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
let l:code = l:match[2]
|
let l:code = l:match[2]
|
||||||
|
|
||||||
if l:code is# 'T2' && !ale#Var(a:buffer, 'warn_about_trailing_whitespace')
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:item = {
|
let l:item = {
|
||||||
\ 'lnum': l:match[1] + 0,
|
\ 'lnum': l:match[1] + 0,
|
||||||
\ 'text': l:match[3],
|
\ 'text': l:match[3],
|
||||||
@@ -40,6 +41,7 @@ function! ale_linters#gitcommit#gitlint#Handle(buffer, lines) abort
|
|||||||
return l:output
|
return l:output
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
call ale#linter#Define('gitcommit', {
|
call ale#linter#Define('gitcommit', {
|
||||||
\ 'name': 'gitlint',
|
\ 'name': 'gitlint',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
@@ -47,3 +49,4 @@ call ale#linter#Define('gitcommit', {
|
|||||||
\ 'command_callback': 'ale_linters#gitcommit#gitlint#GetCommand',
|
\ 'command_callback': 'ale_linters#gitcommit#gitlint#GetCommand',
|
||||||
\ 'callback': 'ale_linters#gitcommit#gitlint#Handle',
|
\ 'callback': 'ale_linters#gitcommit#gitlint#Handle',
|
||||||
\})
|
\})
|
||||||
|
|
||||||
|
|||||||
@@ -4,13 +4,19 @@
|
|||||||
" TODO: Once https://github.com/KhronosGroup/glslang/pull/1047 is accepted,
|
" TODO: Once https://github.com/KhronosGroup/glslang/pull/1047 is accepted,
|
||||||
" we can use stdin.
|
" we can use stdin.
|
||||||
|
|
||||||
call ale#Set('glsl_glslang_executable', 'glslangValidator')
|
let g:ale_glsl_glslang_executable =
|
||||||
call ale#Set('glsl_glslang_options', '')
|
\ get(g:, 'ale_glsl_glslang_executable', 'glslangValidator')
|
||||||
|
|
||||||
|
let g:ale_glsl_glslang_options = get(g:, 'ale_glsl_glslang_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#glsl#glslang#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'glsl_glslang_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#glsl#glslang#GetCommand(buffer) abort
|
function! ale_linters#glsl#glslang#GetCommand(buffer) abort
|
||||||
return '%e'
|
return ale_linters#glsl#glslang#GetExecutable(a:buffer)
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'glsl_glslang_options'))
|
\ . ' ' . ale#Var(a:buffer, 'glsl_glslang_options')
|
||||||
\ . ' -C %t'
|
\ . ' ' . '-C %t'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#glsl#glslang#Handle(buffer, lines) abort
|
function! ale_linters#glsl#glslang#Handle(buffer, lines) abort
|
||||||
@@ -34,7 +40,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('glsl', {
|
call ale#linter#Define('glsl', {
|
||||||
\ 'name': 'glslang',
|
\ 'name': 'glslang',
|
||||||
\ 'executable_callback': ale#VarFunc('glsl_glslang_executable'),
|
\ 'executable_callback': 'ale_linters#glsl#glslang#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#glsl#glslang#GetCommand',
|
\ 'command_callback': 'ale_linters#glsl#glslang#GetCommand',
|
||||||
\ 'callback': 'ale_linters#glsl#glslang#Handle',
|
\ 'callback': 'ale_linters#glsl#glslang#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -4,15 +4,18 @@
|
|||||||
call ale#Set('glsl_glslls_executable', 'glslls')
|
call ale#Set('glsl_glslls_executable', 'glslls')
|
||||||
call ale#Set('glsl_glslls_logfile', '')
|
call ale#Set('glsl_glslls_logfile', '')
|
||||||
|
|
||||||
|
function! ale_linters#glsl#glslls#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'glsl_glslls_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#glsl#glslls#GetCommand(buffer) abort
|
function! ale_linters#glsl#glslls#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#glsl#glslls#GetExecutable(a:buffer)
|
||||||
let l:logfile = ale#Var(a:buffer, 'glsl_glslls_logfile')
|
let l:logfile = ale#Var(a:buffer, 'glsl_glslls_logfile')
|
||||||
let l:logfile_args = ''
|
let l:logfile_args = ''
|
||||||
|
|
||||||
if l:logfile isnot# ''
|
if l:logfile isnot# ''
|
||||||
let l:logfile_args = ' --verbose -l ' . l:logfile
|
let l:logfile_args = ' --verbose -l ' . l:logfile
|
||||||
endif
|
endif
|
||||||
|
return ale#Escape(l:executable) . l:logfile_args . ' --stdin'
|
||||||
return '%e' . l:logfile_args . ' --stdin'
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#glsl#glslls#GetProjectRoot(buffer) abort
|
function! ale_linters#glsl#glslls#GetProjectRoot(buffer) abort
|
||||||
@@ -24,7 +27,8 @@ endfunction
|
|||||||
call ale#linter#Define('glsl', {
|
call ale#linter#Define('glsl', {
|
||||||
\ 'name': 'glslls',
|
\ 'name': 'glslls',
|
||||||
\ 'lsp': 'stdio',
|
\ 'lsp': 'stdio',
|
||||||
\ 'executable_callback': ale#VarFunc('glsl_glslls_executable'),
|
\ 'executable_callback': 'ale_linters#glsl#glslls#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#glsl#glslls#GetCommand',
|
\ 'command_callback': 'ale_linters#glsl#glslls#GetCommand',
|
||||||
|
\ 'language': 'glsl',
|
||||||
\ 'project_root_callback': 'ale_linters#glsl#glslls#GetProjectRoot',
|
\ 'project_root_callback': 'ale_linters#glsl#glslls#GetProjectRoot',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -70,8 +70,7 @@ function! ale_linters#go#gobuild#Handler(buffer, lines) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('go', {
|
call ale#linter#Define('go', {
|
||||||
\ 'name': 'gobuild',
|
\ 'name': 'go build',
|
||||||
\ 'aliases': ['go build'],
|
|
||||||
\ 'executable': 'go',
|
\ 'executable': 'go',
|
||||||
\ 'command_chain': [
|
\ 'command_chain': [
|
||||||
\ {'callback': 'ale_linters#go#gobuild#GoEnv', 'output_stream': 'stdout'},
|
\ {'callback': 'ale_linters#go#gobuild#GoEnv', 'output_stream': 'stdout'},
|
||||||
|
|||||||
@@ -5,7 +5,12 @@ call ale#Set('go_gometalinter_options', '')
|
|||||||
call ale#Set('go_gometalinter_executable', 'gometalinter')
|
call ale#Set('go_gometalinter_executable', 'gometalinter')
|
||||||
call ale#Set('go_gometalinter_lint_package', 0)
|
call ale#Set('go_gometalinter_lint_package', 0)
|
||||||
|
|
||||||
|
function! ale_linters#go#gometalinter#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'go_gometalinter_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#go#gometalinter#GetCommand(buffer) abort
|
function! ale_linters#go#gometalinter#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#go#gometalinter#GetExecutable(a:buffer)
|
||||||
let l:filename = expand('#' . a:buffer . ':t')
|
let l:filename = expand('#' . a:buffer . ':t')
|
||||||
let l:options = ale#Var(a:buffer, 'go_gometalinter_options')
|
let l:options = ale#Var(a:buffer, 'go_gometalinter_options')
|
||||||
let l:lint_package = ale#Var(a:buffer, 'go_gometalinter_lint_package')
|
let l:lint_package = ale#Var(a:buffer, 'go_gometalinter_lint_package')
|
||||||
@@ -14,12 +19,12 @@ function! ale_linters#go#gometalinter#GetCommand(buffer) abort
|
|||||||
" be calculated to absolute paths in the Handler
|
" be calculated to absolute paths in the Handler
|
||||||
if l:lint_package
|
if l:lint_package
|
||||||
return ale#path#BufferCdString(a:buffer)
|
return ale#path#BufferCdString(a:buffer)
|
||||||
\ . '%e'
|
\ . ale#Escape(l:executable)
|
||||||
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
|
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return ale#path#BufferCdString(a:buffer)
|
return ale#path#BufferCdString(a:buffer)
|
||||||
\ . '%e'
|
\ . ale#Escape(l:executable)
|
||||||
\ . ' --include=' . ale#Escape(ale#util#EscapePCRE(l:filename))
|
\ . ' --include=' . ale#Escape(ale#util#EscapePCRE(l:filename))
|
||||||
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
|
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
|
||||||
endfunction
|
endfunction
|
||||||
@@ -50,7 +55,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('go', {
|
call ale#linter#Define('go', {
|
||||||
\ 'name': 'gometalinter',
|
\ 'name': 'gometalinter',
|
||||||
\ 'executable_callback': ale#VarFunc('go_gometalinter_executable'),
|
\ 'executable_callback': 'ale_linters#go#gometalinter#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#go#gometalinter#GetCommand',
|
\ 'command_callback': 'ale_linters#go#gometalinter#GetCommand',
|
||||||
\ 'callback': 'ale_linters#go#gometalinter#Handler',
|
\ 'callback': 'ale_linters#go#gometalinter#Handler',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
|
|||||||
@@ -3,9 +3,10 @@
|
|||||||
|
|
||||||
function! ale_linters#go#gotype#GetCommand(buffer) abort
|
function! ale_linters#go#gotype#GetCommand(buffer) abort
|
||||||
if expand('#' . a:buffer . ':p') =~# '_test\.go$'
|
if expand('#' . a:buffer . ':p') =~# '_test\.go$'
|
||||||
return ''
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
return ale#path#BufferCdString(a:buffer) . ' gotype .'
|
return ale#path#BufferCdString(a:buffer) . ' gotype .'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,7 @@ function! ale_linters#go#govet#GetCommand(buffer) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('go', {
|
call ale#linter#Define('go', {
|
||||||
\ 'name': 'govet',
|
\ 'name': 'go vet',
|
||||||
\ 'aliases': ['go vet'],
|
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable': 'go',
|
\ 'executable': 'go',
|
||||||
\ 'command_callback': 'ale_linters#go#govet#GetCommand',
|
\ 'command_callback': 'ale_linters#go#govet#GetCommand',
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
" Author: Fred Emmott <fe@fb.com>
|
|
||||||
" Description: Hack support via `hack lsp`
|
|
||||||
|
|
||||||
call ale#Set('hack_hack_executable', 'hh_client')
|
|
||||||
|
|
||||||
function! ale_linters#hack#hack#GetProjectRoot(buffer) abort
|
|
||||||
let l:hhconfig = ale#path#FindNearestFile(a:buffer, '.hhconfig')
|
|
||||||
|
|
||||||
return !empty(l:hhconfig) ? fnamemodify(l:hhconfig, ':h') : ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#hack#hack#GetExecutable(buffer) abort
|
|
||||||
return ale#Var(a:buffer, 'hack_hack_executable')
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('hack', {
|
|
||||||
\ 'name': 'hack',
|
|
||||||
\ 'lsp': 'stdio',
|
|
||||||
\ 'executable_callback': 'ale_linters#hack#hack#GetExecutable',
|
|
||||||
\ 'command': '%e lsp --from vim-ale',
|
|
||||||
\ 'project_root_callback': 'ale_linters#hack#hack#GetProjectRoot',
|
|
||||||
\})
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
" Author: Fred Emmott <fe@fb.com>
|
|
||||||
" Description: Hack support via `hhast lsp`
|
|
||||||
|
|
||||||
call ale#Set('hack_hhast_executable', 'vendor/bin/hhast-lint')
|
|
||||||
|
|
||||||
function! ale_linters#hack#hhast#GetProjectRoot(buffer) abort
|
|
||||||
" Find the hack root, then figure out if it's also an HHAST root.
|
|
||||||
" Don't try to use lint configurations from vendor/foo/bar/hhast-lint.json
|
|
||||||
let l:hhconfig = ale#path#FindNearestFile(a:buffer, '.hhconfig')
|
|
||||||
|
|
||||||
if empty(l:hhconfig)
|
|
||||||
return ''
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:root = fnamemodify(l:hhconfig, ':h')
|
|
||||||
let l:hhast_config = findfile('hhast-lint.json', l:root)
|
|
||||||
|
|
||||||
return !empty(l:hhast_config) ? l:root : ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#hack#hhast#GetExecutable(buffer) abort
|
|
||||||
let l:root = ale_linters#hack#hhast#GetProjectRoot(a:buffer)
|
|
||||||
let l:relative = ale#Var(a:buffer, 'hack_hhast_executable')
|
|
||||||
let l:absolute = findfile(l:relative, l:root)
|
|
||||||
|
|
||||||
return !empty(l:absolute) ? l:absolute : ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#hack#hhast#GetInitializationOptions(buffer) abort
|
|
||||||
return {'lintMode': 'open-files'}
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('hack', {
|
|
||||||
\ 'name': 'hhast',
|
|
||||||
\ 'lsp': 'stdio',
|
|
||||||
\ 'executable_callback': 'ale_linters#hack#hhast#GetExecutable',
|
|
||||||
\ 'command': '%e --mode lsp --from vim-ale',
|
|
||||||
\ 'project_root_callback': 'ale_linters#hack#hhast#GetProjectRoot',
|
|
||||||
\ 'initialization_options_callback': 'ale_linters#hack#hhast#GetInitializationOptions',
|
|
||||||
\})
|
|
||||||
@@ -4,6 +4,17 @@
|
|||||||
call ale#Set('handlebars_embertemplatelint_executable', 'ember-template-lint')
|
call ale#Set('handlebars_embertemplatelint_executable', 'ember-template-lint')
|
||||||
call ale#Set('handlebars_embertemplatelint_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('handlebars_embertemplatelint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#handlebars#embertemplatelint#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'handlebars_embertemplatelint', [
|
||||||
|
\ 'node_modules/.bin/ember-template-lint',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#handlebars#embertemplatelint#GetCommand(buffer) abort
|
||||||
|
return ale_linters#handlebars#embertemplatelint#GetExecutable(a:buffer)
|
||||||
|
\ . ' --json %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#handlebars#embertemplatelint#Handle(buffer, lines) abort
|
function! ale_linters#handlebars#embertemplatelint#Handle(buffer, lines) abort
|
||||||
let l:output = []
|
let l:output = []
|
||||||
let l:json = ale#util#FuzzyJSONDecode(a:lines, {})
|
let l:json = ale#util#FuzzyJSONDecode(a:lines, {})
|
||||||
@@ -31,9 +42,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('handlebars', {
|
call ale#linter#Define('handlebars', {
|
||||||
\ 'name': 'ember-template-lint',
|
\ 'name': 'ember-template-lint',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('handlebars_embertemplatelint', [
|
\ 'executable_callback': 'ale_linters#handlebars#embertemplatelint#GetExecutable',
|
||||||
\ 'node_modules/.bin/ember-template-lint',
|
\ 'command_callback': 'ale_linters#handlebars#embertemplatelint#GetCommand',
|
||||||
\ ]),
|
|
||||||
\ 'command': '%e --json %t',
|
|
||||||
\ 'callback': 'ale_linters#handlebars#embertemplatelint#Handle',
|
\ 'callback': 'ale_linters#handlebars#embertemplatelint#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
" Author: Eric Wolf <ericwolf42@gmail.com>
|
|
||||||
" Description: ghc for Haskell files called with cabal exec
|
|
||||||
|
|
||||||
call ale#Set('haskell_cabal_ghc_options', '-fno-code -v0')
|
|
||||||
|
|
||||||
function! ale_linters#haskell#cabal_ghc#GetCommand(buffer) abort
|
|
||||||
return 'cabal exec -- ghc '
|
|
||||||
\ . ale#Var(a:buffer, 'haskell_cabal_ghc_options')
|
|
||||||
\ . ' %t'
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('haskell', {
|
|
||||||
\ 'name': 'cabal_ghc',
|
|
||||||
\ 'aliases': ['cabal-ghc'],
|
|
||||||
\ 'output_stream': 'stderr',
|
|
||||||
\ 'executable': 'cabal',
|
|
||||||
\ 'command_callback': 'ale_linters#haskell#cabal_ghc#GetCommand',
|
|
||||||
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
|
||||||
\})
|
|
||||||
@@ -2,16 +2,14 @@
|
|||||||
" Description: ghc-mod for Haskell files
|
" Description: ghc-mod for Haskell files
|
||||||
|
|
||||||
call ale#linter#Define('haskell', {
|
call ale#linter#Define('haskell', {
|
||||||
\ 'name': 'ghc_mod',
|
\ 'name': 'ghc-mod',
|
||||||
\ 'aliases': ['ghc-mod'],
|
|
||||||
\ 'executable': 'ghc-mod',
|
\ 'executable': 'ghc-mod',
|
||||||
\ 'command': 'ghc-mod --map-file %s=%t check %s',
|
\ 'command': 'ghc-mod --map-file %s=%t check %s',
|
||||||
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
||||||
\})
|
\})
|
||||||
|
|
||||||
call ale#linter#Define('haskell', {
|
call ale#linter#Define('haskell', {
|
||||||
\ 'name': 'stack_ghc_mod',
|
\ 'name': 'stack-ghc-mod',
|
||||||
\ 'aliases': ['stack-ghc-mod'],
|
|
||||||
\ 'executable': 'stack',
|
\ 'executable': 'stack',
|
||||||
\ 'command': 'stack exec ghc-mod -- --map-file %s=%t check %s',
|
\ 'command': 'stack exec ghc-mod -- --map-file %s=%t check %s',
|
||||||
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
||||||
|
|||||||
@@ -4,14 +4,19 @@
|
|||||||
call ale#Set('haskell_hdevtools_executable', 'hdevtools')
|
call ale#Set('haskell_hdevtools_executable', 'hdevtools')
|
||||||
call ale#Set('haskell_hdevtools_options', get(g:, 'hdevtools_options', '-g -Wall'))
|
call ale#Set('haskell_hdevtools_options', get(g:, 'hdevtools_options', '-g -Wall'))
|
||||||
|
|
||||||
|
function! ale_linters#haskell#hdevtools#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'haskell_hdevtools_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#haskell#hdevtools#GetCommand(buffer) abort
|
function! ale_linters#haskell#hdevtools#GetCommand(buffer) abort
|
||||||
return '%e check' . ale#Pad(ale#Var(a:buffer, 'haskell_hdevtools_options'))
|
return ale#Escape(ale_linters#haskell#hdevtools#GetExecutable(a:buffer))
|
||||||
\ . ' -p %s %t'
|
\ . ' check ' . ale#Var(a:buffer, 'haskell_hdevtools_options')
|
||||||
|
\ . ' -p %s %t'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('haskell', {
|
call ale#linter#Define('haskell', {
|
||||||
\ 'name': 'hdevtools',
|
\ 'name': 'hdevtools',
|
||||||
\ 'executable_callback': ale#VarFunc('haskell_hdevtools_executable'),
|
\ 'executable_callback': 'ale_linters#haskell#hdevtools#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#haskell#hdevtools#GetCommand',
|
\ 'command_callback': 'ale_linters#haskell#hdevtools#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
" Author: Luxed <devildead13@gmail.com>
|
|
||||||
" Description: A language server for Haskell
|
|
||||||
|
|
||||||
call ale#Set('haskell_hie_executable', 'hie')
|
|
||||||
|
|
||||||
function! ale_linters#haskell#hie#GetExecutable(buffer) abort
|
|
||||||
return ale#Var(a:buffer, 'haskell_hie_executable')
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#haskell#hie#GetProjectRoot(buffer) abort
|
|
||||||
" Search for the stack file first
|
|
||||||
let l:project_file = ale#path#FindNearestFile(a:buffer, 'stack.yaml')
|
|
||||||
|
|
||||||
" If it's empty, search for the cabal file
|
|
||||||
if empty(l:project_file)
|
|
||||||
let l:cabal_file = fnamemodify(bufname(a:buffer), ':p:h')
|
|
||||||
let l:paths = ''
|
|
||||||
|
|
||||||
while empty(matchstr(l:cabal_file, '^\(\/\|\(\w:\\\)\)$'))
|
|
||||||
let l:cabal_file = fnamemodify(l:cabal_file, ':h')
|
|
||||||
let l:paths = l:paths . l:cabal_file . ','
|
|
||||||
endwhile
|
|
||||||
|
|
||||||
let l:project_file = globpath(l:paths, '*.cabal')
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Either extract the project directory or take the current working
|
|
||||||
" directory
|
|
||||||
if !empty(l:project_file)
|
|
||||||
let l:project_file = fnamemodify(l:project_file, ':h')
|
|
||||||
else
|
|
||||||
let l:project_file = expand('#' . a:buffer . ':p:h')
|
|
||||||
endif
|
|
||||||
|
|
||||||
return l:project_file
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('haskell', {
|
|
||||||
\ 'name': 'hie',
|
|
||||||
\ 'lsp': 'stdio',
|
|
||||||
\ 'command': '%e --lsp',
|
|
||||||
\ 'executable_callback': 'ale_linters#haskell#hie#GetExecutable',
|
|
||||||
\ 'project_root_callback': 'ale_linters#haskell#hie#GetProjectRoot',
|
|
||||||
\})
|
|
||||||
@@ -13,8 +13,7 @@ function! ale_linters#haskell#stack_build#GetCommand(buffer) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('haskell', {
|
call ale#linter#Define('haskell', {
|
||||||
\ 'name': 'stack_build',
|
\ 'name': 'stack-build',
|
||||||
\ 'aliases': ['stack-build'],
|
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable': 'stack',
|
\ 'executable': 'stack',
|
||||||
\ 'command_callback': 'ale_linters#haskell#stack_build#GetCommand',
|
\ 'command_callback': 'ale_linters#haskell#stack_build#GetCommand',
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
" Description: ghc for Haskell files, using Stack
|
" Description: ghc for Haskell files, using Stack
|
||||||
|
|
||||||
call ale#linter#Define('haskell', {
|
call ale#linter#Define('haskell', {
|
||||||
\ 'name': 'stack_ghc',
|
\ 'name': 'stack-ghc',
|
||||||
\ 'aliases': ['stack-ghc'],
|
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable': 'stack',
|
\ 'executable': 'stack',
|
||||||
\ 'command': 'stack ghc -- -fno-code -v0 %t',
|
\ 'command': 'stack ghc -- -fno-code -v0 %t',
|
||||||
|
|||||||
9
ale_linters/help/write-good.vim
Normal file
9
ale_linters/help/write-good.vim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
||||||
|
" Description: write-good for vim Help files
|
||||||
|
|
||||||
|
call ale#linter#Define('help', {
|
||||||
|
\ 'name': 'write-good',
|
||||||
|
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#writegood#Handle',
|
||||||
|
\})
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
|
||||||
" Description: write-good for vim Help files
|
|
||||||
|
|
||||||
call ale#handlers#writegood#DefineLinter('help')
|
|
||||||
@@ -5,6 +5,12 @@ call ale#Set('html_htmlhint_options', '')
|
|||||||
call ale#Set('html_htmlhint_executable', 'htmlhint')
|
call ale#Set('html_htmlhint_executable', 'htmlhint')
|
||||||
call ale#Set('html_htmlhint_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('html_htmlhint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#html#htmlhint#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'html_htmlhint', [
|
||||||
|
\ 'node_modules/.bin/htmlhint',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#html#htmlhint#GetCommand(buffer) abort
|
function! ale_linters#html#htmlhint#GetCommand(buffer) abort
|
||||||
let l:options = ale#Var(a:buffer, 'html_htmlhint_options')
|
let l:options = ale#Var(a:buffer, 'html_htmlhint_options')
|
||||||
let l:config = l:options !~# '--config'
|
let l:config = l:options !~# '--config'
|
||||||
@@ -19,14 +25,14 @@ function! ale_linters#html#htmlhint#GetCommand(buffer) abort
|
|||||||
let l:options = substitute(l:options, '--format=unix', '', '')
|
let l:options = substitute(l:options, '--format=unix', '', '')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return '%e' . ale#Pad(l:options) . ' --format=unix %t'
|
return ale#Escape(ale_linters#html#htmlhint#GetExecutable(a:buffer))
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' --format=unix %t'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('html', {
|
call ale#linter#Define('html', {
|
||||||
\ 'name': 'htmlhint',
|
\ 'name': 'htmlhint',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('html_htmlhint', [
|
\ 'executable_callback': 'ale_linters#html#htmlhint#GetExecutable',
|
||||||
\ 'node_modules/.bin/htmlhint',
|
|
||||||
\ ]),
|
|
||||||
\ 'command_callback': 'ale_linters#html#htmlhint#GetCommand',
|
\ 'command_callback': 'ale_linters#html#htmlhint#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#unix#HandleAsError',
|
\ 'callback': 'ale#handlers#unix#HandleAsError',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,10 +1,21 @@
|
|||||||
" Author: KabbAmine <amine.kabb@gmail.com>
|
" Author: KabbAmine <amine.kabb@gmail.com>
|
||||||
" Description: This file adds support for checking HTML code with tidy.
|
" Description: This file adds support for checking HTML code with tidy.
|
||||||
|
|
||||||
|
" CLI options
|
||||||
let g:ale_html_tidy_executable = get(g:, 'ale_html_tidy_executable', 'tidy')
|
let g:ale_html_tidy_executable = get(g:, 'ale_html_tidy_executable', 'tidy')
|
||||||
let g:ale_html_tidy_options = get(g:, 'ale_html_tidy_options', '-q -e -language en')
|
" remove in 2.0
|
||||||
|
" Look for the old _args variable first.
|
||||||
|
let s:deprecation_warning_echoed = 0
|
||||||
|
let s:default_options = get(g:, 'ale_html_tidy_args', '-q -e -language en')
|
||||||
|
let g:ale_html_tidy_options = get(g:, 'ale_html_tidy_options', s:default_options)
|
||||||
|
|
||||||
function! ale_linters#html#tidy#GetCommand(buffer) abort
|
function! ale_linters#html#tidy#GetCommand(buffer) abort
|
||||||
|
" remove in 2.0
|
||||||
|
if exists('g:ale_html_tidy_args') && !s:deprecation_warning_echoed
|
||||||
|
execute 'echom ''Rename your g:ale_html_tidy_args setting to g:ale_html_tidy_options instead. Support for this will removed in ALE 2.0.'''
|
||||||
|
let s:deprecation_warning_echoed = 1
|
||||||
|
endif
|
||||||
|
|
||||||
" Specify file encoding in options
|
" Specify file encoding in options
|
||||||
" (Idea taken from https://github.com/scrooloose/syntastic/blob/master/syntax_checkers/html/tidy.vim)
|
" (Idea taken from https://github.com/scrooloose/syntastic/blob/master/syntax_checkers/html/tidy.vim)
|
||||||
let l:file_encoding = get({
|
let l:file_encoding = get({
|
||||||
@@ -37,6 +48,10 @@ function! ale_linters#html#tidy#GetCommand(buffer) abort
|
|||||||
\)
|
\)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#html#tidy#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'html_tidy_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#html#tidy#Handle(buffer, lines) abort
|
function! ale_linters#html#tidy#Handle(buffer, lines) abort
|
||||||
" Matches patterns lines like the following:
|
" Matches patterns lines like the following:
|
||||||
" line 7 column 5 - Warning: missing </title> before </head>
|
" line 7 column 5 - Warning: missing </title> before </head>
|
||||||
@@ -63,7 +78,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('html', {
|
call ale#linter#Define('html', {
|
||||||
\ 'name': 'tidy',
|
\ 'name': 'tidy',
|
||||||
\ 'executable_callback': ale#VarFunc('html_tidy_executable'),
|
\ 'executable_callback': 'ale_linters#html#tidy#GetExecutable',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'command_callback': 'ale_linters#html#tidy#GetCommand',
|
\ 'command_callback': 'ale_linters#html#tidy#GetCommand',
|
||||||
\ 'callback': 'ale_linters#html#tidy#Handle',
|
\ 'callback': 'ale_linters#html#tidy#Handle',
|
||||||
|
|||||||
9
ale_linters/html/write-good.vim
Normal file
9
ale_linters/html/write-good.vim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
||||||
|
" Description: write-good for nroff files
|
||||||
|
|
||||||
|
call ale#linter#Define('html', {
|
||||||
|
\ 'name': 'write-good',
|
||||||
|
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#writegood#Handle',
|
||||||
|
\})
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
|
||||||
" Description: write-good for html files
|
|
||||||
|
|
||||||
call ale#handlers#writegood#DefineLinter('html')
|
|
||||||
@@ -4,10 +4,16 @@
|
|||||||
call ale#Set('idris_idris_executable', 'idris')
|
call ale#Set('idris_idris_executable', 'idris')
|
||||||
call ale#Set('idris_idris_options', '--total --warnpartial --warnreach --warnipkg')
|
call ale#Set('idris_idris_options', '--total --warnpartial --warnreach --warnipkg')
|
||||||
|
|
||||||
|
function! ale_linters#idris#idris#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'idris_idris_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#idris#idris#GetCommand(buffer) abort
|
function! ale_linters#idris#idris#GetCommand(buffer) abort
|
||||||
let l:options = ale#Var(a:buffer, 'idris_idris_options')
|
let l:options = ale#Var(a:buffer, 'idris_idris_options')
|
||||||
|
|
||||||
return '%e' . ale#Pad(l:options) . ' --check %s'
|
return ale#Escape(ale_linters#idris#idris#GetExecutable(a:buffer))
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' --check %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#idris#idris#Handle(buffer, lines) abort
|
function! ale_linters#idris#idris#Handle(buffer, lines) abort
|
||||||
@@ -74,7 +80,8 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('idris', {
|
call ale#linter#Define('idris', {
|
||||||
\ 'name': 'idris',
|
\ 'name': 'idris',
|
||||||
\ 'executable_callback': ale#VarFunc('idris_idris_executable'),
|
\ 'executable_callback': 'ale_linters#idris#idris#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#idris#idris#GetCommand',
|
\ 'command_callback': 'ale_linters#idris#idris#GetCommand',
|
||||||
\ 'callback': 'ale_linters#idris#idris#Handle',
|
\ 'callback': 'ale_linters#idris#idris#Handle',
|
||||||
\})
|
\})
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ function! s:BuildClassPathOption(buffer, import_paths) abort
|
|||||||
\ : ''
|
\ : ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#java#javac#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'java_javac_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#java#javac#GetCommand(buffer, import_paths) abort
|
function! ale_linters#java#javac#GetCommand(buffer, import_paths) abort
|
||||||
let l:cp_option = s:BuildClassPathOption(a:buffer, a:import_paths)
|
let l:cp_option = s:BuildClassPathOption(a:buffer, a:import_paths)
|
||||||
let l:sp_option = ''
|
let l:sp_option = ''
|
||||||
@@ -73,15 +77,17 @@ function! ale_linters#java#javac#GetCommand(buffer, import_paths) abort
|
|||||||
|
|
||||||
" Create .class files in a temporary directory, which we will delete later.
|
" Create .class files in a temporary directory, which we will delete later.
|
||||||
let l:class_file_directory = ale#engine#CreateDirectory(a:buffer)
|
let l:class_file_directory = ale#engine#CreateDirectory(a:buffer)
|
||||||
|
let l:executable = ale_linters#java#javac#GetExecutable(a:buffer)
|
||||||
|
|
||||||
" Always run javac from the directory the file is in, so we can resolve
|
" Always run javac from the directory the file is in, so we can resolve
|
||||||
" relative paths correctly.
|
" relative paths correctly.
|
||||||
return ale#path#BufferCdString(a:buffer)
|
return ale#path#BufferCdString(a:buffer)
|
||||||
\ . '%e -Xlint'
|
\ . ale#Escape(l:executable)
|
||||||
\ . ale#Pad(l:cp_option)
|
\ . ' -Xlint'
|
||||||
\ . ale#Pad(l:sp_option)
|
\ . ' ' . l:cp_option
|
||||||
|
\ . ' ' . l:sp_option
|
||||||
\ . ' -d ' . ale#Escape(l:class_file_directory)
|
\ . ' -d ' . ale#Escape(l:class_file_directory)
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'java_javac_options'))
|
\ . ' ' . ale#Var(a:buffer, 'java_javac_options')
|
||||||
\ . ' %t'
|
\ . ' %t'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -120,7 +126,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('java', {
|
call ale#linter#Define('java', {
|
||||||
\ 'name': 'javac',
|
\ 'name': 'javac',
|
||||||
\ 'executable_callback': ale#VarFunc('java_javac_executable'),
|
\ 'executable_callback': 'ale_linters#java#javac#GetExecutable',
|
||||||
\ 'command_chain': [
|
\ 'command_chain': [
|
||||||
\ {'callback': 'ale_linters#java#javac#GetImportPaths', 'output_stream': 'stdout'},
|
\ {'callback': 'ale_linters#java#javac#GetImportPaths', 'output_stream': 'stdout'},
|
||||||
\ {'callback': 'ale_linters#java#javac#GetCommand', 'output_stream': 'stderr'},
|
\ {'callback': 'ale_linters#java#javac#GetCommand', 'output_stream': 'stderr'},
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
" Author: t_t <jamestthompson3@gmail.com>
|
|
||||||
" Description: Integrate ALE with flow-language-server.
|
|
||||||
|
|
||||||
call ale#Set('javascript_flow_ls_executable', 'flow')
|
|
||||||
call ale#Set('javascript_flow_ls_use_global',
|
|
||||||
\ get(g:, 'ale_use_global_executables', 0)
|
|
||||||
\)
|
|
||||||
|
|
||||||
function! ale_linters#javascript#flow_ls#FindProjectRoot(buffer) abort
|
|
||||||
let l:flow_config = ale#path#FindNearestFile(a:buffer, '.flowconfig')
|
|
||||||
|
|
||||||
if !empty(l:flow_config)
|
|
||||||
return fnamemodify(l:flow_config, ':h')
|
|
||||||
endif
|
|
||||||
|
|
||||||
return ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('javascript', {
|
|
||||||
\ 'name': 'flow-language-server',
|
|
||||||
\ 'lsp': 'stdio',
|
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('javascript_flow_ls', [
|
|
||||||
\ 'node_modules/.bin/flow',
|
|
||||||
\ ]),
|
|
||||||
\ 'command': '%e lsp --from ale-lsp',
|
|
||||||
\ 'project_root_callback': 'ale_linters#javascript#flow_ls#FindProjectRoot',
|
|
||||||
\ 'language': 'javascript',
|
|
||||||
\})
|
|
||||||
@@ -4,6 +4,12 @@
|
|||||||
call ale#Set('javascript_jscs_executable', 'jscs')
|
call ale#Set('javascript_jscs_executable', 'jscs')
|
||||||
call ale#Set('javascript_jscs_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('javascript_jscs_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#javascript#jscs#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'javascript_jscs', [
|
||||||
|
\ 'node_modules/.bin/jscs',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#javascript#jscs#GetCommand(buffer) abort
|
function! ale_linters#javascript#jscs#GetCommand(buffer) abort
|
||||||
" Search for a local JShint config locaation, and default to a global one.
|
" Search for a local JShint config locaation, and default to a global one.
|
||||||
let l:jscs_config = ale#path#ResolveLocalPath(
|
let l:jscs_config = ale#path#ResolveLocalPath(
|
||||||
@@ -12,7 +18,8 @@ function! ale_linters#javascript#jscs#GetCommand(buffer) abort
|
|||||||
\ get(g:, 'ale_jscs_config_loc', '')
|
\ get(g:, 'ale_jscs_config_loc', '')
|
||||||
\)
|
\)
|
||||||
|
|
||||||
let l:command = '%e --reporter inline --no-colors'
|
let l:command = ale#Escape(ale_linters#javascript#jscs#GetExecutable(a:buffer))
|
||||||
|
let l:command .= ' --reporter inline --no-colors'
|
||||||
|
|
||||||
if !empty(l:jscs_config)
|
if !empty(l:jscs_config)
|
||||||
let l:command .= ' --config ' . ale#Escape(l:jscs_config)
|
let l:command .= ' --config ' . ale#Escape(l:jscs_config)
|
||||||
@@ -53,9 +60,8 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('javascript', {
|
call ale#linter#Define('javascript', {
|
||||||
\ 'name': 'jscs',
|
\ 'name': 'jscs',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('javascript_jscs', [
|
\ 'executable_callback': 'ale_linters#javascript#jscs#GetExecutable',
|
||||||
\ 'node_modules/.bin/jscs',
|
|
||||||
\ ]),
|
|
||||||
\ 'command_callback': 'ale_linters#javascript#jscs#GetCommand',
|
\ 'command_callback': 'ale_linters#javascript#jscs#GetCommand',
|
||||||
\ 'callback': 'ale_linters#javascript#jscs#Handle',
|
\ 'callback': 'ale_linters#javascript#jscs#Handle',
|
||||||
\})
|
\})
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
call ale#Set('javascript_jshint_executable', 'jshint')
|
call ale#Set('javascript_jshint_executable', 'jshint')
|
||||||
call ale#Set('javascript_jshint_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('javascript_jshint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#javascript#jshint#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'javascript_jshint', [
|
||||||
|
\ 'node_modules/.bin/jshint',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#javascript#jshint#GetCommand(buffer) abort
|
function! ale_linters#javascript#jshint#GetCommand(buffer) abort
|
||||||
" Search for a local JShint config locaation, and default to a global one.
|
" Search for a local JShint config locaation, and default to a global one.
|
||||||
let l:jshint_config = ale#path#ResolveLocalPath(
|
let l:jshint_config = ale#path#ResolveLocalPath(
|
||||||
@@ -12,7 +18,8 @@ function! ale_linters#javascript#jshint#GetCommand(buffer) abort
|
|||||||
\ get(g:, 'ale_jshint_config_loc', '')
|
\ get(g:, 'ale_jshint_config_loc', '')
|
||||||
\)
|
\)
|
||||||
|
|
||||||
let l:command = '%e --reporter unix --extract auto'
|
let l:command = ale#Escape(ale_linters#javascript#jshint#GetExecutable(a:buffer))
|
||||||
|
let l:command .= ' --reporter unix --extract auto'
|
||||||
|
|
||||||
if !empty(l:jshint_config)
|
if !empty(l:jshint_config)
|
||||||
let l:command .= ' --config ' . ale#Escape(l:jshint_config)
|
let l:command .= ' --config ' . ale#Escape(l:jshint_config)
|
||||||
@@ -25,9 +32,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('javascript', {
|
call ale#linter#Define('javascript', {
|
||||||
\ 'name': 'jshint',
|
\ 'name': 'jshint',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('javascript_jshint', [
|
\ 'executable_callback': 'ale_linters#javascript#jshint#GetExecutable',
|
||||||
\ 'node_modules/.bin/jshint',
|
|
||||||
\ ]),
|
|
||||||
\ 'command_callback': 'ale_linters#javascript#jshint#GetCommand',
|
\ 'command_callback': 'ale_linters#javascript#jshint#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#unix#HandleAsError',
|
\ 'callback': 'ale#handlers#unix#HandleAsError',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
" Author: Chaucerbao, w0rp <devw0rp@gmail.com>
|
|
||||||
" Description: tsserver integration for ALE
|
|
||||||
|
|
||||||
call ale#Set('javascript_tsserver_executable', 'tsserver')
|
|
||||||
call ale#Set('javascript_tsserver_config_path', '')
|
|
||||||
call ale#Set('javascript_tsserver_use_global', get(g:, 'ale_use_global_executables', 0))
|
|
||||||
|
|
||||||
call ale#linter#Define('javascript', {
|
|
||||||
\ 'name': 'tsserver',
|
|
||||||
\ 'lsp': 'tsserver',
|
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('javascript_tsserver', [
|
|
||||||
\ 'node_modules/.bin/tsserver',
|
|
||||||
\ ]),
|
|
||||||
\ 'command': '%e',
|
|
||||||
\ 'project_root_callback': {-> ''},
|
|
||||||
\ 'language': '',
|
|
||||||
\})
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
" Author: MTDL9 <https://github.com/MTDL9>
|
|
||||||
" Description: Support for the Kotlin language server https://github.com/fwcd/KotlinLanguageServer
|
|
||||||
|
|
||||||
call ale#Set('kotlin_languageserver_executable', 'kotlin-language-server')
|
|
||||||
|
|
||||||
function! ale_linters#kotlin#languageserver#GetProjectRoot(buffer) abort
|
|
||||||
let l:gradle_root = ale#gradle#FindProjectRoot(a:buffer)
|
|
||||||
|
|
||||||
if !empty(l:gradle_root)
|
|
||||||
return l:gradle_root
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:maven_pom_file = ale#path#FindNearestFile(a:buffer, 'pom.xml')
|
|
||||||
|
|
||||||
if !empty(l:maven_pom_file)
|
|
||||||
return fnamemodify(l:maven_pom_file, ':h')
|
|
||||||
endif
|
|
||||||
|
|
||||||
return ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('kotlin', {
|
|
||||||
\ 'name': 'languageserver',
|
|
||||||
\ 'lsp': 'stdio',
|
|
||||||
\ 'executable_callback': ale#VarFunc('kotlin_languageserver_executable'),
|
|
||||||
\ 'command': '%e',
|
|
||||||
\ 'language': 'kotlin',
|
|
||||||
\ 'project_root_callback': 'ale_linters#kotlin#languageserver#GetProjectRoot',
|
|
||||||
\})
|
|
||||||
@@ -5,10 +5,21 @@ call ale#Set('less_lessc_executable', 'lessc')
|
|||||||
call ale#Set('less_lessc_options', '')
|
call ale#Set('less_lessc_options', '')
|
||||||
call ale#Set('less_lessc_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('less_lessc_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#less#lessc#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'less_lessc', [
|
||||||
|
\ 'node_modules/.bin/lessc',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#less#lessc#GetCommand(buffer) abort
|
function! ale_linters#less#lessc#GetCommand(buffer) abort
|
||||||
return '%e --no-color --lint'
|
let l:executable = ale_linters#less#lessc#GetExecutable(a:buffer)
|
||||||
\ . ' --include-path=' . ale#Escape(expand('#' . a:buffer . ':p:h'))
|
let l:dir = expand('#' . a:buffer . ':p:h')
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'less_lessc_options'))
|
let l:options = ale#Var(a:buffer, 'less_lessc_options')
|
||||||
|
|
||||||
|
return ale#Escape(l:executable)
|
||||||
|
\ . ' --no-color --lint'
|
||||||
|
\ . ' --include-path=' . ale#Escape(l:dir)
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
\ . ' -'
|
\ . ' -'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -38,9 +49,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('less', {
|
call ale#linter#Define('less', {
|
||||||
\ 'name': 'lessc',
|
\ 'name': 'lessc',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('less_lessc', [
|
\ 'executable_callback': 'ale_linters#less#lessc#GetExecutable',
|
||||||
\ 'node_modules/.bin/lessc',
|
|
||||||
\ ]),
|
|
||||||
\ 'command_callback': 'ale_linters#less#lessc#GetCommand',
|
\ 'command_callback': 'ale_linters#less#lessc#GetCommand',
|
||||||
\ 'callback': 'ale_linters#less#lessc#Handle',
|
\ 'callback': 'ale_linters#less#lessc#Handle',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
|
|||||||
@@ -4,17 +4,24 @@ call ale#Set('less_stylelint_executable', 'stylelint')
|
|||||||
call ale#Set('less_stylelint_options', '')
|
call ale#Set('less_stylelint_options', '')
|
||||||
call ale#Set('less_stylelint_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('less_stylelint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#less#stylelint#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'less_stylelint', [
|
||||||
|
\ 'node_modules/.bin/stylelint',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#less#stylelint#GetCommand(buffer) abort
|
function! ale_linters#less#stylelint#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#less#stylelint#GetExecutable(a:buffer)
|
||||||
let l:options = ale#Var(a:buffer, 'less_stylelint_options')
|
let l:options = ale#Var(a:buffer, 'less_stylelint_options')
|
||||||
|
|
||||||
return '%e' . ale#Pad(l:options) . ' --stdin-filename %s'
|
return ale#Escape(l:executable)
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' --stdin-filename %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('less', {
|
call ale#linter#Define('less', {
|
||||||
\ 'name': 'stylelint',
|
\ 'name': 'stylelint',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('less_stylelint', [
|
\ 'executable_callback': 'ale_linters#less#stylelint#GetExecutable',
|
||||||
\ 'node_modules/.bin/stylelint',
|
|
||||||
\ ]),
|
|
||||||
\ 'command_callback': 'ale_linters#less#stylelint#GetCommand',
|
\ 'command_callback': 'ale_linters#less#stylelint#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#css#HandleStyleLintFormat',
|
\ 'callback': 'ale#handlers#css#HandleStyleLintFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -3,11 +3,22 @@
|
|||||||
|
|
||||||
call ale#Set('llvm_llc_executable', 'llc')
|
call ale#Set('llvm_llc_executable', 'llc')
|
||||||
|
|
||||||
|
function! ale_linters#llvm#llc#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'llvm_llc_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#llvm#llc#GetCommand(buffer) abort
|
||||||
|
return ale#Escape(ale_linters#llvm#llc#GetExecutable(a:buffer))
|
||||||
|
\ . ' -filetype=null -o='
|
||||||
|
\ . ale#Escape(g:ale#util#nul_file)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#llvm#llc#HandleErrors(buffer, lines) abort
|
function! ale_linters#llvm#llc#HandleErrors(buffer, lines) abort
|
||||||
" Handle '{path}: {file}:{line}:{col}: error: {message}' format
|
" Handle '{path}: {file}:{line}:{col}: error: {message}' format
|
||||||
let l:pattern = '\v^[a-zA-Z]?:?[^:]+: [^:]+:(\d+):(\d+): (.+)$'
|
let l:pattern = '\v^[a-zA-Z]?:?[^:]+: [^:]+:(\d+):(\d+): (.+)$'
|
||||||
|
let l:matches = ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
|
||||||
return map(ale#util#GetMatches(a:lines, l:pattern), "{
|
return map(l:matches, "{
|
||||||
\ 'lnum': str2nr(v:val[1]),
|
\ 'lnum': str2nr(v:val[1]),
|
||||||
\ 'col': str2nr(v:val[2]),
|
\ 'col': str2nr(v:val[2]),
|
||||||
\ 'text': v:val[3],
|
\ 'text': v:val[3],
|
||||||
@@ -17,8 +28,8 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('llvm', {
|
call ale#linter#Define('llvm', {
|
||||||
\ 'name': 'llc',
|
\ 'name': 'llc',
|
||||||
\ 'executable_callback': ale#VarFunc('llvm_llc_executable'),
|
\ 'executable_callback': 'ale_linters#llvm#llc#GetExecutable',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'command_callback': {-> '%e -filetype=null -o=' . g:ale#util#nul_file},
|
\ 'command_callback': 'ale_linters#llvm#llc#GetCommand',
|
||||||
\ 'callback': 'ale_linters#llvm#llc#HandleErrors',
|
\ 'callback': 'ale_linters#llvm#llc#HandleErrors',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -3,6 +3,15 @@
|
|||||||
|
|
||||||
call ale#Set('lua_luac_executable', 'luac')
|
call ale#Set('lua_luac_executable', 'luac')
|
||||||
|
|
||||||
|
function! ale_linters#lua#luac#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'lua_luac_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#lua#luac#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#lua#luac#GetExecutable(a:buffer)
|
||||||
|
return ale#Escape(l:executable) . ' -p - '
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#lua#luac#Handle(buffer, lines) abort
|
function! ale_linters#lua#luac#Handle(buffer, lines) abort
|
||||||
" Matches patterns line the following:
|
" Matches patterns line the following:
|
||||||
"
|
"
|
||||||
@@ -24,8 +33,8 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('lua', {
|
call ale#linter#Define('lua', {
|
||||||
\ 'name': 'luac',
|
\ 'name': 'luac',
|
||||||
\ 'executable_callback': ale#VarFunc('lua_luac_executable'),
|
\ 'executable_callback': 'ale_linters#lua#luac#GetExecutable',
|
||||||
\ 'command': '%e -p -',
|
\ 'command_callback': 'ale_linters#lua#luac#GetCommand',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'callback': 'ale_linters#lua#luac#Handle',
|
\ 'callback': 'ale_linters#lua#luac#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,11 +1,19 @@
|
|||||||
" Author: Sol Bekic https://github.com/s-ol
|
" Author: Sol Bekic https://github.com/s-ol
|
||||||
" Description: luacheck linter for lua files
|
" Description: luacheck linter for lua files
|
||||||
|
|
||||||
call ale#Set('lua_luacheck_executable', 'luacheck')
|
let g:ale_lua_luacheck_executable =
|
||||||
call ale#Set('lua_luacheck_options', '')
|
\ get(g:, 'ale_lua_luacheck_executable', 'luacheck')
|
||||||
|
|
||||||
|
let g:ale_lua_luacheck_options =
|
||||||
|
\ get(g:, 'ale_lua_luacheck_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#lua#luacheck#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'lua_luacheck_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#lua#luacheck#GetCommand(buffer) abort
|
function! ale_linters#lua#luacheck#GetCommand(buffer) abort
|
||||||
return '%e' . ale#Pad(ale#Var(a:buffer, 'lua_luacheck_options'))
|
return ale#Escape(ale_linters#lua#luacheck#GetExecutable(a:buffer))
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'lua_luacheck_options')
|
||||||
\ . ' --formatter plain --codes --filename %s -'
|
\ . ' --formatter plain --codes --filename %s -'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -38,7 +46,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('lua', {
|
call ale#linter#Define('lua', {
|
||||||
\ 'name': 'luacheck',
|
\ 'name': 'luacheck',
|
||||||
\ 'executable_callback': ale#VarFunc('lua_luacheck_executable'),
|
\ 'executable_callback': 'ale_linters#lua#luacheck#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#lua#luacheck#GetCommand',
|
\ 'command_callback': 'ale_linters#lua#luacheck#GetCommand',
|
||||||
\ 'callback': 'ale_linters#lua#luacheck#Handle',
|
\ 'callback': 'ale_linters#lua#luacheck#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,15 +1,5 @@
|
|||||||
scriptencoding utf-8
|
|
||||||
" Author rhysd https://rhysd.github.io/, Dirk Roorda (dirkroorda), Adrián González Rus (@adrigzr)
|
" Author rhysd https://rhysd.github.io/, Dirk Roorda (dirkroorda), Adrián González Rus (@adrigzr)
|
||||||
" Description: remark-lint for Markdown files
|
" Description: remark-lint for Markdown files
|
||||||
call ale#Set('markdown_remark_lint_executable', 'remark')
|
|
||||||
call ale#Set('markdown_remark_lint_use_global', get(g:, 'ale_use_global_executables', 0))
|
|
||||||
call ale#Set('markdown_remark_lint_options', '')
|
|
||||||
|
|
||||||
function! ale_linters#markdown#remark_lint#GetCommand(buffer) abort
|
|
||||||
let l:options = ale#Var(a:buffer, 'markdown_remark_lint_options')
|
|
||||||
|
|
||||||
return '%e' . ale#Pad(l:options) . ' --no-stdout --no-color'
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#markdown#remark_lint#Handle(buffer, lines) abort
|
function! ale_linters#markdown#remark_lint#Handle(buffer, lines) abort
|
||||||
" matches: ' 1:4 warning Incorrect list-item indent: add 1 space list-item-indent remark-lint'
|
" matches: ' 1:4 warning Incorrect list-item indent: add 1 space list-item-indent remark-lint'
|
||||||
@@ -35,12 +25,10 @@ function! ale_linters#markdown#remark_lint#Handle(buffer, lines) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('markdown', {
|
call ale#linter#Define('markdown', {
|
||||||
\ 'name': 'remark_lint',
|
\ 'name': 'remark-lint',
|
||||||
\ 'aliases': ['remark-lint'],
|
\ 'executable': 'remark',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('markdown_remark_lint', [
|
\ 'command': 'remark --no-stdout --no-color %s',
|
||||||
\ 'node_modules/.bin/remark',
|
|
||||||
\ ]),
|
|
||||||
\ 'command_callback': 'ale_linters#markdown#remark_lint#GetCommand',
|
|
||||||
\ 'callback': 'ale_linters#markdown#remark_lint#Handle',
|
\ 'callback': 'ale_linters#markdown#remark_lint#Handle',
|
||||||
|
\ 'lint_file': 1,
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\})
|
\})
|
||||||
|
|||||||
9
ale_linters/markdown/write-good.vim
Normal file
9
ale_linters/markdown/write-good.vim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
||||||
|
" Description: write-good for Markdown files
|
||||||
|
|
||||||
|
call ale#linter#Define('markdown', {
|
||||||
|
\ 'name': 'write-good',
|
||||||
|
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#writegood#Handle',
|
||||||
|
\})
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
|
||||||
" Description: write-good for Markdown files
|
|
||||||
|
|
||||||
call ale#handlers#writegood#DefineLinter('markdown')
|
|
||||||
@@ -1,7 +1,18 @@
|
|||||||
" Author: awlayton <alex@layton.in>
|
" Author: awlayton <alex@layton.in>
|
||||||
" Description: mlint for MATLAB files
|
" Description: mlint for MATLAB files
|
||||||
|
|
||||||
call ale#Set('matlab_mlint_executable', 'mlint')
|
let g:ale_matlab_mlint_executable =
|
||||||
|
\ get(g:, 'ale_matlab_mlint_executable', 'mlint')
|
||||||
|
|
||||||
|
function! ale_linters#matlab#mlint#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'matlab_mlint_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#matlab#mlint#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#matlab#mlint#GetExecutable(a:buffer)
|
||||||
|
|
||||||
|
return l:executable . ' -id %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#matlab#mlint#Handle(buffer, lines) abort
|
function! ale_linters#matlab#mlint#Handle(buffer, lines) abort
|
||||||
" Matches patterns like the following:
|
" Matches patterns like the following:
|
||||||
@@ -37,8 +48,8 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('matlab', {
|
call ale#linter#Define('matlab', {
|
||||||
\ 'name': 'mlint',
|
\ 'name': 'mlint',
|
||||||
\ 'executable_callback': ale#VarFunc('matlab_mlint_executable'),
|
\ 'executable_callback': 'ale_linters#matlab#mlint#GetExecutable',
|
||||||
\ 'command': '%e -id %t',
|
\ 'command_callback': 'ale_linters#matlab#mlint#GetCommand',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'callback': 'ale_linters#matlab#mlint#Handle',
|
\ 'callback': 'ale_linters#matlab#mlint#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -4,11 +4,16 @@
|
|||||||
call ale#Set('mercury_mmc_executable', 'mmc')
|
call ale#Set('mercury_mmc_executable', 'mmc')
|
||||||
call ale#Set('mercury_mmc_options', '--make --output-compile-error-lines 100')
|
call ale#Set('mercury_mmc_options', '--make --output-compile-error-lines 100')
|
||||||
|
|
||||||
|
function! ale_linters#mercury#mmc#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'mercury_mmc_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#mercury#mmc#GetCommand(buffer) abort
|
function! ale_linters#mercury#mmc#GetCommand(buffer) abort
|
||||||
let l:module_name = expand('#' . a:buffer . ':t:r')
|
let l:module_name = expand('#' . a:buffer . ':t:r')
|
||||||
|
|
||||||
return ale#path#BufferCdString(a:buffer)
|
return ale#path#BufferCdString(a:buffer)
|
||||||
\ . '%e --errorcheck-only '
|
\ . ale_linters#mercury#mmc#GetExecutable(a:buffer)
|
||||||
|
\ . ' --errorcheck-only '
|
||||||
\ . ale#Var(a:buffer, 'mercury_mmc_options')
|
\ . ale#Var(a:buffer, 'mercury_mmc_options')
|
||||||
\ . ' ' . l:module_name
|
\ . ' ' . l:module_name
|
||||||
endfunction
|
endfunction
|
||||||
@@ -33,7 +38,7 @@ endfunction
|
|||||||
call ale#linter#Define('mercury', {
|
call ale#linter#Define('mercury', {
|
||||||
\ 'name': 'mmc',
|
\ 'name': 'mmc',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': ale#VarFunc('mercury_mmc_executable'),
|
\ 'executable_callback': 'ale_linters#mercury#mmc#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#mercury#mmc#GetCommand',
|
\ 'command_callback': 'ale_linters#mercury#mmc#GetCommand',
|
||||||
\ 'callback': 'ale_linters#mercury#mmc#Handle',
|
\ 'callback': 'ale_linters#mercury#mmc#Handle',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
|
|||||||
@@ -4,23 +4,32 @@
|
|||||||
call ale#Set('nasm_nasm_executable', 'nasm')
|
call ale#Set('nasm_nasm_executable', 'nasm')
|
||||||
call ale#Set('nasm_nasm_options', '')
|
call ale#Set('nasm_nasm_options', '')
|
||||||
|
|
||||||
function! ale_linters#nasm#nasm#GetCommand(buffer) abort
|
function! ale_linters#nasm#nasm#GetExecutable(buffer) abort
|
||||||
" Note that NASM requires a trailing slash for the -I option.
|
return ale#Var(a:buffer, 'nasm_nasm_executable')
|
||||||
let l:separator = has('win32') ? '\' : '/'
|
endfunction
|
||||||
let l:path = fnamemodify(bufname(a:buffer), ':p:h') . l:separator
|
|
||||||
let l:output_null = has('win32') ? 'NUL' : '/dev/null'
|
|
||||||
|
|
||||||
return '%e -X gnu -I ' . ale#Escape(l:path)
|
function! ale_linters#nasm#nasm#GetOptions(buffer) abort
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'nasm_nasm_options'))
|
return ale#Var(a:buffer, 'nasm_nasm_options')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#nasm#nasm#GetCommand(buffer) abort
|
||||||
|
" Note that NASM require a trailing slash to the -I option.
|
||||||
|
let l:executable = ale#Escape(ale_linters#nasm#nasm#GetExecutable(a:buffer))
|
||||||
|
let l:separator = has('win32') ? '\' : '/'
|
||||||
|
let l:path = ale#Escape(fnamemodify(bufname(a:buffer), ':p:h') . l:separator)
|
||||||
|
let l:options = ale_linters#nasm#nasm#GetOptions(a:buffer)
|
||||||
|
|
||||||
|
return l:executable
|
||||||
|
\ . ' -X gnu'
|
||||||
|
\ . ' -I ' . l:path
|
||||||
|
\ . ' ' . l:options
|
||||||
\ . ' %s'
|
\ . ' %s'
|
||||||
\ . ' -o ' . l:output_null
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#nasm#nasm#Handle(buffer, lines) abort
|
function! ale_linters#nasm#nasm#Handle(buffer, lines) abort
|
||||||
" Note that we treat 'fatal' as errors.
|
" Note that we treat 'fatal' as errors.
|
||||||
let l:pattern = '^.\+:\(\d\+\): \([^:]\+\): \(.\+\)$'
|
let l:pattern = '^.\+:\(\d\+\): \([^:]\+\): \(.\+\)$'
|
||||||
let l:output = []
|
let l:output = []
|
||||||
|
|
||||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
call add(l:output, {
|
call add(l:output, {
|
||||||
\ 'lnum': l:match[1] + 0,
|
\ 'lnum': l:match[1] + 0,
|
||||||
@@ -28,15 +37,14 @@ function! ale_linters#nasm#nasm#Handle(buffer, lines) abort
|
|||||||
\ 'text': l:match[3],
|
\ 'text': l:match[3],
|
||||||
\})
|
\})
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
return l:output
|
return l:output
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('nasm', {
|
call ale#linter#Define('nasm', {
|
||||||
\ 'name': 'nasm',
|
\ 'name': 'nasm',
|
||||||
|
\ 'executable': 'nasm',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
\ 'executable_callback': ale#VarFunc('nasm_nasm_executable'),
|
|
||||||
\ 'command_callback': 'ale_linters#nasm#nasm#GetCommand',
|
\ 'command_callback': 'ale_linters#nasm#nasm#GetCommand',
|
||||||
\ 'callback': 'ale_linters#nasm#nasm#Handle',
|
\ 'callback': 'ale_linters#nasm#nasm#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
9
ale_linters/nroff/write-good.vim
Normal file
9
ale_linters/nroff/write-good.vim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
||||||
|
" Description: write-good for nroff files
|
||||||
|
|
||||||
|
call ale#linter#Define('nroff', {
|
||||||
|
\ 'name': 'write-good',
|
||||||
|
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
|
||||||
|
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
|
||||||
|
\ 'callback': 'ale#handlers#writegood#Handle',
|
||||||
|
\})
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
|
||||||
" Description: write-good for nroff files
|
|
||||||
|
|
||||||
call ale#handlers#writegood#DefineLinter('nroff')
|
|
||||||
@@ -19,5 +19,5 @@ call ale#linter#Define('objc', {
|
|||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable': 'clang',
|
\ 'executable': 'clang',
|
||||||
\ 'command_callback': 'ale_linters#objc#clang#GetCommand',
|
\ 'command_callback': 'ale_linters#objc#clang#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -19,5 +19,5 @@ call ale#linter#Define('objcpp', {
|
|||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable': 'clang++',
|
\ 'executable': 'clang++',
|
||||||
\ 'command_callback': 'ale_linters#objcpp#clang#GetCommand',
|
\ 'command_callback': 'ale_linters#objcpp#clang#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -1,11 +1,20 @@
|
|||||||
" Author: Vincent Lequertier <https://github.com/SkySymbol>
|
" Author: Vincent Lequertier <https://github.com/SkySymbol>
|
||||||
" Description: This file adds support for checking perl syntax
|
" Description: This file adds support for checking perl syntax
|
||||||
|
|
||||||
call ale#Set('perl_perl_executable', 'perl')
|
let g:ale_perl_perl_executable =
|
||||||
call ale#Set('perl_perl_options', '-c -Mwarnings -Ilib')
|
\ get(g:, 'ale_perl_perl_executable', 'perl')
|
||||||
|
|
||||||
|
let g:ale_perl_perl_options =
|
||||||
|
\ get(g:, 'ale_perl_perl_options', '-c -Mwarnings -Ilib')
|
||||||
|
|
||||||
|
function! ale_linters#perl#perl#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'perl_perl_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#perl#perl#GetCommand(buffer) abort
|
function! ale_linters#perl#perl#GetCommand(buffer) abort
|
||||||
return '%e' . ale#Pad(ale#Var(a:buffer, 'perl_perl_options')) . ' %t'
|
return ale#Escape(ale_linters#perl#perl#GetExecutable(a:buffer))
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'perl_perl_options')
|
||||||
|
\ . ' %t'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let s:begin_failed_skip_pattern = '\v' . join([
|
let s:begin_failed_skip_pattern = '\v' . join([
|
||||||
@@ -14,10 +23,6 @@ let s:begin_failed_skip_pattern = '\v' . join([
|
|||||||
\], '|')
|
\], '|')
|
||||||
|
|
||||||
function! ale_linters#perl#perl#Handle(buffer, lines) abort
|
function! ale_linters#perl#perl#Handle(buffer, lines) abort
|
||||||
if empty(a:lines)
|
|
||||||
return []
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:pattern = '\(.\+\) at \(.\+\) line \(\d\+\)'
|
let l:pattern = '\(.\+\) at \(.\+\) line \(\d\+\)'
|
||||||
let l:output = []
|
let l:output = []
|
||||||
let l:basename = expand('#' . a:buffer . ':t')
|
let l:basename = expand('#' . a:buffer . ':t')
|
||||||
@@ -56,7 +61,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('perl', {
|
call ale#linter#Define('perl', {
|
||||||
\ 'name': 'perl',
|
\ 'name': 'perl',
|
||||||
\ 'executable_callback': ale#VarFunc('perl_perl_executable'),
|
\ 'executable_callback': 'ale_linters#perl#perl#GetExecutable',
|
||||||
\ 'output_stream': 'both',
|
\ 'output_stream': 'both',
|
||||||
\ 'command_callback': 'ale_linters#perl#perl#GetCommand',
|
\ 'command_callback': 'ale_linters#perl#perl#GetCommand',
|
||||||
\ 'callback': 'ale_linters#perl#perl#Handle',
|
\ 'callback': 'ale_linters#perl#perl#Handle',
|
||||||
|
|||||||
@@ -1,10 +1,21 @@
|
|||||||
" Author: Vincent Lequertier <https://github.com/SkySymbol>, Chris Weyl <cweyl@alumni.drew.edu>
|
" Author: Vincent Lequertier <https://github.com/SkySymbol>, Chris Weyl <cweyl@alumni.drew.edu>
|
||||||
" Description: This file adds support for checking perl with perl critic
|
" Description: This file adds support for checking perl with perl critic
|
||||||
|
|
||||||
call ale#Set('perl_perlcritic_executable', 'perlcritic')
|
let g:ale_perl_perlcritic_executable =
|
||||||
call ale#Set('perl_perlcritic_profile', '.perlcriticrc')
|
\ get(g:, 'ale_perl_perlcritic_executable', 'perlcritic')
|
||||||
call ale#Set('perl_perlcritic_options', '')
|
|
||||||
call ale#Set('perl_perlcritic_showrules', 0)
|
let g:ale_perl_perlcritic_profile =
|
||||||
|
\ get(g:, 'ale_perl_perlcritic_profile', '.perlcriticrc')
|
||||||
|
|
||||||
|
let g:ale_perl_perlcritic_options =
|
||||||
|
\ get(g:, 'ale_perl_perlcritic_options', '')
|
||||||
|
|
||||||
|
let g:ale_perl_perlcritic_showrules =
|
||||||
|
\ get(g:, 'ale_perl_perlcritic_showrules', 0)
|
||||||
|
|
||||||
|
function! ale_linters#perl#perlcritic#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'perl_perlcritic_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#perl#perlcritic#GetProfile(buffer) abort
|
function! ale_linters#perl#perlcritic#GetProfile(buffer) abort
|
||||||
" first see if we've been overridden
|
" first see if we've been overridden
|
||||||
@@ -28,11 +39,11 @@ function! ale_linters#perl#perlcritic#GetCommand(buffer) abort
|
|||||||
let l:profile = ale_linters#perl#perlcritic#GetProfile(a:buffer)
|
let l:profile = ale_linters#perl#perlcritic#GetProfile(a:buffer)
|
||||||
let l:options = ale#Var(a:buffer, 'perl_perlcritic_options')
|
let l:options = ale#Var(a:buffer, 'perl_perlcritic_options')
|
||||||
|
|
||||||
return '%e'
|
return ale#Escape(ale_linters#perl#perlcritic#GetExecutable(a:buffer))
|
||||||
\ . ' --verbose ' . ale#Escape(l:critic_verbosity)
|
\ . ' --verbose ' . ale#Escape(l:critic_verbosity)
|
||||||
\ . ' --nocolor'
|
\ . ' --nocolor'
|
||||||
\ . (!empty(l:profile) ? ' --profile ' . ale#Escape(l:profile) : '')
|
\ . (!empty(l:profile) ? ' --profile ' . ale#Escape(l:profile) : '')
|
||||||
\ . ale#Pad(l:options)
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
@@ -55,7 +66,7 @@ endfunction
|
|||||||
call ale#linter#Define('perl', {
|
call ale#linter#Define('perl', {
|
||||||
\ 'name': 'perlcritic',
|
\ 'name': 'perlcritic',
|
||||||
\ 'output_stream': 'stdout',
|
\ 'output_stream': 'stdout',
|
||||||
\ 'executable_callback': ale#VarFunc('perl_perlcritic_executable'),
|
\ 'executable_callback': 'ale_linters#perl#perlcritic#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#perl#perlcritic#GetCommand',
|
\ 'command_callback': 'ale_linters#perl#perlcritic#GetCommand',
|
||||||
\ 'callback': 'ale_linters#perl#perlcritic#Handle',
|
\ 'callback': 'ale_linters#perl#perlcritic#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
28
ale_linters/php/hack.vim
Normal file
28
ale_linters/php/hack.vim
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
" Author: Zefei Xuan <https://github.com/zefei>
|
||||||
|
" Description: Hack type checking (http://hacklang.org/)
|
||||||
|
|
||||||
|
function! ale_linters#php#hack#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '^\(.*\):\(\d\+\):\(\d\+\),\(\d\+\): \(.\+])\)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
if a:buffer != bufnr(l:match[1])
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'text': l:match[5],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('php', {
|
||||||
|
\ 'name': 'hack',
|
||||||
|
\ 'executable': 'hh_client',
|
||||||
|
\ 'command': 'hh_client --retries 0 --retry-if-init false',
|
||||||
|
\ 'callback': 'ale_linters#php#hack#Handle',
|
||||||
|
\})
|
||||||
@@ -4,6 +4,16 @@
|
|||||||
call ale#Set('php_langserver_executable', 'php-language-server.php')
|
call ale#Set('php_langserver_executable', 'php-language-server.php')
|
||||||
call ale#Set('php_langserver_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('php_langserver_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#php#langserver#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'php_langserver', [
|
||||||
|
\ 'vendor/bin/php-language-server.php',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#php#langserver#GetCommand(buffer) abort
|
||||||
|
return 'php ' . ale#Escape(ale_linters#php#langserver#GetExecutable(a:buffer))
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#php#langserver#GetProjectRoot(buffer) abort
|
function! ale_linters#php#langserver#GetProjectRoot(buffer) abort
|
||||||
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
||||||
|
|
||||||
@@ -13,9 +23,8 @@ endfunction
|
|||||||
call ale#linter#Define('php', {
|
call ale#linter#Define('php', {
|
||||||
\ 'name': 'langserver',
|
\ 'name': 'langserver',
|
||||||
\ 'lsp': 'stdio',
|
\ 'lsp': 'stdio',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('php_langserver', [
|
\ 'executable_callback': 'ale_linters#php#langserver#GetExecutable',
|
||||||
\ 'vendor/bin/php-language-server.php',
|
\ 'command_callback': 'ale_linters#php#langserver#GetCommand',
|
||||||
\ ]),
|
\ 'language': 'php',
|
||||||
\ 'command': 'php %e',
|
|
||||||
\ 'project_root_callback': 'ale_linters#php#langserver#GetProjectRoot',
|
\ 'project_root_callback': 'ale_linters#php#langserver#GetProjectRoot',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -6,13 +6,23 @@ let g:ale_php_phpcs_standard = get(g:, 'ale_php_phpcs_standard', '')
|
|||||||
call ale#Set('php_phpcs_executable', 'phpcs')
|
call ale#Set('php_phpcs_executable', 'phpcs')
|
||||||
call ale#Set('php_phpcs_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('php_phpcs_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#php#phpcs#GetExecutable(buffer) abort
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'php_phpcs', [
|
||||||
|
\ 'vendor/bin/phpcs',
|
||||||
|
\ 'phpcs'
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#php#phpcs#GetCommand(buffer) abort
|
function! ale_linters#php#phpcs#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#php#phpcs#GetExecutable(a:buffer)
|
||||||
|
|
||||||
let l:standard = ale#Var(a:buffer, 'php_phpcs_standard')
|
let l:standard = ale#Var(a:buffer, 'php_phpcs_standard')
|
||||||
let l:standard_option = !empty(l:standard)
|
let l:standard_option = !empty(l:standard)
|
||||||
\ ? '--standard=' . l:standard
|
\ ? '--standard=' . l:standard
|
||||||
\ : ''
|
\ : ''
|
||||||
|
|
||||||
return '%e -s --report=emacs --stdin-path=%s' . ale#Pad(l:standard_option)
|
return ale#Escape(l:executable)
|
||||||
|
\ . ' -s --report=emacs --stdin-path=%s ' . l:standard_option
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#php#phpcs#Handle(buffer, lines) abort
|
function! ale_linters#php#phpcs#Handle(buffer, lines) abort
|
||||||
@@ -40,10 +50,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('php', {
|
call ale#linter#Define('php', {
|
||||||
\ 'name': 'phpcs',
|
\ 'name': 'phpcs',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('php_phpcs', [
|
\ 'executable_callback': 'ale_linters#php#phpcs#GetExecutable',
|
||||||
\ 'vendor/bin/phpcs',
|
|
||||||
\ 'phpcs'
|
|
||||||
\ ]),
|
|
||||||
\ 'command_callback': 'ale_linters#php#phpcs#GetCommand',
|
\ 'command_callback': 'ale_linters#php#phpcs#GetCommand',
|
||||||
\ 'callback': 'ale_linters#php#phpcs#Handle',
|
\ 'callback': 'ale_linters#php#phpcs#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
@@ -6,9 +6,16 @@ let g:ale_php_phpmd_executable = get(g:, 'ale_php_phpmd_executable', 'phpmd')
|
|||||||
" Set to change the ruleset
|
" Set to change the ruleset
|
||||||
let g:ale_php_phpmd_ruleset = get(g:, 'ale_php_phpmd_ruleset', 'cleancode,codesize,controversial,design,naming,unusedcode')
|
let g:ale_php_phpmd_ruleset = get(g:, 'ale_php_phpmd_ruleset', 'cleancode,codesize,controversial,design,naming,unusedcode')
|
||||||
|
|
||||||
|
function! ale_linters#php#phpmd#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'php_phpmd_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#php#phpmd#GetCommand(buffer) abort
|
function! ale_linters#php#phpmd#GetCommand(buffer) abort
|
||||||
return '%e %s text'
|
let l:executable = ale_linters#php#phpmd#GetExecutable(a:buffer)
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'php_phpmd_ruleset'))
|
|
||||||
|
return ale#Escape(l:executable)
|
||||||
|
\ . ' %s text '
|
||||||
|
\ . ale#Var(a:buffer, 'php_phpmd_ruleset')
|
||||||
\ . ' --ignore-violations-on-exit %t'
|
\ . ' --ignore-violations-on-exit %t'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -32,7 +39,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('php', {
|
call ale#linter#Define('php', {
|
||||||
\ 'name': 'phpmd',
|
\ 'name': 'phpmd',
|
||||||
\ 'executable_callback': ale#VarFunc('php_phpmd_executable'),
|
\ 'executable_callback': 'ale_linters#php#phpmd#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#php#phpmd#GetCommand',
|
\ 'command_callback': 'ale_linters#php#phpmd#GetCommand',
|
||||||
\ 'callback': 'ale_linters#php#phpmd#Handle',
|
\ 'callback': 'ale_linters#php#phpmd#Handle',
|
||||||
\})
|
\})
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user