Update Ale.
This commit is contained in:
parent
0071859401
commit
dd26bc4697
1324 changed files with 56041 additions and 437 deletions
27
sources_non_forked/ale/Dockerfile
Normal file
27
sources_non_forked/ale/Dockerfile
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
FROM testbed/vim:20
|
||||||
|
|
||||||
|
RUN install_vim -tag v8.0.0027 -build \
|
||||||
|
-tag v8.2.4693 -build \
|
||||||
|
-tag neovim:v0.2.0 -build \
|
||||||
|
-tag neovim:v0.6.1 -build
|
||||||
|
|
||||||
|
ENV PACKAGES="\
|
||||||
|
bash \
|
||||||
|
git \
|
||||||
|
python2 \
|
||||||
|
python3 \
|
||||||
|
py3-pip \
|
||||||
|
grep \
|
||||||
|
sed \
|
||||||
|
"
|
||||||
|
RUN apk --update add $PACKAGES && \
|
||||||
|
rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
|
RUN pip install vim-vint==0.3.21
|
||||||
|
|
||||||
|
RUN git clone https://github.com/junegunn/vader.vim vader && \
|
||||||
|
cd vader && git checkout c6243dd81c98350df4dec608fa972df98fa2a3af
|
||||||
|
|
||||||
|
ARG GIT_VERSION
|
||||||
|
LABEL Version=${GIT_VERSION}
|
||||||
|
LABEL Name=denseanalysis/ale
|
963
sources_non_forked/ale/README.md
Normal file
963
sources_non_forked/ale/README.md
Normal file
|
@ -0,0 +1,963 @@
|
||||||
|
# Asynchronous Lint Engine [![GitHub Build Status](https://github.com/dense-analysis/ale/workflows/CI/badge.svg)](https://github.com/dense-analysis/ale/actions?query=event%3Apush+workflow%3ACI+branch%3Amaster++) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/r0ef1xu8xjmik58d/branch/master?svg=true)](https://ci.appveyor.com/project/dense-analysis/ale) [![Join the chat at https://gitter.im/vim-ale/Lobby](https://badges.gitter.im/vim-ale/Lobby.svg)](https://gitter.im/vim-ale/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
|
|
||||||
|
|
||||||
|
![ALE Logo by Mark Grealish - https://www.bhalash.com/](https://user-images.githubusercontent.com/3518142/59195920-2c339500-8b85-11e9-9c22-f6b7f69637b8.jpg)
|
||||||
|
|
||||||
|
ALE (Asynchronous Lint Engine) is a plugin providing linting (syntax checking
|
||||||
|
and semantic errors) in NeoVim 0.2.0+ and Vim 8 while you edit your text files,
|
||||||
|
and acts as a Vim [Language Server Protocol](https://langserver.org/) client.
|
||||||
|
|
||||||
|
<img src="https://user-images.githubusercontent.com/3518142/59195938-3a81b100-8b85-11e9-8e8d-6a601b1db908.gif" alt="A linting example with the darkspectrum color scheme in GVim." title="A linting example with the darkspectrum color scheme in GVim.">
|
||||||
|
|
||||||
|
ALE makes use of NeoVim and Vim 8 job control functions and timers to
|
||||||
|
run linters on the contents of text buffers and return errors as
|
||||||
|
text is changed in Vim. This allows for displaying warnings and
|
||||||
|
errors in files being edited in Vim before files have been saved
|
||||||
|
back to a filesystem.
|
||||||
|
|
||||||
|
In other words, this plugin allows you to lint while you type.
|
||||||
|
|
||||||
|
ALE offers support for fixing code with command line tools in a non-blocking
|
||||||
|
manner with the `:ALEFix` feature, supporting tools in many languages, like
|
||||||
|
`prettier`, `eslint`, `autopep8`, and more.
|
||||||
|
|
||||||
|
ALE acts as a "language client" to support a variety of Language Server Protocol
|
||||||
|
features, including:
|
||||||
|
|
||||||
|
* Diagnostics (via Language Server Protocol linters)
|
||||||
|
* Go To Definition (`:ALEGoToDefinition`)
|
||||||
|
* Completion (Built in completion support, or with Deoplete)
|
||||||
|
* Finding references (`:ALEFindReferences`)
|
||||||
|
* Hover information (`:ALEHover`)
|
||||||
|
* Symbol search (`:ALESymbolSearch`)
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
**Help Wanted:** If you would like to help maintain this plugin by managing the
|
||||||
|
many issues and pull requests that are submitted, please send the author an
|
||||||
|
email at [dev@w0rp.com](mailto:dev@w0rp.com?subject=Helping%20with%20ALE).
|
||||||
|
|
||||||
|
If you enjoy this plugin, feel free to contribute or check out the author's
|
||||||
|
other content at [w0rp.com](https://w0rp.com).
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
1. [Supported Languages and Tools](#supported-languages)
|
||||||
|
2. [Usage](#usage)
|
||||||
|
1. [Linting](#usage-linting)
|
||||||
|
2. [Fixing](#usage-fixing)
|
||||||
|
3. [Completion](#usage-completion)
|
||||||
|
4. [Go To Definition](#usage-go-to-definition)
|
||||||
|
5. [Find References](#usage-find-references)
|
||||||
|
6. [Hovering](#usage-hover)
|
||||||
|
7. [Symbol Search](#usage-symbol-search)
|
||||||
|
8. [Refactoring: Rename, Actions](#usage-refactoring)
|
||||||
|
3. [Installation](#installation)
|
||||||
|
1. [Installation with Vim package management](#standard-installation)
|
||||||
|
2. [Installation with Pathogen](#installation-with-pathogen)
|
||||||
|
3. [Installation with Vundle](#installation-with-vundle)
|
||||||
|
4. [Installation with Vim-Plug](#installation-with-vim-plug)
|
||||||
|
4. [Contributing](#contributing)
|
||||||
|
5. [FAQ](#faq)
|
||||||
|
1. [How do I disable particular linters?](#faq-disable-linters)
|
||||||
|
2. [How can I see what ALE has configured for the current file?](#faq-get-info)
|
||||||
|
3. [How can I use ALE and coc.nvim together?](#faq-coc-nvim)
|
||||||
|
4. [How can I keep the sign gutter open?](#faq-keep-signs)
|
||||||
|
5. [How can I change the signs ALE uses?](#faq-change-signs)
|
||||||
|
6. [How can I change or disable the highlights ALE uses?](#faq-change-highlights)
|
||||||
|
7. [How can I show errors or warnings in my statusline?](#faq-statusline)
|
||||||
|
8. [How can I show errors or warnings in my lightline?](#faq-lightline)
|
||||||
|
9. [How can I change the format for echo messages?](#faq-echo-format)
|
||||||
|
10. [How can I execute some code when ALE starts or stops linting?](#faq-autocmd)
|
||||||
|
11. [How can I navigate between errors quickly?](#faq-navigation)
|
||||||
|
12. [How can I run linters only when I save files?](#faq-lint-on-save)
|
||||||
|
13. [How can I use the quickfix list instead of the loclist?](#faq-quickfix)
|
||||||
|
14. [How can I check JSX files with both stylelint and eslint?](#faq-jsx-stylelint-eslint)
|
||||||
|
15. [How can I check Vue files with ESLint?](#faq-vue-eslint)
|
||||||
|
16. [Will this plugin eat all of my laptop battery power?](#faq-my-battery-is-sad)
|
||||||
|
17. [How can I configure my C or C++ project?](#faq-c-configuration)
|
||||||
|
18. [How can I configure ALE differently for different buffers?](#faq-buffer-configuration)
|
||||||
|
19. [How can I configure the height of the list in which ALE displays errors?](#faq-list-window-height)
|
||||||
|
20. [How can I run linters or fixers via Docker or a VM?](#faq-vm)
|
||||||
|
21. [How can I change the borders for floating preview windows?](#faq-window-borders)
|
||||||
|
22. [How can I use ALE and vim-lsp together?](#faq-vim-lsp)
|
||||||
|
|
||||||
|
<a name="supported-languages"></a>
|
||||||
|
|
||||||
|
## 1. Supported Languages and Tools
|
||||||
|
|
||||||
|
ALE supports a wide variety of languages and tools. See the
|
||||||
|
[full list](supported-tools.md) in the
|
||||||
|
[Supported Languages and Tools](supported-tools.md) page.
|
||||||
|
|
||||||
|
<a name="usage"></a>
|
||||||
|
|
||||||
|
## 2. Usage
|
||||||
|
|
||||||
|
<a name="usage-linting"></a>
|
||||||
|
|
||||||
|
### 2.i Linting
|
||||||
|
|
||||||
|
Once this plugin is installed, while editing your files in supported
|
||||||
|
languages and tools which have been correctly installed,
|
||||||
|
this plugin will send the contents of your text buffers to a variety of
|
||||||
|
programs for checking the syntax and semantics of your programs. By default,
|
||||||
|
linters will be re-run in the background to check your syntax when you open
|
||||||
|
new buffers or as you make edits to your files.
|
||||||
|
|
||||||
|
The behavior of linting can be configured with a variety of options,
|
||||||
|
documented in [the Vim help file](doc/ale.txt). For more information on the
|
||||||
|
options ALE offers, consult `:help ale-options` for global options and `:help
|
||||||
|
ale-integration-options` for options specified to particular linters.
|
||||||
|
|
||||||
|
<a name="usage-fixing"></a>
|
||||||
|
|
||||||
|
### 2.ii Fixing
|
||||||
|
|
||||||
|
ALE can fix files with the `ALEFix` command. Functions need to be configured
|
||||||
|
either in each buffer with a `b:ale_fixers`, or globally with `g:ale_fixers`.
|
||||||
|
|
||||||
|
The recommended way to configure fixers is to define a List in an ftplugin file.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/ftplugin/javascript.vim, or somewhere similar.
|
||||||
|
|
||||||
|
" Fix files with prettier, and then ESLint.
|
||||||
|
let b:ale_fixers = ['prettier', 'eslint']
|
||||||
|
" Equivalent to the above.
|
||||||
|
let b:ale_fixers = {'javascript': ['prettier', 'eslint']}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also configure your fixers from vimrc using `g:ale_fixers`, before or
|
||||||
|
after ALE has been loaded.
|
||||||
|
|
||||||
|
A `*` in place of the filetype will apply a List of fixers to all files which
|
||||||
|
do not match some filetype in the Dictionary.
|
||||||
|
|
||||||
|
Note that using a plain List for `g:ale_fixers` is not supported.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/vimrc, or somewhere similar.
|
||||||
|
let g:ale_fixers = {
|
||||||
|
\ '*': ['remove_trailing_lines', 'trim_whitespace'],
|
||||||
|
\ 'javascript': ['eslint'],
|
||||||
|
\}
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to automatically fix files when you save them, you need to turn
|
||||||
|
a setting on in vimrc.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Set this variable to 1 to fix files when you save them.
|
||||||
|
let g:ale_fix_on_save = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
The `:ALEFixSuggest` command will suggest some supported tools for fixing code.
|
||||||
|
Both `g:ale_fixers` and `b:ale_fixers` can also accept functions, including
|
||||||
|
lambda functions, as fixers, for fixing files with custom tools.
|
||||||
|
|
||||||
|
See `:help ale-fix` for complete information on how to fix files with ALE.
|
||||||
|
|
||||||
|
<a name="usage-completion"></a>
|
||||||
|
|
||||||
|
### 2.iii Completion
|
||||||
|
|
||||||
|
ALE offers some support for completion via hijacking of omnicompletion while you
|
||||||
|
type. All of ALE's completion information must come from Language Server
|
||||||
|
Protocol linters, or from `tsserver` for TypeScript.
|
||||||
|
|
||||||
|
ALE integrates with [Deoplete](https://github.com/Shougo/deoplete.nvim) as a
|
||||||
|
completion source, named `'ale'`. You can configure Deoplete to only use ALE as
|
||||||
|
the source of completion information, or mix it with other sources.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Use ALE and also some plugin 'foobar' as completion sources for all code.
|
||||||
|
call deoplete#custom#option('sources', {
|
||||||
|
\ '_': ['ale', 'foobar'],
|
||||||
|
\})
|
||||||
|
```
|
||||||
|
|
||||||
|
ALE also offers its own automatic completion support, which does not require any
|
||||||
|
other plugins, and can be enabled by changing a setting before ALE is loaded.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Enable completion where available.
|
||||||
|
" This setting must be set before ALE is loaded.
|
||||||
|
"
|
||||||
|
" You should not turn this setting on if you wish to use ALE as a completion
|
||||||
|
" source for other completion plugins, like Deoplete.
|
||||||
|
let g:ale_completion_enabled = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
ALE provides an omni-completion function you can use for triggering
|
||||||
|
completion manually with `<C-x><C-o>`.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
set omnifunc=ale#completion#OmniFunc
|
||||||
|
```
|
||||||
|
|
||||||
|
ALE supports automatic imports from external modules. This behavior is enabled
|
||||||
|
by default and can be disabled by setting:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_completion_autoimport = 0
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that disabling auto import can result in missing completion items from some
|
||||||
|
LSP servers (e.g. eclipselsp). See `:help ale-completion` for more information.
|
||||||
|
|
||||||
|
<a name="usage-go-to-definition"></a>
|
||||||
|
|
||||||
|
### 2.iv Go To Definition
|
||||||
|
|
||||||
|
ALE supports jumping to the definition of words under your cursor with the
|
||||||
|
`:ALEGoToDefinition` command using any enabled Language Server Protocol linters
|
||||||
|
and `tsserver`.
|
||||||
|
|
||||||
|
See `:help ale-go-to-definition` for more information.
|
||||||
|
|
||||||
|
<a name="usage-find-references"></a>
|
||||||
|
|
||||||
|
### 2.v Find References
|
||||||
|
|
||||||
|
ALE supports finding references for words under your cursor with the
|
||||||
|
`:ALEFindReferences` command using any enabled Language Server Protocol linters
|
||||||
|
and `tsserver`.
|
||||||
|
|
||||||
|
See `:help ale-find-references` for more information.
|
||||||
|
|
||||||
|
<a name="usage-hover"></a>
|
||||||
|
|
||||||
|
### 2.vi Hovering
|
||||||
|
|
||||||
|
ALE supports "hover" information for printing brief information about symbols at
|
||||||
|
the cursor taken from Language Server Protocol linters and `tsserver` with the
|
||||||
|
`ALEHover` command.
|
||||||
|
|
||||||
|
Truncated information will be displayed when the cursor rests on a symbol by
|
||||||
|
default, as long as there are no problems on the same line.
|
||||||
|
|
||||||
|
The information can be displayed in a `balloon` tooltip in Vim or GVim by
|
||||||
|
hovering your mouse over symbols. Mouse hovering is enabled by default in GVim,
|
||||||
|
and needs to be configured for Vim 8.1+ in terminals.
|
||||||
|
|
||||||
|
See `:help ale-hover` for more information.
|
||||||
|
|
||||||
|
<a name="usage-symbol-search"></a>
|
||||||
|
|
||||||
|
### 2.vii Symbol Search
|
||||||
|
|
||||||
|
ALE supports searching for workspace symbols via Language Server Protocol
|
||||||
|
linters with the `ALESymbolSearch` command.
|
||||||
|
|
||||||
|
Search queries can be performed to find functions, types, and more which are
|
||||||
|
similar to a given query string.
|
||||||
|
|
||||||
|
See `:help ale-symbol-search` for more information.
|
||||||
|
|
||||||
|
<a name="usage-refactoring"></a>
|
||||||
|
|
||||||
|
### 2.viii Refactoring: Rename, Actions
|
||||||
|
|
||||||
|
ALE supports renaming symbols in symbols in code such as variables or class
|
||||||
|
names with the `ALERename` command.
|
||||||
|
|
||||||
|
`ALEFileRename` will rename file and fix import paths (tsserver
|
||||||
|
only).
|
||||||
|
|
||||||
|
`ALECodeAction` will execute actions on the cursor or applied to a visual
|
||||||
|
range selection, such as automatically fixing errors.
|
||||||
|
|
||||||
|
See `:help ale-refactor` for more information.
|
||||||
|
|
||||||
|
<a name="installation"></a>
|
||||||
|
|
||||||
|
## 3. Installation
|
||||||
|
|
||||||
|
To install this plugin, you should use one of the following methods.
|
||||||
|
For Windows users, replace usage of the Unix `~/.vim` directory with
|
||||||
|
`%USERPROFILE%\vimfiles`, or another directory if you have configured
|
||||||
|
Vim differently. On Windows, your `~/.vimrc` file will be similarly
|
||||||
|
stored in `%USERPROFILE%\_vimrc`.
|
||||||
|
|
||||||
|
<a name="standard-installation"></a>
|
||||||
|
|
||||||
|
### 3.i. Installation with Vim package management
|
||||||
|
|
||||||
|
In Vim 8 and NeoVim, you can install plugins easily without needing to use
|
||||||
|
any other tools. Simply clone the plugin into your `pack` directory.
|
||||||
|
|
||||||
|
#### Vim 8 on Unix
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/.vim/pack/git-plugins/start
|
||||||
|
git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/git-plugins/start/ale
|
||||||
|
```
|
||||||
|
|
||||||
|
#### NeoVim on Unix
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/.local/share/nvim/site/pack/git-plugins/start
|
||||||
|
git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.local/share/nvim/site/pack/git-plugins/start/ale
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Vim 8 on Windows
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run these commands in the "Git for Windows" Bash terminal
|
||||||
|
mkdir -p ~/vimfiles/pack/git-plugins/start
|
||||||
|
git clone --depth 1 https://github.com/dense-analysis/ale.git ~/vimfiles/pack/git-plugins/start/ale
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Generating Vim help files
|
||||||
|
|
||||||
|
You can add the following line to your vimrc files to generate documentation
|
||||||
|
tags automatically, if you don't have something similar already, so you can use
|
||||||
|
the `:help` command to consult ALE's online documentation:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Put these lines at the very end of your vimrc file.
|
||||||
|
|
||||||
|
" Load all plugins now.
|
||||||
|
" Plugins need to be added to runtimepath before helptags can be generated.
|
||||||
|
packloadall
|
||||||
|
" Load all of the helptags now, after plugins have been loaded.
|
||||||
|
" All messages and errors will be ignored.
|
||||||
|
silent! helptags ALL
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="installation-with-pathogen"></a>
|
||||||
|
|
||||||
|
### 3.ii. Installation with Pathogen
|
||||||
|
|
||||||
|
To install this module with [Pathogen](https://github.com/tpope/vim-pathogen),
|
||||||
|
you should clone this repository to your bundle directory, and ensure
|
||||||
|
you have the line `execute pathogen#infect()` in your `~/.vimrc` file.
|
||||||
|
You can run the following commands in your terminal to do so:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/.vim/bundle
|
||||||
|
git clone https://github.com/dense-analysis/ale.git
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="installation-with-vundle"></a>
|
||||||
|
|
||||||
|
### 3.iii. Installation with Vundle
|
||||||
|
|
||||||
|
You can install this plugin using [Vundle](https://github.com/VundleVim/Vundle.vim)
|
||||||
|
by adding the GitHub path for this repository to your `~/.vimrc`:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
Plugin 'dense-analysis/ale'
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run the command `:PluginInstall` in Vim.
|
||||||
|
|
||||||
|
See the Vundle documentation for more information.
|
||||||
|
|
||||||
|
<a name="installation-with-vim-plug"></a>
|
||||||
|
|
||||||
|
### 3.iiii. Installation with Vim-Plug
|
||||||
|
|
||||||
|
You can install this plugin using [Vim-Plug](https://github.com/junegunn/vim-plug)
|
||||||
|
by adding the GitHub path for this repository to your `~/.vimrc`:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
Plug 'dense-analysis/ale'
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run the command `:PlugInstall` in Vim.
|
||||||
|
|
||||||
|
See the Vim-Plug documentation for more information.
|
||||||
|
|
||||||
|
<a name="contributing"></a>
|
||||||
|
|
||||||
|
## 4. Contributing
|
||||||
|
|
||||||
|
If you would like to see support for more languages and tools, please
|
||||||
|
[create an issue](https://github.com/dense-analysis/ale/issues)
|
||||||
|
or [create a pull request](https://github.com/dense-analysis/ale/pulls).
|
||||||
|
If your tool can read from stdin or you have code to suggest which is good,
|
||||||
|
support can be happily added for it.
|
||||||
|
|
||||||
|
If you are interested in the general direction of the project, check out the
|
||||||
|
[wiki home page](https://github.com/dense-analysis/ale/wiki). The wiki includes
|
||||||
|
a Roadmap for the future, and more.
|
||||||
|
|
||||||
|
If you'd liked to discuss the project more directly, check out the `#vim-ale` channel
|
||||||
|
on Libera Chat. Web chat is available [here](https://web.libera.chat/#vim-ale).
|
||||||
|
|
||||||
|
<a name="faq"></a>
|
||||||
|
|
||||||
|
## 5. FAQ
|
||||||
|
|
||||||
|
<a name="faq-disable-linters"></a>
|
||||||
|
|
||||||
|
### 5.i. How do I disable particular linters?
|
||||||
|
|
||||||
|
By default, all available tools for all supported languages will be run. If you
|
||||||
|
want to only select a subset of the tools, you can define `b:ale_linters` for a
|
||||||
|
single buffer, or `g:ale_linters` globally.
|
||||||
|
|
||||||
|
The recommended way to configure linters is to define a List in an ftplugin
|
||||||
|
file.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/ftplugin/javascript.vim, or somewhere similar.
|
||||||
|
|
||||||
|
" Enable ESLint only for JavaScript.
|
||||||
|
let b:ale_linters = ['eslint']
|
||||||
|
|
||||||
|
" Equivalent to the above.
|
||||||
|
let b:ale_linters = {'javascript': ['eslint']}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also declare which linters you want to run in your vimrc file, before or
|
||||||
|
after ALE has been loaded.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/vimrc, or somewhere similar.
|
||||||
|
let g:ale_linters = {
|
||||||
|
\ 'javascript': ['eslint'],
|
||||||
|
\}
|
||||||
|
```
|
||||||
|
|
||||||
|
For all languages unspecified in the dictionary, all possible linters will
|
||||||
|
be run for those languages, just as when the dictionary is not defined.
|
||||||
|
Running many linters should not typically obstruct editing in Vim,
|
||||||
|
as they will all be executed in separate processes simultaneously.
|
||||||
|
|
||||||
|
If you don't want ALE to run anything other than what you've explicitly asked
|
||||||
|
for, you can set `g:ale_linters_explicit` to `1`.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Only run linters named in ale_linters settings.
|
||||||
|
let g:ale_linters_explicit = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
This plugin will look for linters in the [`ale_linters`](ale_linters) directory.
|
||||||
|
Each directory within corresponds to a particular filetype in Vim, and each file
|
||||||
|
in each directory corresponds to the name of a particular linter.
|
||||||
|
|
||||||
|
<a name="faq-get-info"></a>
|
||||||
|
|
||||||
|
### 5.ii. How can I see what ALE has configured for the current file?
|
||||||
|
|
||||||
|
Run the following to see what is currently configured:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:ALEInfo
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-coc-nvim"></a>
|
||||||
|
|
||||||
|
### 5.iii. How can I use ALE and coc.nvim together?
|
||||||
|
|
||||||
|
[coc.nvim](https://github.com/neoclide/coc.nvim) is a popular Vim plugin written
|
||||||
|
in TypeScript and dependent on the [npm](https://www.npmjs.com/) ecosystem for
|
||||||
|
providing full IDE features to Vim. Both ALE and coc.nvim implement
|
||||||
|
[Language Server Protocol](https://microsoft.github.io/language-server-protocol/)
|
||||||
|
(LSP) clients for supporting diagnostics (linting with a live server), and other
|
||||||
|
features like auto-completion, and others listed above.
|
||||||
|
|
||||||
|
ALE is primarily focused on integrating with external programs through virtually
|
||||||
|
any means, provided the plugin remains almost entirely written in Vim script.
|
||||||
|
coc.nvim is primarily focused on bringing IDE features to Vim. If you want to
|
||||||
|
run external programs on your files to check for errors, and also use the most
|
||||||
|
advanced IDE features, you might want to use both plugins at the same time.
|
||||||
|
|
||||||
|
The easiest way to get both plugins to work together is to configure coc.nvim to
|
||||||
|
send diagnostics to ALE, so ALE controls how all problems are presented to you,
|
||||||
|
and to disable all LSP features in ALE, so ALE doesn't try to provide LSP
|
||||||
|
features already provided by coc.nvim, such as auto-completion.
|
||||||
|
|
||||||
|
1. Open your coc.nvim configuration file with `:CocConfig` and add
|
||||||
|
`"diagnostic.displayByAle": true` to your settings.
|
||||||
|
2. Add `let g:ale_disable_lsp = 1` to your vimrc file, before plugins are
|
||||||
|
loaded.
|
||||||
|
|
||||||
|
You can also use `b:ale_disable_lsp` in your ftplugin files to enable or disable
|
||||||
|
LSP features in ALE for different filetypes. After you configure coc.nvim and
|
||||||
|
ALE this way, you can further configure how problems appear to you by using all
|
||||||
|
of the settings mentioned in ALE's help file, including how often diagnostics
|
||||||
|
are requested. See `:help ale-lint`.
|
||||||
|
|
||||||
|
The integration between ALE and coc.nvim works using an API ALE offers for
|
||||||
|
letting any other plugin integrate with ALE. If you are interested in writing a
|
||||||
|
similar integration, see `:help ale-lint-other-sources`.
|
||||||
|
|
||||||
|
<a name="faq-keep-signs"></a>
|
||||||
|
|
||||||
|
### 5.iv. How can I keep the sign gutter open?
|
||||||
|
|
||||||
|
You can keep the sign gutter open at all times by setting the
|
||||||
|
`g:ale_sign_column_always` to 1
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_sign_column_always = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-change-signs"></a>
|
||||||
|
|
||||||
|
### 5.v. How can I change the signs ALE uses?
|
||||||
|
|
||||||
|
Use these options to specify what text should be used for signs:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_sign_error = '>>'
|
||||||
|
let g:ale_sign_warning = '--'
|
||||||
|
```
|
||||||
|
|
||||||
|
ALE sets some background colors automatically for warnings and errors
|
||||||
|
in the sign gutter, with the names `ALEErrorSign` and `ALEWarningSign`.
|
||||||
|
These colors can be customised, or even removed completely:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
highlight clear ALEErrorSign
|
||||||
|
highlight clear ALEWarningSign
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-change-highlights"></a>
|
||||||
|
|
||||||
|
### 5.vi. How can I change or disable the highlights ALE uses?
|
||||||
|
|
||||||
|
ALE's highlights problems with highlight groups which link to `SpellBad`,
|
||||||
|
`SpellCap`, `error`, and `todo` groups by default. The characters that are
|
||||||
|
highlighted depend on the linters being used, and the information provided to
|
||||||
|
ALE.
|
||||||
|
|
||||||
|
Highlighting can be disabled completely by setting `g:ale_set_highlights` to
|
||||||
|
`0`.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Set this in your vimrc file to disabling highlighting
|
||||||
|
let g:ale_set_highlights = 0
|
||||||
|
```
|
||||||
|
|
||||||
|
You can control all of the highlights ALE uses, say if you are using a different
|
||||||
|
color scheme which produces ugly highlights. For example:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
highlight ALEWarning ctermbg=DarkMagenta
|
||||||
|
```
|
||||||
|
|
||||||
|
See `:help ale-highlights` for more information.
|
||||||
|
|
||||||
|
<a name="faq-statusline"></a>
|
||||||
|
|
||||||
|
### 5.vii. How can I show errors or warnings in my statusline?
|
||||||
|
|
||||||
|
[vim-airline](https://github.com/vim-airline/vim-airline) integrates with ALE
|
||||||
|
for displaying error information in the status bar. If you want to see the
|
||||||
|
status for ALE in a nice format, it is recommended to use vim-airline with ALE.
|
||||||
|
The airline extension can be enabled by adding the following to your vimrc:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Set this. Airline will handle the rest.
|
||||||
|
let g:airline#extensions#ale#enabled = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
If you don't want to use vim-airline, you can implement your own statusline
|
||||||
|
function without adding any other plugins. ALE provides some functions to
|
||||||
|
assist in this endeavour, including:
|
||||||
|
|
||||||
|
* `ale#statusline#Count`: Which returns the number of problems found by ALE
|
||||||
|
for a specified buffer.
|
||||||
|
* `ale#statusline#FirstProblem`: Which returns a dictionary containing the
|
||||||
|
full loclist details of the first problem of a specified type found by ALE
|
||||||
|
in a buffer. (e.g. The first style warning in the current buffer.)
|
||||||
|
This can be useful for displaying more detailed information such as the
|
||||||
|
line number of the first problem in a file.
|
||||||
|
|
||||||
|
Say you want to display all errors as one figure, and all non-errors as another
|
||||||
|
figure. You can do the following:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
function! LinterStatus() abort
|
||||||
|
let l:counts = ale#statusline#Count(bufnr(''))
|
||||||
|
|
||||||
|
let l:all_errors = l:counts.error + l:counts.style_error
|
||||||
|
let l:all_non_errors = l:counts.total - l:all_errors
|
||||||
|
|
||||||
|
return l:counts.total == 0 ? 'OK' : printf(
|
||||||
|
\ '%dW %dE',
|
||||||
|
\ all_non_errors,
|
||||||
|
\ all_errors
|
||||||
|
\)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
set statusline=%{LinterStatus()}
|
||||||
|
```
|
||||||
|
|
||||||
|
See `:help ale#statusline#Count()` or `:help ale#statusline#FirstProblem()`
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
<a name="faq-lightline"></a>
|
||||||
|
|
||||||
|
### 5.viii. How can I show errors or warnings in my lightline?
|
||||||
|
|
||||||
|
[lightline](https://github.com/itchyny/lightline.vim) does not have built-in
|
||||||
|
support for ALE, nevertheless there is a plugin that adds this functionality: [maximbaz/lightline-ale](https://github.com/maximbaz/lightline-ale).
|
||||||
|
|
||||||
|
For more information, check out the sources of that plugin, `:help ale#statusline#Count()` and [lightline documentation](https://github.com/itchyny/lightline.vim#advanced-configuration).
|
||||||
|
|
||||||
|
<a name="faq-echo-format"></a>
|
||||||
|
|
||||||
|
### 5.ix. How can I change the format for echo messages?
|
||||||
|
|
||||||
|
There are 3 global options that allow customizing the echoed message.
|
||||||
|
|
||||||
|
- `g:ale_echo_msg_format` where:
|
||||||
|
* `%s` is the error message itself
|
||||||
|
* `%...code...%` is an optional error code, and most characters can be
|
||||||
|
written between the `%` characters.
|
||||||
|
* `%linter%` is the linter name
|
||||||
|
* `%severity%` is the severity type
|
||||||
|
- `g:ale_echo_msg_error_str` is the string used for error severity.
|
||||||
|
- `g:ale_echo_msg_warning_str` is the string used for warning severity.
|
||||||
|
|
||||||
|
So for example this:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_echo_msg_error_str = 'E'
|
||||||
|
let g:ale_echo_msg_warning_str = 'W'
|
||||||
|
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
|
||||||
|
```
|
||||||
|
|
||||||
|
Will give you:
|
||||||
|
|
||||||
|
![Echoed message](https://user-images.githubusercontent.com/3518142/59195927-348bd000-8b85-11e9-88b6-508a094f1548.png)
|
||||||
|
|
||||||
|
See `:help g:ale_echo_msg_format` for more information.
|
||||||
|
|
||||||
|
<a name="faq-autocmd"></a>
|
||||||
|
|
||||||
|
### 5.x. How can I execute some code when ALE starts or stops linting?
|
||||||
|
|
||||||
|
ALE runs its own [autocmd](http://vimdoc.sourceforge.net/htmldoc/autocmd.html)
|
||||||
|
events when a lint or fix cycle are started and stopped. There is also an event
|
||||||
|
that runs when a linter job has been successfully started. These events can be
|
||||||
|
used to call arbitrary functions during these respective parts of the ALE's
|
||||||
|
operation.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
augroup YourGroup
|
||||||
|
autocmd!
|
||||||
|
autocmd User ALELintPre call YourFunction()
|
||||||
|
autocmd User ALELintPost call YourFunction()
|
||||||
|
|
||||||
|
autocmd User ALEJobStarted call YourFunction()
|
||||||
|
|
||||||
|
autocmd User ALEFixPre call YourFunction()
|
||||||
|
autocmd User ALEFixPost call YourFunction()
|
||||||
|
augroup END
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-navigation"></a>
|
||||||
|
|
||||||
|
### 5.xi. How can I navigate between errors quickly?
|
||||||
|
|
||||||
|
ALE offers some commands with `<Plug>` keybinds for moving between warnings and
|
||||||
|
errors quickly. You can map the keys Ctrl+j and Ctrl+k to moving between errors
|
||||||
|
for example:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
nmap <silent> <C-k> <Plug>(ale_previous_wrap)
|
||||||
|
nmap <silent> <C-j> <Plug>(ale_next_wrap)
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information, consult the online documentation with
|
||||||
|
`:help ale-navigation-commands`.
|
||||||
|
|
||||||
|
<a name="faq-lint-on-save"></a>
|
||||||
|
|
||||||
|
### 5.xii. How can I run linters only when I save files?
|
||||||
|
|
||||||
|
ALE offers an option `g:ale_lint_on_save` for enabling running the linters
|
||||||
|
when files are saved. This option is enabled by default. If you only
|
||||||
|
wish to run linters when files are saved, you can turn the other
|
||||||
|
options off.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Write this in your vimrc file
|
||||||
|
let g:ale_lint_on_text_changed = 'never'
|
||||||
|
let g:ale_lint_on_insert_leave = 0
|
||||||
|
" You can disable this option too
|
||||||
|
" if you don't want linters to run on opening a file
|
||||||
|
let g:ale_lint_on_enter = 0
|
||||||
|
```
|
||||||
|
|
||||||
|
If for whatever reason you don't wish to run linters again when you save
|
||||||
|
files, you can set `g:ale_lint_on_save` to `0`.
|
||||||
|
|
||||||
|
<a name="faq-quickfix"></a>
|
||||||
|
|
||||||
|
### 5.xiii. How can I use the quickfix list instead of the loclist?
|
||||||
|
|
||||||
|
The quickfix list can be enabled by turning the `g:ale_set_quickfix`
|
||||||
|
option on. If you wish to also disable the loclist, you can disable
|
||||||
|
the `g:ale_set_loclist` option.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Write this in your vimrc file
|
||||||
|
let g:ale_set_loclist = 0
|
||||||
|
let g:ale_set_quickfix = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
If you wish to show Vim windows for the loclist or quickfix items
|
||||||
|
when a file contains warnings or errors, `g:ale_open_list` can be
|
||||||
|
set to `1`. `g:ale_keep_list_window_open` can be set to `1`
|
||||||
|
if you wish to keep the window open even after errors disappear.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_open_list = 1
|
||||||
|
" Set this if you want to.
|
||||||
|
" This can be useful if you are combining ALE with
|
||||||
|
" some other plugin which sets quickfix errors, etc.
|
||||||
|
let g:ale_keep_list_window_open = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also set `let g:ale_list_vertical = 1` to open the windows vertically
|
||||||
|
instead of the default horizontally.
|
||||||
|
|
||||||
|
<a name="faq-jsx-stylelint-eslint"></a>
|
||||||
|
|
||||||
|
### 5.xiv. How can I check JSX files with both stylelint and eslint?
|
||||||
|
|
||||||
|
If you configure ALE options correctly in your vimrc file, and install
|
||||||
|
the right tools, you can check JSX files with stylelint and eslint.
|
||||||
|
|
||||||
|
First, install eslint and install stylelint with
|
||||||
|
[stylelint-processor-styled-components](https://github.com/styled-components/stylelint-processor-styled-components).
|
||||||
|
|
||||||
|
Supposing you have installed both tools correctly, configure your .jsx files so
|
||||||
|
`jsx` is included in the filetype. You can use an `autocmd` for this.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
augroup FiletypeGroup
|
||||||
|
autocmd!
|
||||||
|
au BufNewFile,BufRead *.jsx set filetype=javascript.jsx
|
||||||
|
augroup END
|
||||||
|
```
|
||||||
|
|
||||||
|
Supposing the filetype has been set correctly, you can set the following
|
||||||
|
options in a jsx.vim ftplugin file.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/ftplugin/jsx.vim, or somewhere similar.
|
||||||
|
let b:ale_linter_aliases = ['css', 'javascript']
|
||||||
|
let b:ale_linters = ['stylelint', 'eslint']
|
||||||
|
```
|
||||||
|
|
||||||
|
Or if you want, you can configure the linters from your vimrc file.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/vimrc, or somewhere similar.
|
||||||
|
let g:ale_linter_aliases = {'jsx': ['css', 'javascript']}
|
||||||
|
let g:ale_linters = {'jsx': ['stylelint', 'eslint']}
|
||||||
|
```
|
||||||
|
|
||||||
|
ALE will alias the `jsx` filetype so it uses the `css` filetype linters, and
|
||||||
|
use the original Array of selected linters for `jsx` from the `g:ale_linters`
|
||||||
|
object. All available linters will be used for the filetype `javascript`, and
|
||||||
|
no linter will be run twice for the same file.
|
||||||
|
|
||||||
|
<a name="faq-vue-eslint"></a>
|
||||||
|
|
||||||
|
### 5.xv. How can I check Vue files with ESLint?
|
||||||
|
|
||||||
|
To check Vue files with ESLint, your ESLint project configuration file must be
|
||||||
|
configured to use the [Vue plugin](https://github.com/vuejs/eslint-plugin-vue).
|
||||||
|
After that, you need to configure ALE so it will run the JavaScript ESLint
|
||||||
|
linter on your files. The settings you need are similar to the settings needed
|
||||||
|
for checking JSX code with both stylelint and ESLint, in the previous section.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/ftplugin/vue.vim, or somewhere similar.
|
||||||
|
|
||||||
|
" Run both javascript and vue linters for vue files.
|
||||||
|
let b:ale_linter_aliases = ['javascript', 'vue']
|
||||||
|
" Select the eslint and vls linters.
|
||||||
|
let b:ale_linters = ['eslint', 'vls']
|
||||||
|
```
|
||||||
|
|
||||||
|
Run `:ALEInfo` to see which linters are available after telling ALE to run
|
||||||
|
JavaScript linters on Vue files. Not all linters support checking Vue files.
|
||||||
|
|
||||||
|
If you don't want to configure your linters in ftplugin files for some reason,
|
||||||
|
you can configure them from your vimrc file instead.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/vimrc, or somewhere similar.
|
||||||
|
let g:ale_linter_aliases = {'vue': ['vue', 'javascript']}
|
||||||
|
let g:ale_linters = {'vue': ['eslint', 'vls']}
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-my-battery-is-sad"></a>
|
||||||
|
|
||||||
|
### 5.xvi. Will this plugin eat all of my laptop battery power?
|
||||||
|
|
||||||
|
ALE takes advantage of the power of various tools to check your code. This of
|
||||||
|
course means that CPU time will be used to continuously check your code. If you
|
||||||
|
are concerned about the CPU time ALE will spend, which will of course imply
|
||||||
|
some cost to battery life, you can adjust your settings to make your CPU do
|
||||||
|
less work.
|
||||||
|
|
||||||
|
First, consider increasing the delay before which ALE will run any linters
|
||||||
|
while you type. ALE uses a timeout which is cancelled and reset every time you
|
||||||
|
type, and this delay can be increased so linters are run less often. See
|
||||||
|
`:help g:ale_lint_delay` for more information.
|
||||||
|
|
||||||
|
If you don't wish to run linters while you type, you can disable that behavior.
|
||||||
|
Set `g:ale_lint_on_text_changed` to `never`. You won't get as frequent error
|
||||||
|
checking, but ALE shouldn't block your ability to edit a document after you save
|
||||||
|
a file, so the asynchronous nature of the plugin will still be an advantage.
|
||||||
|
|
||||||
|
If you are still concerned, you can turn the automatic linting off altogether,
|
||||||
|
including the option `g:ale_lint_on_enter`, and you can run ALE manually with
|
||||||
|
`:ALELint`.
|
||||||
|
|
||||||
|
<a name="faq-c-configuration"></a>
|
||||||
|
|
||||||
|
### 5.xvii. How can I configure my C or C++ project?
|
||||||
|
|
||||||
|
The structure of C and C++ projects varies wildly from project to project, with
|
||||||
|
many different build tools being used for building them, and many different
|
||||||
|
formats for project configuration files. ALE can run compilers easily, but
|
||||||
|
ALE cannot easily detect which compiler flags to use.
|
||||||
|
|
||||||
|
Some tools and build configurations can generate
|
||||||
|
[compile_commands.json](https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
||||||
|
files. The `cppcheck`, `clangcheck`, `clangtidy` and `cquery` linters can read
|
||||||
|
these files for automatically determining the appropriate compiler flags to
|
||||||
|
use.
|
||||||
|
|
||||||
|
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
|
||||||
|
different options for different projects with the `g:ale_pattern_options`
|
||||||
|
setting. Consult the documentation for that setting for more information.
|
||||||
|
`b:ale_linters` can be used to select which tools you want to run, say if you
|
||||||
|
want to use only `gcc` for one project, and only `clang` for another.
|
||||||
|
|
||||||
|
ALE will attempt to parse `compile_commands.json` files to discover compiler
|
||||||
|
flags to use when linting code. See `:help g:ale_c_parse_compile_commands` for
|
||||||
|
more information. See Clang's documentation for
|
||||||
|
[compile_commands.json files](https://clang.llvm.org/docs/JSONCompilationDatabase.html).
|
||||||
|
You should strongly consider generating them in your builds, which is easy to do
|
||||||
|
with CMake.
|
||||||
|
|
||||||
|
You can also configure ALE to automatically run `make -n` to run dry runs on
|
||||||
|
`Makefile`s to discover compiler flags. This can execute arbitrary code, so the
|
||||||
|
option is disabled by default. See `:help g:ale_c_parse_makefile`.
|
||||||
|
|
||||||
|
You may also configure buffer-local settings for linters with project-specific
|
||||||
|
vimrc files. [local_vimrc](https://github.com/LucHermitte/local_vimrc) can be
|
||||||
|
used for executing local vimrc files which can be shared in your project.
|
||||||
|
|
||||||
|
<a name="faq-buffer-configuration"></a>
|
||||||
|
|
||||||
|
### 5.xviii. How can I configure ALE differently for different buffers?
|
||||||
|
|
||||||
|
ALE offers various ways to configure which linters or fixers are run, and
|
||||||
|
other settings. For the majority of ALE's settings, they can either be
|
||||||
|
configured globally with a `g:` variable prefix, or for a specific buffer
|
||||||
|
with a `b:` variable prefix. For example, you can configure a Python ftplugin
|
||||||
|
file like so.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/ftplugin/python.vim
|
||||||
|
|
||||||
|
" Check Python files with flake8 and pylint.
|
||||||
|
let b:ale_linters = ['flake8', 'pylint']
|
||||||
|
" Fix Python files with autopep8 and yapf.
|
||||||
|
let b:ale_fixers = ['autopep8', 'yapf']
|
||||||
|
" Disable warnings about trailing whitespace for Python files.
|
||||||
|
let b:ale_warn_about_trailing_whitespace = 0
|
||||||
|
```
|
||||||
|
|
||||||
|
For configuring files based on regular expression patterns matched against the
|
||||||
|
absolute path to a file, you can use `g:ale_pattern_options`.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Do not lint or fix minified files.
|
||||||
|
let g:ale_pattern_options = {
|
||||||
|
\ '\.min\.js$': {'ale_linters': [], 'ale_fixers': []},
|
||||||
|
\ '\.min\.css$': {'ale_linters': [], 'ale_fixers': []},
|
||||||
|
\}
|
||||||
|
" If you configure g:ale_pattern_options outside of vimrc, you need this.
|
||||||
|
let g:ale_pattern_options_enabled = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
Buffer-local variables for settings always override the global settings.
|
||||||
|
|
||||||
|
<a name="faq-list-window-height"></a>
|
||||||
|
|
||||||
|
### 5.xix. How can I configure the height of the list in which ALE displays errors?
|
||||||
|
|
||||||
|
To set a default height for the error list, use the `g:ale_list_window_size` variable.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Show 5 lines of errors (default: 10)
|
||||||
|
let g:ale_list_window_size = 5
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-vm"></a>
|
||||||
|
|
||||||
|
### 5.xx. How can I run linters or fixers via Docker or a VM?
|
||||||
|
|
||||||
|
ALE supports running linters or fixers via Docker, virtual machines, or in
|
||||||
|
combination with any remote machine with a different file system, so long as the
|
||||||
|
tools are well-integrated with ALE, and ALE is properly configured to run the
|
||||||
|
correct commands and map filename paths between different file systems. See
|
||||||
|
`:help ale-lint-other-machines` for the full documentation on how to configure
|
||||||
|
ALE to support this.
|
||||||
|
|
||||||
|
<a name="faq-window-borders"></a>
|
||||||
|
|
||||||
|
### 5.xxi. How can I change the borders for floating preview windows?
|
||||||
|
|
||||||
|
Borders for floating preview windows are enabled by default. You can use the
|
||||||
|
`g:ale_floating_window_border` setting to configure them.
|
||||||
|
|
||||||
|
You could disable the border with an empty list.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_floating_window_border = []
|
||||||
|
```
|
||||||
|
|
||||||
|
If the terminal supports Unicode, you might try setting the value like below, to
|
||||||
|
make it look nicer.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_floating_window_border = ['│', '─', '╭', '╮', '╯', '╰']
|
||||||
|
```
|
||||||
|
|
||||||
|
Since vim's default uses nice unicode characters when possible, you can trick
|
||||||
|
ale into using that default with
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_floating_window_border = repeat([''], 6)
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-vim-lsp"></a>
|
||||||
|
|
||||||
|
### 5.xxii. How can I use ALE and vim-lsp together?
|
||||||
|
|
||||||
|
[vim-lsp](https://github.com/prabirshrestha/vim-lsp) is a popular plugin as
|
||||||
|
implementation of Language Server Protocol (LSP) client for Vim. It provides
|
||||||
|
all the LSP features including auto completion, diagnostics, go to definitions,
|
||||||
|
etc.
|
||||||
|
|
||||||
|
ALE also provides LSP support for diagnostics. When you use both ALE and
|
||||||
|
vim-lsp, one option is disabling ALE's LSP support by
|
||||||
|
`let g:ale_disable_lsp = 1`. However ALE provides integration of external
|
||||||
|
programs. Showing errors from language servers by vim-lsp and showing errors
|
||||||
|
from other external programs by ALE are confusing and problematic.
|
||||||
|
|
||||||
|
[vim-lsp-ale](https://github.com/rhysd/vim-lsp-ale) is a bridge plugin to solve
|
||||||
|
the problem when using both ALE and vim-lsp. With the plugin, diagnostics are
|
||||||
|
provided by vim-lsp and ALE can handle all the errors. Please read
|
||||||
|
[vim-lsp-ale's documentation](https://github.com/rhysd/vim-lsp-ale/blob/master/doc/vim-lsp-ale.txt)
|
||||||
|
for more details.
|
5
sources_non_forked/ale/ale_linters/ada/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/ada/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Ada files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('ada')
|
|
@ -18,9 +18,30 @@ function! ale_linters#ansible#ansible_lint#Handle(buffer, version, lines) abort
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
let l:version_group = ale#semver#GTE(a:version, [5, 0, 0]) ? '>=5.0.0' : '<5.0.0'
|
let l:version_group = ale#semver#GTE(a:version, [6, 0, 0]) ? '>=6.0.0' :
|
||||||
|
\ ale#semver#GTE(a:version, [5, 0, 0]) ? '>=5.0.0' :
|
||||||
|
\ '<5.0.0'
|
||||||
let l:output = []
|
let l:output = []
|
||||||
|
|
||||||
|
if '>=6.0.0' is# l:version_group
|
||||||
|
let l:error_codes = { 'blocker': 'E', 'critical': 'E', 'major': 'W', 'minor': 'W', 'info': 'I' }
|
||||||
|
let l:linter_issues = json_decode(join(a:lines, ''))
|
||||||
|
|
||||||
|
for l:issue in l:linter_issues
|
||||||
|
if ale#path#IsBufferPath(a:buffer, l:issue.location.path)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': exists('l:issue.location.lines.begin.column') ? l:issue.location.lines.begin.line :
|
||||||
|
\ l:issue.location.lines.begin,
|
||||||
|
\ 'col': exists('l:issue.location.lines.begin.column') ? l:issue.location.lines.begin.column : 0,
|
||||||
|
\ 'text': l:issue.check_name,
|
||||||
|
\ 'detail': l:issue.description,
|
||||||
|
\ 'code': l:issue.severity,
|
||||||
|
\ 'type': l:error_codes[l:issue.severity],
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
if '>=5.0.0' is# l:version_group
|
if '>=5.0.0' is# l:version_group
|
||||||
" Matches patterns line the following:
|
" Matches patterns line the following:
|
||||||
" test.yml:3:148: syntax-check 'var' is not a valid attribute for a Play
|
" test.yml:3:148: syntax-check 'var' is not a valid attribute for a Play
|
||||||
|
@ -73,10 +94,13 @@ endfunction
|
||||||
|
|
||||||
function! ale_linters#ansible#ansible_lint#GetCommand(buffer, version) abort
|
function! ale_linters#ansible#ansible_lint#GetCommand(buffer, version) abort
|
||||||
let l:commands = {
|
let l:commands = {
|
||||||
|
\ '>=6.0.0': '%e --nocolor -f json -x yaml %s',
|
||||||
\ '>=5.0.0': '%e --nocolor --parseable-severity -x yaml %s',
|
\ '>=5.0.0': '%e --nocolor --parseable-severity -x yaml %s',
|
||||||
\ '<5.0.0': '%e --nocolor -p %t'
|
\ '<5.0.0': '%e --nocolor -p %t'
|
||||||
\}
|
\}
|
||||||
let l:command = ale#semver#GTE(a:version, [5, 0]) ? l:commands['>=5.0.0'] : l:commands['<5.0.0']
|
let l:command = ale#semver#GTE(a:version, [6, 0]) ? l:commands['>=6.0.0'] :
|
||||||
|
\ ale#semver#GTE(a:version, [5, 0]) ? l:commands['>=5.0.0'] :
|
||||||
|
\ l:commands['<5.0.0']
|
||||||
|
|
||||||
return l:command
|
return l:command
|
||||||
endfunction
|
endfunction
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/asciidoc/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/asciidoc/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for ASCIIDoc files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('asciidoc')
|
36
sources_non_forked/ale/ale_linters/avra/avra.vim
Normal file
36
sources_non_forked/ale/ale_linters/avra/avra.vim
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
" Author: Utkarsh Verma <utkarshverma@protonmail.com>
|
||||||
|
" Description: AVRA linter for avra syntax.
|
||||||
|
|
||||||
|
call ale#Set('avra_avra_executable', 'avra')
|
||||||
|
call ale#Set('avra_avra_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#avra#avra#GetCommand(buffer) abort
|
||||||
|
return '%e'
|
||||||
|
\ . ' %t'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'avra_avra_options'))
|
||||||
|
\ . ' -o ' . g:ale#util#nul_file
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#avra#avra#Handle(buffer, lines) abort
|
||||||
|
" Note that we treat 'fatal' as errors.
|
||||||
|
let l:pattern = '^\S\+(\(\d\+\))\s\+:\s\+\(\S\+\)\s\+:\s\+\(.\+\)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'type': l:match[2] =~? 'Error' ? 'E' : 'W',
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('avra', {
|
||||||
|
\ 'name': 'avra',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'avra_avra_executable')},
|
||||||
|
\ 'command': function('ale_linters#avra#avra#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#avra#avra#Handle',
|
||||||
|
\})
|
|
@ -9,8 +9,9 @@ function! ale_linters#awk#gawk#GetCommand(buffer) abort
|
||||||
" 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 '%e --source ' . ale#Escape('BEGIN { exit } END { exit 1 }')
|
||||||
|
\ . ' --lint'
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'awk_gawk_options'))
|
\ . ale#Pad(ale#Var(a:buffer, 'awk_gawk_options'))
|
||||||
\ . ' -f %t --lint /dev/null'
|
\ . ' -f %t /dev/null'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('awk', {
|
call ale#linter#Define('awk', {
|
||||||
|
|
47
sources_non_forked/ale/ale_linters/bitbake/oelint_adv.vim
Normal file
47
sources_non_forked/ale/ale_linters/bitbake/oelint_adv.vim
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
" Author: offa
|
||||||
|
" Description: oelint-adv for BitBake files
|
||||||
|
|
||||||
|
call ale#Set('bitbake_oelint_adv_executable', 'oelint-adv')
|
||||||
|
call ale#Set('bitbake_oelint_adv_options', '')
|
||||||
|
call ale#Set('bitbake_oelint_adv_config', '.oelint.cfg')
|
||||||
|
|
||||||
|
function! ale_linters#bitbake#oelint_adv#Command(buffer) abort
|
||||||
|
let l:config_file = ale#path#FindNearestFile(a:buffer,
|
||||||
|
\ ale#Var(a:buffer, 'bitbake_oelint_adv_config'))
|
||||||
|
|
||||||
|
return ((!empty(l:config_file))
|
||||||
|
\ ? 'OELINT_CONFIG=' . ale#Escape(l:config_file) . ' '
|
||||||
|
\ : '')
|
||||||
|
\ . '%e --quiet '
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'bitbake_oelint_adv_options')) . '%s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#bitbake#oelint_adv#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '\v^(.+):(.+):(.+):(.+):(.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': str2nr(l:match[2]),
|
||||||
|
\ 'type': l:match[3] is# 'error'
|
||||||
|
\ ? 'E' : (l:match[3] is# 'warning' ? 'W' : 'I'),
|
||||||
|
\ 'text': StripAnsiCodes(l:match[5]),
|
||||||
|
\ 'code': l:match[4]
|
||||||
|
\ })
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! StripAnsiCodes(line) abort
|
||||||
|
return substitute(a:line, '\e\[[0-9;]\+[mK]', '', 'g')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('bitbake', {
|
||||||
|
\ 'name': 'oelint_adv',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'bitbake_oelint_adv_executable')},
|
||||||
|
\ 'cwd': '%s:h',
|
||||||
|
\ 'command': function('ale_linters#bitbake#oelint_adv#Command'),
|
||||||
|
\ 'callback': 'ale_linters#bitbake#oelint_adv#Handle',
|
||||||
|
\ })
|
20
sources_non_forked/ale/ale_linters/c/cpplint.vim
Normal file
20
sources_non_forked/ale/ale_linters/c/cpplint.vim
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
" Author: Justin Huang <justin.y.huang@live.com>
|
||||||
|
" Description: cpplint for c files
|
||||||
|
|
||||||
|
call ale#Set('c_cpplint_executable', 'cpplint')
|
||||||
|
call ale#Set('c_cpplint_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#c#cpplint#GetCommand(buffer) abort
|
||||||
|
let l:options = ale#Var(a:buffer, 'c_cpplint_options')
|
||||||
|
|
||||||
|
return '%e' . ale#Pad(l:options) . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'cpplint',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'c_cpplint_executable')},
|
||||||
|
\ 'command': function('ale_linters#c#cpplint#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
5
sources_non_forked/ale/ale_linters/c/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/c/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for C files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('c')
|
43
sources_non_forked/ale/ale_linters/cmake/cmake_lint.vim
Normal file
43
sources_non_forked/ale/ale_linters/cmake/cmake_lint.vim
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
" Author: Carl Smedstad <carl.smedstad at protonmail dot com>
|
||||||
|
" Description: cmake-lint for cmake files
|
||||||
|
|
||||||
|
let g:ale_cmake_cmake_lint_executable =
|
||||||
|
\ get(g:, 'ale_cmake_cmake_lint_executable', 'cmake-lint')
|
||||||
|
|
||||||
|
let g:ale_cmake_cmake_lint_options =
|
||||||
|
\ get(g:, 'ale_cmake_cmake_lint_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmake_lint#Executable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cmake_cmake_lint_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmake_lint#Command(buffer) abort
|
||||||
|
let l:executable = ale_linters#cmake#cmake_lint#Executable(a:buffer)
|
||||||
|
let l:options = ale#Var(a:buffer, 'cmake_cmake_lint_options')
|
||||||
|
|
||||||
|
return ale#Escape(l:executable) . ' ' . l:options . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmake_lint#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '\v^[^:]+:(\d+),?(\d+)?:\s\[([A-Z]\d+)\]\s(.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'code': l:match[3],
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cmake', {
|
||||||
|
\ 'name': 'cmake_lint',
|
||||||
|
\ 'executable': function('ale_linters#cmake#cmake_lint#Executable'),
|
||||||
|
\ 'command': function('ale_linters#cmake#cmake_lint#Command'),
|
||||||
|
\ 'callback': 'ale_linters#cmake#cmake_lint#Handle',
|
||||||
|
\})
|
5
sources_non_forked/ale/ale_linters/cpp/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/cpp/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for C++ files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('cpp')
|
5
sources_non_forked/ale/ale_linters/cs/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/cs/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for C# files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('cs')
|
5
sources_non_forked/ale/ale_linters/css/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/css/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for CSS files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('css')
|
16
sources_non_forked/ale/ale_linters/css/vscodecss.vim
Normal file
16
sources_non_forked/ale/ale_linters/css/vscodecss.vim
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
" Author: Dalius Dobravolskas <dalius.dobravolskas@gmail.com>
|
||||||
|
" Description: VSCode css language server
|
||||||
|
|
||||||
|
function! ale_linters#css#vscodecss#GetProjectRoot(buffer) abort
|
||||||
|
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
||||||
|
|
||||||
|
return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('css', {
|
||||||
|
\ 'name': 'vscodecss',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': 'vscode-css-language-server',
|
||||||
|
\ 'command': '%e --stdio',
|
||||||
|
\ 'project_root': function('ale_linters#css#vscodecss#GetProjectRoot'),
|
||||||
|
\})
|
|
@ -1,36 +0,0 @@
|
||||||
" Author: w0rp <devw0rp@gmail.com>
|
|
||||||
" Description: Check Dart files with dartanalyzer
|
|
||||||
|
|
||||||
call ale#Set('dart_dartanalyzer_executable', 'dartanalyzer')
|
|
||||||
|
|
||||||
function! ale_linters#dart#dartanalyzer#GetCommand(buffer) abort
|
|
||||||
let l:path = ale#path#FindNearestFile(a:buffer, '.packages')
|
|
||||||
|
|
||||||
return '%e'
|
|
||||||
\ . (!empty(l:path) ? ' --packages ' . ale#Escape(l:path) : '')
|
|
||||||
\ . ' %s'
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ale_linters#dart#dartanalyzer#Handle(buffer, lines) abort
|
|
||||||
let l:pattern = '\v^ ([a-z]+) . (.+) at (.+):(\d+):(\d+) . (.+)$'
|
|
||||||
let l:output = []
|
|
||||||
|
|
||||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
|
||||||
call add(l:output, {
|
|
||||||
\ 'type': l:match[1] is# 'error' ? 'E' : 'W',
|
|
||||||
\ 'text': l:match[6] . ': ' . l:match[2],
|
|
||||||
\ 'lnum': str2nr(l:match[4]),
|
|
||||||
\ 'col': str2nr(l:match[5]),
|
|
||||||
\})
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return l:output
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
call ale#linter#Define('dart', {
|
|
||||||
\ 'name': 'dartanalyzer',
|
|
||||||
\ 'executable': {b -> ale#Var(b, 'dart_dartanalyzer_executable')},
|
|
||||||
\ 'command': function('ale_linters#dart#dartanalyzer#GetCommand'),
|
|
||||||
\ 'callback': 'ale_linters#dart#dartanalyzer#Handle',
|
|
||||||
\ 'lint_file': 1,
|
|
||||||
\})
|
|
5
sources_non_forked/ale/ale_linters/elixir/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/elixir/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Elixir files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('elixir')
|
|
@ -12,6 +12,7 @@ function! ale_linters#erlang#elvis#Handle(buffer, lines) abort
|
||||||
\ 'lnum': str2nr(l:match[1]),
|
\ 'lnum': str2nr(l:match[1]),
|
||||||
\ 'text': s:AbbreviateMessage(l:match[2]),
|
\ 'text': s:AbbreviateMessage(l:match[2]),
|
||||||
\ 'type': 'W',
|
\ 'type': 'W',
|
||||||
|
\ 'sub_type': 'style',
|
||||||
\})
|
\})
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/go/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/go/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Go files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('go')
|
|
@ -24,7 +24,7 @@ function! ale_linters#go#golangci_lint#GetCommand(buffer) abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#go#golangci_lint#GetMatches(lines) abort
|
function! ale_linters#go#golangci_lint#GetMatches(lines) abort
|
||||||
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:?:?:?\s\*?(.+)$'
|
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:?:?:?\s\*?(.+)\s+\((.+)\)$'
|
||||||
|
|
||||||
return ale#util#GetMatches(a:lines, l:pattern)
|
return ale#util#GetMatches(a:lines, l:pattern)
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -34,14 +34,20 @@ function! ale_linters#go#golangci_lint#Handler(buffer, lines) abort
|
||||||
let l:output = []
|
let l:output = []
|
||||||
|
|
||||||
for l:match in ale_linters#go#golangci_lint#GetMatches(a:lines)
|
for l:match in ale_linters#go#golangci_lint#GetMatches(a:lines)
|
||||||
|
if l:match[5] is# 'typecheck'
|
||||||
|
let l:msg_type = 'E'
|
||||||
|
else
|
||||||
|
let l:msg_type = 'W'
|
||||||
|
endif
|
||||||
|
|
||||||
" l:match[1] will already be an absolute path, output from
|
" l:match[1] will already be an absolute path, output from
|
||||||
" golangci_lint
|
" golangci_lint
|
||||||
call add(l:output, {
|
call add(l:output, {
|
||||||
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
|
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
|
||||||
\ 'lnum': l:match[2] + 0,
|
\ 'lnum': l:match[2] + 0,
|
||||||
\ 'col': l:match[3] + 0,
|
\ 'col': l:match[3] + 0,
|
||||||
\ 'type': 'E',
|
\ 'type': l:msg_type,
|
||||||
\ 'text': l:match[4],
|
\ 'text': l:match[4] . ' (' . l:match[5] . ')',
|
||||||
\})
|
\})
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
|
|
@ -11,10 +11,17 @@ function! ale_linters#handlebars#embertemplatelint#GetExecutable(buffer) abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#handlebars#embertemplatelint#GetCommand(buffer, version) abort
|
function! ale_linters#handlebars#embertemplatelint#GetCommand(buffer, version) abort
|
||||||
|
if ale#semver#GTE(a:version, [4, 0, 0])
|
||||||
|
" --json was removed in favor of --format=json in ember-template-lint@4.0.0
|
||||||
|
return '%e --format=json --filename %s'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ale#semver#GTE(a:version, [1, 6, 0])
|
||||||
" Reading from stdin was introduced in ember-template-lint@1.6.0
|
" Reading from stdin was introduced in ember-template-lint@1.6.0
|
||||||
return ale#semver#GTE(a:version, [1, 6, 0])
|
return '%e --json --filename %s'
|
||||||
\ ? '%e --json --filename %s'
|
endif
|
||||||
\ : '%e --json %t'
|
|
||||||
|
return '%e --json %t'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#handlebars#embertemplatelint#GetCommandWithVersionCheck(buffer) abort
|
function! ale_linters#handlebars#embertemplatelint#GetCommandWithVersionCheck(buffer) abort
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/haskell/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/haskell/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Haskell files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('haskell')
|
|
@ -4,6 +4,7 @@
|
||||||
" <devildead13@gmail.com>). It search more project root files.
|
" <devildead13@gmail.com>). It search more project root files.
|
||||||
"
|
"
|
||||||
call ale#Set('haskell_hls_executable', 'haskell-language-server-wrapper')
|
call ale#Set('haskell_hls_executable', 'haskell-language-server-wrapper')
|
||||||
|
call ale#Set('haskell_hls_config', {})
|
||||||
|
|
||||||
function! ale_linters#haskell#hls#FindRootFile(buffer) abort
|
function! ale_linters#haskell#hls#FindRootFile(buffer) abort
|
||||||
let l:serach_root_files = [
|
let l:serach_root_files = [
|
||||||
|
@ -60,4 +61,5 @@ call ale#linter#Define('haskell', {
|
||||||
\ 'command': function('ale_linters#haskell#hls#GetCommand'),
|
\ 'command': function('ale_linters#haskell#hls#GetCommand'),
|
||||||
\ 'executable': {b -> ale#Var(b, 'haskell_hls_executable')},
|
\ 'executable': {b -> ale#Var(b, 'haskell_hls_executable')},
|
||||||
\ 'project_root': function('ale_linters#haskell#hls#GetProjectRoot'),
|
\ 'project_root': function('ale_linters#haskell#hls#GetProjectRoot'),
|
||||||
|
\ 'lsp_config': {b -> ale#Var(b, 'haskell_hls_config')},
|
||||||
\})
|
\})
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/help/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/help/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for help files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('help')
|
|
@ -11,10 +11,7 @@ function! ale_linters#html#angular#GetProjectRoot(buffer) abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#html#angular#GetExecutable(buffer) abort
|
function! ale_linters#html#angular#GetExecutable(buffer) abort
|
||||||
return ale#path#FindExecutable(a:buffer, 'html_angular', [
|
return 'node'
|
||||||
\ 'node_modules/@angular/language-server/bin/ngserver',
|
|
||||||
\ 'node_modules/@angular/language-server/index.js',
|
|
||||||
\])
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#html#angular#GetCommand(buffer) abort
|
function! ale_linters#html#angular#GetCommand(buffer) abort
|
||||||
|
@ -34,9 +31,16 @@ function! ale_linters#html#angular#GetCommand(buffer) abort
|
||||||
\ fnamemodify(l:language_service_dir, ':h:h')
|
\ fnamemodify(l:language_service_dir, ':h:h')
|
||||||
\ . '/typescript'
|
\ . '/typescript'
|
||||||
\)
|
\)
|
||||||
let l:executable = ale_linters#html#angular#GetExecutable(a:buffer)
|
let l:script = ale#path#FindExecutable(a:buffer, 'html_angular', [
|
||||||
|
\ 'node_modules/@angular/language-server/bin/ngserver',
|
||||||
|
\ 'node_modules/@angular/language-server/index.js',
|
||||||
|
\])
|
||||||
|
|
||||||
return ale#node#Executable(a:buffer, l:executable)
|
if !filereadable(l:script)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#Escape('node') . ' ' . ale#Escape(l:script)
|
||||||
\ . ' --ngProbeLocations ' . ale#Escape(l:language_service_dir)
|
\ . ' --ngProbeLocations ' . ale#Escape(l:language_service_dir)
|
||||||
\ . ' --tsProbeLocations ' . ale#Escape(l:typescript_dir)
|
\ . ' --tsProbeLocations ' . ale#Escape(l:typescript_dir)
|
||||||
\ . ' --stdio'
|
\ . ' --stdio'
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/html/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/html/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for HTML files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('html')
|
16
sources_non_forked/ale/ale_linters/html/vscodehtml.vim
Normal file
16
sources_non_forked/ale/ale_linters/html/vscodehtml.vim
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
" Author: Dalius Dobravolskas <dalius.dobravolskas@gmail.com>
|
||||||
|
" Description: VSCode html language server
|
||||||
|
|
||||||
|
function! ale_linters#html#vscodehtml#GetProjectRoot(buffer) abort
|
||||||
|
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
||||||
|
|
||||||
|
return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('html', {
|
||||||
|
\ 'name': 'vscodehtml',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': 'vscode-html-language-server',
|
||||||
|
\ 'command': '%e --stdio',
|
||||||
|
\ 'project_root': function('ale_linters#html#vscodehtml#GetProjectRoot'),
|
||||||
|
\})
|
5
sources_non_forked/ale/ale_linters/java/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/java/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Java files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('java')
|
|
@ -192,4 +192,9 @@ call ale#linter#Define('java', {
|
||||||
\ 'command': function('ale_linters#java#eclipselsp#RunWithVersionCheck'),
|
\ 'command': function('ale_linters#java#eclipselsp#RunWithVersionCheck'),
|
||||||
\ 'language': 'java',
|
\ 'language': 'java',
|
||||||
\ 'project_root': function('ale#java#FindProjectRoot'),
|
\ 'project_root': function('ale#java#FindProjectRoot'),
|
||||||
|
\ 'initialization_options': {
|
||||||
|
\ 'extendedClientCapabilities': {
|
||||||
|
\ 'classFileContentsSupport': v:true
|
||||||
|
\ }
|
||||||
|
\ }
|
||||||
\})
|
\})
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/javascript/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/javascript/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for JavaScript files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('javascript')
|
5
sources_non_forked/ale/ale_linters/json/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/json/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for JSON files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('json')
|
16
sources_non_forked/ale/ale_linters/json/vscodejson.vim
Normal file
16
sources_non_forked/ale/ale_linters/json/vscodejson.vim
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
" Author: Dalius Dobravolskas <dalius.dobravolskas@gmail.com>
|
||||||
|
" Description: VSCode json language server
|
||||||
|
|
||||||
|
function! ale_linters#json#vscodejson#GetProjectRoot(buffer) abort
|
||||||
|
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
||||||
|
|
||||||
|
return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('json', {
|
||||||
|
\ 'name': 'vscodejson',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': 'vscode-json-language-server',
|
||||||
|
\ 'command': '%e --stdio',
|
||||||
|
\ 'project_root': function('ale_linters#json#vscodejson#GetProjectRoot'),
|
||||||
|
\})
|
5
sources_non_forked/ale/ale_linters/lua/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/lua/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Lua files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('lua')
|
46
sources_non_forked/ale/ale_linters/lua/selene.vim
Normal file
46
sources_non_forked/ale/ale_linters/lua/selene.vim
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
call ale#Set('lua_selene_executable', 'selene')
|
||||||
|
call ale#Set('lua_selene_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#lua#selene#GetCommand(buffer) abort
|
||||||
|
return '%e' . ale#Pad(ale#Var(a:buffer, 'lua_selene_options'))
|
||||||
|
\ . ' --display-style=json -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#lua#selene#Handle(buffer, lines) abort
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
" as of version 0.17.0, selene has no way to suppress summary
|
||||||
|
" information when outputting json, so stop processing when we hit it
|
||||||
|
" (PR for this here: https://github.com/Kampfkarren/selene/pull/356)
|
||||||
|
if l:line is# 'Results:'
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:json = json_decode(l:line)
|
||||||
|
let l:lint = {
|
||||||
|
\ 'lnum': l:json.primary_label.span.start_line + 1,
|
||||||
|
\ 'end_lnum': l:json.primary_label.span.end_line + 1,
|
||||||
|
\ 'col': l:json.primary_label.span.start_column + 1,
|
||||||
|
\ 'end_col': l:json.primary_label.span.end_column,
|
||||||
|
\ 'text': l:json.message,
|
||||||
|
\ 'code': l:json.code,
|
||||||
|
\ 'type': l:json.severity is# 'Warning' ? 'W' : 'E',
|
||||||
|
\}
|
||||||
|
|
||||||
|
if has_key(l:json, 'notes') && len(l:json.notes) > 0
|
||||||
|
let l:lint.detail = l:lint.text . "\n\n" . join(l:json.notes, "\n")
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, l:lint)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('lua', {
|
||||||
|
\ 'name': 'selene',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'lua_selene_executable')},
|
||||||
|
\ 'command': function('ale_linters#lua#selene#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#lua#selene#Handle',
|
||||||
|
\})
|
|
@ -20,6 +20,6 @@ endfunction
|
||||||
call ale#linter#Define('make', {
|
call ale#linter#Define('make', {
|
||||||
\ 'name': 'checkmake',
|
\ 'name': 'checkmake',
|
||||||
\ 'executable': 'checkmake',
|
\ 'executable': 'checkmake',
|
||||||
\ 'command': 'checkmake %s --format="{{.LineNumber}}:{{.Rule}}:{{.Violation}}"',
|
\ 'command': 'checkmake %s --format="{{.LineNumber}}:{{.Rule}}:{{.Violation}}{{\"\r\n\"}}"',
|
||||||
\ 'callback': 'ale_linters#make#checkmake#Handle',
|
\ 'callback': 'ale_linters#make#checkmake#Handle',
|
||||||
\})
|
\})
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/markdown/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/markdown/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Markdown files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('markdown')
|
|
@ -5,7 +5,7 @@
|
||||||
function! ale_linters#nix#nix#Command(buffer, output, meta) abort
|
function! ale_linters#nix#nix#Command(buffer, output, meta) abort
|
||||||
let l:version = a:output[0][22:]
|
let l:version = a:output[0][22:]
|
||||||
|
|
||||||
if l:version =~# '^\(2.4\|3\).*'
|
if l:version =~# '^\(2.[4-9]\|3\).*'
|
||||||
return 'nix-instantiate --log-format internal-json --parse -'
|
return 'nix-instantiate --log-format internal-json --parse -'
|
||||||
else
|
else
|
||||||
return 'nix-instantiate --parse -'
|
return 'nix-instantiate --parse -'
|
||||||
|
|
18
sources_non_forked/ale/ale_linters/nix/statix.vim
Normal file
18
sources_non_forked/ale/ale_linters/nix/statix.vim
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: statix analysis and suggestions for Nix files
|
||||||
|
|
||||||
|
call ale#Set('nix_statix_check_executable', 'statix')
|
||||||
|
call ale#Set('nix_statix_check_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#nix#statix#GetCommand(buffer) abort
|
||||||
|
return '%e check -o errfmt --stdin'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'nix_statix_check_options'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('nix', {
|
||||||
|
\ 'name': 'statix',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'nix_statix_check_executable')},
|
||||||
|
\ 'command': function('ale_linters#nix#statix#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#statix#Handle',
|
||||||
|
\})
|
5
sources_non_forked/ale/ale_linters/php/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/php/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for PHP files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('php')
|
0
sources_non_forked/ale/ale_linters/php/intelephense.vim
Normal file → Executable file
0
sources_non_forked/ale/ale_linters/php/intelephense.vim
Normal file → Executable file
23
sources_non_forked/ale/ale_linters/php/phpactor.vim
Normal file
23
sources_non_forked/ale/ale_linters/php/phpactor.vim
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
" Author: Arizard <https://github.com/Arizard>
|
||||||
|
" Description: PHPactor integration for ALE
|
||||||
|
|
||||||
|
" Copied from langserver.vim
|
||||||
|
function! ale_linters#php#phpactor#GetProjectRoot(buffer) abort
|
||||||
|
let l:composer_path = ale#path#FindNearestFile(a:buffer, 'composer.json')
|
||||||
|
|
||||||
|
if (!empty(l:composer_path))
|
||||||
|
return fnamemodify(l:composer_path, ':h')
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
||||||
|
|
||||||
|
return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('php', {
|
||||||
|
\ 'name': 'phpactor',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': 'phpactor',
|
||||||
|
\ 'command': '%e language-server',
|
||||||
|
\ 'project_root': function('ale_linters#php#phpactor#GetProjectRoot'),
|
||||||
|
\})
|
|
@ -1,4 +1,4 @@
|
||||||
" Author: medains <https://github.com/medains>, ardis <https://github.com/ardisdreelath>
|
" Author: medains <https://github.com/medains>, ardis <https://github.com/ardisdreelath>, Arizard <https://github.com/Arizard>
|
||||||
" Description: phpstan for PHP files
|
" Description: phpstan for PHP files
|
||||||
|
|
||||||
" Set to change the ruleset
|
" Set to change the ruleset
|
||||||
|
@ -6,6 +6,7 @@ let g:ale_php_phpstan_executable = get(g:, 'ale_php_phpstan_executable', 'phpsta
|
||||||
let g:ale_php_phpstan_level = get(g:, 'ale_php_phpstan_level', '')
|
let g:ale_php_phpstan_level = get(g:, 'ale_php_phpstan_level', '')
|
||||||
let g:ale_php_phpstan_configuration = get(g:, 'ale_php_phpstan_configuration', '')
|
let g:ale_php_phpstan_configuration = get(g:, 'ale_php_phpstan_configuration', '')
|
||||||
let g:ale_php_phpstan_autoload = get(g:, 'ale_php_phpstan_autoload', '')
|
let g:ale_php_phpstan_autoload = get(g:, 'ale_php_phpstan_autoload', '')
|
||||||
|
let g:ale_php_phpstan_memory_limit = get(g:, 'ale_php_phpstan_memory_limit', '')
|
||||||
call ale#Set('php_phpstan_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('php_phpstan_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
function! ale_linters#php#phpstan#GetCommand(buffer, version) abort
|
function! ale_linters#php#phpstan#GetCommand(buffer, version) abort
|
||||||
|
@ -19,6 +20,11 @@ function! ale_linters#php#phpstan#GetCommand(buffer, version) abort
|
||||||
\ ? ' -a ' . ale#Escape(l:autoload)
|
\ ? ' -a ' . ale#Escape(l:autoload)
|
||||||
\ : ''
|
\ : ''
|
||||||
|
|
||||||
|
let l:memory_limit = ale#Var(a:buffer, 'php_phpstan_memory_limit')
|
||||||
|
let l:memory_limit_option = !empty(l:memory_limit)
|
||||||
|
\ ? ' --memory-limit ' . ale#Escape(l:memory_limit)
|
||||||
|
\ : ''
|
||||||
|
|
||||||
let l:level = ale#Var(a:buffer, 'php_phpstan_level')
|
let l:level = ale#Var(a:buffer, 'php_phpstan_level')
|
||||||
let l:config_file_exists = ale#path#FindNearestFile(a:buffer, 'phpstan.neon')
|
let l:config_file_exists = ale#path#FindNearestFile(a:buffer, 'phpstan.neon')
|
||||||
let l:dist_config_file_exists = ale#path#FindNearestFile(a:buffer, 'phpstan.neon.dist')
|
let l:dist_config_file_exists = ale#path#FindNearestFile(a:buffer, 'phpstan.neon.dist')
|
||||||
|
@ -41,6 +47,7 @@ function! ale_linters#php#phpstan#GetCommand(buffer, version) abort
|
||||||
\ . l:configuration_option
|
\ . l:configuration_option
|
||||||
\ . l:autoload_option
|
\ . l:autoload_option
|
||||||
\ . l:level_option
|
\ . l:level_option
|
||||||
|
\ . l:memory_limit_option
|
||||||
\ . ' %s'
|
\ . ' %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,12 @@ call ale#Set('php_psalm_options', '')
|
||||||
call ale#Set('php_psalm_use_global', get(g:, 'ale_use_global_executables', 0))
|
call ale#Set('php_psalm_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
function! ale_linters#php#psalm#GetProjectRoot(buffer) abort
|
function! ale_linters#php#psalm#GetProjectRoot(buffer) abort
|
||||||
|
let l:composer_path = ale#path#FindNearestFile(a:buffer, 'composer.json')
|
||||||
|
|
||||||
|
if (!empty(l:composer_path))
|
||||||
|
return fnamemodify(l:composer_path, ':h')
|
||||||
|
endif
|
||||||
|
|
||||||
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
||||||
|
|
||||||
return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : ''
|
return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : ''
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/powershell/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/powershell/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for PowerShell files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('powershell')
|
23
sources_non_forked/ale/ale_linters/proto/buf_lint.vim
Normal file
23
sources_non_forked/ale/ale_linters/proto/buf_lint.vim
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
" Author: Alex McKinney <alexmckinney01@gmail.com>
|
||||||
|
" Description: Run buf lint.
|
||||||
|
|
||||||
|
call ale#Set('proto_buf_lint_executable', 'buf')
|
||||||
|
call ale#Set('proto_buf_lint_config', '')
|
||||||
|
|
||||||
|
function! ale_linters#proto#buf_lint#GetCommand(buffer) abort
|
||||||
|
let l:config = ale#Var(a:buffer, 'proto_buf_lint_config')
|
||||||
|
|
||||||
|
return '%e lint'
|
||||||
|
\ . (!empty(l:config) ? ' --config=' . ale#Escape(l:config) : '')
|
||||||
|
\ . ' %s#include_package_files=true'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('proto', {
|
||||||
|
\ 'name': 'buf_lint',
|
||||||
|
\ 'aliases': ['buf-lint'],
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'proto_buf_lint_executable')},
|
||||||
|
\ 'command': function('ale_linters#proto#buf_lint#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsError',
|
||||||
|
\})
|
5
sources_non_forked/ale/ale_linters/python/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/python/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Python files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('python')
|
|
@ -29,7 +29,7 @@ function! ale_linters#python#pydocstyle#GetCommand(buffer) abort
|
||||||
|
|
||||||
return ale#Escape(l:executable) . l:exec_args
|
return ale#Escape(l:executable) . l:exec_args
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'python_pydocstyle_options'))
|
\ . ale#Pad(ale#Var(a:buffer, 'python_pydocstyle_options'))
|
||||||
\ . ' %s:t'
|
\ . ' %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#python#pydocstyle#Handle(buffer, lines) abort
|
function! ale_linters#python#pydocstyle#Handle(buffer, lines) abort
|
||||||
|
|
|
@ -22,6 +22,22 @@ function! ale_linters#python#pylama#GetExecutable(buffer) abort
|
||||||
return ale#python#FindExecutable(a:buffer, 'python_pylama', ['pylama'])
|
return ale#python#FindExecutable(a:buffer, 'python_pylama', ['pylama'])
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#python#pylama#RunWithVersionCheck(buffer) abort
|
||||||
|
let l:executable = ale_linters#python#pylama#GetExecutable(a:buffer)
|
||||||
|
let l:exec_args = l:executable =~? 'pipenv\|poetry$'
|
||||||
|
\ ? ' run pylama'
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
let l:command = ale#Escape(l:executable) . l:exec_args . ' --version'
|
||||||
|
|
||||||
|
return ale#semver#RunWithVersionCheck(
|
||||||
|
\ a:buffer,
|
||||||
|
\ l:executable,
|
||||||
|
\ l:command,
|
||||||
|
\ function('ale_linters#python#pylama#GetCommand'),
|
||||||
|
\)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#python#pylama#GetCwd(buffer) abort
|
function! ale_linters#python#pylama#GetCwd(buffer) abort
|
||||||
if ale#Var(a:buffer, 'python_pylama_change_directory')
|
if ale#Var(a:buffer, 'python_pylama_change_directory')
|
||||||
" Pylama loads its configuration from the current directory only, and
|
" Pylama loads its configuration from the current directory only, and
|
||||||
|
@ -35,27 +51,33 @@ function! ale_linters#python#pylama#GetCwd(buffer) abort
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#python#pylama#GetCommand(buffer) abort
|
function! ale_linters#python#pylama#GetCommand(buffer, version) abort
|
||||||
let l:executable = ale_linters#python#pylama#GetExecutable(a:buffer)
|
let l:executable = ale_linters#python#pylama#GetExecutable(a:buffer)
|
||||||
let l:exec_args = l:executable =~? 'pipenv\|poetry$'
|
let l:exec_args = l:executable =~? 'pipenv\|poetry$'
|
||||||
\ ? ' run pylama'
|
\ ? ' run pylama'
|
||||||
\ : ''
|
\ : ''
|
||||||
|
|
||||||
|
" json format is added in version 8.1.4
|
||||||
|
" https://github.com/klen/pylama/blob/develop/Changelog
|
||||||
|
let l:format_json_args = ale#semver#GTE(a:version, [8, 1, 4])
|
||||||
|
\ ? ' --format json'
|
||||||
|
\ : ''
|
||||||
|
|
||||||
" Note: Using %t to lint changes would be preferable, but many pylama
|
" Note: Using %t to lint changes would be preferable, but many pylama
|
||||||
" checks use surrounding paths (e.g. C0103 module name, E0402 relative
|
" checks use surrounding paths (e.g. C0103 module name, E0402 relative
|
||||||
" import beyond top, etc.). Neither is ideal.
|
" import beyond top, etc.). Neither is ideal.
|
||||||
return ale#Escape(l:executable) . l:exec_args
|
return ale#Escape(l:executable) . l:exec_args
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'python_pylama_options'))
|
\ . ale#Pad(ale#Var(a:buffer, 'python_pylama_options'))
|
||||||
|
\ . l:format_json_args
|
||||||
\ . ' %s'
|
\ . ' %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#python#pylama#Handle(buffer, lines) abort
|
function! ale_linters#python#pylama#Handle(buffer, version, lines) abort
|
||||||
if empty(a:lines)
|
if empty(a:lines)
|
||||||
return []
|
return []
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:output = ale#python#HandleTraceback(a:lines, 1)
|
let l:output = ale#python#HandleTraceback(a:lines, 1)
|
||||||
let l:pattern = '\v^.{-}:([0-9]+):([0-9]+): +%(([A-Z][0-9]+):? +)?(.*)$'
|
|
||||||
|
|
||||||
" First letter of error code is a pylint-compatible message type
|
" First letter of error code is a pylint-compatible message type
|
||||||
" http://pylint.pycqa.org/en/latest/user_guide/output.html#source-code-analysis-section
|
" http://pylint.pycqa.org/en/latest/user_guide/output.html#source-code-analysis-section
|
||||||
|
@ -75,6 +97,30 @@ function! ale_linters#python#pylama#Handle(buffer, lines) abort
|
||||||
\ 'D': 'style',
|
\ 'D': 'style',
|
||||||
\}
|
\}
|
||||||
|
|
||||||
|
if ale#semver#GTE(a:version, [8, 1, 4])
|
||||||
|
try
|
||||||
|
let l:errors = json_decode(join(a:lines, ''))
|
||||||
|
catch
|
||||||
|
return l:output
|
||||||
|
endtry
|
||||||
|
|
||||||
|
if empty(l:errors)
|
||||||
|
return l:output
|
||||||
|
endif
|
||||||
|
|
||||||
|
for l:error in l:errors
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:error['lnum'],
|
||||||
|
\ 'col': l:error['col'],
|
||||||
|
\ 'code': l:error['number'],
|
||||||
|
\ 'type': get(l:pylint_type_to_ale_type, l:error['etype'], 'W'),
|
||||||
|
\ 'sub_type': get(l:pylint_type_to_ale_sub_type, l:error['etype'], ''),
|
||||||
|
\ 'text': printf('%s [%s]', l:error['message'], l:error['source']),
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
let l:pattern = '\v^.{-}:([0-9]+):([0-9]+): +%(([A-Z][0-9]+):? +)?(.*)$'
|
||||||
|
|
||||||
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': str2nr(l:match[1]),
|
\ 'lnum': str2nr(l:match[1]),
|
||||||
|
@ -85,6 +131,7 @@ function! ale_linters#python#pylama#Handle(buffer, lines) abort
|
||||||
\ 'text': l:match[4],
|
\ 'text': l:match[4],
|
||||||
\})
|
\})
|
||||||
endfor
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
return l:output
|
return l:output
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -93,7 +140,15 @@ call ale#linter#Define('python', {
|
||||||
\ 'name': 'pylama',
|
\ 'name': 'pylama',
|
||||||
\ 'executable': function('ale_linters#python#pylama#GetExecutable'),
|
\ 'executable': function('ale_linters#python#pylama#GetExecutable'),
|
||||||
\ 'cwd': function('ale_linters#python#pylama#GetCwd'),
|
\ 'cwd': function('ale_linters#python#pylama#GetCwd'),
|
||||||
\ 'command': function('ale_linters#python#pylama#GetCommand'),
|
\ 'command': function('ale_linters#python#pylama#RunWithVersionCheck'),
|
||||||
\ 'callback': 'ale_linters#python#pylama#Handle',
|
\ 'callback': {buffer, lines -> ale#semver#RunWithVersionCheck(
|
||||||
|
\ buffer,
|
||||||
|
\ ale_linters#python#pylama#GetExecutable(buffer),
|
||||||
|
\ '%e --version',
|
||||||
|
\ {buffer, version -> ale_linters#python#pylama#Handle(
|
||||||
|
\ buffer,
|
||||||
|
\ l:version,
|
||||||
|
\ lines)},
|
||||||
|
\ )},
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
\})
|
\})
|
||||||
|
|
75
sources_non_forked/ale/ale_linters/python/unimport.vim
Normal file
75
sources_non_forked/ale/ale_linters/python/unimport.vim
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
" Author: Author: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
call ale#Set('python_unimport_executable', 'unimport')
|
||||||
|
call ale#Set('python_unimport_options', '')
|
||||||
|
call ale#Set('python_unimport_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
call ale#Set('python_unimport_auto_pipenv', 0)
|
||||||
|
call ale#Set('python_unimport_auto_poetry', 0)
|
||||||
|
|
||||||
|
function! ale_linters#python#unimport#GetExecutable(buffer) abort
|
||||||
|
if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_unimport_auto_pipenv'))
|
||||||
|
\ && ale#python#PipenvPresent(a:buffer)
|
||||||
|
return 'pipenv'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_unimport_auto_poetry'))
|
||||||
|
\ && ale#python#PoetryPresent(a:buffer)
|
||||||
|
return 'poetry'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#python#FindExecutable(a:buffer, 'python_unimport', ['unimport'])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#python#unimport#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#python#unimport#GetExecutable(a:buffer)
|
||||||
|
let l:exec_args = l:executable =~? 'pipenv\|poetry$'
|
||||||
|
\ ? ' run unimport'
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
return '%e' . l:exec_args
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'python_unimport_options'))
|
||||||
|
\ . ' --check'
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! ale_linters#python#unimport#GetCwd(buffer) abort
|
||||||
|
let l:project_root = ale#python#FindProjectRoot(a:buffer)
|
||||||
|
|
||||||
|
return !empty(l:project_root)
|
||||||
|
\ ? l:project_root
|
||||||
|
\ : expand('#' . a:buffer . ':p:h')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! ale_linters#python#unimport#Handle(buffer, lines) abort
|
||||||
|
let l:output = ale#python#HandleTraceback(a:lines, 10)
|
||||||
|
|
||||||
|
if !empty(l:output)
|
||||||
|
return l:output
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Matches lines like:
|
||||||
|
"
|
||||||
|
" urllib.parse at path/to/file.py:9
|
||||||
|
let l:pattern = '\v(.+) at [^:]+:(\d+)$'
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'text': 'unused: ' . l:match[1],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
call ale#linter#Define('python', {
|
||||||
|
\ 'name': 'unimport',
|
||||||
|
\ 'executable': function('ale_linters#python#unimport#GetExecutable'),
|
||||||
|
\ 'cwd': function('ale_linters#python#unimport#GetCwd'),
|
||||||
|
\ 'command': function('ale_linters#python#unimport#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#python#unimport#Handle',
|
||||||
|
\})
|
4
sources_non_forked/ale/ale_linters/rego/cspell.vim
Normal file
4
sources_non_forked/ale/ale_linters/rego/cspell.vim
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Description: cspell support for rego files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('rego')
|
56
sources_non_forked/ale/ale_linters/rego/opacheck.vim
Normal file
56
sources_non_forked/ale/ale_linters/rego/opacheck.vim
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
" Description: opa check for rego files
|
||||||
|
|
||||||
|
call ale#Set('rego_opacheck_executable', 'opa')
|
||||||
|
call ale#Set('rego_opacheck_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#rego#opacheck#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'rego_opacheck_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#rego#opacheck#GetCommand(buffer) abort
|
||||||
|
let l:options = ale#Var(a:buffer, 'rego_opacheck_options')
|
||||||
|
|
||||||
|
return ale#Escape(ale_linters#rego#opacheck#GetExecutable(a:buffer))
|
||||||
|
\ . ' check %s --format json '
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#rego#opacheck#Handle(buffer, lines) abort
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
let l:errors = ale#util#FuzzyJSONDecode(a:lines, {'errors': []})
|
||||||
|
let l:dir = expand('#' . a:buffer . ':p:h')
|
||||||
|
let l:file = expand('#' . a:buffer . ':p')
|
||||||
|
|
||||||
|
for l:error in l:errors['errors']
|
||||||
|
if has_key(l:error, 'location')
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename': ale#path#GetAbsPath(l:dir, l:error['location']['file']),
|
||||||
|
\ 'lnum': l:error['location']['row'],
|
||||||
|
\ 'col': l:error['location']['col'],
|
||||||
|
\ 'text': l:error['message'],
|
||||||
|
\ 'code': l:error['code'],
|
||||||
|
\ 'type': 'E',
|
||||||
|
\})
|
||||||
|
else
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename': l:file,
|
||||||
|
\ 'lnum': 0,
|
||||||
|
\ 'col': 0,
|
||||||
|
\ 'text': l:error['message'],
|
||||||
|
\ 'code': l:error['code'],
|
||||||
|
\ 'type': 'E',
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('rego', {
|
||||||
|
\ 'name': 'opacheck',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'executable': function('ale_linters#rego#opacheck#GetExecutable'),
|
||||||
|
\ 'command': function('ale_linters#rego#opacheck#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#rego#opacheck#Handle',
|
||||||
|
\})
|
5
sources_non_forked/ale/ale_linters/rst/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/rst/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for ReStructuredText files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('rst')
|
5
sources_non_forked/ale/ale_linters/ruby/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/ruby/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Ruby files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('ruby')
|
|
@ -19,6 +19,10 @@ function! ale_linters#ruby#reek#GetCommand(buffer, version) abort
|
||||||
\ . l:display_name_args
|
\ . l:display_name_args
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:GetDocumentationLink(error) abort
|
||||||
|
return get(a:error, 'documentation_link', get(a:error, 'wiki_link', ''))
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:BuildText(buffer, error) abort
|
function! s:BuildText(buffer, error) abort
|
||||||
let l:parts = []
|
let l:parts = []
|
||||||
|
|
||||||
|
@ -29,7 +33,7 @@ function! s:BuildText(buffer, error) abort
|
||||||
call add(l:parts, a:error.message)
|
call add(l:parts, a:error.message)
|
||||||
|
|
||||||
if ale#Var(a:buffer, 'ruby_reek_show_wiki_link')
|
if ale#Var(a:buffer, 'ruby_reek_show_wiki_link')
|
||||||
call add(l:parts, '[' . a:error.wiki_link . ']')
|
call add(l:parts, '[' . s:GetDocumentationLink(a:error) . ']')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return join(l:parts, ' ')
|
return join(l:parts, ' ')
|
||||||
|
|
|
@ -9,9 +9,21 @@ function! ale_linters#rust#analyzer#GetCommand(buffer) abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#rust#analyzer#GetProjectRoot(buffer) abort
|
function! ale_linters#rust#analyzer#GetProjectRoot(buffer) abort
|
||||||
|
" Try to find nearest Cargo.toml for cargo projects
|
||||||
let l:cargo_file = ale#path#FindNearestFile(a:buffer, 'Cargo.toml')
|
let l:cargo_file = ale#path#FindNearestFile(a:buffer, 'Cargo.toml')
|
||||||
|
|
||||||
return !empty(l:cargo_file) ? fnamemodify(l:cargo_file, ':h') : ''
|
if !empty(l:cargo_file)
|
||||||
|
return fnamemodify(l:cargo_file, ':h')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Try to find nearest rust-project.json for non-cargo projects
|
||||||
|
let l:rust_project = ale#path#FindNearestFile(a:buffer, 'rust-project.json')
|
||||||
|
|
||||||
|
if !empty(l:rust_project)
|
||||||
|
return fnamemodify(l:rust_project, ':h')
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('rust', {
|
call ale#linter#Define('rust', {
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/rust/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/rust/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Rust files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('rust')
|
|
@ -1,7 +1,7 @@
|
||||||
" Author: Daniel Schemala <istjanichtzufassen@gmail.com>
|
" Author: Daniel Schemala <istjanichtzufassen@gmail.com>
|
||||||
" Description: rustc for rust files
|
" Description: rustc for rust files
|
||||||
|
|
||||||
call ale#Set('rust_rustc_options', '-Z no-codegen')
|
call ale#Set('rust_rustc_options', '--emit=mir -o /dev/null')
|
||||||
|
|
||||||
function! ale_linters#rust#rustc#RustcCommand(buffer) abort
|
function! ale_linters#rust#rustc#RustcCommand(buffer) abort
|
||||||
" Try to guess the library search path. If the project is managed by cargo,
|
" Try to guess the library search path. If the project is managed by cargo,
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/scala/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/scala/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Scala files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('scala')
|
5
sources_non_forked/ale/ale_linters/sh/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/sh/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for shell scripts.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('sh')
|
5
sources_non_forked/ale/ale_linters/swift/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/swift/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Swift files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('swift')
|
41
sources_non_forked/ale/ale_linters/terraform/checkov.vim
Normal file
41
sources_non_forked/ale/ale_linters/terraform/checkov.vim
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
" Author: Thyme-87 <thyme-87@posteo.me>
|
||||||
|
" Description: use checkov for providing warnings via ale
|
||||||
|
|
||||||
|
call ale#Set('terraform_checkov_executable', 'checkov')
|
||||||
|
call ale#Set('terraform_checkov_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#terraform#checkov#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'terraform_checkov_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#terraform#checkov#GetCommand(buffer) abort
|
||||||
|
return '%e ' . '-f %t -o json --quiet ' . ale#Var(a:buffer, 'terraform_checkov_options')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#terraform#checkov#Handle(buffer, lines) abort
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
let l:results = get(get(ale#util#FuzzyJSONDecode(a:lines, {}), 'results', []), 'failed_checks', [])
|
||||||
|
|
||||||
|
for l:violation in l:results
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename': l:violation['file_path'],
|
||||||
|
\ 'lnum': l:violation['file_line_range'][0],
|
||||||
|
\ 'end_lnum': l:violation['file_line_range'][1],
|
||||||
|
\ 'text': l:violation['check_name'] . ' [' . l:violation['check_id'] . ']',
|
||||||
|
\ 'detail': l:violation['check_id'] . ': ' . l:violation['check_name'] . "\n" .
|
||||||
|
\ 'For more information, see: '. l:violation['guideline'],
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ })
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('terraform', {
|
||||||
|
\ 'name': 'checkov',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable': function('ale_linters#terraform#checkov#GetExecutable'),
|
||||||
|
\ 'command': function('ale_linters#terraform#checkov#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#terraform#checkov#Handle',
|
||||||
|
\})
|
|
@ -21,7 +21,13 @@ function! ale_linters#terraform#terraform#GetType(severity) abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#terraform#terraform#GetDetail(error) abort
|
function! ale_linters#terraform#terraform#GetDetail(error) abort
|
||||||
return get(a:error, 'detail', get(a:error, 'summary', ''))
|
let l:detail = get(a:error, 'detail', '')
|
||||||
|
|
||||||
|
if strlen(l:detail) > 0
|
||||||
|
return l:detail
|
||||||
|
else
|
||||||
|
return get(a:error, 'summary', '')
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#terraform#terraform#Handle(buffer, lines) abort
|
function! ale_linters#terraform#terraform#Handle(buffer, lines) abort
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/tex/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/tex/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for TeX files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('tex')
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
call ale#Set('tex_texlab_executable', 'texlab')
|
call ale#Set('tex_texlab_executable', 'texlab')
|
||||||
call ale#Set('tex_texlab_options', '')
|
call ale#Set('tex_texlab_options', '')
|
||||||
|
call ale#Set('tex_texlab_config', {})
|
||||||
|
|
||||||
function! ale_linters#tex#texlab#GetProjectRoot(buffer) abort
|
function! ale_linters#tex#texlab#GetProjectRoot(buffer) abort
|
||||||
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
||||||
|
@ -21,4 +22,5 @@ call ale#linter#Define('tex', {
|
||||||
\ 'executable': {b -> ale#Var(b, 'tex_texlab_executable')},
|
\ 'executable': {b -> ale#Var(b, 'tex_texlab_executable')},
|
||||||
\ 'command': function('ale_linters#tex#texlab#GetCommand'),
|
\ 'command': function('ale_linters#tex#texlab#GetCommand'),
|
||||||
\ 'project_root': function('ale_linters#tex#texlab#GetProjectRoot'),
|
\ 'project_root': function('ale_linters#tex#texlab#GetProjectRoot'),
|
||||||
|
\ 'lsp_config': {b -> ale#Var(b, 'tex_texlab_config')},
|
||||||
\})
|
\})
|
||||||
|
|
5
sources_non_forked/ale/ale_linters/texinfo/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/texinfo/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for TeXInfo files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('texinfo')
|
5
sources_non_forked/ale/ale_linters/text/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/text/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for general text files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('text')
|
5
sources_non_forked/ale/ale_linters/typescript/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/typescript/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for TypeScript files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('typescript')
|
5
sources_non_forked/ale/ale_linters/vue/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/vue/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Vue files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('vue')
|
80
sources_non_forked/ale/ale_linters/vue/volar.vim
Normal file
80
sources_non_forked/ale/ale_linters/vue/volar.vim
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
" Author: Arnold Chand <creativenull@outlook.com>
|
||||||
|
" Description: Volar Language Server integration for ALE adopted from
|
||||||
|
" nvim-lspconfig and volar/packages/shared/src/types.ts
|
||||||
|
|
||||||
|
call ale#Set('vue_volar_executable', 'volar-server')
|
||||||
|
call ale#Set('vue_volar_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
call ale#Set('vue_volar_init_options', {
|
||||||
|
\ 'documentFeatures': {
|
||||||
|
\ 'documentColor': v:false,
|
||||||
|
\ 'documentFormatting': {
|
||||||
|
\ 'defaultPrintWidth': 100,
|
||||||
|
\ },
|
||||||
|
\ 'documentSymbol': v:true,
|
||||||
|
\ 'foldingRange': v:true,
|
||||||
|
\ 'linkedEditingRange': v:true,
|
||||||
|
\ 'selectionRange': v:true,
|
||||||
|
\ },
|
||||||
|
\ 'languageFeatures': {
|
||||||
|
\ 'callHierarchy': v:true,
|
||||||
|
\ 'codeAction': v:true,
|
||||||
|
\ 'codeLens': v:true,
|
||||||
|
\ 'completion': {
|
||||||
|
\ 'defaultAttrNameCase': 'kebabCase',
|
||||||
|
\ 'defaultTagNameCase': 'both',
|
||||||
|
\ 'getDocumentNameCaseRequest': v:false,
|
||||||
|
\ 'getDocumentSelectionRequest': v:false,
|
||||||
|
\ },
|
||||||
|
\ 'definition': v:true,
|
||||||
|
\ 'diagnostics': v:true,
|
||||||
|
\ 'documentHighlight': v:true,
|
||||||
|
\ 'documentLink': v:true,
|
||||||
|
\ 'hover': v:true,
|
||||||
|
\ 'references': v:true,
|
||||||
|
\ 'rename': v:true,
|
||||||
|
\ 'renameFileRefactoring': v:true,
|
||||||
|
\ 'schemaRequestService': v:true,
|
||||||
|
\ 'semanticTokens': v:false,
|
||||||
|
\ 'signatureHelp': v:true,
|
||||||
|
\ 'typeDefinition': v:true,
|
||||||
|
\ 'workspaceSymbol': v:false,
|
||||||
|
\ },
|
||||||
|
\ 'typescript': {
|
||||||
|
\ 'serverPath': '',
|
||||||
|
\ 'localizedPath': v:null,
|
||||||
|
\ },
|
||||||
|
\})
|
||||||
|
|
||||||
|
function! ale_linters#vue#volar#GetProjectRoot(buffer) abort
|
||||||
|
let l:project_roots = ['package.json', 'vite.config.js', '.git', bufname(a:buffer)]
|
||||||
|
|
||||||
|
for l:project_root in l:project_roots
|
||||||
|
let l:nearest_filepath = ale#path#FindNearestFile(a:buffer, l:project_root)
|
||||||
|
|
||||||
|
if !empty(l:nearest_filepath)
|
||||||
|
return fnamemodify(l:nearest_filepath, ':h')
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#vue#volar#GetInitializationOptions(buffer) abort
|
||||||
|
let l:tsserver_path = ale#path#FindNearestExecutable(a:buffer, [
|
||||||
|
\ 'node_modules/typescript/lib/tsserverlibrary.js'
|
||||||
|
\ ])
|
||||||
|
let l:init_options = ale#Var(a:buffer, 'vue_volar_init_options')
|
||||||
|
let l:init_options.typescript.serverPath = l:tsserver_path
|
||||||
|
|
||||||
|
return l:init_options
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('vue', {
|
||||||
|
\ 'name': 'volar',
|
||||||
|
\ 'language': 'vue',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': {b -> ale#path#FindExecutable(b, 'vue_volar', ['node_modules/.bin/volar-server'])},
|
||||||
|
\ 'command': '%e --stdio',
|
||||||
|
\ 'project_root': function('ale_linters#vue#volar#GetProjectRoot'),
|
||||||
|
\ 'initialization_options': function('ale_linters#vue#volar#GetInitializationOptions'),
|
||||||
|
\})
|
12
sources_non_forked/ale/ale_linters/wgsl/naga.vim
Normal file
12
sources_non_forked/ale/ale_linters/wgsl/naga.vim
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
" Author: rhysd <https://github.com/rhysd>
|
||||||
|
" Description: naga-cli linter for WGSL syntax.
|
||||||
|
|
||||||
|
call ale#Set('wgsl_naga_executable', 'naga')
|
||||||
|
|
||||||
|
call ale#linter#Define('wgsl', {
|
||||||
|
\ 'name': 'naga',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'wgsl_naga_executable')},
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'command': {b -> '%e --stdin-file-path %s'},
|
||||||
|
\ 'callback': 'ale#handlers#naga#Handle',
|
||||||
|
\})
|
5
sources_non_forked/ale/ale_linters/xhtml/cspell.vim
Normal file
5
sources_non_forked/ale/ale_linters/xhtml/cspell.vim
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for XHTML files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('xhtml')
|
10
sources_non_forked/ale/ale_linters/yaml/actionlint.vim
Normal file
10
sources_non_forked/ale/ale_linters/yaml/actionlint.vim
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
" Author: bretello <bretello@distruzione.org>
|
||||||
|
|
||||||
|
call ale#Set('yaml_actionlint_executable', 'actionlint')
|
||||||
|
|
||||||
|
call ale#linter#Define('yaml', {
|
||||||
|
\ 'name': 'actionlint',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'yaml_actionlint_executable')},
|
||||||
|
\ 'command': function('ale#handlers#actionlint#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#actionlint#Handle',
|
||||||
|
\})
|
34
sources_non_forked/ale/ale_linters/yaml/ls.vim
Normal file
34
sources_non_forked/ale/ale_linters/yaml/ls.vim
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
" Author: Jeffrey Lau - https://github.com/zoonfafer
|
||||||
|
" Description: YAML Language Server https://github.com/redhat-developer/yaml-language-server
|
||||||
|
|
||||||
|
call ale#Set('yaml_ls_executable', 'yaml-language-server')
|
||||||
|
call ale#Set('yaml_ls_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
call ale#Set('yaml_ls_config', {})
|
||||||
|
|
||||||
|
function! ale_linters#yaml#ls#GetExecutable(buffer) abort
|
||||||
|
return ale#path#FindExecutable(a:buffer, 'yaml_ls', [
|
||||||
|
\ 'node_modules/.bin/yaml-language-server',
|
||||||
|
\])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#yaml#ls#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#yaml#ls#GetExecutable(a:buffer)
|
||||||
|
|
||||||
|
return ale#Escape(l:executable) . ' --stdio'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Just use the current file
|
||||||
|
function! ale_linters#yaml#ls#FindProjectRoot(buffer) abort
|
||||||
|
let l:project_file = expand('#' . a:buffer . ':p')
|
||||||
|
|
||||||
|
return fnamemodify(l:project_file, ':h')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('yaml', {
|
||||||
|
\ 'name': 'yaml-language-server',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': function('ale_linters#yaml#ls#GetExecutable'),
|
||||||
|
\ 'command': function('ale_linters#yaml#ls#GetCommand'),
|
||||||
|
\ 'project_root': function('ale_linters#yaml#ls#FindProjectRoot'),
|
||||||
|
\ 'lsp_config': {b -> ale#Var(b, 'yaml_ls_config')},
|
||||||
|
\})
|
|
@ -157,7 +157,7 @@ function! ale#Queue(delay, ...) abort
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let s:current_ale_version = [3, 1, 0]
|
let s:current_ale_version = [3, 2, 0]
|
||||||
|
|
||||||
" A function used to check for ALE features in files outside of the project.
|
" A function used to check for ALE features in files outside of the project.
|
||||||
function! ale#Has(feature) abort
|
function! ale#Has(feature) abort
|
||||||
|
|
|
@ -16,13 +16,12 @@ endfunction
|
||||||
function! ale#code_action#HandleCodeAction(code_action, options) abort
|
function! ale#code_action#HandleCodeAction(code_action, options) abort
|
||||||
let l:current_buffer = bufnr('')
|
let l:current_buffer = bufnr('')
|
||||||
let l:changes = a:code_action.changes
|
let l:changes = a:code_action.changes
|
||||||
let l:should_save = get(a:options, 'should_save')
|
|
||||||
|
|
||||||
for l:file_code_edit in l:changes
|
for l:file_code_edit in l:changes
|
||||||
call ale#code_action#ApplyChanges(
|
call ale#code_action#ApplyChanges(
|
||||||
\ l:file_code_edit.fileName,
|
\ l:file_code_edit.fileName,
|
||||||
\ l:file_code_edit.textChanges,
|
\ l:file_code_edit.textChanges,
|
||||||
\ l:should_save,
|
\ a:options,
|
||||||
\)
|
\)
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -63,28 +62,28 @@ function! s:ChangeCmp(left, right) abort
|
||||||
return 0
|
return 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale#code_action#ApplyChanges(filename, changes, should_save) abort
|
function! ale#code_action#ApplyChanges(filename, changes, options) abort
|
||||||
let l:current_buffer = bufnr('')
|
let l:should_save = get(a:options, 'should_save')
|
||||||
|
let l:conn_id = get(a:options, 'conn_id')
|
||||||
|
|
||||||
|
let l:orig_buffer = bufnr('')
|
||||||
|
|
||||||
" The buffer is used to determine the fileformat, if available.
|
" The buffer is used to determine the fileformat, if available.
|
||||||
let l:buffer = bufnr(a:filename)
|
let l:buffer = bufnr(a:filename)
|
||||||
let l:is_current_buffer = l:buffer > 0 && l:buffer == l:current_buffer
|
|
||||||
|
|
||||||
if l:buffer > 0
|
if l:buffer != l:orig_buffer
|
||||||
|
call ale#util#Execute('silent edit ' . a:filename)
|
||||||
|
let l:buffer = bufnr('')
|
||||||
|
endif
|
||||||
|
|
||||||
let l:lines = getbufline(l:buffer, 1, '$')
|
let l:lines = getbufline(l:buffer, 1, '$')
|
||||||
|
|
||||||
" Add empty line if there's trailing newline, like readfile() does.
|
" Add empty line if there's trailing newline, like readfile() does.
|
||||||
if getbufvar(l:buffer, '&eol')
|
if getbufvar(l:buffer, '&eol')
|
||||||
let l:lines += ['']
|
let l:lines += ['']
|
||||||
endif
|
endif
|
||||||
else
|
|
||||||
let l:lines = readfile(a:filename, 'b')
|
|
||||||
endif
|
|
||||||
|
|
||||||
if l:is_current_buffer
|
|
||||||
let l:pos = getpos('.')[1:2]
|
let l:pos = getpos('.')[1:2]
|
||||||
else
|
|
||||||
let l:pos = [1, 1]
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Changes have to be sorted so we apply them from bottom-to-top
|
" Changes have to be sorted so we apply them from bottom-to-top
|
||||||
for l:code_edit in reverse(sort(copy(a:changes), function('s:ChangeCmp')))
|
for l:code_edit in reverse(sort(copy(a:changes), function('s:ChangeCmp')))
|
||||||
|
@ -155,46 +154,25 @@ function! ale#code_action#ApplyChanges(filename, changes, should_save) abort
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
if l:buffer > 0
|
" Make sure to add a trailing newline if and only if it should be added.
|
||||||
" Make sure ale#util#{Writefile,SetBufferContents} add trailing
|
|
||||||
" newline if and only if it should be added.
|
|
||||||
if l:lines[-1] is# '' && getbufvar(l:buffer, '&eol')
|
if l:lines[-1] is# '' && getbufvar(l:buffer, '&eol')
|
||||||
call remove(l:lines, -1)
|
call remove(l:lines, -1)
|
||||||
else
|
else
|
||||||
call setbufvar(l:buffer, '&eol', 0)
|
call setbufvar(l:buffer, '&eol', 0)
|
||||||
endif
|
endif
|
||||||
elseif exists('+fixeol') && &fixeol && l:lines[-1] is# ''
|
|
||||||
" Not in buffer, ale#util#Writefile can't check &eol and always adds
|
|
||||||
" newline if &fixeol: remove to prevent double trailing newline.
|
|
||||||
call remove(l:lines, -1)
|
|
||||||
endif
|
|
||||||
|
|
||||||
if a:should_save || l:buffer < 0
|
|
||||||
call ale#util#Writefile(l:buffer, l:lines, a:filename)
|
|
||||||
else
|
|
||||||
call ale#util#SetBufferContents(l:buffer, l:lines)
|
call ale#util#SetBufferContents(l:buffer, l:lines)
|
||||||
endif
|
|
||||||
|
|
||||||
if l:is_current_buffer
|
call ale#lsp#NotifyForChanges(l:conn_id, l:buffer)
|
||||||
if a:should_save
|
|
||||||
call ale#util#Execute(':e!')
|
if l:should_save
|
||||||
|
call ale#util#Execute('silent w!')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call setpos('.', [0, l:pos[0], l:pos[1], 0])
|
call setpos('.', [0, l:pos[0], l:pos[1], 0])
|
||||||
endif
|
|
||||||
|
|
||||||
if a:should_save && l:buffer > 0 && !l:is_current_buffer
|
if l:orig_buffer != l:buffer && bufexists(l:orig_buffer)
|
||||||
" Set up a one-time use event that will delete itself to reload the
|
call ale#util#Execute('silent buf ' . string(l:orig_buffer))
|
||||||
" buffer next time it's entered to view the changes made to it.
|
|
||||||
execute 'augroup ALECodeActionReloadGroup' . l:buffer
|
|
||||||
autocmd!
|
|
||||||
|
|
||||||
execute printf(
|
|
||||||
\ 'autocmd BufEnter <buffer=%d>'
|
|
||||||
\ . ' call ale#code_action#ReloadBuffer()',
|
|
||||||
\ l:buffer
|
|
||||||
\)
|
|
||||||
augroup END
|
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -300,7 +278,7 @@ function! ale#code_action#BuildChangesList(changes_map) abort
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
call add(l:changes, {
|
call add(l:changes, {
|
||||||
\ 'fileName': ale#path#FromURI(l:file_name),
|
\ 'fileName': ale#util#ToResource(l:file_name),
|
||||||
\ 'textChanges': l:text_changes,
|
\ 'textChanges': l:text_changes,
|
||||||
\})
|
\})
|
||||||
endfor
|
endfor
|
||||||
|
|
|
@ -391,8 +391,8 @@ function! s:OnReady(
|
||||||
\ 'character': l:nearest_error.col - 1,
|
\ 'character': l:nearest_error.col - 1,
|
||||||
\ },
|
\ },
|
||||||
\ 'end': {
|
\ 'end': {
|
||||||
\ 'line': l:nearest_error.end_lnum - 1,
|
\ 'line': get(l:nearest_error, 'end_lnum', 1) - 1,
|
||||||
\ 'character': l:nearest_error.end_col,
|
\ 'character': get(l:nearest_error, 'end_col', 0)
|
||||||
\ },
|
\ },
|
||||||
\ },
|
\ },
|
||||||
\ },
|
\ },
|
||||||
|
@ -457,7 +457,7 @@ function! s:ExecuteGetCodeFix(linter, range, MenuCallback) abort
|
||||||
let [l:end_line, l:end_column] = getpos("'>")[1:2]
|
let [l:end_line, l:end_column] = getpos("'>")[1:2]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:column = min([l:column, len(getline(l:line))])
|
let l:column = max([min([l:column, len(getline(l:line))]), 1])
|
||||||
let l:end_column = min([l:end_column, len(getline(l:end_line))])
|
let l:end_column = min([l:end_column, len(getline(l:end_line))])
|
||||||
|
|
||||||
let l:Callback = function(
|
let l:Callback = function(
|
||||||
|
|
|
@ -16,7 +16,7 @@ onoremap <silent> <Plug>(ale_show_completion_menu) <Nop>
|
||||||
let g:ale_completion_delay = get(g:, 'ale_completion_delay', 100)
|
let g:ale_completion_delay = get(g:, 'ale_completion_delay', 100)
|
||||||
let g:ale_completion_excluded_words = get(g:, 'ale_completion_excluded_words', [])
|
let g:ale_completion_excluded_words = get(g:, 'ale_completion_excluded_words', [])
|
||||||
let g:ale_completion_max_suggestions = get(g:, 'ale_completion_max_suggestions', 50)
|
let g:ale_completion_max_suggestions = get(g:, 'ale_completion_max_suggestions', 50)
|
||||||
let g:ale_completion_autoimport = get(g:, 'ale_completion_autoimport', 0)
|
let g:ale_completion_autoimport = get(g:, 'ale_completion_autoimport', 1)
|
||||||
let g:ale_completion_tsserver_remove_warnings = get(g:, 'ale_completion_tsserver_remove_warnings', 0)
|
let g:ale_completion_tsserver_remove_warnings = get(g:, 'ale_completion_tsserver_remove_warnings', 0)
|
||||||
|
|
||||||
let s:timer_id = -1
|
let s:timer_id = -1
|
||||||
|
@ -581,7 +581,7 @@ function! ale#completion#ParseLSPCompletions(response) abort
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if get(l:item, 'insertTextFormat') is s:LSP_INSERT_TEXT_FORMAT_PLAIN
|
if get(l:item, 'insertTextFormat', s:LSP_INSERT_TEXT_FORMAT_PLAIN) is s:LSP_INSERT_TEXT_FORMAT_PLAIN
|
||||||
\&& type(get(l:item, 'textEdit')) is v:t_dict
|
\&& type(get(l:item, 'textEdit')) is v:t_dict
|
||||||
let l:text = l:item.textEdit.newText
|
let l:text = l:item.textEdit.newText
|
||||||
elseif type(get(l:item, 'insertText')) is v:t_string
|
elseif type(get(l:item, 'insertText')) is v:t_string
|
||||||
|
@ -776,7 +776,8 @@ function! s:OnReady(linter, lsp_details) abort
|
||||||
|
|
||||||
if a:linter.lsp is# 'tsserver'
|
if a:linter.lsp is# 'tsserver'
|
||||||
if get(g:, 'ale_completion_tsserver_autoimport') is 1
|
if get(g:, 'ale_completion_tsserver_autoimport') is 1
|
||||||
execute 'echom `g:ale_completion_tsserver_autoimport` is deprecated. Use `g:ale_completion_autoimport` instead.'''
|
" no-custom-checks
|
||||||
|
echom '`g:ale_completion_tsserver_autoimport` is deprecated. Use `g:ale_completion_autoimport` instead.'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:message = ale#lsp#tsserver_message#Completions(
|
let l:message = ale#lsp#tsserver_message#Completions(
|
||||||
|
@ -911,7 +912,8 @@ function! ale#completion#Import() abort
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let [l:line, l:column] = getpos('.')[1:2]
|
let [l:line, l:column] = getpos('.')[1:2]
|
||||||
let l:column = searchpos('\V' . escape(l:word, '/\'), 'bn', l:line)[1]
|
let l:column = searchpos('\V' . escape(l:word, '/\'), 'bnc', l:line)[1]
|
||||||
|
let l:column = l:column + len(l:word) - 1
|
||||||
|
|
||||||
if l:column isnot 0
|
if l:column isnot 0
|
||||||
let l:started = ale#completion#GetCompletions('ale-import', {
|
let l:started = ale#completion#GetCompletions('ale-import', {
|
||||||
|
|
|
@ -10,12 +10,21 @@ let g:ale_echo_msg_format = get(g:, 'ale_echo_msg_format', '%code: %%s')
|
||||||
|
|
||||||
let s:cursor_timer = -1
|
let s:cursor_timer = -1
|
||||||
|
|
||||||
|
" A wrapper for echon so we can test messages we echo in Vader tests.
|
||||||
|
function! ale#cursor#Echom(message) abort
|
||||||
|
" no-custom-checks
|
||||||
|
exec "norm! :echom a:message\n"
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale#cursor#TruncatedEcho(original_message) abort
|
function! ale#cursor#TruncatedEcho(original_message) abort
|
||||||
let l:message = a:original_message
|
let l:message = a:original_message
|
||||||
" Change tabs to spaces.
|
" Change tabs to spaces.
|
||||||
let l:message = substitute(l:message, "\t", ' ', 'g')
|
let l:message = substitute(l:message, "\t", ' ', 'g')
|
||||||
" Remove any newlines in the message.
|
" Remove any newlines in the message.
|
||||||
let l:message = substitute(l:message, "\n", '', 'g')
|
let l:message = substitute(l:message, "\n", '', 'g')
|
||||||
|
" Convert indentation groups into single spaces for better legibility when
|
||||||
|
" put on a single line
|
||||||
|
let l:message = substitute(l:message, ' \+', ' ', 'g')
|
||||||
|
|
||||||
" We need to remember the setting for shortmess and reset it again.
|
" We need to remember the setting for shortmess and reset it again.
|
||||||
let l:shortmess_options = &l:shortmess
|
let l:shortmess_options = &l:shortmess
|
||||||
|
@ -27,7 +36,7 @@ function! ale#cursor#TruncatedEcho(original_message) abort
|
||||||
silent! setlocal shortmess+=T
|
silent! setlocal shortmess+=T
|
||||||
|
|
||||||
try
|
try
|
||||||
exec "norm! :echomsg l:message\n"
|
call ale#cursor#Echom(l:message)
|
||||||
catch /^Vim\%((\a\+)\)\=:E523/
|
catch /^Vim\%((\a\+)\)\=:E523/
|
||||||
" Fallback into manual truncate (#1987)
|
" Fallback into manual truncate (#1987)
|
||||||
let l:winwidth = winwidth(0)
|
let l:winwidth = winwidth(0)
|
||||||
|
@ -87,7 +96,9 @@ function! ale#cursor#EchoCursorWarning(...) abort
|
||||||
elseif get(l:info, 'echoed')
|
elseif get(l:info, 'echoed')
|
||||||
" We'll only clear the echoed message when moving off errors once,
|
" We'll only clear the echoed message when moving off errors once,
|
||||||
" so we don't continually clear the echo line.
|
" so we don't continually clear the echo line.
|
||||||
execute 'echo'
|
"
|
||||||
|
" no-custom-checks
|
||||||
|
echo
|
||||||
let l:info.echoed = 0
|
let l:info.echoed = 0
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -150,7 +161,8 @@ function! s:ShowCursorDetailForItem(loc, options) abort
|
||||||
|
|
||||||
" Clear the echo message if we manually displayed details.
|
" Clear the echo message if we manually displayed details.
|
||||||
if !l:stay_here
|
if !l:stay_here
|
||||||
execute 'echo'
|
" no-custom-checks
|
||||||
|
echo
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
|
@ -62,7 +62,8 @@ let s:global_variable_list = [
|
||||||
\]
|
\]
|
||||||
|
|
||||||
function! s:Echo(message) abort
|
function! s:Echo(message) abort
|
||||||
execute 'echo a:message'
|
" no-custom-checks
|
||||||
|
echo a:message
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:GetLinterVariables(filetype, exclude_linter_names) abort
|
function! s:GetLinterVariables(filetype, exclude_linter_names) abort
|
||||||
|
|
|
@ -68,18 +68,27 @@ function! ale#definition#HandleLSPResponse(conn_id, response) abort
|
||||||
for l:item in l:result
|
for l:item in l:result
|
||||||
if has_key(l:item, 'targetUri')
|
if has_key(l:item, 'targetUri')
|
||||||
" LocationLink items use targetUri
|
" LocationLink items use targetUri
|
||||||
let l:filename = ale#path#FromURI(l:item.targetUri)
|
let l:uri = l:item.targetUri
|
||||||
let l:line = l:item.targetRange.start.line + 1
|
let l:line = l:item.targetRange.start.line + 1
|
||||||
let l:column = l:item.targetRange.start.character + 1
|
let l:column = l:item.targetRange.start.character + 1
|
||||||
else
|
else
|
||||||
" LocationLink items use uri
|
" LocationLink items use uri
|
||||||
let l:filename = ale#path#FromURI(l:item.uri)
|
let l:uri = l:item.uri
|
||||||
let l:line = l:item.range.start.line + 1
|
let l:line = l:item.range.start.line + 1
|
||||||
let l:column = l:item.range.start.character + 1
|
let l:column = l:item.range.start.character + 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call ale#definition#UpdateTagStack()
|
call ale#definition#UpdateTagStack()
|
||||||
|
|
||||||
|
let l:uri_handler = ale#uri#GetURIHandler(l:uri)
|
||||||
|
|
||||||
|
if l:uri_handler is# v:null
|
||||||
|
let l:filename = ale#path#FromFileURI(l:uri)
|
||||||
call ale#util#Open(l:filename, l:line, l:column, l:options)
|
call ale#util#Open(l:filename, l:line, l:column, l:options)
|
||||||
|
else
|
||||||
|
call l:uri_handler.OpenURILink(l:uri, l:line, l:column, l:options, a:conn_id)
|
||||||
|
endif
|
||||||
|
|
||||||
break
|
break
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
|
@ -112,6 +121,12 @@ function! s:OnReady(line, column, options, capability, linter, lsp_details) abor
|
||||||
\ a:line,
|
\ a:line,
|
||||||
\ a:column
|
\ a:column
|
||||||
\)
|
\)
|
||||||
|
elseif a:capability is# 'implementation'
|
||||||
|
let l:message = ale#lsp#tsserver_message#Implementation(
|
||||||
|
\ l:buffer,
|
||||||
|
\ a:line,
|
||||||
|
\ a:column
|
||||||
|
\)
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
" Send a message saying the buffer has changed first, or the
|
" Send a message saying the buffer has changed first, or the
|
||||||
|
@ -125,6 +140,8 @@ function! s:OnReady(line, column, options, capability, linter, lsp_details) abor
|
||||||
let l:message = ale#lsp#message#Definition(l:buffer, a:line, a:column)
|
let l:message = ale#lsp#message#Definition(l:buffer, a:line, a:column)
|
||||||
elseif a:capability is# 'typeDefinition'
|
elseif a:capability is# 'typeDefinition'
|
||||||
let l:message = ale#lsp#message#TypeDefinition(l:buffer, a:line, a:column)
|
let l:message = ale#lsp#message#TypeDefinition(l:buffer, a:line, a:column)
|
||||||
|
elseif a:capability is# 'implementation'
|
||||||
|
let l:message = ale#lsp#message#Implementation(l:buffer, a:line, a:column)
|
||||||
else
|
else
|
||||||
" XXX: log here?
|
" XXX: log here?
|
||||||
return
|
return
|
||||||
|
@ -166,6 +183,14 @@ function! ale#definition#GoToType(options) abort
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! ale#definition#GoToImpl(options) abort
|
||||||
|
for l:linter in ale#linter#Get(&filetype)
|
||||||
|
if !empty(l:linter.lsp)
|
||||||
|
call s:GoToLSPDefinition(l:linter, a:options, 'implementation')
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale#definition#GoToCommandHandler(command, ...) abort
|
function! ale#definition#GoToCommandHandler(command, ...) abort
|
||||||
let l:options = {}
|
let l:options = {}
|
||||||
|
|
||||||
|
@ -191,6 +216,8 @@ function! ale#definition#GoToCommandHandler(command, ...) abort
|
||||||
|
|
||||||
if a:command is# 'type'
|
if a:command is# 'type'
|
||||||
call ale#definition#GoToType(l:options)
|
call ale#definition#GoToType(l:options)
|
||||||
|
elseif a:command is# 'implementation'
|
||||||
|
call ale#definition#GoToImpl(l:options)
|
||||||
else
|
else
|
||||||
call ale#definition#GoTo(l:options)
|
call ale#definition#GoTo(l:options)
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -347,6 +347,12 @@ function! ale#engine#FixLocList(buffer, linter_name, from_other_source, loclist)
|
||||||
|
|
||||||
if has_key(l:old_item, 'end_lnum')
|
if has_key(l:old_item, 'end_lnum')
|
||||||
let l:item.end_lnum = str2nr(l:old_item.end_lnum)
|
let l:item.end_lnum = str2nr(l:old_item.end_lnum)
|
||||||
|
|
||||||
|
" When the error ends after the end of the file, put it at the
|
||||||
|
" end. This is only done for the current buffer.
|
||||||
|
if l:item.bufnr == a:buffer && l:item.end_lnum > l:last_line_number
|
||||||
|
let l:item.end_lnum = l:last_line_number
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if has_key(l:old_item, 'sub_type')
|
if has_key(l:old_item, 'sub_type')
|
||||||
|
|
|
@ -156,4 +156,10 @@ function! ale#events#Init() abort
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
augroup AleURISchemes
|
||||||
|
autocmd!
|
||||||
|
|
||||||
|
autocmd BufNewFile,BufReadPre jdt://** call ale#uri#jdt#ReadJDTLink(expand('<amatch>'))
|
||||||
|
augroup END
|
||||||
endfunction
|
endfunction
|
||||||
|
|
133
sources_non_forked/ale/autoload/ale/filerename.vim
Normal file
133
sources_non_forked/ale/autoload/ale/filerename.vim
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
" Author: Dalius Dobravolskas <dalius.dobravolskas@gmail.com>
|
||||||
|
" Description: Rename file support for tsserver
|
||||||
|
|
||||||
|
let s:filerename_map = {}
|
||||||
|
|
||||||
|
" Used to get the rename map in tests.
|
||||||
|
function! ale#filerename#GetMap() abort
|
||||||
|
return deepcopy(s:filerename_map)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Used to set the rename map in tests.
|
||||||
|
function! ale#filerename#SetMap(map) abort
|
||||||
|
let s:filerename_map = a:map
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#filerename#ClearLSPData() abort
|
||||||
|
let s:filerename_map = {}
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:message(message) abort
|
||||||
|
call ale#util#Execute('echom ' . string(a:message))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#filerename#HandleTSServerResponse(conn_id, response) abort
|
||||||
|
if get(a:response, 'command', '') isnot# 'getEditsForFileRename'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !has_key(s:filerename_map, a:response.request_seq)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:options = remove(s:filerename_map, a:response.request_seq)
|
||||||
|
|
||||||
|
let l:old_name = l:options.old_name
|
||||||
|
let l:new_name = l:options.new_name
|
||||||
|
|
||||||
|
if get(a:response, 'success', v:false) is v:false
|
||||||
|
let l:message = get(a:response, 'message', 'unknown')
|
||||||
|
call s:message('Error renaming file "' . l:old_name . '" to "' . l:new_name
|
||||||
|
\ . '". Reason: ' . l:message)
|
||||||
|
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:changes = a:response.body
|
||||||
|
|
||||||
|
if empty(l:changes)
|
||||||
|
call s:message('No changes while renaming "' . l:old_name . '" to "' . l:new_name . '"')
|
||||||
|
else
|
||||||
|
call ale#code_action#HandleCodeAction(
|
||||||
|
\ {
|
||||||
|
\ 'description': 'filerename',
|
||||||
|
\ 'changes': l:changes,
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'should_save': 1,
|
||||||
|
\ },
|
||||||
|
\)
|
||||||
|
endif
|
||||||
|
|
||||||
|
silent! noautocmd execute 'saveas ' . l:new_name
|
||||||
|
call delete(l:old_name)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:OnReady(options, linter, lsp_details) abort
|
||||||
|
let l:id = a:lsp_details.connection_id
|
||||||
|
|
||||||
|
if !ale#lsp#HasCapability(l:id, 'filerename')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:buffer = a:lsp_details.buffer
|
||||||
|
|
||||||
|
let l:Callback = function('ale#filerename#HandleTSServerResponse')
|
||||||
|
|
||||||
|
call ale#lsp#RegisterCallback(l:id, l:Callback)
|
||||||
|
|
||||||
|
let l:message = ale#lsp#tsserver_message#GetEditsForFileRename(
|
||||||
|
\ a:options.old_name,
|
||||||
|
\ a:options.new_name,
|
||||||
|
\)
|
||||||
|
|
||||||
|
let l:request_id = ale#lsp#Send(l:id, l:message)
|
||||||
|
|
||||||
|
let s:filerename_map[l:request_id] = a:options
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ExecuteFileRename(linter, options) abort
|
||||||
|
let l:buffer = bufnr('')
|
||||||
|
|
||||||
|
let l:Callback = function('s:OnReady', [a:options])
|
||||||
|
call ale#lsp_linter#StartLSP(l:buffer, a:linter, l:Callback)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#filerename#Execute() abort
|
||||||
|
let l:lsp_linters = []
|
||||||
|
|
||||||
|
for l:linter in ale#linter#Get(&filetype)
|
||||||
|
if l:linter.lsp is# 'tsserver'
|
||||||
|
call add(l:lsp_linters, l:linter)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
if empty(l:lsp_linters)
|
||||||
|
call s:message('No active tsserver LSPs')
|
||||||
|
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:buffer = bufnr('')
|
||||||
|
let l:old_name = expand('#' . l:buffer . ':p')
|
||||||
|
let l:new_name = ale#util#Input('New file name: ', l:old_name, 'file')
|
||||||
|
|
||||||
|
if l:old_name is# l:new_name
|
||||||
|
call s:message('New file name matches old file name')
|
||||||
|
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if empty(l:new_name)
|
||||||
|
call s:message('New name cannot be empty!')
|
||||||
|
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
for l:lsp_linter in l:lsp_linters
|
||||||
|
call s:ExecuteFileRename(l:lsp_linter, {
|
||||||
|
\ 'old_name': l:old_name,
|
||||||
|
\ 'new_name': l:new_name,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
endfunction
|
|
@ -77,7 +77,8 @@ function! ale#fix#ApplyFixes(buffer, output) abort
|
||||||
call remove(g:ale_fix_buffer_data, a:buffer)
|
call remove(g:ale_fix_buffer_data, a:buffer)
|
||||||
|
|
||||||
if !l:data.ignore_file_changed_errors
|
if !l:data.ignore_file_changed_errors
|
||||||
execute 'echoerr ''The file was changed before fixing finished'''
|
" no-custom-checks
|
||||||
|
echoerr 'The file was changed before fixing finished'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -358,7 +359,8 @@ function! ale#fix#Fix(buffer, fixing_flag, ...) abort
|
||||||
\ 'There is no fixer named `%s`. Check :ALEFixSuggest',
|
\ 'There is no fixer named `%s`. Check :ALEFixSuggest',
|
||||||
\ l:function_name,
|
\ l:function_name,
|
||||||
\)
|
\)
|
||||||
execute 'echom l:echo_message'
|
" no-custom-checks
|
||||||
|
echom l:echo_message
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
@ -366,7 +368,8 @@ function! ale#fix#Fix(buffer, fixing_flag, ...) abort
|
||||||
|
|
||||||
if empty(l:callback_list)
|
if empty(l:callback_list)
|
||||||
if a:fixing_flag is# ''
|
if a:fixing_flag is# ''
|
||||||
execute 'echom ''No fixers have been defined. Try :ALEFixSuggest'''
|
" no-custom-checks
|
||||||
|
echom 'No fixers have been defined. Try :ALEFixSuggest'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
|
@ -37,6 +37,11 @@ let s:default_registry = {
|
||||||
\ 'suggested_filetypes': ['python'],
|
\ 'suggested_filetypes': ['python'],
|
||||||
\ 'description': 'Fix PEP8 issues with black.',
|
\ 'description': 'Fix PEP8 issues with black.',
|
||||||
\ },
|
\ },
|
||||||
|
\ 'buf-format': {
|
||||||
|
\ 'function': 'ale#fixers#buf_format#Fix',
|
||||||
|
\ 'suggested_filetypes': ['proto'],
|
||||||
|
\ 'description': 'Fix .proto files with buf format.',
|
||||||
|
\ },
|
||||||
\ 'buildifier': {
|
\ 'buildifier': {
|
||||||
\ 'function': 'ale#fixers#buildifier#Fix',
|
\ 'function': 'ale#fixers#buildifier#Fix',
|
||||||
\ 'suggested_filetypes': ['bzl'],
|
\ 'suggested_filetypes': ['bzl'],
|
||||||
|
@ -191,6 +196,11 @@ let s:default_registry = {
|
||||||
\ 'suggested_filetypes': ['ruby'],
|
\ 'suggested_filetypes': ['ruby'],
|
||||||
\ 'description': 'Fix ruby files with standardrb --fix',
|
\ 'description': 'Fix ruby files with standardrb --fix',
|
||||||
\ },
|
\ },
|
||||||
|
\ 'statix': {
|
||||||
|
\ 'function': 'ale#fixers#statix#Fix',
|
||||||
|
\ 'suggested_filetypes': ['nix'],
|
||||||
|
\ 'description': 'Fix common Nix antipatterns with statix fix',
|
||||||
|
\ },
|
||||||
\ 'stylelint': {
|
\ 'stylelint': {
|
||||||
\ 'function': 'ale#fixers#stylelint#Fix',
|
\ 'function': 'ale#fixers#stylelint#Fix',
|
||||||
\ 'suggested_filetypes': ['css', 'sass', 'scss', 'sugarss', 'stylus'],
|
\ 'suggested_filetypes': ['css', 'sass', 'scss', 'sugarss', 'stylus'],
|
||||||
|
@ -246,6 +256,11 @@ let s:default_registry = {
|
||||||
\ 'suggested_filetypes': ['go'],
|
\ 'suggested_filetypes': ['go'],
|
||||||
\ 'description': 'Fix Go files with go fmt.',
|
\ 'description': 'Fix Go files with go fmt.',
|
||||||
\ },
|
\ },
|
||||||
|
\ 'gofumpt': {
|
||||||
|
\ 'function': 'ale#fixers#gofumpt#Fix',
|
||||||
|
\ 'suggested_filetypes': ['go'],
|
||||||
|
\ 'description': 'Fix Go files with gofumpt, a stricter go fmt.',
|
||||||
|
\ },
|
||||||
\ 'goimports': {
|
\ 'goimports': {
|
||||||
\ 'function': 'ale#fixers#goimports#Fix',
|
\ 'function': 'ale#fixers#goimports#Fix',
|
||||||
\ 'suggested_filetypes': ['go'],
|
\ 'suggested_filetypes': ['go'],
|
||||||
|
@ -421,6 +436,16 @@ let s:default_registry = {
|
||||||
\ 'suggested_filetypes': ['hcl', 'terraform'],
|
\ 'suggested_filetypes': ['hcl', 'terraform'],
|
||||||
\ 'description': 'Fix tf and hcl files with terraform fmt.',
|
\ 'description': 'Fix tf and hcl files with terraform fmt.',
|
||||||
\ },
|
\ },
|
||||||
|
\ 'packer': {
|
||||||
|
\ 'function': 'ale#fixers#packer#Fix',
|
||||||
|
\ 'suggested_filetypes': ['hcl', 'packer'],
|
||||||
|
\ 'description': 'Fix Packer HCL files with packer fmt.',
|
||||||
|
\ },
|
||||||
|
\ 'crystal': {
|
||||||
|
\ 'function': 'ale#fixers#crystal#Fix',
|
||||||
|
\ 'suggested_filetypes': ['cr'],
|
||||||
|
\ 'description': 'Fix cr (crystal).',
|
||||||
|
\ },
|
||||||
\ 'ktlint': {
|
\ 'ktlint': {
|
||||||
\ 'function': 'ale#fixers#ktlint#Fix',
|
\ 'function': 'ale#fixers#ktlint#Fix',
|
||||||
\ 'suggested_filetypes': ['kt', 'kotlin'],
|
\ 'suggested_filetypes': ['kt', 'kotlin'],
|
||||||
|
@ -481,6 +506,11 @@ let s:default_registry = {
|
||||||
\ 'suggested_filetypes': ['lua'],
|
\ 'suggested_filetypes': ['lua'],
|
||||||
\ 'description': 'Fix Lua files with luafmt.',
|
\ 'description': 'Fix Lua files with luafmt.',
|
||||||
\ },
|
\ },
|
||||||
|
\ 'dprint': {
|
||||||
|
\ 'function': 'ale#fixers#dprint#Fix',
|
||||||
|
\ 'suggested_filetypes': ['javascript', 'typescript', 'json', 'markdown'],
|
||||||
|
\ 'description': 'Pluggable and configurable code formatting platform',
|
||||||
|
\ },
|
||||||
\ 'stylua': {
|
\ 'stylua': {
|
||||||
\ 'function': 'ale#fixers#stylua#Fix',
|
\ 'function': 'ale#fixers#stylua#Fix',
|
||||||
\ 'suggested_filetypes': ['lua'],
|
\ 'suggested_filetypes': ['lua'],
|
||||||
|
@ -501,10 +531,20 @@ let s:default_registry = {
|
||||||
\ 'suggested_filetypes': ['pascal'],
|
\ 'suggested_filetypes': ['pascal'],
|
||||||
\ 'description': 'Fix Pascal files with ptop.',
|
\ 'description': 'Fix Pascal files with ptop.',
|
||||||
\ },
|
\ },
|
||||||
|
\ 'opafmt': {
|
||||||
|
\ 'function': 'ale#fixers#opafmt#Fix',
|
||||||
|
\ 'suggested_filetypes': ['rego'],
|
||||||
|
\ 'description': 'Fix rego files with opa fmt.',
|
||||||
|
\ },
|
||||||
\ 'vfmt': {
|
\ 'vfmt': {
|
||||||
\ 'function': 'ale#fixers#vfmt#Fix',
|
\ 'function': 'ale#fixers#vfmt#Fix',
|
||||||
\ 'suggested_filetypes': ['v'],
|
\ 'suggested_filetypes': ['v'],
|
||||||
\ 'description': 'A formatter for V source code.',
|
\ 'description': 'A formatter for V source code.',
|
||||||
|
\ },
|
||||||
|
\ 'zigfmt': {
|
||||||
|
\ 'function': 'ale#fixers#zigfmt#Fix',
|
||||||
|
\ 'suggested_filetypes': ['zig'],
|
||||||
|
\ 'description': 'Official formatter for Zig',
|
||||||
\ }
|
\ }
|
||||||
\}
|
\}
|
||||||
|
|
||||||
|
|
12
sources_non_forked/ale/autoload/ale/fixers/buf_format.vim
Normal file
12
sources_non_forked/ale/autoload/ale/fixers/buf_format.vim
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
" Author: Alex McKinney <alexmckinney01@gmail.com>
|
||||||
|
" Description: Run buf format.
|
||||||
|
|
||||||
|
call ale#Set('proto_buf_format_executable', 'buf')
|
||||||
|
|
||||||
|
function! ale#fixers#buf_format#Fix(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'proto_buf_format_executable')
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': ale#Escape(l:executable) . ' format %t',
|
||||||
|
\}
|
||||||
|
endfunction
|
14
sources_non_forked/ale/autoload/ale/fixers/crystal.vim
Normal file
14
sources_non_forked/ale/autoload/ale/fixers/crystal.vim
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
call ale#Set('crystal_format_executable', 'crystal')
|
||||||
|
call ale#Set('crystal_format_options', '')
|
||||||
|
|
||||||
|
function! ale#fixers#crystal#Fix(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'crystal_format_executable')
|
||||||
|
let l:options = ale#Var(a:buffer, 'crystal_format_options')
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': ale#Escape(l:executable)
|
||||||
|
\ . ' tool format'
|
||||||
|
\ . ale#Pad(l:options)
|
||||||
|
\ . ' -'
|
||||||
|
\}
|
||||||
|
endfunction
|
29
sources_non_forked/ale/autoload/ale/fixers/dprint.vim
Normal file
29
sources_non_forked/ale/autoload/ale/fixers/dprint.vim
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
call ale#Set('dprint_executable', 'dprint')
|
||||||
|
call ale#Set('dprint_executable_override', 0)
|
||||||
|
call ale#Set('dprint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
call ale#Set('dprint_options', '')
|
||||||
|
call ale#Set('dprint_config', 'dprint.json')
|
||||||
|
|
||||||
|
function! ale#fixers#dprint#Fix(buffer) abort
|
||||||
|
let l:executable = ale#path#FindExecutable(a:buffer, 'dprint', ['dprint'])
|
||||||
|
let l:executable_override = ale#Var(a:buffer, 'dprint_executable_override')
|
||||||
|
|
||||||
|
if !executable(l:executable) && !l:executable_override
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:options = ale#Var(a:buffer, 'dprint_options')
|
||||||
|
let l:config = ale#path#FindNearestFile(a:buffer, ale#Var(a:buffer, 'dprint_config'))
|
||||||
|
|
||||||
|
if !empty(l:config)
|
||||||
|
let l:options = l:options . ' -c ' . ale#Escape(l:config)
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:options = l:options . ' --stdin %s'
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': ale#Escape(l:executable)
|
||||||
|
\ . ' fmt '
|
||||||
|
\ . l:options
|
||||||
|
\}
|
||||||
|
endfunction
|
17
sources_non_forked/ale/autoload/ale/fixers/gofumpt.vim
Normal file
17
sources_non_forked/ale/autoload/ale/fixers/gofumpt.vim
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: A stricter gofmt implementation.
|
||||||
|
|
||||||
|
call ale#Set('go_gofumpt_executable', 'gofumpt')
|
||||||
|
call ale#Set('go_gofumpt_options', '')
|
||||||
|
|
||||||
|
function! ale#fixers#gofumpt#Fix(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'go_gofumpt_executable')
|
||||||
|
let l:options = ale#Var(a:buffer, 'go_gofumpt_options')
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': ale#Escape(l:executable)
|
||||||
|
\ . ale#Pad(l:options)
|
||||||
|
\ . ' -w -- %t',
|
||||||
|
\ 'read_temporary_file': 1,
|
||||||
|
\}
|
||||||
|
endfunction
|
15
sources_non_forked/ale/autoload/ale/fixers/opafmt.vim
Normal file
15
sources_non_forked/ale/autoload/ale/fixers/opafmt.vim
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
" Description: Fixer for rego files
|
||||||
|
|
||||||
|
call ale#Set('opa_fmt_executable', 'opa')
|
||||||
|
call ale#Set('opa_fmt_options', '')
|
||||||
|
|
||||||
|
function! ale#fixers#opafmt#Fix(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'opa_fmt_executable')
|
||||||
|
let l:options = ale#Var(a:buffer, 'opa_fmt_options')
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': ale#Escape(l:executable)
|
||||||
|
\ . ' fmt'
|
||||||
|
\ . (empty(l:options) ? '' : ' ' . l:options)
|
||||||
|
\}
|
||||||
|
endfunction
|
17
sources_non_forked/ale/autoload/ale/fixers/packer.vim
Normal file
17
sources_non_forked/ale/autoload/ale/fixers/packer.vim
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
" Author: Zhuoyun Wei <wzyboy@wzyboy.org>
|
||||||
|
" Description: Fixer for Packer HCL files
|
||||||
|
|
||||||
|
call ale#Set('packer_fmt_executable', 'packer')
|
||||||
|
call ale#Set('packer_fmt_options', '')
|
||||||
|
|
||||||
|
function! ale#fixers#packer#Fix(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'packer_fmt_executable')
|
||||||
|
let l:options = ale#Var(a:buffer, 'packer_fmt_options')
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': ale#Escape(l:executable)
|
||||||
|
\ . ' fmt'
|
||||||
|
\ . (empty(l:options) ? '' : ' ' . l:options)
|
||||||
|
\ . ' -'
|
||||||
|
\}
|
||||||
|
endfunction
|
17
sources_non_forked/ale/autoload/ale/fixers/statix.vim
Normal file
17
sources_non_forked/ale/autoload/ale/fixers/statix.vim
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: Provide statix fix as a fixer for simple Nix antipatterns.
|
||||||
|
|
||||||
|
call ale#Set('nix_statix_fix_executable', 'statix')
|
||||||
|
call ale#Set('nix_statix_fix_options', '')
|
||||||
|
|
||||||
|
function! ale#fixers#statix#Fix(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'nix_statix_fix_executable')
|
||||||
|
let l:options = ale#Var(a:buffer, 'nix_statix_fix_options')
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': ale#Escape(l:executable)
|
||||||
|
\ . ale#Pad('fix')
|
||||||
|
\ . ale#Pad('--stdin')
|
||||||
|
\ . ale#Pad(l:options),
|
||||||
|
\}
|
||||||
|
endfunction
|
|
@ -4,6 +4,22 @@
|
||||||
call ale#Set('c_uncrustify_executable', 'uncrustify')
|
call ale#Set('c_uncrustify_executable', 'uncrustify')
|
||||||
call ale#Set('c_uncrustify_options', '')
|
call ale#Set('c_uncrustify_options', '')
|
||||||
|
|
||||||
|
let s:languages = {
|
||||||
|
\ 'c': 'C',
|
||||||
|
\ 'cpp': 'CPP',
|
||||||
|
\ 'cs': 'CS',
|
||||||
|
\ 'objc': 'OC',
|
||||||
|
\ 'objcpp': 'OC+',
|
||||||
|
\ 'd': 'D',
|
||||||
|
\ 'java': 'JAVA',
|
||||||
|
\ 'vala': 'VALA',
|
||||||
|
\ 'p': 'PAWN',
|
||||||
|
\}
|
||||||
|
|
||||||
|
function! ale#fixers#uncrustify#Language(buffer) abort
|
||||||
|
return get(s:languages, &filetype, 'C')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale#fixers#uncrustify#Fix(buffer) abort
|
function! ale#fixers#uncrustify#Fix(buffer) abort
|
||||||
let l:executable = ale#Var(a:buffer, 'c_uncrustify_executable')
|
let l:executable = ale#Var(a:buffer, 'c_uncrustify_executable')
|
||||||
let l:options = ale#Var(a:buffer, 'c_uncrustify_options')
|
let l:options = ale#Var(a:buffer, 'c_uncrustify_options')
|
||||||
|
@ -11,6 +27,7 @@ function! ale#fixers#uncrustify#Fix(buffer) abort
|
||||||
return {
|
return {
|
||||||
\ 'command': ale#Escape(l:executable)
|
\ 'command': ale#Escape(l:executable)
|
||||||
\ . ' --no-backup '
|
\ . ' --no-backup '
|
||||||
\ . (empty(l:options) ? '' : ' ' . l:options)
|
\ . '-l' . ale#Pad(ale#fixers#uncrustify#Language(a:buffer))
|
||||||
|
\ . ale#Pad(l:options)
|
||||||
\}
|
\}
|
||||||
endfunction
|
endfunction
|
||||||
|
|
14
sources_non_forked/ale/autoload/ale/fixers/zigfmt.vim
Normal file
14
sources_non_forked/ale/autoload/ale/fixers/zigfmt.vim
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: Arash Mousavi <arash-m>
|
||||||
|
" Description: Official formatter for Zig.
|
||||||
|
|
||||||
|
call ale#Set('zig_zigfmt_executable', 'zig')
|
||||||
|
|
||||||
|
function! ale#fixers#zigfmt#Fix(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'zig_zigfmt_executable')
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': ale#Escape(l:executable) . ' fmt %t',
|
||||||
|
\ 'read_temporary_file': 1,
|
||||||
|
\}
|
||||||
|
endfunction
|
|
@ -7,7 +7,8 @@
|
||||||
|
|
||||||
function! ale#floating_preview#Show(lines, ...) abort
|
function! ale#floating_preview#Show(lines, ...) abort
|
||||||
if !exists('*nvim_open_win') && !has('popupwin')
|
if !exists('*nvim_open_win') && !has('popupwin')
|
||||||
execute 'echom ''Floating windows not supported in this vim instance.'''
|
" no-custom-checks
|
||||||
|
echom 'Floating windows not supported in this vim instance.'
|
||||||
|
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
24
sources_non_forked/ale/autoload/ale/handlers/actionlint.vim
Normal file
24
sources_non_forked/ale/autoload/ale/handlers/actionlint.vim
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
function! ale#handlers#actionlint#GetCommand(buffer) abort
|
||||||
|
return '%e --no-color --oneline %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#handlers#actionlint#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
".github/workflows/main.yml:19:0: could not parse as YAML: yaml: line 19: mapping values are not allowed in this context [yaml-syntax]
|
||||||
|
let l:pattern = '\v^.*:(\d+):(\d+): (.+) \[(.+)\]$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:item = {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\ 'code': l:match[4],
|
||||||
|
\ 'type': 'E',
|
||||||
|
\}
|
||||||
|
|
||||||
|
call add(l:output, l:item)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
|
@ -11,8 +11,9 @@ endfunction
|
||||||
|
|
||||||
function! ale#handlers#alex#CreateCommandCallback(flags) abort
|
function! ale#handlers#alex#CreateCommandCallback(flags) abort
|
||||||
return {b -> ale#node#Executable(b, ale#handlers#alex#GetExecutable(b))
|
return {b -> ale#node#Executable(b, ale#handlers#alex#GetExecutable(b))
|
||||||
\ . ' %s '
|
\ . ' --stdin '
|
||||||
\ . a:flags}
|
\ . a:flags
|
||||||
|
\}
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale#handlers#alex#Handle(buffer, lines) abort
|
function! ale#handlers#alex#Handle(buffer, lines) abort
|
||||||
|
@ -38,6 +39,7 @@ endfunction
|
||||||
" Define a linter for a specific filetype. Accept flags to adapt to the filetype.
|
" Define a linter for a specific filetype. Accept flags to adapt to the filetype.
|
||||||
" no flags treat input as markdown
|
" no flags treat input as markdown
|
||||||
" --html treat input as HTML
|
" --html treat input as HTML
|
||||||
|
" --mdx treat input as MDX
|
||||||
" --text treat input as plaintext
|
" --text treat input as plaintext
|
||||||
function! ale#handlers#alex#DefineLinter(filetype, flags) abort
|
function! ale#handlers#alex#DefineLinter(filetype, flags) abort
|
||||||
call ale#Set('alex_executable', 'alex')
|
call ale#Set('alex_executable', 'alex')
|
||||||
|
@ -49,6 +51,5 @@ function! ale#handlers#alex#DefineLinter(filetype, flags) abort
|
||||||
\ 'command': ale#handlers#alex#CreateCommandCallback(a:flags),
|
\ 'command': ale#handlers#alex#CreateCommandCallback(a:flags),
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'callback': 'ale#handlers#alex#Handle',
|
\ 'callback': 'ale#handlers#alex#Handle',
|
||||||
\ 'lint_file': 1,
|
|
||||||
\})
|
\})
|
||||||
endfunction
|
endfunction
|
||||||
|
|
|
@ -19,6 +19,18 @@ function! ale#handlers#cppcheck#GetBufferPathIncludeOptions(buffer) abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale#handlers#cppcheck#GetCompileCommandsOptions(buffer) abort
|
function! ale#handlers#cppcheck#GetCompileCommandsOptions(buffer) abort
|
||||||
|
" The compile_commands.json doesn't apply to headers and cppheck will
|
||||||
|
" bail out if it cannot find a file matching the filter, below. Skip out
|
||||||
|
" now, for headers. Also, suppress FPs; cppcheck is not meant to
|
||||||
|
" process lone header files.
|
||||||
|
let b:buffer_name = bufname(a:buffer)
|
||||||
|
let b:file_extension = fnamemodify(b:buffer_name, ':e')
|
||||||
|
|
||||||
|
if b:file_extension is# 'h' || b:file_extension is# 'hpp'
|
||||||
|
return ale#handlers#cppcheck#GetBufferPathIncludeOptions(a:buffer)
|
||||||
|
\ . ' --suppress=unusedStructMember'
|
||||||
|
endif
|
||||||
|
|
||||||
" If the current buffer is modified, using compile_commands.json does no
|
" If the current buffer is modified, using compile_commands.json does no
|
||||||
" good, so include the file's directory instead. It's not quite as good as
|
" good, so include the file's directory instead. It's not quite as good as
|
||||||
" using --project, but is at least equivalent to running cppcheck on this
|
" using --project, but is at least equivalent to running cppcheck on this
|
||||||
|
@ -35,8 +47,10 @@ function! ale#handlers#cppcheck#GetCompileCommandsOptions(buffer) abort
|
||||||
" then use the file to set up import paths, etc.
|
" then use the file to set up import paths, etc.
|
||||||
let [l:dir, l:json_path] = ale#c#FindCompileCommands(a:buffer)
|
let [l:dir, l:json_path] = ale#c#FindCompileCommands(a:buffer)
|
||||||
|
|
||||||
|
" By default, cppcheck processes every config in compile_commands.json.
|
||||||
|
" Use --file-filter to limit to just the buffer file.
|
||||||
return !empty(l:json_path)
|
return !empty(l:json_path)
|
||||||
\ ? '--project=' . ale#Escape(l:json_path[len(l:dir) + 1: ])
|
\ ? '--project=' . ale#Escape(l:json_path[len(l:dir) + 1: ]) . ' --file-filter=' . ale#Escape(bufname(a:buffer))
|
||||||
\ : ''
|
\ : ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -50,7 +64,12 @@ function! ale#handlers#cppcheck#HandleCppCheckFormat(buffer, lines) abort
|
||||||
"test.cpp:974:{column}: error:{inconclusive:inconclusive} Array 'n[3]' accessed at index 3, which is out of bounds. [arrayIndexOutOfBounds]\
|
"test.cpp:974:{column}: error:{inconclusive:inconclusive} Array 'n[3]' accessed at index 3, which is out of bounds. [arrayIndexOutOfBounds]\
|
||||||
" n[3]=3;
|
" n[3]=3;
|
||||||
" ^
|
" ^
|
||||||
let l:pattern = '\v(\f+):(\d+):(\d+|\{column\}): (\w+):(\{inconclusive:inconclusive\})? ?(.*) \[(\w+)\]\'
|
"
|
||||||
|
"" OR if using the misra addon:
|
||||||
|
"test.c:1:16: style: misra violation (use --rule-texts=<file> to get proper output) [misra-c2012-2.7]\'
|
||||||
|
"void test( int parm ) {}
|
||||||
|
" ^
|
||||||
|
let l:pattern = '\v(\f+):(\d+):(\d+|\{column\}): (\w+):(\{inconclusive:inconclusive\})? ?(.*) \[(%(\w[-.]?)+)\]\'
|
||||||
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)
|
||||||
|
|
54
sources_non_forked/ale/autoload/ale/handlers/cspell.vim
Normal file
54
sources_non_forked/ale/autoload/ale/handlers/cspell.vim
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: Define a handler function for cspell's output
|
||||||
|
|
||||||
|
function! ale#handlers#cspell#GetExecutable(buffer) abort
|
||||||
|
return ale#path#FindExecutable(a:buffer,
|
||||||
|
\ 'cspell', [
|
||||||
|
\ 'node_modules/.bin/cspell',
|
||||||
|
\ 'node_modules/cspell/bin.js',
|
||||||
|
\ ]
|
||||||
|
\)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#handlers#cspell#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale#handlers#cspell#GetExecutable(a:buffer)
|
||||||
|
let l:options = ale#Var(a:buffer, 'cspell_options')
|
||||||
|
|
||||||
|
return ale#node#Executable(a:buffer, l:executable)
|
||||||
|
\ . ' lint --no-color --no-progress --no-summary'
|
||||||
|
\ . ale#Pad(l:options)
|
||||||
|
\ . ' -- stdin'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#handlers#cspell#Handle(buffer, lines) abort
|
||||||
|
" Look for lines like the following:
|
||||||
|
"
|
||||||
|
" /home/user/repos/ale/README.md:723:48 - Unknown word (stylelint)
|
||||||
|
let l:pattern = '\v^.*:(\d+):(\d+) - (.*)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\ 'type': 'W',
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#handlers#cspell#DefineLinter(filetype) abort
|
||||||
|
call ale#Set('cspell_executable', 'cspell')
|
||||||
|
call ale#Set('cspell_options', '')
|
||||||
|
call ale#Set('cspell_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
call ale#linter#Define(a:filetype, {
|
||||||
|
\ 'name': 'cspell',
|
||||||
|
\ 'executable': function('ale#handlers#cspell#GetExecutable'),
|
||||||
|
\ 'command': function('ale#handlers#cspell#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#cspell#Handle',
|
||||||
|
\})
|
||||||
|
endfunction
|
|
@ -19,6 +19,16 @@ let s:temp_regex_prefix =
|
||||||
\ . substitute(s:temp_dir, '\\', '\\\\', 'g')
|
\ . substitute(s:temp_dir, '\\', '\\\\', 'g')
|
||||||
\ . '\.\{-}'
|
\ . '\.\{-}'
|
||||||
|
|
||||||
|
function! s:PanicOutput(lines) abort
|
||||||
|
return [{
|
||||||
|
\ 'lnum': 1,
|
||||||
|
\ 'col': 1,
|
||||||
|
\ 'text': 'ghc panic!',
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'detail' : join(a:lines, "\n"),
|
||||||
|
\}]
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale#handlers#haskell#HandleGHCFormat(buffer, lines) abort
|
function! ale#handlers#haskell#HandleGHCFormat(buffer, lines) abort
|
||||||
" Look for lines like the following.
|
" Look for lines like the following.
|
||||||
"
|
"
|
||||||
|
@ -34,6 +44,14 @@ function! ale#handlers#haskell#HandleGHCFormat(buffer, lines) abort
|
||||||
|
|
||||||
let l:corrected_lines = []
|
let l:corrected_lines = []
|
||||||
|
|
||||||
|
" If ghc panic error, put the whole message in details and exit.
|
||||||
|
let l:panic_position = match(a:lines,'ghc: panic!')
|
||||||
|
let l:panic_end = match(a:lines,'Please report this as a GHC bug:')
|
||||||
|
|
||||||
|
if l:panic_position >= 0
|
||||||
|
return s:PanicOutput(a:lines[l:panic_position : l:panic_end])
|
||||||
|
endif
|
||||||
|
|
||||||
" Group the lines into smaller lists.
|
" Group the lines into smaller lists.
|
||||||
for l:line in a:lines
|
for l:line in a:lines
|
||||||
if len(matchlist(l:line, l:pattern)) > 0
|
if len(matchlist(l:line, l:pattern)) > 0
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue