]> git.madduck.net Git - etc/vim.git/blob - .vim/bundle/ale/doc/ale.txt

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Merge commit 'a39f715c13be3352193ffd9c5b7536b8786eff64' as '.vim/bundle/vim-lsp'
[etc/vim.git] / .vim / bundle / ale / doc / ale.txt
1 *ale.txt* Plugin to lint and fix files asynchronously
2 *ale*
3
4 ALE - Asynchronous Lint Engine
5
6 ===============================================================================
7 CONTENTS                                                         *ale-contents*
8
9   1. Introduction.........................|ale-introduction|
10   2. Supported Languages & Tools..........|ale-support|
11   3. Linting..............................|ale-lint|
12     3.1 Linting On Other Machines.........|ale-lint-other-machines|
13     3.2 Adding Language Servers...........|ale-lint-language-servers|
14     3.3 Other Sources.....................|ale-lint-other-sources|
15   4. Fixing Problems......................|ale-fix|
16   5. Language Server Protocol Support.....|ale-lsp|
17     5.1 LSP Neovim Integration............|ale-lsp-neovim|
18     5.2 Completion........................|ale-completion|
19     5.3 Go To Definition..................|ale-go-to-definition|
20     5.4 Go To Type Definition.............|ale-go-to-type-definition|
21     5.5 Go To Implementation..............|ale-go-to-implementation|
22     5.6 Find References...................|ale-find-references|
23     5.7 Hovering..........................|ale-hover|
24     5.8 Symbol Search.....................|ale-symbol-search|
25     5.9 Refactoring: Rename, Actions......|ale-refactor|
26   6. Global Options.......................|ale-options|
27     6.1 Highlights........................|ale-highlights|
28   7. Linter/Fixer Options.................|ale-integration-options|
29     7.1 Options for alex..................|ale-alex-options|
30     7.2 Options for cspell................|ale-cspell-options|
31     7.3 Options for languagetool..........|ale-languagetool-options|
32     7.4 Options for write-good............|ale-write-good-options|
33     7.5 Other Linter/Fixer Options........|ale-other-integration-options|
34   8. Commands/Keybinds....................|ale-commands|
35   9. API..................................|ale-api|
36   10. Special Thanks......................|ale-special-thanks|
37   11. Contact.............................|ale-contact|
38
39
40 ===============================================================================
41 1. Introduction                                              *ale-introduction*
42
43 ALE provides the means to run linters asynchronously in Vim in a variety of
44 languages and tools. ALE sends the contents of buffers to linter programs
45 using the |job-control| features available in Vim 8 and NeoVim. For Vim 8,
46 Vim must be compiled with the |+job| and |+channel| and |+timers| features
47 as a minimum.
48
49 ALE supports the following key features for linting:
50
51 1. Running linters when text is changed.
52 2. Running linters when files are opened.
53 3. Running linters when files are saved. (When a global flag is set.)
54 4. Populating the |location-list| with warning and errors.
55 5. Setting |signs| with warnings and errors for error markers.
56 6. Using `:echo` to show error messages when the cursor moves.
57 7. Setting syntax highlights for errors.
58
59 ALE can fix problems with files with the `:ALEFix` command, using the same job
60 control functionality used for checking for problems. Try using the
61 `:ALEFixSuggest` command for browsing tools that can be used to fix problems
62 for the current buffer.
63
64 If you are interested in contributing to the development of ALE, read the
65 developer documentation. See |ale-development|
66
67 For configuring ALE in Neovim, you can use the |ale.setup| function to
68 configure ALE globally in `init.vim`. >
69
70   require("ale").setup({
71     completion_enabled = true,
72     maximum_file_size = 1024 * 1024,
73     warn_about_trailing_whitespace = false,
74   })
75 <
76 In |ftplugin| files you can customise behavior for different filetypes by
77 using the |ale.setup.buffer| function. >
78
79   -- In ftplugin/python.lua in &runtimepath
80   require("ale").setup.buffer({
81     linters = {"ruff", "pyright"},
82     fixers = {"ruff"}
83   })
84 <
85 Buffer local settings override global settings for that buffer.
86
87
88 ===============================================================================
89 2. Supported Languages & Tools                                    *ale-support*
90
91 ALE supports a wide variety of languages and tools. See |ale-supported-list|
92 for the full list.
93
94
95 ===============================================================================
96 3. Linting                                                           *ale-lint*
97
98 ALE's primary focus is on checking for problems with your code with various
99 programs via some Vim code for integrating with those programs, referred to
100 as 'linters.' ALE supports a wide array of programs for linting by default,
101 but additional programs can be added easily by defining files in |runtimepath|
102 with the filename pattern `ale_linters/<filetype>/<filename>.vim`. For more
103 information on defining new linters, see the extensive documentation
104 for |ale#linter#Define()|.
105
106 Without any configuration, ALE will attempt to check all of the code for every
107 file you open in Vim with all available tools by default. To see what ALE
108 is doing, and what options have been set, try using the `:ALEInfo` command.
109
110 Most of the linters ALE runs will check the Vim buffer you are editing instead
111 of the file on disk. This allows you to check your code for errors before you
112 have even saved your changes. ALE will check your code in the following
113 circumstances, which can be configured with the associated options.
114
115 * When you modify a buffer                   - |g:ale_lint_on_text_changed|
116 * On leaving insert mode                     - |g:ale_lint_on_insert_leave|
117 * When you open a new or modified buffer     - |g:ale_lint_on_enter|
118 * When you save a buffer                     - |g:ale_lint_on_save|
119 * When the filetype changes for a buffer     - |g:ale_lint_on_filetype_changed|
120 * If ALE is used to check code manually      - |:ALELint|
121
122                                                  *ale-lint-settings-on-startup*
123
124 It is worth reading the documentation for every option. You should configure
125 which events ALE will use before ALE is loaded, so it can optimize which
126 autocmd commands to run. You can force autocmd commands to be reloaded with
127 `:ALEDisable | ALEEnable`
128
129 This also applies to the autocmd commands used for |g:ale_echo_cursor|.
130
131                                                         *ale-lint-file-linters*
132
133 Some programs must be run against files which have been saved to disk, and
134 simply do not support reading temporary files or stdin, either of which are
135 required for ALE to be able to check for errors as you type. The programs
136 which behave this way are documented in the lists and tables of supported
137 programs. ALE will only lint files with these programs in the following
138 circumstances.
139
140 * When you open a new or modified buffer     - |g:ale_lint_on_enter|
141 * When you save a buffer                     - |g:ale_lint_on_save|
142 * When the filetype changes for a buffer     - |g:ale_lint_on_filetype_changed|
143 * If ALE is used to check code manually      - |:ALELint|
144
145 ALE will report problems with your code in the following ways, listed with
146 their relevant options.
147
148 * Via Neovim diagnostics (On in Neovim 0.7+) - |g:ale_use_neovim_diagnostics_api|
149 * By updating loclist (On by default)        - |g:ale_set_loclist|
150 * By updating quickfix (Off by default)      - |g:ale_set_quickfix|
151 * By setting error highlights                - |g:ale_set_highlights|
152 * By creating signs in the sign column       - |g:ale_set_signs|
153 * By echoing messages based on your cursor   - |g:ale_echo_cursor|
154 * By showing virtual text at your cursor     - |g:ale_virtualtext_cursor|
155 * By previewing details at your cursor       - |g:ale_cursor_detail|
156 * By showing balloons for your mouse cursor  - |g:ale_set_balloons|
157
158 Please consult the documentation for each option, which can reveal some other
159 ways of tweaking the behavior of each way of displaying problems. You can
160 disable or enable whichever options you prefer.
161
162 Most settings can be configured for each buffer. (|b:| instead of |g:|),
163 including disabling ALE for certain buffers with |b:ale_enabled|. The
164 |g:ale_pattern_options| setting can be used to configure files differently
165 based on regular expressions for filenames. For configuring entire projects,
166 the buffer-local options can be used with external plugins for reading Vim
167 project configuration files. Buffer-local settings can also be used in
168 ftplugin files for different filetypes.
169
170 ALE offers several options for controlling which linters are run.
171
172 * Selecting linters to run.            - |g:ale_linters|
173 * Aliasing filetypes for linters       - |g:ale_linter_aliases|
174 * Only running linters you asked for.  - |g:ale_linters_explicit|
175 * Disabling only a subset of linters.  - |g:ale_linters_ignore|
176 * Disabling LSP linters and `tsserver`.  - |g:ale_disable_lsp|
177
178 You can stop ALE any currently running linters with the `:ALELintStop` command.
179 Any existing problems will be kept.
180
181
182 -------------------------------------------------------------------------------
183 3.1 Linting On Other Machines                         *ale-lint-other-machines*
184
185 ALE offers support for running linters or fixers on files you are editing
186 locally on other machines, so long as the other machine has access to the file
187 you are editing. This could be a linter or fixer run inside of a Docker image,
188 running in a virtual machine, running on a remote server, etc.
189
190 In order to run tools on other machines, you will need to configure your tools
191 to run via scripts that execute commands on those machines, such as by setting
192 the ALE `_executable` options for those tools to a path for a script to run,
193 or by using |g:ale_command_wrapper| to specify a script to wrap all commands
194 that are run by ALE, before they are executed. For tools that ALE runs where
195 ALE looks for locally installed executables first, you may need to set the
196 `_use_global` options for those tools to `1`, or you can set
197 |g:ale_use_global_executables| to `1` before ALE is loaded to only use global
198 executables for all tools.
199
200 In order for ALE to properly lint or fix files which are running on another
201 file system, you must provide ALE with |List|s of strings for mapping paths to
202 and from your local file system and the remote file system, such as the file
203 system of your Docker container. See |g:ale_filename_mappings| for all of the
204 different ways these filename mappings can be configured.
205
206 For example, you might configure `pylint` to run via Docker by creating a
207 script like so. >
208
209   #!/usr/bin/env bash
210
211   exec docker run -i --rm -v "$(pwd):/data" cytopia/pylint "$@"
212 <
213 You will want to run Docker commands with `-i` in order to read from stdin.
214
215 With the above script in mind, you might configure ALE to lint your Python
216 project with `pylint` by providing the path to the script to execute, and
217 mappings which describe how to change between the two file systems in your
218 `python.vim` |ftplugin| file, like so: >
219
220   if expand('%:p') =~# '^/home/w0rp/git/test-pylint/'
221     let b:ale_linters = ['pylint']
222     let b:ale_python_pylint_use_global = 1
223     " This is the path to the script above.
224     let b:ale_python_pylint_executable = '/home/w0rp/git/test-pylint/pylint.sh'
225     " /data matches the path in Docker.
226     let b:ale_filename_mappings = {
227     \ 'pylint': [
228     \   ['/home/w0rp/git/test-pylint', '/data'],
229     \ ],
230     \}
231   endif
232 <
233 You might consider using a Vim plugin for loading Vim configuration files
234 specific to each project, if you have a lot of projects to manage.
235
236
237 -------------------------------------------------------------------------------
238 3.2 Adding Language Servers                         *ale-lint-language-servers*
239
240 ALE comes with many default configurations for language servers, so they can
241 be detected and run automatically. ALE can connect to other language servers
242 by defining a new linter for a filetype. New linters can be defined in |vimrc|,
243 in plugin files, or `ale_linters` directories in 'runtimepath'.
244
245 See |ale-linter-loading-behavior| for more information on loading linters.
246
247 A minimal configuration for a language server linter might look so. >
248
249   call ale#linter#Define('filetype_here', {
250   \   'name': 'any_name_you_want',
251   \   'lsp': 'stdio',
252   \   'executable': '/path/to/executable',
253   \   'command': '%e run',
254   \   'project_root': '/path/to/root_of_project',
255   \})
256 <
257 For language servers that use a TCP or named pipe socket connection, you
258 should define the address to connect to instead. >
259
260   call ale#linter#Define('filetype_here', {
261   \   'name': 'any_name_you_want',
262   \   'lsp': 'socket',
263   \   'address': 'servername:1234',
264   \   'project_root': '/path/to/root_of_project',
265   \})
266 <
267 Most of the options for a language server can be replaced with a |Funcref| for
268 a function accepting a buffer number for dynamically computing values such as
269 the executable path, the project path, the server address, etc, most of which
270 can also be determined based on executing some other asynchronous task. See
271 |ale#command#Run()| for computing linter options based on asynchronous
272 results.
273
274 See |ale#linter#Define()| for a detailed explanation of all of the options for
275 configuring linters.
276
277
278 -------------------------------------------------------------------------------
279 3.3 Other Sources                                      *ale-lint-other-sources*
280
281 Problems for a buffer can be taken from other sources and rendered by ALE.
282 This allows ALE to be used in combination with other plugins which also want
283 to display any problems they might find with a buffer. ALE's API includes the
284 following components for making this possible.
285
286 * |ale#other_source#StartChecking()| - Tell ALE that a buffer is being checked.
287 * |ale#other_source#ShowResults()|   - Show results from another source.
288 * |ALEWantResults|                   - A signal for when ALE wants results.
289
290 Other resources can provide results for ALE to display at any time, following
291 ALE's loclist format. (See |ale-loclist-format|) For example: >
292
293   " Tell ALE to show some results.
294   " This function can be called at any time.
295   call ale#other_source#ShowResults(bufnr(''), 'some-linter-name', [
296   \ {'text': 'Something went wrong', 'lnum': 13},
297   \])
298 <
299 Other sources should use a unique name for identifying themselves. A single
300 linter name can be used for all problems from another source, or a series of
301 unique linter names can be used. Results can be cleared for that source by
302 providing an empty List.
303
304 |ale#other_source#StartChecking()| should be called whenever another source
305 starts checking a buffer, so other tools can know that a buffer is being
306 checked by some plugin. The |ALEWantResults| autocmd event can be used to
307 start checking a buffer for problems every time that ALE does. When
308 |ALEWantResults| is signaled, |g:ale_want_results_buffer| will be set to the
309 number of the buffer that ALE wants to check.
310 |ale#other_source#StartChecking()| should be called synchronously, and other
311 sources should perform their checks on a buffer in the background
312 asynchronously, so they don't interrupt editing.
313
314 |ale#other_source#ShowResults()| must not be called synchronously before
315 ALE's engine executes its code after the |ALEWantResults| event runs. If
316 there are immediate results to provide to ALE, a 0 millisecond timer with
317 |timer_start()| can be set instead up to call |ale#other_source#ShowResults()|
318 after ALE has first executed its engine code for its own sources.
319
320 A plugin might integrate its own checks with ALE like so: >
321
322   augroup SomeGroupName
323     autocmd!
324     autocmd User ALEWantResults call Hook(g:ale_want_results_buffer)
325   augroup END
326
327   function! DoBackgroundWork(buffer) abort
328     " Start some work in the background here.
329     " ...
330     " Then call WorkDone(a:buffer, results)
331   endfunction
332
333   function! Hook(buffer) abort
334     " Tell ALE we're going to check this buffer.
335     call ale#other_source#StartChecking(a:buffer, 'some-name')
336     call DoBackgroundWork(a:buffer)
337   endfunction
338
339   function! WorkDone(buffer, results) abort
340     " Send results to ALE after they have been collected.
341     call ale#other_source#ShowResults(a:buffer, 'some-name', a:results)
342   endfunction
343 <
344
345 ===============================================================================
346 4. Fixing Problems                                                    *ale-fix*
347
348 ALE can fix problems with files with the `:ALEFix` command. `:ALEFix`
349 accepts names of fixers to be applied as arguments. Alternatively,
350 when no arguments are provided, the variable |g:ale_fixers| will be
351 read for getting a |List| of commands for filetypes, split on `.`, and
352 the functions named in |g:ale_fixers| will be executed for fixing the
353 errors.
354
355 The `:ALEFixSuggest` command can be used to suggest tools that be used to
356 fix problems for the current buffer.
357
358 The values for `g:ale_fixers` can be a list of |String|, |Funcref|, or
359 |lambda| values. String values must either name a function, or a short name
360 for a function set in the ALE fixer registry.
361
362 Each function for fixing errors must accept either one argument `(buffer)` or
363 two arguments `(buffer, lines)`, representing the buffer being fixed and the
364 lines to fix. The functions must return either `0`, for changing nothing, a
365 |List| for new lines to set, a |Dictionary| for describing a command to be
366 run in the background, or the result of |ale#command#Run()|.
367
368 Functions receiving a variable number of arguments will not receive the second
369 argument `lines`. Functions should name two arguments if the `lines` argument
370 is desired. This is required to avoid unnecessary copying of the lines of
371 the buffers being checked.
372
373 When a |Dictionary| is returned for an `:ALEFix` callback, the following keys
374 are supported for running the commands.
375
376   `cwd`                 An optional |String| for setting the working directory
377                       for the command.
378
379                       If not set, or `v:null`, the `cwd` of the last command
380                       that spawn this one will be used.
381
382   `command`             A |String| for the command to run. This key is required.
383
384                       When `%t` is included in a command string, a temporary
385                       file will be created, containing the lines from the file
386                       after previous adjustment have been done.
387
388                       See |ale-command-format-strings| for formatting options.
389
390   `read_temporary_file` When set to `1`, ALE will read the contents of the
391                       temporary file created for `%t`. This option can be used
392                       for commands which need to modify some file on disk in
393                       order to fix files.
394
395   `process_with`        An optional callback for post-processing.
396
397                       The callback must accept arguments `(bufnr, output)`:
398                       the buffer number undergoing fixing and the fixer's
399                       output as a |List| of |String|s. It must return a |List|
400                       of |String|s that will be the new contents of the
401                       buffer.
402
403                       This callback is useful to remove excess lines from the
404                       command's output or apply additional changes to the
405                       output.
406
407
408   `read_buffer`         An optional key for disabling reading the buffer.
409
410                       When set to `0`, ALE will not pipe the buffer's data
411                       into the command via stdin. This option is ignored and
412                       the buffer is not read when `read_temporary_file` is
413                       `1`.
414
415                       This option defaults to `1`.
416
417                                                         *ale-fix-configuration*
418
419 Synchronous functions and asynchronous jobs will be run in a sequence for
420 fixing files, and can be combined. For example:
421 >
422   let g:ale_fixers = {
423   \   'javascript': [
424   \       'DoSomething',
425   \       'eslint',
426   \       {buffer, lines -> filter(lines, 'v:val !=~ ''^\s*//''')},
427   \   ],
428   \}
429
430   ALEFix
431 <
432 The above example will call a function called `DoSomething` which could act
433 upon some lines immediately, then run `eslint` from the ALE registry, and
434 then call a lambda function which will remove every single line comment
435 from the file.
436
437 For buffer-local settings, such as in |g:ale_pattern_options| or in ftplugin
438 files, a |List| may be used for configuring the fixers instead.
439 >
440   " Same as the above, only a List can be used instead of a Dictionary.
441   let b:ale_fixers = [
442   \   'DoSomething',
443   \   'eslint',
444   \   {buffer, lines -> filter(lines, 'v:val !=~ ''^\s*//''')},
445   \]
446
447   ALEFix
448 <
449 For convenience, a plug mapping is defined for `:ALEFix`, so you can set up a
450 keybind easily for fixing files. >
451
452   " Bind F8 to fixing problems with ALE
453   nmap <F8> <Plug>(ale_fix)
454 <
455 Files can be fixed automatically with the following options, which are all off
456 by default.
457
458 |g:ale_fix_on_save| - Fix files when they are saved.
459
460 Fixers can be disabled on save with |g:ale_fix_on_save_ignore|. They will
461 still be run when you manually run `:ALEFix`.
462
463 Fixers can be run on another machines, just like linters, such as fixers run
464 from a Docker container, running in a virtual machine, running a remote
465 server, etc. See |ale-lint-other-machines|.
466
467
468 ===============================================================================
469 5. Language Server Protocol Support                                   *ale-lsp*
470
471 ALE integrates with Language Server Protocol (LSP) servers. LSP linters can be
472 used in combination with any other linter, and will automatically connect to
473 LSP servers when needed. ALE also supports `tsserver` for TypeScript, which
474 uses a different but very similar protocol.
475
476 If you want to use another plugin for LSP features and tsserver, you can use
477 the |g:ale_disable_lsp| setting to disable ALE's own LSP integrations, or
478 ignore particular linters with |g:ale_linters_ignore|. In ALE's default
479 configuration ALE will attempt to avoid conflicting with `nvim-lspconfig`.
480
481 ALE will integrate with Neovim's LSP client by default in Neovim 0.8+. This
482 functionality can be controlled with the |g:ale_use_neovim_lsp_api| setting.
483 See |ale-lsp-neovim| below for information about ALE's integration with
484 Neovim's LSP client.
485
486 If for any reason you want to stop a language server ALE starts, such as when
487 a project configuration has significantly changed, or new files have been
488 added the language server isn't aware of, use either `:ALEStopLSP` or
489 `:ALEStopAllLSPs` to stop the server until ALE automatically starts it again.
490
491
492 -------------------------------------------------------------------------------
493 5.1 LSP Neovim Integration                                     *ale-lsp-neovim*
494
495 In Neovim 0.8+ ALE will integrate with Neovim's native LSP client by default,
496 unless disabled by setting |g:ale_use_neovim_lsp_api| to `0`. All built in
497 functionality for Neovim's LSP client should work as expected, and this
498 ensures ALE integrates well with other plugins that rely on Neovim's LSP
499 client.
500
501 NOTE: Neovim versions below `0.11.0` do not support socket connections to
502 language servers when the `address` defined in ALE uses a hostname instead of
503 an IP address. To work around this, configure language clients with an IP
504 address instead of a hostname, or revert back to ALE's custom LSP client.
505
506 See |lsp| for information on Neovim's built in LSP client.
507
508 For diagnostics, for computing problems to show via ALE, ALE overrides the
509 diagnostics handler for the LSP client launched by ALE, so all of the
510 functionality in ALE will work as expected. By default ALE will send
511 diagnostics back to Neovim's diagnostics API, which can be configured with the
512 |g:ale_use_neovim_diagnostics_api| setting. This ensures that all of the
513 functionality ALE adds on top for diagnostics will function, and that problems
514 from linters that don't use LSP can be combined with LSP servers. See the
515 diagram below. >
516
517   +-------------------+
518   |  Language Server  |  (Sends diagnostics)
519   +-------------------+
520            |
521   +-------------------+
522   | Neovim LSP Client |  (Receives diagnostics)
523   +-------------------+
524            |
525   +-------------------+
526   |  ALE Processing   |  (Intercepts and processes diagnostics)
527   +-------------------+
528            |
529   +-------------------+
530   | Diagnostic engine |  (Either Neovim's diagnostics or ALE's custom code)
531   +-------------------+
532            |
533   +-------------------+
534   |      Neovim       |  (User sees formatted diagnostics)
535   +-------------------+
536 <
537 For LSP functionality executed via ALE's own functions, commands, and
538 keybinds, ALE will intercept requests and handle them in an entirely custom
539 way, ensuring ALE functionality should work largely the same between
540 different Vim versions. See the diagram below. >
541
542   +-------------------+
543   |      Neovim       |  (User triggers LSP request via ALE)
544   +-------------------+
545            |
546   +-------------------+
547   |       ALE         |  (ALE sends request to Neovim client)
548   +-------------------+
549            |
550   +-------------------+
551   | Neovim LSP Client |  (Forwards request to language server)
552   +-------------------+
553            |
554   +-------------------+
555   | Language Server   |  (Processes request and sends response)
556   +-------------------+
557            |
558   +-------------------+
559   | Neovim LSP Client |  (Receives response)
560   +-------------------+
561            |
562   +-------------------+
563   |       ALE         |  (ALE Handles "raw" LSP response)
564   +-------------------+
565            |
566   +-------------------+
567   |      Neovim       |  (User sees result)
568   +-------------------+
569 <
570 For LSP functionality built-in to Neovim, such as the |gd| keybind for jumping
571 to a definition, Neovim will bypass ALE entirely, ensuring that ALE does not
572 interfere with LSP functionality as expected by built-in Neovim tools or other
573 plugins. See the diagram below. >
574
575   +-------------------+
576   |      Neovim       |  (User triggers LSP request)
577   +-------------------+
578            |
579   +-------------------+
580   | Neovim LSP Client |  (Directly handles the request)
581   +-------------------+
582            |
583   +-------------------+
584   | Language Server   |  (Processes request and sends response)
585   +-------------------+
586            |
587   +-------------------+
588   | Neovim LSP Client |  (Receives response and shows result)
589   +-------------------+
590            |
591   +-------------------+
592   |      Neovim       |  (User sees result)
593   +-------------------+
594 <
595
596 -------------------------------------------------------------------------------
597 5.2 Completion                                                 *ale-completion*
598
599 In Neovim 0.8+ ALE's integration with its native LSP client will make it
600 possible to use other plugins that rely on Neovim's LSP client as a basis.
601 `nvim-cmp` is recommended as a completion plugin worth trying in Neovim.
602 See: https://github.com/hrsh7th/nvim-cmp
603
604 ALE offers support for automatic completion of code while you type.
605 Completion is only supported while at least one LSP linter is enabled. ALE
606 will only suggest symbols provided by the LSP servers.
607
608                                                      *ale-deoplete-integration*
609
610 ALE integrates with Deoplete for offering automatic completion data. ALE's
611 completion source for Deoplete is named `'ale'`, and should enabled
612 automatically if Deoplete is enabled and configured correctly. Deoplete
613 integration should not be combined with ALE's own implementation.
614
615                                                  *ale-asyncomplete-integration*
616
617 ALE additionally integrates with asyncomplete.vim for offering automatic
618 completion data. ALE's asyncomplete source requires registration with
619 defaults provided by the |asyncomplete#sources#ale#get_source_options| function >
620
621   " Use ALE's function for asyncomplete defaults
622   " Provide your own overrides here.
623   au User asyncomplete_setup call asyncomplete#register_source(
624   \   asyncomplete#sources#ale#get_source_options({
625   \       'priority': 10,
626   \   })
627   \)
628 >
629 ALE also offers its own completion implementation, which does not require any
630 other plugins. Suggestions will be made while you type after completion is
631 enabled. ALE's own completion implementation can be enabled by setting
632 |g:ale_completion_enabled| to `true` or `1`. This setting must be set to
633 `true` or `1` before ALE is loaded. The delay for completion can be configured
634 with |g:ale_completion_delay|. This setting should not be enabled if you wish
635 to use ALE as a completion source for other plugins.
636
637 ALE automatic completion will not work when 'paste' is active. Only set
638 'paste' when you are copy and pasting text into your buffers.
639
640 ALE automatic completion will interfere with default insert completion with
641 `CTRL-N` and so on (|compl-vim|). You can write your own keybinds and a
642 function in your |vimrc| file to force insert completion instead, like so: >
643
644   function! SmartInsertCompletion() abort
645     " Use the default CTRL-N in completion menus
646     if pumvisible()
647       return "\<C-n>"
648     endif
649
650     " Exit and re-enter insert mode, and use insert completion
651     return "\<C-c>a\<C-n>"
652   endfunction
653
654   inoremap <silent> <C-n> <C-R>=SmartInsertCompletion()<CR>
655 <
656 ALE provides an 'omnifunc' function |ale#completion#OmniFunc| for triggering
657 completion manually with CTRL-X CTRL-O. |i_CTRL-X_CTRL-O| >
658
659   " Use ALE's function for omnicompletion.
660   set omnifunc=ale#completion#OmniFunc
661 <
662                                                       *ale-completion-fallback*
663
664 You can write your own completion function and fallback on other methods of
665 completion by checking if there are no results that ALE can determine. For
666 example, for Python code, you could fall back on the `python3complete`
667 function. >
668
669   function! TestCompletionFunc(findstart, base) abort
670     let l:result = ale#completion#OmniFunc(a:findstart, a:base)
671
672     " Check if ALE couldn't find anything.
673     if (a:findstart && l:result is -3)
674     \|| (!a:findstart && empty(l:result))
675       " Defer to another omnifunc if ALE couldn't find anything.
676       return python3complete#Complete(a:findstart, a:base)
677     endif
678
679     return l:result
680   endfunction
681
682   set omnifunc=TestCompletionFunc
683 <
684 See |complete-functions| for documentation on how to write completion
685 functions.
686
687 ALE will only suggest so many possible matches for completion. The maximum
688 number of items can be controlled with |g:ale_completion_max_suggestions|.
689
690 If you don't like some of the suggestions you see, you can filter them out
691 with |g:ale_completion_excluded_words| or |b:ale_completion_excluded_words|.
692
693 The `:ALEComplete` command can be used to show completion suggestions manually,
694 even when |g:ale_completion_enabled| is set to `0`. For manually requesting
695 completion information with Deoplete, consult Deoplete's documentation.
696
697 ALE supports automatic imports from external modules. This behavior can be
698 disabled by setting the |g:ale_completion_autoimport| variable to `0`.
699 Disabling automatic imports can drop some or all completion items from
700 some LSP servers (e.g. eclipselsp).
701
702 You can manually request imports for symbols at the cursor with the
703 `:ALEImport` command. The word at the cursor must be an exact match for some
704 potential completion result which includes additional text to insert into the
705 current buffer, which ALE will assume is code for an import line. This command
706 can be useful when your code already contains something you need to import.
707
708 You can execute other commands whenever ALE inserts some completion text with
709 the |ALECompletePost| event.
710
711 When working with TypeScript files, ALE can remove warnings from your
712 completions by setting the |g:ale_completion_tsserver_remove_warnings|
713 variable to 1.
714
715                                                *ale-completion-completeopt-bug*
716
717 ALE Automatic completion implementation replaces |completeopt| before opening
718 the omnicomplete menu with <C-x><C-o>. In some versions of Vim, the value set
719 for the option will not be respected. If you experience issues with Vim
720 automatically inserting text while you type, set the following option in
721 vimrc, and your issues should go away. >
722
723   set completeopt=menu,menuone,preview,noselect,noinsert
724 <
725 Or alternatively, if you want to show documentation in popups: >
726
727   set completeopt=menu,menuone,popup,noselect,noinsert
728 <
729                                                                   *ale-symbols*
730
731 ALE provides a set of basic completion symbols. If you want to replace those
732 symbols with others, you can set the variable |g:ale_completion_symbols| with
733 a mapping of the type of completion to the symbol or other string that you
734 would like to use. An example here shows the available options for symbols  >
735
736   let g:ale_completion_symbols = {
737   \ 'text': '',
738   \ 'method': '',
739   \ 'function': '',
740   \ 'constructor': '',
741   \ 'field': '',
742   \ 'variable': '',
743   \ 'class': '',
744   \ 'interface': '',
745   \ 'module': '',
746   \ 'property': '',
747   \ 'unit': 'unit',
748   \ 'value': 'val',
749   \ 'enum': '',
750   \ 'keyword': 'keyword',
751   \ 'snippet': '',
752   \ 'color': 'color',
753   \ 'file': '',
754   \ 'reference': 'ref',
755   \ 'folder': '',
756   \ 'enum member': '',
757   \ 'constant': '',
758   \ 'struct': '',
759   \ 'event': 'event',
760   \ 'operator': '',
761   \ 'type_parameter': 'type param',
762   \ '<default>': 'v'
763   \ }
764 <
765
766 -------------------------------------------------------------------------------
767 5.3 Go To Definition                                     *ale-go-to-definition*
768
769 ALE supports jumping to the files and locations where symbols are defined
770 through any enabled LSP linters. The locations ALE will jump to depend on the
771 information returned by LSP servers. The `:ALEGoToDefinition` command will jump
772 to the definition of symbols under the cursor. See the documentation for the
773 command for configuring how the location will be displayed.
774
775 ALE will update Vim's |tagstack| automatically unless |g:ale_update_tagstack| is
776 set to `0`.
777
778
779 -------------------------------------------------------------------------------
780 5.4 Go To Type Definition                           *ale-go-to-type-definition*
781
782 ALE supports jumping to the files and locations where symbols' types are
783 defined through any enabled LSP linters. The locations ALE will jump to depend
784 on the information returned by LSP servers. The `:ALEGoToTypeDefinition`
785 command will jump to the definition of symbols under the cursor. See the
786 documentation for the command for configuring how the location will be
787 displayed.
788
789
790 -------------------------------------------------------------------------------
791 5.5 Go To Implementation                             *ale-go-to-implementation*
792
793 ALE supports jumping to the files and locations where symbols are implemented
794 through any enabled LSP linters. The locations ALE will jump to depend on the
795 information returned by LSP servers. The `:ALEGoToImplementation` command will
796 jump to the implementation of symbols under the cursor. See the documentation
797 for the command for configuring how the location will be displayed.
798
799
800 -------------------------------------------------------------------------------
801 5.6 Find References                                       *ale-find-references*
802
803 ALE supports finding references for symbols though any enabled LSP linters
804 with the `:ALEFindReferences` command. See the documentation for the command
805 for a full list of options.
806
807
808 -------------------------------------------------------------------------------
809 5.7 Hovering                                                        *ale-hover*
810
811 ALE supports "hover" information for printing brief information about symbols
812 at the cursor taken from LSP linters. The following commands are supported:
813
814 `:ALEHover` - Print information about the symbol at the cursor.
815
816 Truncated information will be displayed when the cursor rests on a symbol by
817 default, as long as there are no problems on the same line. You can disable
818 this behavior by setting |g:ale_hover_cursor| to `0`.
819
820 If |g:ale_set_balloons| is set to `true` or `1` and your version of Vim
821 supports the |balloon_show()| function, then "hover" information also show up
822 when you move the mouse over a symbol in a buffer. Diagnostic information will
823 take priority over hover information for balloons. If a line contains a
824 problem, that problem will be displayed in a balloon instead of hover
825 information.
826
827 Hover information can be displayed in the preview window instead by setting
828 |g:ale_hover_to_preview| to `true` or `1`.
829
830 When using Neovim or Vim with |popupwin|, if |g:ale_hover_to_floating_preview|
831 or |g:ale_floating_preview| is set to `true` or `1`, the hover information
832 will show in a floating window. The borders of the floating preview window can
833 be customized by setting |g:ale_floating_window_border|.
834
835 For Vim 8.1+ terminals, mouse hovering is disabled by default. Enabling
836 |balloonexpr| commands in terminals can cause scrolling issues in terminals,
837 so ALE will not attempt to show balloons unless |g:ale_set_balloons| is set to
838 `true` or `1` before ALE is loaded.
839
840 For enabling mouse support in terminals, you may have to change your mouse
841 settings. For example: >
842
843   " Example mouse settings.
844   " You will need to try different settings, depending on your terminal.
845   set mouse=a
846   set ttymouse=xterm
847 <
848
849 Documentation for symbols at the cursor can be retrieved using the
850 `:ALEDocumentation` command. This command is only available for `tsserver`.
851
852
853 -------------------------------------------------------------------------------
854 5.8 Symbol Search                                           *ale-symbol-search*
855
856 ALE supports searching for workspace symbols via LSP linters with the
857 `:ALESymbolSearch` command. See the documentation for the command
858 for a full list of options.
859
860
861 -------------------------------------------------------------------------------
862 5.9 Refactoring: Rename, Actions                                 *ale-refactor*
863
864 ALE supports renaming symbols in code such as variables or class names with
865 the `:ALERename` command.
866
867 `:ALEFileRename` will rename file and fix import paths (tsserver only).
868
869 `:ALECodeAction` will execute actions on the cursor or applied to a visual
870 range selection, such as automatically fixing errors.
871
872 Actions will appear in the right click mouse menu by default for GUI versions
873 of Vim, unless disabled by setting |g:ale_popup_menu_enabled| to `0`.
874
875 Make sure to set your Vim to move the cursor position whenever you right
876 click, and enable the mouse menu: >
877
878   set mouse=a
879   set mousemodel=popup_setpos
880 <
881 You may wish to remove some other menu items you don't want to see: >
882
883   silent! aunmenu PopUp.Select\ Word
884   silent! aunmenu PopUp.Select\ Sentence
885   silent! aunmenu PopUp.Select\ Paragraph
886   silent! aunmenu PopUp.Select\ Line
887   silent! aunmenu PopUp.Select\ Block
888   silent! aunmenu PopUp.Select\ Blockwise
889   silent! aunmenu PopUp.Select\ All
890 <
891
892 ===============================================================================
893 6. Global Options                                                 *ale-options*
894
895 Options documented here can be configured either Vim variables, or via the
896 |ale.setup| and |ale.setup.buffer| functions in Lua. When configuring via
897 the Lua functions in Lua scripts, ALE will bridge types to Vim script in the
898 following ways.
899
900 1. Strings, numbers, booleans, and `nil` will be represented exactly.
901 2. Tables with no or only number keys will become a |List| in Vim.
902 3. Keys other than strings and numbers in tables cannot be represented.
903 4. Tables with special |metatable| properties cannot be represented.
904 5. Options accepting functions as values will automatically have Vim functions
905    created that bridge the function calls to and from Lua code.
906
907                                              *g:airline#extensions#ale#enabled*
908 g:airline#extensions#ale#enabled
909   Type: |Number|
910   Default: `1`
911
912   Enables or disables the |airline|'s native extension for ale, which displays
913   warnings and errors in the status line, prefixed by
914   |airline#extensions#ale#error_symbol| and
915   |airline#extensions#ale#warning_symbol|.
916
917                                   *ale-options.cache_executable_check_failures*
918                                         *g:ale_cache_executable_check_failures*
919 cache_executable_check_failures
920 g:ale_cache_executable_check_failures
921   Type: |Boolean| or |Number|
922   Default: `nil`
923
924   When set to `true` or `1`, ALE will cache failing executable checks for
925   linters. By default, only executable checks which succeed will be cached.
926
927   When this option is set to `true` or `1`, Vim will have to be restarted
928   after new executables are installed for ALE to be able to run linters for
929   those executables.
930
931                                          *ale-options.change_sign_column_color*
932                                                *g:ale_change_sign_column_color*
933 change_sign_column_color
934 g:ale_change_sign_column_color
935   Type: |Boolean| or |Number|
936   Default: `false`
937
938   When set to `true` or `1`, this option will set different highlights for the
939   sign column itself when ALE reports problems with a file. This option can be
940   combined with |g:ale_sign_column_always|.
941
942   ALE uses the following highlight groups for highlighting the sign column:
943
944   `:ALESignColumnWithErrors`    -  Links to `Error` by default.
945   `:ALESignColumnWithoutErrors` -  Uses the value for `SignColumn` by default.
946
947   The sign column color can only be changed globally in Vim. The sign column
948   might produce unexpected results if editing different files in split
949   windows.
950
951                                           *ale-options.close_preview_on_insert*
952                                                 *g:ale_close_preview_on_insert*
953 close_preview_on_insert
954 g:ale_close_preview_on_insert
955   Type: |Boolean| or |Number|
956   Default: `false`
957
958   When this option is set to `true` or `1`, ALE's |preview-window| will be
959   automatically closed upon entering Insert Mode. This option can be used in
960   combination with |g:ale_cursor_detail| for automatically displaying the
961   preview window on problem lines, and automatically closing it again when
962   editing text.
963
964   This setting must be set to `true` or `1` before ALE is loaded for this
965   behavior to be enabled. See |ale-lint-settings-on-startup|.
966
967                                                   *ale-options.command_wrapper*
968                                                         *g:ale_command_wrapper*
969                                                         *b:ale_command_wrapper*
970 command_wrapper
971 g:ale_command_wrapper
972   Type: |String|
973   Default: `''`
974
975   An option for wrapping all commands that ALE runs, for linters, fixers,
976   and LSP commands. This option can be set globally, or for specific buffers.
977
978   This option can be used to apply nice to all commands. For example: >
979
980     " Prefix all commands with nice.
981     let g:ale_command_wrapper = 'nice -n5'
982 <
983   Use the `:ALEInfo` command to view the commands that are run. All of the
984   arguments for commands will be put on the end of the wrapped command by
985   default. A `%*` marker can be used to spread the arguments in the wrapped
986   command. >
987
988     " Has the same effect as the above.
989     let g:ale_command_wrapper = 'nice -n5 %*'
990 <
991   For passing all of the arguments for a command as one argument to a wrapper,
992   `%@` can be used instead. >
993
994     " Will result in say: /bin/bash -c 'other-wrapper -c "some command" -x'
995     let g:ale_command_wrapper = 'other-wrapper -c %@ -x'
996 <
997   For commands including `&&` or `;`, only the last command in the list will
998   be passed to the wrapper. `&&` is most commonly used in ALE to change the
999   working directory before running a command.
1000
1001                                                  *ale-options.completion_delay*
1002                                                        *g:ale_completion_delay*
1003 completion_delay
1004 g:ale_completion_delay
1005   Type: |Number|
1006   Default: `100`
1007
1008   The number of milliseconds before ALE will send a request to a language
1009   server for completions after you have finished typing.
1010
1011   See |ale-completion|
1012
1013                                                *ale-options.completion_enabled*
1014                                                      *g:ale_completion_enabled*
1015                                                      *b:ale_completion_enabled*
1016 completion_enabled
1017 g:ale_completion_enabled
1018   Type: |Boolean| or |Number|
1019   Default: `false`
1020
1021   When this option is set to `true` or `1`, completion support will be enabled.
1022
1023   This setting must be set to `true` or `1` before ALE is loaded for this behavior
1024   to be enabled.
1025
1026   This setting should not be enabled if you wish to use ALE as a completion
1027   source for other completion plugins.
1028
1029   ALE automatic completion will not work when 'paste' is active. Only set
1030   'paste' when you are copy and pasting text into your buffers.
1031
1032   A buffer-local version of this setting `b:ale_completion_enabled` can be set
1033   to `0` to disable ALE's automatic completion support for a single buffer.
1034   ALE's completion support must be enabled globally to be enabled locally.
1035
1036   See |ale-completion|
1037
1038                               *ale-options.completion_tsserver_remove_warnings*
1039                                     *g:ale_completion_tsserver_remove_warnings*
1040 completion_tsserver_remove_warnings
1041 g:ale_completion_tsserver_remove_warnings
1042   Type: |Boolean| or |Number|
1043   Default: `false`
1044
1045   When this option is set to `false` or `0`, ALE will return all completion
1046   items from its built in completion engine, including those that are a
1047   warning. Warnings can be excluded from completed items by setting it to
1048   `true` or `1`.
1049
1050                                             *ale-options.completion_autoimport*
1051                                                   *g:ale_completion_autoimport*
1052 completion_autoimport
1053 g:ale_completion_autoimport
1054   Type: |Boolean| or |Number|
1055   Default: `true`
1056
1057   When this option is set to `1`, ALE will try to automatically import
1058   completion results from external modules. It can be disabled by setting it
1059   to `0`. Some LSP servers include auto imports on every completion item so
1060   disabling automatic imports may drop some or all completion items returned
1061   by it (e.g. eclipselsp).
1062
1063                                         *ale-options.completion_excluded_words*
1064                                               *g:ale_completion_excluded_words*
1065                                               *b:ale_completion_excluded_words*
1066 completion_excluded_words
1067 g:ale_completion_excluded_words
1068   Type: |List|
1069   Default: `[]`
1070
1071   This option can be set to a list of |String| values for "words" to exclude
1072   from completion results, as in the words for |complete-items|. The strings
1073   will be matched exactly in a case-sensitive manner. (|==#|)
1074
1075   This setting can be configured in ftplugin files with buffer variables, so
1076   that different lists can be used for different filetypes. For example: >
1077
1078   " In ~/.vim/ftplugin/typescript.vim
1079
1080   " Don't suggest `it` or `describe` so we can use snippets for those words.
1081   let b:ale_completion_excluded_words = ['it', 'describe']
1082 <
1083                                                *ale-options.completion_symbols*
1084                                                      *g:ale_completion_symbols*
1085 completion_symbols
1086 g:ale_completion_symbols
1087   Type: |Dictionary|
1088   Default: See `autoload/ale/completion.vim`
1089
1090   A mapping from completion types to symbols for completions. See
1091   |ale-symbols| for more information.
1092
1093   By default, this mapping only uses built in Vim completion kinds, but it can
1094   be updated to use any Unicode character for the completion kind. For
1095   example: >
1096     let g:ale_completion_symbols = {
1097     \ 'text': '',
1098     \ 'method': '',
1099     \ 'function': '',
1100     \ 'constructor': '',
1101     \ 'field': '',
1102     \ 'variable': '',
1103     \ 'class': '',
1104     \ 'interface': '',
1105     \ 'module': '',
1106     \ 'property': '',
1107     \ 'unit': 'v',
1108     \ 'value': 'v',
1109     \ 'enum': 't',
1110     \ 'keyword': 'v',
1111     \ 'snippet': 'v',
1112     \ 'color': 'v',
1113     \ 'file': 'v',
1114     \ 'reference': 'v',
1115     \ 'folder': 'v',
1116     \ 'enum_member': 'm',
1117     \ 'constant': 'm',
1118     \ 'struct': 't',
1119     \ 'event': 'v',
1120     \ 'operator': 'f',
1121     \ 'type_parameter': 'p',
1122     \ '<default>': 'v'
1123     \ })
1124 <
1125                                        *ale-options.completion_max_suggestions*
1126                                              *g:ale_completion_max_suggestions*
1127 completion_max_suggestions
1128 g:ale_completion_max_suggestions
1129   Type: |Number|
1130   Default: `50`
1131
1132   The maximum number of items ALE will suggest in completion menus for
1133   automatic completion.
1134
1135   Setting this number higher will require more processing time, and may
1136   suggest too much noise. Setting this number lower will require less
1137   processing time, but some suggestions will not be included, so you might not
1138   be able to see the suggestions you want.
1139
1140   Adjust this option as needed, depending on the complexity of your codebase
1141   and your available processing power.
1142
1143                                                     *ale-options.cursor_detail*
1144                                                           *g:ale_cursor_detail*
1145 cursor_detail
1146 g:ale_cursor_detail
1147   Type: |Number|
1148   Default: `false`
1149
1150   When this option is set to `true` or `1`, ALE's |preview-window| will be
1151   automatically opened when the cursor moves onto lines with problems. ALE
1152   will search for problems using the same logic that |g:ale_echo_cursor| uses.
1153   The preview window will be closed automatically when you move away from the
1154   line.
1155
1156   Messages are only displayed after a short delay. See |g:ale_echo_delay|.
1157
1158   The preview window is opened without stealing focus, which means your cursor
1159   will stay in the same buffer as it currently is.
1160
1161   The preview window can be closed automatically upon entering Insert mode
1162   by setting |g:ale_close_preview_on_insert| to `true` or `1`.
1163
1164   Either this setting or |g:ale_echo_cursor| must be set to `true` or  `1`
1165   before ALE is loaded for messages to be displayed.
1166   See |ale-lint-settings-on-startup|.
1167
1168                                                *ale-options.default_navigation*
1169                                                      *g:ale_default_navigation*
1170                                                      *b:ale_default_navigation*
1171 default_navigation
1172 g:ale_default_navigation
1173   Type: |String|
1174   Default: `'buffer'`
1175
1176   The default method for navigating away from the current buffer to another
1177   buffer, such as for `:ALEFindReferences` or `:ALEGoToDefinition`.
1178
1179                                        *ale-options.detail_to_floating_preview*
1180                                              *g:ale_detail_to_floating_preview*
1181                                              *b:ale_detail_to_floating_preview*
1182 detail_to_floating_preview
1183 g:ale_detail_to_floating_preview
1184   Type: |Number|
1185   Default: `0`
1186
1187   When this option is set to `1`, Neovim or Vim with |popupwin| will use a
1188   floating window for ALEDetail output.
1189
1190                                                       *ale-options.disable_lsp*
1191                                                             *g:ale_disable_lsp*
1192                                                             *b:ale_disable_lsp*
1193 disable_lsp
1194 g:ale_disable_lsp
1195   Type: |Boolean| OR |Number| OR |String|
1196   Default: `'auto'`
1197
1198   When this option is set to `'auto'`, ALE will automatically disable linters
1199   that it detects as having already been configured with the `nvim-lspconfig`
1200   plugin. When this option is set to `true` or `1`, ALE ignores all linters
1201   powered by LSP, and also `tsserver`.
1202
1203   Any linters that are disabled will also not be usable for LSP functionality
1204   other than just linting.
1205
1206   Please see also |ale-lsp|.
1207
1208                                                       *ale-options.echo_cursor*
1209                                                             *g:ale_echo_cursor*
1210 echo_cursor
1211 g:ale_echo_cursor
1212   Type: |Number|
1213   Default: `1`
1214
1215   When this option is set to `1`, a truncated message will be echoed when a
1216   cursor is near a warning or error. ALE will attempt to find the warning or
1217   error at a column nearest to the cursor when the cursor is resting on a line
1218   which contains a warning or error. This option can be set to `0` to disable
1219   this behavior.
1220
1221   Messages are only displayed after a short delay. See |g:ale_echo_delay|.
1222
1223   The format of the message can be customized with |g:ale_echo_msg_format|.
1224
1225   Either this setting or |g:ale_cursor_detail| must be set to `true` or  `1`
1226   before ALE is loaded for messages to be displayed. See
1227   |ale-lint-settings-on-startup|.
1228
1229                                                        *ale-options.echo_delay*
1230                                                              *g:ale_echo_delay*
1231                                                              *b:ale_echo_delay*
1232 echo_delay
1233 g:ale_echo_delay
1234   Type: |Number|
1235   Default: `10`
1236
1237   Given any integer, this option controls the number of milliseconds before
1238   ALE will echo or preview a message for a problem near the cursor.
1239
1240   The value can be increased to decrease the amount of processing ALE will do
1241   for files displaying a large number of problems.
1242
1243                                                *ale-options.echo_msg_error_str*
1244                                                      *g:ale_echo_msg_error_str*
1245 echo_msg_error_str
1246 g:ale_echo_msg_error_str
1247   Type: |String|
1248   Default: `'Error'`
1249
1250   The string used for `%severity%` for errors. See |g:ale_echo_msg_format|
1251
1252                                                   *ale-options.echo_msg_format*
1253                                                         *g:ale_echo_msg_format*
1254                                                         *b:ale_echo_msg_format*
1255 echo_msg_format
1256 g:ale_echo_msg_format
1257   Type: |String|
1258   Default: `'%code: %%s'`
1259
1260   This variable defines a message format for echoed messages. The following
1261   sequences of characters will be replaced.
1262
1263     `%s`           - replaced with the text for the problem
1264     `%...code...% `- replaced with the error code
1265     `%linter%`     - replaced with the name of the linter
1266     `%severity%`   - replaced with the severity of the problem (e.g. `Error`)
1267     `%type%`       - replaced with the type of the problem (e.g. `E`)
1268
1269   The strings for `%severity%` can be configured with the following options.
1270
1271     |g:ale_echo_msg_error_str|   - Defaults to `'Error'`
1272     |g:ale_echo_msg_info_str|    - Defaults to `'Info'`
1273     |g:ale_echo_msg_warning_str| - Defaults to `'Warning'`
1274
1275   `%code%` is replaced with the error code, and replaced with an empty string
1276   when there is no error code. Any extra characters between the percent signs
1277   will be printed when an error code is present. For example, a message like
1278   `(error code): message` will be printed for `'%(code): %%s'` and simply the
1279   message will be printed when there is no code.
1280
1281   |g:ale_echo_cursor| needs to be set to 1 for messages to be displayed.
1282
1283   The echo message format can also be configured separately for each buffer,
1284   so different formats can be used for different languages. (Say in ftplugin
1285   files.)
1286
1287                                                 *ale-options.echo_msg_info_str*
1288                                                       *g:ale_echo_msg_info_str*
1289 echo_msg_info_str
1290 g:ale_echo_msg_info_str
1291   Type: |String|
1292   Default: `'Info'`
1293
1294   The string used for `%severity%` for info. See |g:ale_echo_msg_format|
1295
1296                                                  *ale-options.echo_msg_log_str*
1297                                                        *g:ale_echo_msg_log_str*
1298 echo_msg_log_str
1299 g:ale_echo_msg_log_str
1300   Type: |String|
1301   Default: `'Log'`
1302
1303   The string used for `%severity%` for log, used only for handling LSP show
1304   message requests. See |g:ale_lsp_show_message_format|
1305
1306                                              *ale-options.echo_msg_warning_str*
1307                                                    *g:ale_echo_msg_warning_str*
1308 echo_msg_warning_str
1309 g:ale_echo_msg_warning_str
1310   Type: |String|
1311   Default: `'Warning'`
1312
1313   The string used for `%severity%` for warnings. See |g:ale_echo_msg_format|
1314
1315                                                           *ale-options.enabled*
1316                                                                 *g:ale_enabled*
1317                                                                 *b:ale_enabled*
1318 enabled
1319 g:ale_enabled
1320   Type: |Number|
1321   Default: `1`
1322
1323   When set to `0`, this option will completely disable ALE, such that no
1324   error checking will be performed, etc. ALE can be toggled on and off with
1325   the `:ALEToggle` command, which changes this option.
1326
1327   ALE can be disabled in each buffer by setting `let b:ale_enabled = 0`
1328   Disabling ALE based on filename patterns can be accomplished by setting
1329   a regular expression for |g:ale_pattern_options|. For example: >
1330
1331   " Disable linting for all minified JS files.
1332   let g:ale_pattern_options = {'\.min.js$': {'ale_enabled': 0}}
1333 <
1334   See |g:ale_pattern_options| for more information on that option.
1335
1336                                                *ale-options.exclude_highlights*
1337                                                      *g:ale_exclude_highlights*
1338                                                      *b:ale_exclude_highlights*
1339 exclude_highlights
1340 g:ale_exclude_highlights
1341   Type: |List|
1342   Default: `[]`
1343
1344   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
1345
1346   A list of regular expressions for matching against highlight messages to
1347   remove. For example: >
1348
1349   " Do not highlight messages matching strings like these.
1350   let b:ale_exclude_highlights = ['line too long', 'foo.*bar']
1351 <
1352   See also: |g:ale_set_highlights|
1353
1354                                                            *ale-options.fixers*
1355                                                                  *g:ale_fixers*
1356                                                                  *b:ale_fixers*
1357 fixers
1358 g:ale_fixers
1359   Type: |Dictionary|
1360   Default: `{}`
1361
1362   A mapping from filetypes to |List| values for functions for fixing errors.
1363   See |ale-fix| for more information.
1364
1365   This variable can be overridden with variables in each buffer.
1366   `b:ale_fixers` can be set to a |List| of callbacks instead, which can be
1367   more convenient.
1368
1369   A special `'*'` key be used as a wildcard filetype for configuring fixers
1370   for every other type of file. For example: >
1371
1372     " Fix Python files with 'bar'.
1373     " Don't fix 'html' files.
1374     " Fix everything else with 'foo'.
1375     let g:ale_fixers = {'python': ['bar'], 'html': [], '*': ['foo']}
1376 <
1377                                                       *ale-options.fix_on_save*
1378                                                             *g:ale_fix_on_save*
1379                                                             *b:ale_fix_on_save*
1380 fix_on_save
1381 g:ale_fix_on_save
1382   Type: |Number|
1383   Default: `0`
1384
1385   When set to 1, ALE will fix files when they are saved.
1386
1387   If |g:ale_lint_on_save| is set to 1, files will be checked with linters
1388   after files are fixed, only when the buffer is open, or re-opened. Changes
1389   to the file will be saved to the file on disk.
1390
1391   Files will not be fixed on `:wq`, so you should check your code before
1392   closing a buffer.
1393
1394   Fixing files can be disabled or enabled for individual buffers by setting
1395   `b:ale_fix_on_save` to `0` or `1`.
1396
1397   Some fixers can be excluded from being run automatically when you save files
1398   with the |g:ale_fix_on_save_ignore| setting.
1399
1400                                                *ale-options.fix_on_save_ignore*
1401                                                      *g:ale_fix_on_save_ignore*
1402                                                      *b:ale_fix_on_save_ignore*
1403 fix_on_save_ignore
1404 g:ale_fix_on_save_ignore
1405   Type: |Dictionary| or |List|
1406   Default: `{}`
1407
1408   Given a |Dictionary| mapping filetypes to |Lists| of fixers to ignore, or
1409   just a |List| of fixers to ignore, exclude those fixers from being run
1410   automatically when files are saved.
1411
1412   You can disable some fixers in your ftplugin file: >
1413
1414   " Disable fixers 'b' and 'c' when fixing on safe for this buffer.
1415   let b:ale_fix_on_save_ignore = ['b', 'c']
1416   " Alternatively, define ignore lists for different filetypes.
1417   let b:ale_fix_on_save_ignore = {'foo': ['b'], 'bar': ['c']}
1418 <
1419   You can disable some fixers globally per filetype like so: >
1420
1421   let g:ale_fixers = {'foo': ['a', 'b'], 'bar': ['c', 'd']}
1422   let g:ale_fix_on_save = 1
1423   " For filetype `foo.bar`, only fixers 'b' and 'd' will be run on save.
1424   let g:ale_fix_on_save_ignore = {'foo': ['a'], 'bar': ['c']}
1425   " Alternatively, disable these fixers on save for all filetypes.
1426   let g:ale_fix_on_save_ignore = ['a', 'c']
1427 <
1428   You can ignore fixers based on matching |Funcref| values too: >
1429
1430   let g:AddBar = {buffer, lines -> lines + ['bar']}
1431   let g:ale_fixers = {'foo': g:AddBar}
1432   " The lambda fixer will be ignored, as it will be found in the ignore list.
1433   let g:ale_fix_on_save_ignore = [g:AddBar]
1434 <
1435                                                  *ale-options.floating_preview*
1436                                                        *g:ale_floating_preview*
1437 floating_preview
1438 g:ale_floating_preview
1439   Type: |Number|
1440   Default: `0`
1441
1442   When set to `1`, Neovim or Vim with |popupwin| will use a floating window
1443   for ale's preview window.
1444   This is equivalent to setting |g:ale_hover_to_floating_preview| and
1445   |g:ale_detail_to_floating_preview| to `1`.
1446
1447                                       *ale-options.floating_preview_popup_opts*
1448                                             *g:ale_floating_preview_popup_opts*
1449 floating_preview_popup_opts
1450 g:ale_floating_preview_popup_opts
1451   Type: |String| or |Dictionary|
1452   Default: `''`
1453
1454   Either a dictionary of options or the string name of a function that returns
1455   a dictionary of options. This will be used as an argument to |popup_create|
1456   for Vim users or |nvim_open_win| for NeoVim users. In either case, the
1457   resulting dictionary is merged with ALE defaults rather than explicitly
1458   overriding them. This only takes effect if |g:ale_floating_preview| is
1459   enabled.
1460
1461   NOTE: for Vim users see |popup_create-arguments|, for NeoVim users see
1462   |nvim_open_win| for argument details
1463
1464   For example, to enhance popups with a title: >
1465
1466   function! CustomOpts() abort
1467     let [l:info, l:loc] = ale#util#FindItemAtCursor(bufnr(''))
1468     return {'title': ' ALE: ' . (l:loc.linter_name) . ' '}
1469   endfunction
1470
1471   let g:ale_floating_preview_popup_opts = 'g:CustomOpts'
1472 <
1473                                            *ale-options.floating_window_border*
1474                                                  *g:ale_floating_window_border*
1475 floating_window_border
1476 g:ale_floating_window_border
1477   Type: |List|
1478   Default: `['|', '-', '+', '+', '+', '+', '|', '-']`
1479
1480   When set to `[]`, window borders are disabled. The elements in the list set
1481   the characters for the left side, top, top-left corner, top-right
1482   corner, bottom-right corner, bottom-left corner, right side, and bottom of
1483   the floating window, respectively.
1484
1485   If the terminal supports Unicode, you might try setting the value to
1486   ` ['│', '─', '╭', '╮', '╯', '╰', '│', '─']`, to make it look nicer.
1487
1488   NOTE: For compatibility with previous versions, if the list does not have
1489   elements for the right side and bottom, the left side and top will be used
1490   instead.
1491
1492                                                   *ale-options.history_enabled*
1493                                                         *g:ale_history_enabled*
1494 history_enabled
1495 g:ale_history_enabled
1496   Type: |Number|
1497   Default: `1`
1498
1499   When set to `1`, ALE will remember the last few commands which were run
1500   for every buffer which is open. This information can be viewed with the
1501   `:ALEInfo` command. The size of the buffer can be controlled with the
1502   |g:ale_max_buffer_history_size| option.
1503
1504   This option can be disabled if storing a command history is not desired.
1505
1506                                                *ale-options.history_log_output*
1507                                                      *g:ale_history_log_output*
1508 history_log_output
1509 g:ale_history_log_output
1510   Type: |Number|
1511   Default: `1`
1512
1513   When set to `1`, ALE will store the output of commands which have completed
1514   successfully in the command history, and the output will be displayed when
1515   using `:ALEInfo`.
1516
1517   |g:ale_history_enabled| must be set to `1` for this output to be stored or
1518   printed.
1519
1520   Some memory will be consumed by this option. It is very useful for figuring
1521   out what went wrong with linters, and for bug reports. Turn this option off
1522   if you want to save on some memory usage.
1523
1524                                                      *ale-options.hover_cursor*
1525                                                            *g:ale_hover_cursor*
1526 hover_cursor
1527 g:ale_hover_cursor
1528   Type: |Number|
1529   Default: `1`
1530
1531   If set to `1`, ALE will show truncated information in the echo line about
1532   the symbol at the cursor automatically when the |CursorHold| event is fired.
1533   The delay before requesting hover information is based on 'updatetime', as
1534   with all |CursorHold| events.
1535
1536   If there's a problem on the line where the cursor is resting, ALE will not
1537   show any hover information.
1538
1539   See |ale-hover| for more information on hover information.
1540
1541   This setting must be set to `1` before ALE is loaded for this behavior
1542   to be enabled. See |ale-lint-settings-on-startup|.
1543
1544                                                  *ale-options.hover_to_preview*
1545                                                        *g:ale_hover_to_preview*
1546                                                        *b:ale_hover_to_preview*
1547 hover_to_preview
1548 g:ale_hover_to_preview
1549   Type: |Number|
1550   Default: `0`
1551
1552   If set to `1`, hover messages will be displayed in the preview window,
1553   instead of in balloons or the message line.
1554
1555                                         *ale-options.hover_to_floating_preview*
1556                                               *g:ale_hover_to_floating_preview*
1557                                               *b:ale_hover_to_floating_preview*
1558 hover_to_floating_preview
1559 g:ale_hover_to_floating_preview
1560   Type: |Number|
1561   Default: `0`
1562
1563   If set to `1`, Neovim or Vim with |popupwin| will use floating windows for
1564   hover messages.
1565
1566                                                 *ale-options.info_default_mode*
1567                                                       *g:ale_info_default_mode*
1568                                                       *b:ale_info_default_mode*
1569 info_default_mode
1570 g:ale_info_default_mode
1571   Type: |String|
1572   Default: `'preview'`
1573
1574   Changes the default mode used for `:ALEInfo`. See documentation for `:ALEInfo`
1575   for more information.
1576
1577                                             *ale-options.keep_list_window_open*
1578                                                   *g:ale_keep_list_window_open*
1579                                                   *b:ale_keep_list_window_open*
1580 keep_list_window_open
1581 g:ale_keep_list_window_open
1582   Type: |Number|
1583   Default: `0`
1584
1585   When set to `1`, this option will keep the loclist or quickfix windows event
1586   after all warnings/errors have been removed for files. By default the
1587   loclist or quickfix windows will be closed automatically when there are no
1588   warnings or errors.
1589
1590   See |g:ale_open_list|
1591
1592                                                  *ale-options.list_window_size*
1593                                                        *g:ale_list_window_size*
1594                                                        *b:ale_list_window_size*
1595 list_window_size
1596 g:ale_list_window_size
1597   Type: |Number|
1598   Default: `10`
1599
1600   This number configures the number of lines to set for the height of windows
1601   opened automatically for ALE problems. The default of `10` matches the Vim
1602   default height.
1603
1604   See |g:ale_open_list| for information on automatically opening windows
1605   for quickfix or the loclist.
1606
1607                                                        *ale-options.lint_delay*
1608                                                              *g:ale_lint_delay*
1609                                                              *b:ale_lint_delay*
1610 lint_delay
1611 g:ale_lint_delay
1612   Type: |Number|
1613   Default: `200`
1614
1615   This variable controls the milliseconds delay after which the linters will
1616   be run after text is changed. This option is only meaningful with the
1617   |g:ale_lint_on_text_changed| variable set to `always`, `insert`, or `normal`.
1618
1619   A buffer-local option, `b:ale_lint_delay`, can be set to change the delay
1620   for different buffers, such as in |ftplugin| files.
1621
1622                                                     *ale-options.lint_on_enter*
1623                                                           *g:ale_lint_on_enter*
1624 lint_on_enter
1625 g:ale_lint_on_enter
1626   Type: |Number|
1627   Default: `1`
1628
1629   When this option is set to `1`, the |BufWinEnter| event will be used to
1630   apply linters when buffers are first opened. If this is not desired, this
1631   variable can be set to `0` in your vimrc file to disable this behavior.
1632
1633   The |FileChangedShellPost| and |BufEnter| events will be used to check if
1634   files have been changed outside of Vim. If a file is changed outside of
1635   Vim, it will be checked when it is next opened.
1636
1637   You should set this setting once before ALE is loaded, and restart Vim if
1638   you want to change your preferences. See |ale-lint-settings-on-startup|.
1639
1640                                          *ale-options.lint_on_filetype_changed*
1641                                                *g:ale_lint_on_filetype_changed*
1642 lint_on_filetype_changed
1643 g:ale_lint_on_filetype_changed
1644   Type: |Number|
1645   Default: `1`
1646
1647   This option will cause ALE to run when the filetype for a file is changed
1648   after a buffer has first been loaded. A short delay will be used before
1649   linting will be done, so the filetype can be changed quickly several times
1650   in a row, but resulting in only one lint cycle.
1651
1652   You should set this setting once before ALE is loaded, and restart Vim if
1653   you want to change your preferences. See |ale-lint-settings-on-startup|.
1654
1655                                                      *ale-options.lint_on_save*
1656                                                            *g:ale_lint_on_save*
1657 lint_on_save
1658 g:ale_lint_on_save
1659   Type: |Number|
1660   Default: `1`
1661
1662   This option will make ALE run the linters whenever a file is saved when it
1663   it set to `1` in your vimrc file. This option can be used in combination
1664   with the |g:ale_lint_on_enter| and |g:ale_lint_on_text_changed| options to
1665   make ALE only check files after that have been saved, if that is what is
1666   desired.
1667
1668                                              *ale-options.lint_on_text_changed*
1669                                                    *g:ale_lint_on_text_changed*
1670 lint_on_text_changed
1671 g:ale_lint_on_text_changed
1672   Type: |Boolean| or |Number| or |String|
1673   Default: `'normal'`
1674
1675   This option controls how ALE will check your files as you make changes.
1676   The following values can be used.
1677
1678   `'always'`, `'1'`, `true`, or `1`  - Check buffers on |TextChanged| or |TextChangedI|.
1679   `'normal'`                   - Check buffers only on |TextChanged|.
1680   `'insert'`                   - Check buffers only on |TextChangedI|.
1681   `'never'`, `'0'`, `false`, or `0`  - Never check buffers on changes.
1682
1683   ALE will check buffers after a short delay, with a timer which resets on
1684   each change. The delay can be configured by adjusting the |g:ale_lint_delay|
1685   variable.
1686                                                *ale-linting-interrupts-mapping*
1687
1688   Due to a bug in Vim, ALE can interrupt mappings with pending key presses,
1689   per |timeoutlen|. If this happens, follow the advice for enabling
1690   |g:ale_lint_on_insert_leave| below, and set this option to `'normal'`, or
1691   disable it entirely.
1692
1693   You should set this setting once before ALE is loaded, and restart Vim if
1694   you want to change your preferences. See |ale-lint-settings-on-startup|.
1695
1696                                              *ale-options.lint_on_insert_leave*
1697                                                    *g:ale_lint_on_insert_leave*
1698                                                    *b:ale_lint_on_insert_leave*
1699 lint_on_insert_leave
1700 g:ale_lint_on_insert_leave
1701   Type: |Boolean| or |Number|
1702   Default: `true`
1703
1704   When set to `1` in your vimrc file, this option will cause ALE to run
1705   linters when you leave insert mode.
1706
1707   ALE will not lint files when you escape insert mode with |CTRL-C| by
1708   default. You can make ALE lint files with this option when you use |CTRL-C|
1709   with the following mapping. >
1710
1711     " Make using Ctrl+C do the same as Escape, to trigger autocmd commands
1712     inoremap <C-c> <Esc>
1713 <
1714   A buffer-local version of this setting `b:ale_lint_on_insert_leave` can be
1715   set to `0` to disable linting when leaving insert mode. The setting must
1716   be enabled globally to be enabled locally.
1717
1718   You should set this setting once before ALE is loaded, and restart Vim if
1719   you want to change your preferences. See |ale-lint-settings-on-startup|.
1720
1721                                                    *ale-options.linter_aliases*
1722                                                          *g:ale_linter_aliases*
1723                                                          *b:ale_linter_aliases*
1724 linter_aliases
1725 g:ale_linter_aliases
1726   Type: |Dictionary| or |List| or |String|
1727   Default: `{}`
1728
1729   The |g:ale_linter_aliases| option can be used to set aliases from one
1730   filetype to another. A given filetype can be mapped to use the linters
1731   run for another given filetype.
1732
1733   This |Dictionary| will be merged with a default dictionary containing the
1734   following values: >
1735
1736   {
1737   \   'Dockerfile': 'dockerfile',
1738   \   'csh': 'sh',
1739   \   'javascriptreact': ['javascript', 'jsx'],
1740   \   'plaintex': 'tex',
1741   \   'ps1': 'powershell',
1742   \   'rmarkdown': 'r',
1743   \   'rmd': 'r',
1744   \   'systemverilog': 'verilog',
1745   \   'typescriptreact': ['typescript', 'tsx'],
1746   \   'vader': ['vim', 'vader'],
1747   \   'verilog_systemverilog': ['verilog_systemverilog', 'verilog'],
1748   \   'vimwiki': 'markdown',
1749   \   'vue': ['vue', 'javascript'],
1750   \   'xsd': ['xsd', 'xml'],
1751   \   'xslt': ['xslt', 'xml'],
1752   \   'zsh': 'sh',
1753   \}
1754 <
1755   For example, if you wish to map a new filetype `'foobar'` to run the `'php'`
1756   linters, you could set the following: >
1757
1758   let g:ale_linter_aliases = {'foobar': 'php'}
1759 <
1760   Or in Lua: >
1761
1762   require("ale").setup({linter_aliases = {foobar = "php"}})
1763 <
1764   When combined with the |g:ale_linters| option, the original filetype
1765   (`'foobar'`) will be used for determining which linters to run,
1766   not the aliased type (`'php'`). This allows an aliased type to run a
1767   different set of linters from the type it is being mapped to.
1768
1769   Passing a list of filetypes is also supported. Say you want to lint
1770   javascript and css embedded in HTML (using linters that support that).
1771   You could alias `html` like so: >
1772
1773   `let g:ale_linter_aliases = {'html': ['html', 'javascript', 'css']}`
1774 <
1775   Or in Lua: >
1776
1777   require("ale").setup({linter_aliases = {html = {"html", "javascript", "css"}})
1778 <
1779   Note that `html` itself was included as an alias. That is because aliases
1780   will override the original linters for the aliased filetype.
1781
1782   Linter aliases can be configured in each buffer with buffer-local variables.
1783   ALE will first look for aliases for filetypes in the `b:ale_linter_aliases`
1784   variable, then `g:ale_linter_aliases`, and then a default Dictionary.
1785
1786   `b:ale_linter_aliases` can be set to a |List| or a |String|, to tell ALE to
1787   load the linters for specific filetypes for a given buffer. >
1788
1789   let b:ale_linter_aliases = ['html', 'javascript', 'css']
1790   " OR, Alias a filetype to only a single filetype with a String.
1791   let b:ale_linter_aliases = 'javascript'
1792 <
1793   Or in Lua: >
1794
1795   require("ale").setup.buffer({linter_aliases = {"html", "javascript", "css"}})
1796   -- OR, Alias a filetype to only a single filetype with a String.
1797   require("ale").setup.buffer({linter_aliases = "javascript"})
1798 <
1799   No linters will be loaded when the buffer's filetype is empty.
1800
1801                                                 *ale-options.filename_mappings*
1802                                                       *g:ale_filename_mappings*
1803                                                       *b:ale_filename_mappings*
1804 filename_mappings
1805 g:ale_filename_mappings
1806   Type: |Dictionary| or |List|
1807   Default: `{}`
1808
1809   Either a |Dictionary| mapping a linter or fixer name, as displayed in
1810   `:ALEInfo`, to a |List| of two-item |List|s for filename mappings, or just a
1811   |List| of two-item |List|s. When given some paths to files, the value of
1812   this setting will be used to convert filenames on a local file system to
1813   filenames on some remote file system, such as paths in a Docker image,
1814   virtual machine, or network drive.
1815
1816   For example: >
1817
1818   let g:ale_filename_mappings = {
1819   \   'pylint': [
1820   \       ['/home/john/proj', '/data'],
1821   \   ],
1822   \}
1823 <
1824   Or in Lua: >
1825
1826   require("ale").setup({
1827       filename_mappings = {
1828         pylint = {
1829             {"/home/john/proj", "/data"},
1830         },
1831       },
1832   })
1833 <
1834   With the above configuration, a filename such as `/home/john/proj/foo.py`
1835   will be provided to the linter/fixer as `/data/foo.py`, and paths parsed
1836   from linter results such as `/data/foo.py` will be converted back to
1837   `/home/john/proj/foo.py`.
1838
1839   You can use `*` as to apply a |List| of filename mappings to all other
1840   linters or fixers not otherwise matched. >
1841
1842   " Use one List of paths for pylint.
1843   " Use another List of paths for everything else.
1844   let g:ale_filename_mappings = {
1845   \   'pylint': [
1846   \       ['/home/john/proj', '/data'],
1847   \   ],
1848   \   '*': [
1849   \       ['/home/john/proj', '/other-data'],
1850   \   ],
1851   \}
1852 <
1853   If you just want every single linter or fixer to use the same filename
1854   mapping, you can just use a |List|. >
1855
1856   " Same as above, but for ALL linters and fixers.
1857   let g:ale_filename_mappings = [
1858   \   ['/home/john/proj', '/data'],
1859   \]
1860 <
1861   Or in Lua: >
1862
1863   require("ale").setup({
1864       filename_mappings = {
1865           {"/home/john/proj", "/data"},
1866       },
1867   })
1868 <
1869   You can provide many such filename paths for multiple projects. Paths are
1870   matched by checking if the start of a file path matches the given strings,
1871   in a case-sensitive manner. Earlier entries in the |List| will be tried
1872   before later entries when mapping to a given file system.
1873
1874   Buffer-local options can be set to the same values to override the global
1875   options, such as in |ftplugin| files.
1876
1877   NOTE: Only fixers registered with a short name can support filename mapping
1878   by their fixer names. See |ale-fix|. Filename mappings set for all tools by
1879   using only a |List| for the setting will also be applied to fixers not in
1880   the registry.
1881
1882   NOTE: In order for this filename mapping to work correctly, linters and
1883   fixers must exclusively determine paths to files to lint or fix via ALE
1884   command formatting as per |ale-command-format-strings|, and paths parsed
1885   from linter files must be provided in `filename` keys if a linter returns
1886   results for more than one file at a time, as per |ale-loclist-format|. If
1887   you discover a linter or fixer which does not behave properly, please report
1888   it as an issue.
1889
1890   If you are running a linter or fixer through Docker or another remote file
1891   system, you may have to mount your temporary directory, which you can
1892   discover with the following command: >
1893
1894   :echo fnamemodify(tempname(), ':h:h')
1895 <
1896   You should provide a mapping from this temporary directory to whatever you
1897   mount this directory to in Docker, or whatever remote file system you are
1898   working with.
1899
1900   You can inspect the filename mappings ALE will use with the
1901   |ale#GetFilenameMappings()| function.
1902
1903                                                           *ale-options.linters*
1904                                                                 *g:ale_linters*
1905                                                                 *b:ale_linters*
1906 linters
1907 g:ale_linters
1908   Type: |Dictionary| or |List|
1909   Default: `{}`
1910
1911   The |g:ale_linters| option sets a |Dictionary| mapping a filetype to a
1912   |List| of linter programs to be run when checking particular filetypes.
1913
1914   This |Dictionary| will be merged with a default dictionary containing the
1915   following values: >
1916
1917   {
1918   \   'apkbuild': ['apkbuild_lint', 'secfixes_check'],
1919   \   'csh': ['shell'],
1920   \   'elixir': ['credo', 'dialyxir', 'dogma'],
1921   \   'go': ['gofmt', 'golangci-lint', 'gopls', 'govet'],
1922   \   'groovy': ['npm-groovy-lint'],
1923   \   'hack': ['hack'],
1924   \   'help': [],
1925   \   'inko': ['inko'],
1926   \   'json': ['jsonlint', 'spectral'],
1927   \   'json': ['jsonlint', 'spectral', 'vscodejson'],
1928   \   'json5': [],
1929   \   'jsonc': [],
1930   \   'perl': ['perlcritic'],
1931   \   'perl6': [],
1932   \   'python': ['flake8', 'mypy', 'pylint', 'pyright', 'ruff'],
1933   \   'rust': ['analyzer', 'cargo'],
1934   \   'spec': [],
1935   \   'text': [],
1936   \   'vader': ['vimls'],
1937   \   'vue': ['eslint', 'vls'],
1938   \   'zsh': ['shell'],
1939   \   'v': ['v'],
1940   \   'yaml': ['actionlint', 'spectral', 'yaml-language-server', 'yamllint'],
1941   \}
1942 <
1943   This option can be used to enable only a particular set of linters for a
1944   file. For example, you can enable only `eslint` for JavaScript files: >
1945
1946   let g:ale_linters = {'javascript': ['eslint']}
1947 <
1948   Or in Lua: >
1949
1950   require("ale").setup({linters = {javascript = {"eslint"}}})
1951 <
1952   If you want to disable all linters for a particular filetype, you can pass
1953   an empty list of linters as the value: >
1954
1955   let g:ale_linters = {'javascript': []}
1956 <
1957   Or in Lua: >
1958
1959   require("ale").setup({linters = {javascript = {}}})
1960 <
1961   All linters will be run for unspecified filetypes. All available linters can
1962   be enabled explicitly for a given filetype by passing the string `'all'`,
1963   instead of a List. >
1964
1965   let g:ale_linters = {'c': 'all'}
1966 <
1967   Or in Lua: >
1968
1969   require("ale").setup({linters = {c = "all"}})
1970 <
1971   Linters can be configured in each buffer with buffer-local variables. ALE
1972   will first look for linters for filetypes in the `b:ale_linters` variable,
1973   then `g:ale_linters`, and then the default Dictionary mentioned above.
1974
1975   `b:ale_linters` can be set to a List, or the string `'all'`. When linters
1976   for two different filetypes share the same name, the first linter loaded
1977   will be used. Any ambiguity can be resolved by using a Dictionary specifying
1978   which linter to run for which filetype instead. >
1979
1980   " Use ESLint for the buffer if the filetype includes 'javascript'.
1981   let b:ale_linters = {'javascript': ['eslint'], 'html': ['tidy']}
1982   " Use a List for the same setting. This will work in most cases.
1983   let b:ale_linters = ['eslint', 'tidy']
1984   " Disable all linters for the buffer.
1985   let b:ale_linters = []
1986   " Explicitly enable all available linters for the filetype.
1987   let b:ale_linters = 'all'
1988 <
1989   In Lua: >
1990
1991   require("ale").setup.buffer({
1992     linters = {javascript = {"eslint"}, html = {"tidy"}},
1993   })
1994   require("ale").setup.buffer({linters = {"eslint", "tidy"}})
1995   require("ale").setup.buffer({linters = {}})
1996   require("ale").setup.buffer({linters = "all"})
1997 <
1998   ALE can be configured to disable all linters unless otherwise specified with
1999   `g:ale_enabled` or `b:ale_enabled` with the option |g:ale_linters_explicit|.
2000
2001                                                  *ale-options.linters_explicit*
2002                                                        *g:ale_linters_explicit*
2003 linters_explicit
2004 g:ale_linters_explicit
2005   Type: |Boolean| or |Number|
2006   Default: `false`
2007
2008   When set to `true` or `1`, only the linters from |g:ale_linters| and
2009   |b:ale_linters| will be enabled. The default behavior for ALE is to enable
2010   as many linters as possible, unless otherwise specified.
2011
2012                                                    *ale-options.linters_ignore*
2013                                                          *g:ale_linters_ignore*
2014                                                          *b:ale_linters_ignore*
2015 linters_ignore
2016 g:ale_linters_ignore
2017   Type: |Dictionary| or |List|
2018   Default: `{}`
2019
2020   Linters to ignore. Commands for ignored linters will not be run, and
2021   diagnostics for LSP linters will be ignored. (See |ale-lsp|)
2022
2023   This setting can be set to a |Dictionary| mapping filetypes to linter names,
2024   just like |g:ale_linters|, to list linters to ignore. Ignore lists will be
2025   applied after everything else. >
2026
2027   " Select flake8 and pylint, and ignore pylint, so only flake8 is run.
2028   let g:ale_linters = {'python': ['flake8', 'pylint']}
2029   let g:ale_linters_ignore = {'python': ['pylint']}
2030 <
2031   Or in Lua: >
2032
2033   require("ale").setup({
2034     linters = {"python": {"flake8", "pylint"}},
2035     linters_ignore = {"python": {"pylint"}},
2036   })
2037 <
2038   This setting can be set to simply a |List| of linter names, which is
2039   especially more convenient when using the setting in ftplugin files for
2040   particular buffers. >
2041
2042   " The same as above, in a ftplugin/python.vim.
2043   let b:ale_linters = ['flake8', 'pylint']
2044   let b:ale_linters_ignore = ['pylint']
2045 <
2046   Or in Lua: >
2047
2048   require("ale").setup.buffer({
2049     linters = {"flake8", "pylint"},
2050     linters_ignore = {"pylint"},
2051   })
2052 <
2053                                                     *ale-options.list_vertical*
2054                                                           *g:ale_list_vertical*
2055                                                           *b:ale_list_vertical*
2056 list_vertical
2057 g:ale_list_vertical
2058   Type: |Boolean| or |Number|
2059   Default: `false`
2060
2061   When set to `true` or `1`, this will cause ALE to open any windows (loclist
2062   or quickfix) vertically instead of horizontally (|vert| |lopen|) or (|vert|
2063   |copen|)
2064
2065                                                *ale-options.loclist_msg_format*
2066                                                      *g:ale_loclist_msg_format*
2067                                                      *b:ale_loclist_msg_format*
2068 loclist_msg_format
2069 g:ale_loclist_msg_format
2070   Type: |String|
2071   Default: `g:ale_echo_msg_format` (`echo_msg_format`)
2072
2073   This option is the same as |g:ale_echo_msg_format|, but for formatting the
2074   message used for the loclist and the quickfix list.
2075
2076   The strings for configuring `%severity%` are also used for this option.
2077
2078                                           *ale-options.lsp_show_message_format*
2079                                                 *g:ale_lsp_show_message_format*
2080 lsp_show_message_format
2081 g:ale_lsp_show_message_format
2082   Type: |String|
2083   Default: `'%severity%:%linter%: %s'`
2084
2085   This variable defines the format that messages received from an LSP will
2086   have when echoed. The following sequences of characters will be replaced.
2087
2088     `%s`           - replaced with the message text
2089     `%linter%`     - replaced with the name of the linter
2090     `%severity%`   - replaced with the severity of the message
2091
2092   The strings for `%severity%` levels "error", "info" and "warning" are shared
2093   with |g:ale_echo_msg_format|. Severity "log" is unique to
2094   |g:ale_lsp_show_message_format| and it can be configured via
2095
2096     |g:ale_echo_msg_log_str|     - Defaults to `'Log'`
2097
2098   Please note that |g:ale_lsp_show_message_format| *can not* be configured
2099   separately for each buffer like |g:ale_echo_msg_format| can.
2100
2101                                         *ale-options.lsp_show_message_severity*
2102                                               *g:ale_lsp_show_message_severity*
2103 lsp_show_message_severity
2104 g:ale_lsp_show_message_severity
2105   Type: |String|
2106   Default: `'error'`
2107
2108   This variable defines the minimum severity level an LSP message needs to be
2109   displayed. Messages below this level are discarded; please note that
2110   messages with `Log` severity level are always discarded.
2111
2112   Possible values follow the LSP spec `MessageType` definition:
2113
2114   `'error'`       - Displays only errors.
2115   `'warning'`     - Displays errors and warnings.
2116   `'information'` - Displays errors, warnings and infos
2117   `'log'`         - Same as `'information'`
2118   `'disabled'`    - Doesn't display any information at all.
2119
2120                                                   *ale-options.lsp_suggestions*
2121                                                         *g:ale_lsp_suggestions*
2122 lsp_suggestions
2123 g:ale_lsp_suggestions
2124   Type: |Boolean| or |Number|
2125   Default: `false`
2126
2127   If set to `true` or ``1`, show suggestions from LSP servers or tsserver, in
2128   addition to warnings and errors.
2129
2130                                           *ale-options.max_buffer_history_size*
2131                                                 *g:ale_max_buffer_history_size*
2132 max_buffer_history_size
2133 g:ale_max_buffer_history_size
2134   Type: |Number|
2135   Default: `20`
2136
2137   This setting controls the maximum number of commands which will be stored in
2138   the command history used for `:ALEInfo`. Command history will be rotated in
2139   a FIFO manner. If set to a number <= 0, then the history will be
2140   continuously set to an empty |List|.
2141
2142   History can be disabled completely with |g:ale_history_enabled|.
2143
2144                                                         *ale-options.max_signs*
2145                                                               *g:ale_max_signs*
2146                                                               *b:ale_max_signs*
2147 max_signs
2148 g:ale_max_signs
2149   Type: |Number|
2150   Default: `-1`
2151
2152   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2153
2154   When set to any positive integer, ALE will not render any more than the
2155   given number of signs for any one buffer.
2156
2157   When set to `0`, no signs will be set, but sign processing will still be
2158   done, so existing signs can be removed.
2159
2160   When set to any other value, no limit will be imposed on the number of signs
2161   set.
2162
2163   For disabling sign processing, see |g:ale_set_signs|.
2164
2165                                                 *ale-options.maximum_file_size*
2166                                                       *g:ale_maximum_file_size*
2167                                                       *b:ale_maximum_file_size*
2168 maximum_file_size
2169 g:ale_maximum_file_size
2170   Type: |Number|
2171   Default: `nil`
2172
2173   A maximum file size in bytes for ALE to check. If set to any positive
2174   number, ALE will skip checking files larger than the given size.
2175
2176                                                         *ale-options.open_list*
2177                                                               *g:ale_open_list*
2178                                                               *b:ale_open_list*
2179 open_list
2180 g:ale_open_list
2181   Type: |Boolean| |Number| or |String|
2182   Default: `false`
2183
2184   When set to `true` or `1`, this will cause ALE to automatically open a
2185   window for the loclist (|lopen|) or for the quickfix list instead if
2186   |g:ale_set_quickfix| is `true` or `1`. (|copen|)
2187
2188   When set to any higher numerical value, ALE will only open the window when
2189   the number of warnings or errors are at least that many.
2190
2191   When set to `'on_save'`, ALE will only open the loclist after buffers have
2192   been saved. The list will be opened some time after buffers are saved and
2193   any linter for a buffer returns results.
2194
2195   The window will be kept open until all warnings or errors are cleared,
2196   including those not set by ALE, unless |g:ale_keep_list_window_open| is set
2197   to `true` or `1`, in which case the window will be kept open when no
2198   problems are found.
2199
2200   The window size can be configured with |g:ale_list_window_size|.
2201
2202   Windows can be opened vertically with |g:ale_list_vertical|.
2203
2204   If you want to close the loclist window automatically when the buffer is
2205   closed, you can set up the following |autocmd| command: >
2206
2207   augroup CloseLoclistWindowGroup
2208     autocmd!
2209     autocmd QuitPre * if empty(&buftype) | lclose | endif
2210   augroup END
2211 <
2212                                                         *g:ale_pattern_options*
2213 g:ale_pattern_options
2214   Type: |Dictionary|
2215   Default: `nil`
2216
2217   NOTE: This option is not available through |ale.setup| in Lua as the options
2218   named here would require separate translation to the equivalent Vim options.
2219   You should instead use conditions in ftplugin files to configure options
2220   based on filename patterns.
2221
2222   This option maps regular expression patterns to |Dictionary| values for
2223   buffer variables. This option can be set to automatically configure
2224   different settings for different files. For example: >
2225
2226   " Use just ESLint for linting and fixing files which end in '.foo.js'
2227   let g:ale_pattern_options = {
2228   \   '\.foo\.js$': {
2229   \       'ale_linters': ['eslint'],
2230   \       'ale_fixers': ['eslint'],
2231   \   },
2232   \}
2233 <
2234   See |b:ale_linters| and |b:ale_fixers| for information for those options.
2235
2236   Filenames are matched with |match()|, and patterns depend on the |magic|
2237   setting, unless prefixed with the special escape sequences like `'\v'`, etc.
2238   The patterns can match any part of a filename. The absolute path of the
2239   filename will be used for matching, taken from `expand('%:p')`.
2240
2241   The options for every match for the filename will be applied, with the
2242   pattern keys sorted in alphabetical order. Options for `'zebra'` will
2243   override the options for `'alpha'` for a filename `alpha-zebra`.
2244
2245                                           *ale-options.pattern_options_enabled*
2246                                                 *g:ale_pattern_options_enabled*
2247 pattern_options_enabled
2248 g:ale_pattern_options_enabled
2249   Type: |Boolean| or |Number|
2250   Default: `nil`
2251
2252   This option can be used for disabling pattern options. If set to `0`, ALE
2253   will not set buffer variables per |g:ale_pattern_options|.
2254
2255                                                *ale-options.popup_menu_enabled*
2256                                                      *g:ale_popup_menu_enabled*
2257 popup_menu_enabled
2258 g:ale_popup_menu_enabled
2259   Type: |Boolean| or |Number|
2260   Default: `has('gui_running')`
2261
2262   When this option is set to `true` or `1`, ALE will show code actions and
2263   rename capabilities in the right click mouse menu when there's a LSP server
2264   or tsserver available. See |ale-refactor|.
2265
2266   This feature is only supported in GUI versions of Vim.
2267
2268   This setting must be set to `true` or `1` before ALE is loaded for this
2269   behavior to be enabled. See |ale-lint-settings-on-startup|.
2270
2271                                  *ale-options.rename_tsserver_find_in_comments*
2272                                        *g:ale_rename_tsserver_find_in_comments*
2273 rename_tsserver_find_in_comments
2274 g:ale_rename_tsserver_find_in_comments
2275   Type: |Boolean| or |Number|
2276   Default: `false`
2277
2278   If set to `true` or `1`, this option will tell tsserver to find and replace
2279   text in comments when calling `:ALERename`.
2280
2281                                   *ale-options.rename_tsserver_find_in_strings*
2282                                         *g:ale_rename_tsserver_find_in_strings*
2283 rename_tsserver_find_in_strings
2284 g:ale_rename_tsserver_find_in_strings
2285   Type: |Boolean| or |Number|
2286   Default: `false`
2287
2288   If set to `true` or `1`, this option will tell tsserver to find and replace
2289   text in strings when calling `:ALERename`.
2290
2291                                                              *ale-options.root*
2292                                                                    *g:ale_root*
2293                                                                    *b:ale_root*
2294 root
2295 g:ale_root
2296   Type: |Dictionary| or |String|
2297   Default: `{}`
2298
2299   This option is used to determine the project root for a linter. If the value
2300   is a |Dictionary|, it maps a linter to either a |String| containing the
2301   project root or a |Funcref| to call to look up the root. The |Funcref| is
2302   provided the buffer number as its argument.
2303
2304   The buffer-specific variable may additionally be a string containing the
2305   project root itself.
2306
2307   If neither variable yields a result, a linter-specific function is invoked to
2308   detect a project root. If this, too, yields no result, and the linter is an
2309   LSP linter, it will not run.
2310
2311                                                       *ale-options.save_hidden*
2312                                                             *g:ale_save_hidden*
2313 save_hidden
2314 g:ale_save_hidden
2315   Type: |Boolean| or |Number|
2316   Default: `false`
2317
2318   When set to `true` or `1`, save buffers when 'hidden' is set when applying
2319   code actions or rename operations, such as through `:ALERename` or
2320   `:ALEOrganizeImports`.
2321
2322                                                      *ale-options.set_balloons*
2323                                                            *g:ale_set_balloons*
2324                                                            *b:ale_set_balloons*
2325 set_balloons
2326 g:ale_set_balloons
2327   Type: |Boolean| or |Number| or |String|
2328   Default: `has('balloon_eval') && has('gui_running')`
2329
2330   When this option is set to `true` or `1`, balloon messages will be displayed
2331   for problems or hover information if available.
2332
2333   Problems nearest to the line the mouse cursor is over will be displayed. If
2334   there are no problems to show, and one of the linters is an LSP linter
2335   supporting "Hover" information, per |ale-hover|, then brief information
2336   about the symbol under the cursor will be displayed in a balloon.
2337
2338   This option can be set to `'hover'` to only enable balloons for hover
2339   message, so diagnostics are never shown in balloons. You may wish to
2340   configure use this setting only in GUI Vim like so: >
2341
2342   let g:ale_set_balloons = has('gui_running') ? 'hover' : 0
2343 <
2344   Balloons can be enabled for terminal versions of Vim that support balloons,
2345   but some versions of Vim will produce strange mouse behavior when balloons
2346   are enabled. To configure balloons for your terminal, you should first
2347   configure your |ttymouse| setting, and then consider setting
2348   `g:ale_set_balloons` to `1` before ALE is loaded.
2349
2350   `b:ale_set_balloons` can be set to `0` to disable balloons for a buffer.
2351   Balloons cannot be enabled for a specific buffer when not initially enabled
2352   globally.
2353
2354   Balloons will not be shown when |g:ale_enabled| or |b:ale_enabled| is not
2355   `true` or `1`.
2356
2357                                          *ale-options.set_balloons_legacy_echo*
2358                                                *g:ale_set_balloons_legacy_echo*
2359                                                *b:ale_set_balloons_legacy_echo*
2360 set_balloons_legacy_echo
2361 g:ale_set_balloons_legacy_echo
2362   Type: |Boolean| or |Number|
2363   Default: `nil`
2364
2365   If set to `true` or `1`, moving your mouse over documents in Vim will make
2366   ALE ask `tsserver` or `LSP` servers for information about the symbol where
2367   the mouse cursor is, and print that information into Vim's echo line. This
2368   is an option for supporting older versions of Vim which do not properly
2369   support balloons in an asynchronous manner.
2370
2371   If your version of Vim supports the |balloon_show| function, then this
2372   option does nothing meaningful.
2373
2374                                                    *ale-options.set_highlights*
2375                                                          *g:ale_set_highlights*
2376 set_highlights
2377 g:ale_set_highlights
2378   Type: |Boolean| or |Number|
2379   Default: `has('syntax')`
2380
2381   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2382
2383   ALE's highlight groups will not be used when setting highlights through
2384   Neovim's diagnostics API. See |diagnostic-highlights| for how to configure
2385   Neovim diagnostic highlighting.
2386
2387   When this option is set to `true` or `1`, highlights will be presented.
2388
2389   ALE will use the following highlight groups for problems:
2390
2391   ALEError         items with `'type': 'E'`            |hl-ALEError|
2392   ALEWarning       items with `'type': 'W'`            |hl-ALEWarning|
2393   ALEInfo          items with `'type': 'I'`            |hl-ALEInfo|
2394   ALEStyleError    items with `'type': 'E'` and
2395                               `'sub_type': 'style'`    |hl-ALEStyleError|
2396   ALEStyleWarning  items with `'type': 'W'` and
2397                               `'sub_type': 'style'`    |hl-ALEStyleWarning|
2398
2399   When |g:ale_set_signs| is not set to `true` or `1`, the following highlights
2400   for entire lines will be set.
2401
2402   ALEErrorLine     all items with `'type': 'E'`        |hl-ALEErrorLine|
2403   ALEWarningLine   all items with `'type': 'W'`        |hl-ALEWarningLine|
2404   ALEInfoLine      all items with `'type': 'I'`        |hl-ALEInfoLine|
2405
2406   Vim can only highlight the characters up to the last column in a buffer for
2407   match highlights, whereas the line highlights when signs are enabled will
2408   run to the edge of the screen.
2409
2410   Highlights can be excluded with the |g:ale_exclude_highlights| option.
2411
2412                                                       *ale-options.set_loclist*
2413                                                             *g:ale_set_loclist*
2414 set_loclist
2415 g:ale_set_loclist
2416   Type: |Boolean| or |Number|
2417   Default: `true`
2418
2419   When this option is set to `true` or `1`, the |location-list| will be
2420   populated with any warnings and errors which are found by ALE. This feature
2421   can be used to implement jumping between errors through typical use of
2422   `:lnext` and `:lprev`.
2423
2424                                                      *ale-options.set_quickfix*
2425                                                            *g:ale_set_quickfix*
2426 set_quickfix
2427 g:ale_set_quickfix
2428   Type: |Boolean| or |Number|
2429   Default: `false`
2430
2431   When this option is set to `true` or `1`, the |quickfix| list will be
2432   populated with any problems which are found by ALE, instead of the
2433   |location-list|. The loclist will never be populated when this option is
2434   enabled.
2435
2436   Problems from every buffer ALE has checked will be included in the quickfix
2437   list, which can be checked with `:copen`. Problems will be de-duplicated.
2438
2439   This feature should not be used in combination with tools for searching for
2440   matches and commands like `:cfdo`, as ALE will replace the quickfix list
2441   pretty frequently. If you wish to use such tools, you should populate the
2442   loclist or use `:ALEPopulateQuickfix` instead.
2443
2444                                                         *ale-options.set_signs*
2445                                                               *g:ale_set_signs*
2446 set_signs
2447 g:ale_set_signs
2448   Type: |Boolean| or |Number|
2449   Default: `has('signs')`
2450
2451   When this option is set to `true` or `1`, the |sign| column will be
2452   populated with signs marking where problems appear in the file.
2453
2454   When |g:ale_use_neovim_diagnostics_api| is `1`, the only other setting that
2455   will be respected for signs is |g:ale_sign_priority|. ALE's highlight groups
2456   will and other sign settings will not apply when setting signs through
2457   Neovim's diagnostics API. See |diagnostic-signs| for how to configure signs
2458   in Neovim.
2459
2460   ALE will use the following highlight groups for problems:
2461
2462   ALEErrorSign        items with `'type': 'E'`         |hl-ALEErrorSign|
2463   ALEWarningSign      items with `'type': 'W'`         |hl-ALEWarningSign|
2464   ALEInfoSign         items with `'type': 'I'`         |hl-ALEInfoSign|
2465   ALEStyleErrorSign   items with `'type': 'E'` and
2466                                  `'sub_type': 'style'` |hl-ALEStyleErrorSign|
2467   ALEStyleWarningSign items with `'type': 'W'` and
2468                                  `'sub_type': 'style'` |hl-ALEStyleWarningSign|
2469
2470   In addition to the style of the signs, the style of lines where signs appear
2471   can be configured with the following highlights:
2472
2473   ALEErrorLine        all items with `'type': 'E'`     |hl-ALEErrorLine|
2474   ALEWarningLine      all items with `'type': 'W'`     |hl-ALEWarningLine|
2475   ALEInfoLine         all items with `'type': 'I'`     |hl-ALEInfoLine|
2476
2477   With Neovim 0.3.2 or higher, ALE can use the `numhl` option to highlight the
2478   'number' column. It uses the following highlight groups.
2479
2480   ALEErrorSignLineNr        items with `'type': 'E'` |hl-ALEErrorSignLineNr|
2481   ALEWarningSignLineNr      items with `'type': 'W'` |hl-ALEWarningSignLineNr|
2482   ALEInfoSignLineNr         items with `'type': 'I'` |hl-ALEInfoSignLineNr|
2483   ALEStyleErrorSignLineNr   items with `'type': 'E'` and
2484                              `'sub_type': 'style'`   |hl-ALEStyleErrorSignLineNr|
2485   ALEStyleWarningSignLineNr items with `'type': 'W'` and
2486                              `'sub_type': 'style'`   |hl-ALEStyleWarningSignLineNr|
2487
2488   To enable line number highlighting |g:ale_sign_highlight_linenrs| must be
2489   set to `true` or `1` before ALE is loaded.
2490
2491   The markers for the highlights can be customized with the following options:
2492
2493   |g:ale_sign_error|
2494   |g:ale_sign_warning|
2495   |g:ale_sign_info|
2496   |g:ale_sign_style_error|
2497   |g:ale_sign_style_warning|
2498
2499   When multiple problems exist on the same line, the signs will take
2500   precedence in the order above, from highest to lowest.
2501
2502   To limit the number of signs ALE will set, see |g:ale_max_signs|.
2503
2504                                                     *ale-options.sign_priority*
2505                                                           *g:ale_sign_priority*
2506 sign_priority
2507 g:ale_sign_priority
2508   Type: |Number|
2509   Default: `30`
2510
2511   From Neovim 0.4.0 and Vim 8.1, ALE can set sign priority to all signs. The
2512   larger this value is, the higher priority ALE signs have over other plugin
2513   signs. See |sign-priority| for further details on how priority works.
2514
2515                                                             *ale-options.shell*
2516                                                                   *g:ale_shell*
2517                                                                   *b:ale_shell*
2518 shell
2519 g:ale_shell
2520   Type: |String|
2521   Default: `nil`
2522
2523   Override the shell used by ALE for executing commands. ALE uses 'shell' by
2524   default, but falls back in `/bin/sh` if the default shell looks like `fish`
2525   or `pwsh`, which are not compatible with all of the commands run by ALE. The
2526   shell specified with this option will be used even if it might not work in
2527   all cases.
2528
2529   For Windows, ALE uses `cmd` when this option isn't set. Setting this option
2530   will apply shell escaping to the command string, even on Windows.
2531
2532   NOTE: Consider setting |g:ale_shell_arguments| if this option is defined.
2533
2534                                                   *ale-options.shell_arguments*
2535                                                         *g:ale_shell_arguments*
2536                                                         *b:ale_shell_arguments*
2537 shell_arguments
2538 g:ale_shell_arguments
2539   Type: |String|
2540   Default: `nil`
2541
2542   This option specifies the arguments to use for executing a command with a
2543   custom shell, per |g:ale_shell|. If this option is not set, 'shellcmdflag'
2544   will be used instead.
2545
2546                                                *ale-options.sign_column_always*
2547                                                      *g:ale_sign_column_always*
2548 sign_column_always
2549 g:ale_sign_column_always
2550   Type: |Boolean| or |Number|
2551   Default: `v:false`
2552
2553   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2554
2555   By default, the sign gutter will disappear when all warnings and errors have
2556   been fixed for a file. When this option is set to `1`, the sign column will
2557   remain open. This can be preferable if you don't want the text in your file
2558   to move around as you edit a file.
2559
2560                                                        *ale-options.sign_error*
2561                                                              *g:ale_sign_error*
2562 sign_error
2563 g:ale_sign_error
2564   Type: |String|
2565   Default: `'E'`
2566
2567   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2568
2569   The sign for errors in the sign gutter.
2570
2571                                                         *ale-options.sign_info*
2572                                                               *g:ale_sign_info*
2573 sign_info
2574 g:ale_sign_info
2575   Type: |String|
2576   Default: `'I'`
2577
2578   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2579
2580   The sign for "info" markers in the sign gutter.
2581
2582                                                  *ale-options.sign_style_error*
2583                                                        *g:ale_sign_style_error*
2584 sign_style_error
2585 g:ale_sign_style_error
2586   Type: |String|
2587   Default: `g:ale_sign_error`
2588
2589   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2590
2591   The sign for style errors in the sign gutter.
2592
2593                                                *ale-options.sign_style_warning*
2594                                                      *g:ale_sign_style_warning*
2595 sign_style_warning
2596 g:ale_sign_style_warning
2597   Type: |String|
2598   Default: `g:ale_sign_warning`
2599
2600   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2601
2602   The sign for style warnings in the sign gutter.
2603
2604                                                       *ale-options.sign_offset*
2605                                                             *g:ale_sign_offset*
2606 sign_offset
2607 g:ale_sign_offset
2608   Type: |Number|
2609   Default: `1000000`
2610
2611   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2612
2613   This variable controls offset from which numeric IDs will be generated for
2614   new signs. Signs cannot share the same ID values, so when two Vim plugins
2615   set signs at the same time, the IDs have to be configured such that they do
2616   not conflict with one another. If the IDs used by ALE are found to conflict
2617   with some other plugin, this offset value can be changed, and hopefully both
2618   plugins will work together. See |sign-place| for more information on how
2619   signs are set.
2620
2621                                                      *ale-options.sign_warning*
2622                                                            *g:ale_sign_warning*
2623 sign_warning
2624 g:ale_sign_warning
2625   Type: |String|
2626   Default: `'W'`
2627
2628   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2629
2630   The sign for warnings in the sign gutter.
2631
2632                                            *ale-options.sign_highlight_linenrs*
2633                                                  *g:ale_sign_highlight_linenrs*
2634 sign_highlight_linenrs
2635 g:ale_sign_highlight_linenrs
2636   Type: |Boolean| or |Number|
2637   Default: `false`
2638
2639   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2640
2641   When set to `true` or `1`, this option enables highlighting problems on the
2642   'number' column in Vim versions that support `numhl` highlights. This option
2643   must be configured before ALE is loaded.
2644
2645                                                   *ale-options.update_tagstack*
2646                                                         *g:ale_update_tagstack*
2647                                                         *b:ale_update_tagstack*
2648 update_tagstack
2649 g:ale_update_tagstack
2650   Type: |Boolean| or |Number|
2651   Default: `v:true`
2652
2653   When set to `true` or `1`, ALE will update Vims |tagstack| automatically
2654   when jumping to a location through ALE's commands, so users can jump back to
2655   where they came from.
2656                                                          *ale-options.type_map*
2657                                                                *g:ale_type_map*
2658                                                                *b:ale_type_map*
2659 type_map
2660 g:ale_type_map
2661   Type: |Dictionary|
2662   Default: `{}`
2663
2664   This option can be set re-map problem types for linters. Each key in the
2665   |Dictionary| should be the name of a linter, and each value must be a
2666   |Dictionary| mapping problem types from one type to another. The following
2667   types are supported:
2668
2669   `'E'`  - `{'type': 'E'}`
2670   `'ES'` - `{'type': 'E', 'sub_type': 'style'}`
2671   `'W'`  - `{'type': 'W'}`
2672   `'WS'` - `{'type': 'W', 'sub_type': 'style'}`
2673   `'I'`  - `{'type': 'I'}`
2674
2675   For example, if you want to turn flake8 errors into warnings, you can write
2676   the following: >
2677
2678   let g:ale_type_map = {'flake8': {'ES': 'WS', 'E': 'W'}}
2679 <
2680   Or in Lua: >
2681
2682   require("ale").setup(type_map = {flake8 = {ES = "WS", E = "W"}})
2683 <
2684   If you wanted to turn style errors and warnings into regular errors and
2685   warnings, you can write the following: >
2686
2687   let g:ale_type_map = {'flake8': {'ES': 'E', 'WS': 'W'}}
2688 <
2689   Or in Lua: >
2690
2691   require("ale").setup(type_map = {flake8 = {ES = "E", WS = "W"}})
2692 <
2693   Type maps can be set per-buffer with `b:ale_type_map`, or in Lua with
2694   |ale.setup.buffer|.
2695
2696                                            *ale-options.use_global_executables*
2697                                                  *g:ale_use_global_executables*
2698 use_global_executables
2699 g:ale_use_global_executables
2700   Type: |Number|
2701   Default: `nil`
2702
2703   This option can be set to change the default for all `_use_global` options.
2704   This option must be set before ALE is loaded, preferably in a vimrc file.
2705
2706   See |ale-integrations-local-executables| for more information on those
2707   options.
2708
2709                                        *ale-options.use_neovim_diagnostics_api*
2710                                              *g:ale_use_neovim_diagnostics_api*
2711 use_neovim_diagnostics_api
2712 g:ale_use_neovim_diagnostics_api
2713   Type: |Boolean| or |Number|
2714   Default: `has('nvim-0.7')`
2715
2716   If set to `true` or `1`, disable ALE's standard UI, and instead send all
2717   linter output to Neovim's diagnostics API. This allows you to collect
2718   problems using ALE and other plugins together all in one place. Many
2719   options for configuring how problems appear on the screen will not apply
2720   when the API is enabled.
2721
2722   This option requires Neovim 0.7+, as that version introduces the diagnostics
2723   API.
2724
2725                                                *ale-options.use_neovim_lsp_api*
2726                                                      *g:ale_use_neovim_lsp_api*
2727 use_neovim_lsp_api
2728 g:ale_use_neovim_lsp_api
2729   Type: |Boolean| or |Number|
2730   Default: `has('nvim-0.8')`
2731
2732   If set to `true` or `1`, ALE will use Neovim's native LSP client API for LSP
2733   functionality. This makes it possible to use Neovim's built in LSP commands
2734   and keybinds, and improves integration with other Neovim plugins that
2735   integrate with Neovim's LSP client.
2736
2737   See |ale-lsp-neovim| for more information about ALE's integration with
2738   Neovim's LSP client.
2739
2740   This option requires Neovim 0.8+.
2741
2742                                                *ale-options.virtualtext_cursor*
2743                                                      *g:ale_virtualtext_cursor*
2744 virtualtext_cursor
2745 g:ale_virtualtext_cursor
2746   Type: |Number| or |String|
2747   Default: `'all'` (if supported, otherwise `'disabled'`)
2748
2749   This option controls how ALE will display problems using |virtual-text|.
2750   The following values can be used.
2751
2752   `'all'`, `'2'`, or `2`         - Show problems for all lines.
2753   `'current'`, `'1'`, or `1`     - Show problems for the current line.
2754   `'disabled'`, `'0'`, or `0`    - Do not show problems with virtual-text.
2755
2756   When |g:ale_use_neovim_diagnostics_api| is `1`, `'current'` will behave the
2757   same as `'all'`.
2758
2759   Messages are only displayed after a short delay. See |g:ale_virtualtext_delay|.
2760
2761   Messages can be prefixed with a string if not using Neovim's diagnostics
2762   API. See |g:ale_virtualtext_prefix|.
2763
2764   If and only if not displaying problems via Neovim's diagnostics API,
2765   highlights for configuring ALE's virtualtext messages can be configured with
2766   custom highlight groups:
2767
2768   ALEVirtualTextError        items with `'type': 'E'`  |hl-ALEVirtualTextError|
2769   ALEVirtualTextWarning      items with `'type': 'W'`  |hl-ALEVirtualTextWarning|
2770   ALEVirtualTextInfo         items with `'type': 'I'`  |hl-ALEVirtualTextInfo|
2771   ALEVirtualTextStyleError   items with `'type': 'E'` and
2772                              `'sub_type': 'style'`     |hl-ALEVirtualTextStyleError|
2773   ALEVirtualTextStyleWarning items with `'type': 'W'` and
2774                              `'sub_type': 'style'`     |hl-ALEVirtualTextStyleWarning|
2775
2776                                                 *ale-options.virtualtext_delay*
2777                                                       *g:ale_virtualtext_delay*
2778                                                       *b:ale_virtualtext_delay*
2779 virtualtext_delay
2780 g:ale_virtualtext_delay
2781   Type: |Number|
2782   Default: `10`
2783
2784   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2785
2786   Given any integer, this option controls the number of milliseconds before
2787   ALE will show a message for a problem near the cursor.
2788
2789   The value can be increased to decrease the amount of processing ALE will do
2790   for files displaying a large number of problems.
2791
2792                                                *ale-options.virtualtext_prefix*
2793                                                      *g:ale_virtualtext_prefix*
2794                                                      *b:ale_virtualtext_prefix*
2795 virtualtext_prefix
2796 g:ale_virtualtext_prefix
2797   Type: |String|
2798   Default: `'%comment% %type%: '`
2799
2800   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2801
2802   Prefix to be used with |g:ale_virtualtext_cursor|.
2803
2804   This setting can be changed in each buffer with |b:ale_virtualtext_prefix||.
2805
2806   All of the same format markers used for |g:ale_echo_msg_format| can be used
2807   for defining the prefix, including some additional sequences of characters.
2808
2809     `%comment%` - replaced with comment characters in the current language
2810
2811   ALE will read the comment characters from 'commentstring', reading only the
2812   part before `%s`, with whitespace trimmed. If comment syntax cannot be
2813   pulled from 'commentstring', ALE will default to `'#'`.
2814
2815                                                *ale-options.virtualtext_column*
2816                                                      *g:ale_virtualtext_column*
2817                                                      *b:ale_virtualtext_column*
2818                                             *ale-options.virtualtext_maxcolumn*
2819                                                   *g:ale_virtualtext_maxcolumn*
2820                                                   *b:ale_virtualtext_maxcolumn*
2821 virtualtext_column
2822 virtualtext_maxcolumn
2823 g:ale_virtualtext_column
2824 g:ale_virtualtext_maxcolumn
2825   Type: |String| or |Number|
2826   Default: `0`
2827
2828   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2829
2830   Virtualtext column range, from `column` to `maxcolumn`.  If a line is
2831   `column` or less characters long, the virtualtext message is shifted right
2832   to `column`.
2833
2834   Where the line is greater than `column` characters long, but less than
2835   `maxcolumn`, the virtualtext message is placed at the end of the line.
2836
2837   Where the line is greater than `maxcolumn` the virtualtext message is
2838   omitted.
2839
2840   A |Number| greater than `0` is used as the fixed column position, however
2841   a |String| ending in `%` represents a percentage of the window width.
2842   When `column` is set to zero, column positioning is disabled, when `maxcolumn`
2843   is set to zero, no maximum line length is enforced.
2844
2845                                                *ale-options.virtualtext_single*
2846                                                      *g:ale_virtualtext_single*
2847                                                      *b:ale_virtualtext_single*
2848 virtualtext_single
2849 g:ale_virtualtext_single
2850   Type: |Boolean| or |Number|
2851   Default: `true`
2852
2853   This has no effect when |g:ale_use_neovim_diagnostics_api| is `true` or `1`.
2854
2855   Enable or disable concatenation of multiple virtual text messages on a single
2856   line. By default, if a line has multiple errors or warnings, each will be
2857   appended in turn.
2858
2859   With `single` set to a non-zero value, only the first problem on a line will
2860   be printed with virtual text. The most severe problem on a line will be
2861   printed. If two problems exist on a line of equal severity, the problem at
2862   the left-most position will be printed.
2863
2864                                              *ale-options.virtualenv_dir_names*
2865                                                    *g:ale_virtualenv_dir_names*
2866                                                    *b:ale_virtualenv_dir_names*
2867 virtualenv_dir_names
2868 g:ale_virtualenv_dir_names
2869   Type: |List|
2870   Default: `['.venv', 'env', 've', 'venv', 'virtualenv', '.env']`
2871
2872   A list of directory names to be used when searching upwards from Python
2873   files to discover virtualenv directories with.
2874
2875   For directory named `'foo'`, ALE will search for `'foo/bin/activate'`
2876   (`foo\Scripts\activate\` on Windows) in all directories on and above the
2877   directory containing the Python file to find virtualenv paths.
2878
2879                                   *ale-options.warn_about_trailing_blank_lines*
2880                                         *g:ale_warn_about_trailing_blank_lines*
2881                                         *b:ale_warn_about_trailing_blank_lines*
2882 warn_about_trailing_blank_lines
2883 g:ale_warn_about_trailing_blank_lines
2884   Type: |Number|
2885   Default: `1`
2886
2887   When this option is set to `1`, warnings about trailing blank lines will be
2888   shown.
2889
2890   This option behaves similarly to |g:ale_warn_about_trailing_whitespace|.
2891
2892                                    *ale-options.warn_about_trailing_whitespace*
2893                                          *g:ale_warn_about_trailing_whitespace*
2894                                          *b:ale_warn_about_trailing_whitespace*
2895 warn_about_trailing_whitespace
2896 g:ale_warn_about_trailing_whitespace
2897   Type: |Number|
2898   Default: `1`
2899
2900   When this option is set to `1`, warnings relating to trailing whitespace on
2901   lines will be shown. If warnings are too irritating while editing buffers,
2902   and you have configured Vim to automatically remove trailing whitespace,
2903   you can disable these warnings by setting this option to `0`.
2904
2905   Not all linters may respect this option. If a linter does not, please file a
2906   bug report, and it may be possible to add such support.
2907
2908   This option may be configured on a per buffer basis.
2909
2910                                      *ale-options.windows_node_executable_path*
2911                                            *g:ale_windows_node_executable_path*
2912                                            *b:ale_windows_node_executable_path*
2913 windows_node_executable_path
2914 g:ale_windows_node_executable_path
2915   Type: |String|
2916   Default: `'node.exe'`
2917
2918   This variable is used as the path to the executable to use for executing
2919   scripts with Node.js on Windows.
2920
2921   For Windows, any file with a `.js` file extension needs to be executed with
2922   the node executable explicitly. Otherwise, Windows could try and open the
2923   scripts with other applications, like a text editor. Therefore, these
2924   scripts are executed with whatever executable is configured with this
2925   setting.
2926
2927
2928 -------------------------------------------------------------------------------
2929 6.1. Highlights                                                *ale-highlights*
2930
2931 ALEError                                                          *hl-ALEError*
2932
2933   Default: `highlight link ALEError SpellBad`
2934
2935   The highlight for highlighted errors. See |g:ale_set_highlights|.
2936
2937
2938 ALEErrorLine                                                  *hl-ALEErrorLine*
2939
2940   Default: Undefined
2941
2942   The highlight for an entire line where errors appear. Only the first
2943   line for a problem will be highlighted.
2944
2945   See |g:ale_set_signs| and |g:ale_set_highlights|.
2946
2947
2948 ALEErrorSign                                                  *hl-ALEErrorSign*
2949
2950   Default: `highlight link ALEErrorSign error`
2951
2952   The highlight for error signs. See |g:ale_set_signs|.
2953
2954
2955 ALEErrorSignLineNr                                      *hl-ALEErrorSignLineNr*
2956
2957   Default: `highlight link ALEErrorSignLineNr CursorLineNr`
2958
2959   The highlight for error signs. See |g:ale_set_signs|.
2960
2961   NOTE: This highlight is only available on Neovim 0.3.2 or higher.
2962
2963
2964 ALEInfo                                                            *hl-ALEInfo*
2965                                                             *ALEInfo-highlight*
2966   Default: `highlight link ALEInfo ALEWarning`
2967
2968   The highlight for highlighted info messages. See |g:ale_set_highlights|.
2969
2970
2971 ALEInfoSign                                                    *hl-ALEInfoSign*
2972
2973   Default: `highlight link ALEInfoSign ALEWarningSign`
2974
2975   The highlight for info message signs. See |g:ale_set_signs|.
2976
2977
2978 ALEInfoLine                                                    *hl-ALEInfoLine*
2979
2980   Default: Undefined
2981
2982   The highlight for entire lines where info messages appear. Only the first
2983   line for a problem will be highlighted.
2984
2985   See |g:ale_set_signs| and |g:ale_set_highlights|.
2986
2987
2988 ALEInfoSignLineNr                                        *hl-ALEInfoSignLineNr*
2989
2990   Default: `highlight link ALEInfoSignLineNr CursorLineNr`
2991
2992   The highlight for error signs. See |g:ale_set_signs|.
2993
2994   NOTE: This highlight is only available on Neovim 0.3.2 or higher.
2995
2996
2997 ALEStyleError                                                *hl-ALEStyleError*
2998
2999   Default: `highlight link ALEStyleError ALEError`
3000
3001   The highlight for highlighted style errors. See |g:ale_set_highlights|.
3002
3003
3004 ALEStyleErrorSign                                        *hl-ALEStyleErrorSign*
3005
3006   Default: `highlight link ALEStyleErrorSign ALEErrorSign`
3007
3008   The highlight for style error signs. See |g:ale_set_signs|.
3009
3010
3011 ALEStyleErrorSignLineNr                            *hl-ALEStyleErrorSignLineNr*
3012
3013   Default: `highlight link ALEStyleErrorSignLineNr CursorLineNr`
3014
3015   The highlight for error signs. See |g:ale_set_signs|.
3016
3017   NOTE: This highlight is only available on Neovim 0.3.2 or higher.
3018
3019
3020 ALEStyleWarning                                            *hl-ALEStyleWarning*
3021
3022   Default: `highlight link ALEStyleWarning ALEError`
3023
3024   The highlight for highlighted style warnings. See |g:ale_set_highlights|.
3025
3026
3027 ALEStyleWarningSign                                    *hl-ALEStyleWarningSign*
3028
3029   Default: `highlight link ALEStyleWarningSign ALEWarningSign`
3030
3031   The highlight for style warning signs. See |g:ale_set_signs|.
3032
3033
3034 ALEStyleWarningSignLineNr                        *hl-ALEStyleWarningSignLineNr*
3035
3036   Default: `highlight link ALEStyleWarningSignLineNr CursorLineNr`
3037
3038   The highlight for error signs. See |g:ale_set_signs|.
3039
3040   NOTE: This highlight is only available on Neovim 0.3.2 or higher.
3041
3042
3043 ALEVirtualTextError                                    *hl-ALEVirtualTextError*
3044
3045   Default: `highlight link ALEVirtualTextError Comment`
3046
3047   The highlight for virtualtext errors. See |g:ale_virtualtext_cursor|.
3048
3049
3050 ALEVirtualTextInfo                                      *hl-ALEVirtualTextInfo*
3051
3052   Default: `highlight link ALEVirtualTextInfo ALEVirtualTextWarning`
3053
3054   The highlight for virtualtext info. See |g:ale_virtualtext_cursor|.
3055
3056
3057 ALEVirtualTextStyleError                          *hl-ALEVirtualTextStyleError*
3058
3059   Default: `highlight link ALEVirtualTextStyleError ALEVirtualTextError`
3060
3061   The highlight for virtualtext style errors. See |g:ale_virtualtext_cursor|.
3062
3063
3064 ALEVirtualTextStyleWarning                      *hl-ALEVirtualTextStyleWarning*
3065
3066   Default: `highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning`
3067
3068   The highlight for virtualtext style warnings. See |g:ale_virtualtext_cursor|.
3069
3070
3071 ALEVirtualTextWarning                                *hl-ALEVirtualTextWarning*
3072
3073   Default: `highlight link ALEVirtualTextWarning Comment`
3074
3075   The highlight for virtualtext errors. See |g:ale_virtualtext_cursor|.
3076
3077
3078 ALEWarning                                                      *hl-ALEWarning*
3079
3080   Default: `highlight link ALEWarning SpellCap`
3081
3082   The highlight for highlighted warnings. See |g:ale_set_highlights|.
3083
3084
3085 ALEWarningLine                                              *hl-ALEWarningLine*
3086
3087   Default: Undefined
3088
3089   The highlight for entire lines where warnings appear. Only the first line
3090   for a problem will be highlighted.
3091
3092   See |g:ale_set_signs| and |g:ale_set_highlights|.
3093
3094
3095 ALEWarningSign                                              *hl-ALEWarningSign*
3096
3097   Default: `highlight link ALEWarningSign todo`
3098
3099   The highlight for warning signs. See |g:ale_set_signs|.
3100
3101
3102 ALEWarningSignLineNr                                  *hl-ALEWarningSignLineNr*
3103
3104   Default: `highlight link ALEWarningSignLineNr CursorLineNr`
3105
3106   The highlight for error signs. See |g:ale_set_signs|.
3107
3108   NOTE: This highlight is only available on Neovim 0.3.2 or higher.
3109
3110
3111 ===============================================================================
3112 7. Linter/Fixer Options                               *ale-integration-options*
3113
3114 Linter and fixer options are documented below and in individual help files.
3115
3116 Every option for programs can be set globally, or individually for each
3117 buffer. For example, |b:ale_python_flake8_executable| will override any
3118 values set for |g:ale_python_flake8_executable|.
3119
3120                                            *ale-integrations-local-executables*
3121
3122 Some tools will prefer to search for locally-installed executables, unless
3123 configured otherwise. For example, the `eslint` linter will search for
3124 various executable paths in `node_modules`. The `flake8` linter will search
3125 for virtualenv directories.
3126
3127 If you prefer to use global executables for those tools, set the relevant
3128 `_use_global` and `_executable` options for those linters. >
3129
3130   " Use the global executable with a special name for eslint.
3131   let g:ale_javascript_eslint_executable = 'special-eslint'
3132   let g:ale_javascript_eslint_use_global = 1
3133
3134   " Use the global executable with a special name for flake8.
3135   let g:ale_python_flake8_executable = '/foo/bar/flake8'
3136   let g:ale_python_flake8_use_global = 1
3137 <
3138 |g:ale_use_global_executables| can be set to `true` or  `1` in your init or
3139 vimrc file to make ALE use global executables for all linters by default.
3140
3141 The option |g:ale_virtualenv_dir_names| controls the local virtualenv paths
3142 ALE will use to search for Python executables.
3143
3144
3145 -------------------------------------------------------------------------------
3146 7.1. Options for alex                                        *ale-alex-options*
3147
3148 The options for `alex` are shared between all filetypes, so options can be
3149 configured once.
3150
3151                                                   *ale-options.alex_executable*
3152                                                         *g:ale_alex_executable*
3153                                                         *b:ale_alex_executable*
3154 alex_executable
3155 g:ale_alex_executable
3156   Type: |String|
3157   Default: `'alex'`
3158
3159   See |ale-integrations-local-executables|
3160
3161                                                   *ale-options.alex_use_global*
3162                                                         *g:ale_alex_use_global*
3163                                                         *b:ale_alex_use_global*
3164 alex_use_global
3165 g:ale_alex_use_global
3166   Type: |Number|
3167   Default: `get(g:, 'ale_use_global_executables', 0)`
3168
3169   See |ale-integrations-local-executables|
3170
3171
3172 -------------------------------------------------------------------------------
3173 7.2. Options for cspell                                    *ale-cspell-options*
3174
3175 The options for `cspell` are shared between all filetypes, so options can be
3176 configured only once.
3177
3178                                                 *ale-options.cspell_executable*
3179                                                       *g:ale_cspell_executable*
3180                                                       *b:ale_cspell_executable*
3181 cspell_executable
3182 g:ale_cspell_executable
3183   Type: |String|
3184   Default: `'cspell'`
3185
3186   See |ale-integrations-local-executables|
3187
3188                                                    *ale-options.cspell_options*
3189                                                          *g:ale_cspell_options*
3190                                                          *b:ale_cspell_options*
3191 cspell_options
3192 g:ale_cspell_options
3193   Type: |String|
3194   Default: `''`
3195
3196   This variable can be set to pass additional options to `cspell`.
3197
3198                                                 *ale-options.cspell_use_global*
3199                                                       *g:ale_cspell_use_global*
3200                                                       *b:ale_cspell_use_global*
3201 cspell_use_global
3202 g:ale_cspell_use_global
3203   Type: |Number|
3204   Default: `get(g: 'ale_use_global_executables', 0)`
3205
3206   See |ale-integrations-local-executables|
3207
3208
3209 -------------------------------------------------------------------------------
3210 7.3. Options for dprint                                    *ale-dprint-options*
3211
3212 `dprint` is a fixer for many file types, including: (java|type)script,
3213 json(c?), markdown, and more. See https://dprint.dev/plugins for an up-to-date
3214 list of supported plugins and their configuration options.
3215
3216                                                 *ale-options.dprint_executable*
3217                                                       *g:ale_dprint_executable*
3218                                                       *b:ale_dprint_executable*
3219 dprint_executable
3220 g:ale_dprint_executable
3221   Type: |String|
3222   Default: `'dprint'`
3223
3224   See |ale-integrations-local-executables|
3225
3226                                                     *ale-options.dprint_config*
3227                                                           *g:ale_dprint_config*
3228                                                           *b:ale_dprint_config*
3229 dprint_config
3230 g:ale_dprint_config
3231   Type: |String|
3232   Default: `'dprint.json'`
3233
3234   This variable can be changed to provide a config file to `dprint`. The
3235   default is the nearest `dprint.json` searching upward from the current
3236   buffer.
3237
3238   See https://dprint.dev/config and https://plugins.dprint.dev
3239
3240                                                    *ale-options.dprint_options*
3241                                                          *g:ale_dprint_options*
3242                                                          *b:ale_dprint_options*
3243 dprint_options
3244 g:ale_dprint_options
3245   Type: |String|
3246   Default: `''`
3247
3248   This variable can be set to pass additional options to `dprint`.
3249
3250                                                 *ale-options.dprint_use_global*
3251                                                       *g:ale_dprint_use_global*
3252                                                       *b:ale_dprint_use_global*
3253 dprint_use_global
3254 g:ale_dprint_use_global
3255   Type: |Number|
3256   Default: `get(g: 'ale_use_global_executables', 0)`
3257
3258   See |ale-integrations-local-executables|
3259
3260
3261 -------------------------------------------------------------------------------
3262 7.4. Options for languagetool                        *ale-languagetool-options*
3263
3264                                           *ale-options.languagetool_executable*
3265                                                 *g:ale_languagetool_executable*
3266                                                 *b:ale_languagetool_executable*
3267 languagetool_executable
3268 g:ale_languagetool_executable
3269   Type: |String|
3270   Default: `'languagetool'`
3271
3272   The executable to run for languagetool.
3273
3274                                              *ale-options.languagetool_options*
3275                                                    *g:ale_languagetool_options*
3276                                                    *b:ale_languagetool_options*
3277 languagetool_options
3278 g:ale_languagetool_options
3279   Type: |String|
3280   Default: `'--autoDetect'`
3281
3282   This variable can be set to pass additional options to languagetool.
3283
3284
3285 -------------------------------------------------------------------------------
3286 7.5. Options for write-good                            *ale-write-good-options*
3287
3288 The options for `write-good` are shared between all filetypes, so options can
3289 be configured once.
3290
3291                                              *ale-options.writegood_executable*
3292                                                    *g:ale_writegood_executable*
3293                                                    *b:ale_writegood_executable*
3294 writegood_executable
3295 g:ale_writegood_executable
3296   Type: |String|
3297   Default: `'writegood'`
3298
3299   See |ale-integrations-local-executables|
3300
3301                                                 *ale-options.writegood_options*
3302                                                       *g:ale_writegood_options*
3303                                                       *b:ale_writegood_options*
3304 writegood_options
3305 g:ale_writegood_options
3306   Type: |String|
3307   Default: `''`
3308
3309   This variable can be set to pass additional options to writegood.
3310
3311                                              *ale-options.writegood_use_global*
3312                                                    *g:ale_writegood_use_global*
3313                                                    *b:ale_writegood_use_global*
3314 writegood_use_global
3315 g:ale_writegood_use_global
3316   Type: |Number|
3317   Default: `get(g:, 'ale_use_global_executables', 0)`
3318
3319   See |ale-integrations-local-executables|
3320
3321
3322 -------------------------------------------------------------------------------
3323 7.6. Other Linter/Fixer Options                 *ale-other-integration-options*
3324
3325 ALE supports a very wide variety of tools. Other linter or fixer options are
3326 documented in additional help files.
3327
3328   ada.....................................|ale-ada-options|
3329     cspell................................|ale-ada-cspell|
3330     gcc...................................|ale-ada-gcc|
3331     gnatpp................................|ale-ada-gnatpp|
3332     ada-language-server...................|ale-ada-language-server|
3333   ansible.................................|ale-ansible-options|
3334     ansible-language-server...............|ale-ansible-language-server|
3335     ansible-lint..........................|ale-ansible-ansible-lint|
3336   apkbuild................................|ale-apkbuild-options|
3337     apkbuild-fixer........................|ale-apkbuild-apkbuild-fixer|
3338     apkbuild-lint.........................|ale-apkbuild-apkbuild-lint|
3339     secfixes-check........................|ale-apkbuild-secfixes-check|
3340   asciidoc................................|ale-asciidoc-options|
3341     cspell................................|ale-asciidoc-cspell|
3342     write-good............................|ale-asciidoc-write-good|
3343     textlint..............................|ale-asciidoc-textlint|
3344   asm.....................................|ale-asm-options|
3345     gcc...................................|ale-asm-gcc|
3346     llvm_mc...............................|ale-asm-llvm_mc|
3347   astro...................................|ale-astro-options|
3348     eslint................................|ale-astro-eslint|
3349     prettier..............................|ale-astro-prettier|
3350   avra....................................|ale-avra-options|
3351     avra..................................|ale-avra-avra|
3352   awk.....................................|ale-awk-options|
3353     gawk..................................|ale-awk-gawk|
3354   bats....................................|ale-bats-options|
3355     shellcheck............................|ale-bats-shellcheck|
3356   bazel...................................|ale-bazel-options|
3357     buildifier............................|ale-bazel-buildifier|
3358   bib.....................................|ale-bib-options|
3359     bibclean..............................|ale-bib-bibclean|
3360   bicep...................................|ale-bicep-options|
3361     bicep.................................|ale-bicep-bicep|
3362     az_bicep..............................|ale-bicep-az_bicep|
3363   bitbake.................................|ale-bitbake-options|
3364     oelint-adv............................|ale-bitbake-oelint_adv|
3365   c.......................................|ale-c-options|
3366     astyle................................|ale-c-astyle|
3367     cc....................................|ale-c-cc|
3368     ccls..................................|ale-c-ccls|
3369     clangcheck............................|ale-c-clangcheck|
3370     clangd................................|ale-c-clangd|
3371     clang-format..........................|ale-c-clangformat|
3372     clangtidy.............................|ale-c-clangtidy|
3373     cppcheck..............................|ale-c-cppcheck|
3374     cquery................................|ale-c-cquery|
3375     cspell................................|ale-c-cspell|
3376     flawfinder............................|ale-c-flawfinder|
3377     uncrustify............................|ale-c-uncrustify|
3378   cairo...................................|ale-cairo-options|
3379     scarb.................................|ale-cairo-scarb|
3380     starknet..............................|ale-cairo-starknet|
3381   chef....................................|ale-chef-options|
3382     cookstyle.............................|ale-chef-cookstyle|
3383     foodcritic............................|ale-chef-foodcritic|
3384   clojure.................................|ale-clojure-options|
3385     clj-kondo.............................|ale-clojure-clj-kondo|
3386     cljfmt................................|ale-clojure-cljfmt|
3387     joker.................................|ale-clojure-joker|
3388   cloudformation..........................|ale-cloudformation-options|
3389     cfn-python-lint.......................|ale-cloudformation-cfn-python-lint|
3390   cmake...................................|ale-cmake-options|
3391     cmakelint.............................|ale-cmake-cmakelint|
3392     cmake-lint............................|ale-cmake-cmake-lint|
3393     cmake-format..........................|ale-cmake-cmakeformat|
3394   cpp.....................................|ale-cpp-options|
3395     astyle................................|ale-cpp-astyle|
3396     cc....................................|ale-cpp-cc|
3397     ccls..................................|ale-cpp-ccls|
3398     clangcheck............................|ale-cpp-clangcheck|
3399     clangd................................|ale-cpp-clangd|
3400     clang-format..........................|ale-cpp-clangformat|
3401     clangtidy.............................|ale-cpp-clangtidy|
3402     clazy.................................|ale-cpp-clazy|
3403     cppcheck..............................|ale-cpp-cppcheck|
3404     cpplint...............................|ale-cpp-cpplint|
3405     cquery................................|ale-cpp-cquery|
3406     cspell................................|ale-cpp-cspell|
3407     flawfinder............................|ale-cpp-flawfinder|
3408     uncrustify............................|ale-cpp-uncrustify|
3409   c#......................................|ale-cs-options|
3410     clang-format..........................|ale-cs-clangformat|
3411     csc...................................|ale-cs-csc|
3412     cspell................................|ale-cs-cspell|
3413     dotnet-format.........................|ale-cs-dotnet-format|
3414     mcs...................................|ale-cs-mcs|
3415     mcsc..................................|ale-cs-mcsc|
3416     uncrustify............................|ale-cs-uncrustify|
3417   css.....................................|ale-css-options|
3418     cspell................................|ale-css-cspell|
3419     css-beautify..........................|ale-css-css-beautify|
3420     fecs..................................|ale-css-fecs|
3421     prettier..............................|ale-css-prettier|
3422     stylelint.............................|ale-css-stylelint|
3423     vscodecss.............................|ale-css-vscode|
3424   cuda....................................|ale-cuda-options|
3425     clang-format..........................|ale-cuda-clangformat|
3426     clangd................................|ale-cuda-clangd|
3427     nvcc..................................|ale-cuda-nvcc|
3428   c3......................................|ale-c3-options|
3429     c3lsp.................................|ale-c3-c3lsp|
3430   d.......................................|ale-d-options|
3431     dfmt..................................|ale-d-dfmt|
3432     dls...................................|ale-d-dls|
3433     uncrustify............................|ale-d-uncrustify|
3434   dafny...................................|ale-dafny-options|
3435     dafny.................................|ale-dafny-dafny|
3436   dart....................................|ale-dart-options|
3437     analysis_server.......................|ale-dart-analysis_server|
3438     dart-analyze..........................|ale-dart-analyze|
3439     dart-format...........................|ale-dart-format|
3440     dartfmt...............................|ale-dart-dartfmt|
3441   desktop.................................|ale-desktop-options|
3442     desktop-file-validate.................|ale-desktop-desktop-file-validate|
3443   dhall...................................|ale-dhall-options|
3444     dhall-format..........................|ale-dhall-format|
3445     dhall-freeze..........................|ale-dhall-freeze|
3446     dhall-lint............................|ale-dhall-lint|
3447   dockerfile..............................|ale-dockerfile-options|
3448     dockerfile_lint.......................|ale-dockerfile-dockerfile_lint|
3449     dockerlinter..........................|ale-dockerfile-dockerlinter|
3450     dprint................................|ale-dockerfile-dprint|
3451     hadolint..............................|ale-dockerfile-hadolint|
3452   elixir..................................|ale-elixir-options|
3453     mix...................................|ale-elixir-mix|
3454     mix_format............................|ale-elixir-mix-format|
3455     dialyxir..............................|ale-elixir-dialyxir|
3456     elixir-ls.............................|ale-elixir-elixir-ls|
3457     credo.................................|ale-elixir-credo|
3458     cspell................................|ale-elixir-cspell|
3459     lexical...............................|ale-elixir-lexical|
3460   elm.....................................|ale-elm-options|
3461     elm-format............................|ale-elm-elm-format|
3462     elm-ls................................|ale-elm-elm-ls|
3463     elm-make..............................|ale-elm-elm-make|
3464   erlang..................................|ale-erlang-options|
3465     dialyzer..............................|ale-erlang-dialyzer|
3466     elvis.................................|ale-erlang-elvis|
3467     erlang-mode...........................|ale-erlang-erlang-mode|
3468     erlang_ls.............................|ale-erlang-erlang_ls|
3469     erlc..................................|ale-erlang-erlc|
3470     erlfmt................................|ale-erlang-erlfmt|
3471     syntaxerl.............................|ale-erlang-syntaxerl|
3472   eruby...................................|ale-eruby-options|
3473     erb-formatter.........................|ale-eruby-erbformatter|
3474     erblint...............................|ale-eruby-erblint|
3475     htmlbeautifier........................|ale-eruby-htmlbeautifier|
3476     ruumba................................|ale-eruby-ruumba|
3477   fish....................................|ale-fish-options|
3478     fish_indent...........................|ale-fish-fish_indent|
3479   fortran.................................|ale-fortran-options|
3480     gcc...................................|ale-fortran-gcc|
3481     language_server.......................|ale-fortran-language-server|
3482   fountain................................|ale-fountain-options|
3483   fusionscript............................|ale-fuse-options|
3484     fusion-lint...........................|ale-fuse-fusionlint|
3485   git commit..............................|ale-gitcommit-options|
3486     gitlint...............................|ale-gitcommit-gitlint|
3487   gleam...................................|ale-gleam-options|
3488     gleam_format..........................|ale-gleam-gleam_format|
3489     gleamlsp..............................|ale-gleam-gleamlsp|
3490   glsl....................................|ale-glsl-options|
3491     glslang...............................|ale-glsl-glslang|
3492     glslls................................|ale-glsl-glslls|
3493   go......................................|ale-go-options|
3494     bingo.................................|ale-go-bingo|
3495     cspell................................|ale-go-cspell|
3496     gobuild...............................|ale-go-gobuild|
3497     gofmt.................................|ale-go-gofmt|
3498     gofumpt...............................|ale-go-gofumpt|
3499     golangci-lint.........................|ale-go-golangci-lint|
3500     golangserver..........................|ale-go-golangserver|
3501     golines...............................|ale-go-golines|
3502     gopls.................................|ale-go-gopls|
3503     govet.................................|ale-go-govet|
3504     revive................................|ale-go-revive|
3505     staticcheck...........................|ale-go-staticcheck|
3506   go html template........................|ale-gohtmltmpl-options|
3507     djlint................................|ale-gohtmltmpl-djlint|
3508   graphql.................................|ale-graphql-options|
3509     eslint................................|ale-graphql-eslint|
3510     gqlint................................|ale-graphql-gqlint|
3511     prettier..............................|ale-graphql-prettier|
3512   groovy..................................|ale-groovy-options|
3513     npm-groovy-lint.......................|ale-groovy-npm-groovy-lint|
3514   hack....................................|ale-hack-options|
3515     hack..................................|ale-hack-hack|
3516     hackfmt...............................|ale-hack-hackfmt|
3517     hhast.................................|ale-hack-hhast|
3518   handlebars..............................|ale-handlebars-options|
3519     djlint................................|ale-handlebars-djlint|
3520     prettier..............................|ale-handlebars-prettier|
3521     ember-template-lint...................|ale-handlebars-embertemplatelint|
3522   haskell.................................|ale-haskell-options|
3523     brittany..............................|ale-haskell-brittany|
3524     cspell................................|ale-haskell-cspell|
3525     floskell..............................|ale-haskell-floskell|
3526     ghc...................................|ale-haskell-ghc|
3527     ghc-mod...............................|ale-haskell-ghc-mod|
3528     cabal-ghc.............................|ale-haskell-cabal-ghc|
3529     hdevtools.............................|ale-haskell-hdevtools|
3530     hfmt..................................|ale-haskell-hfmt|
3531     hindent...............................|ale-haskell-hindent|
3532     hlint.................................|ale-haskell-hlint|
3533     hls...................................|ale-haskell-hls|
3534     stack-build...........................|ale-haskell-stack-build|
3535     stack-ghc.............................|ale-haskell-stack-ghc|
3536     stylish-haskell.......................|ale-haskell-stylish-haskell|
3537     hie...................................|ale-haskell-hie|
3538     ormolu................................|ale-haskell-ormolu|
3539     fourmolu..............................|ale-haskell-fourmolu|
3540   hcl.....................................|ale-hcl-options|
3541     packer-fmt............................|ale-hcl-packer-fmt|
3542     terraform-fmt.........................|ale-hcl-terraform-fmt|
3543   help....................................|ale-help-options|
3544     cspell................................|ale-help-cspell|
3545   html....................................|ale-html-options|
3546     angular...............................|ale-html-angular|
3547     cspell................................|ale-html-cspell|
3548     djlint................................|ale-html-djlint|
3549     fecs..................................|ale-html-fecs|
3550     html-beautify.........................|ale-html-beautify|
3551     htmlhint..............................|ale-html-htmlhint|
3552     prettier..............................|ale-html-prettier|
3553     rustywind.............................|ale-html-rustywind|
3554     stylelint.............................|ale-html-stylelint|
3555     tidy..................................|ale-html-tidy|
3556     vscodehtml............................|ale-html-vscode|
3557     write-good............................|ale-html-write-good|
3558   html angular template...................|ale-htmlangular-options|
3559     djlint................................|ale-htmlangular-djlint|
3560   html django template....................|ale-htmldjango-options|
3561     djlint................................|ale-htmldjango-djlint|
3562   http....................................|ale-http-options|
3563     kulala_fmt............................|ale-http-kulala_fmt|
3564   hurl....................................|ale-hurl-options|
3565     hurlfmt...............................|ale-hurl-hurlfmt|
3566   idris...................................|ale-idris-options|
3567     idris.................................|ale-idris-idris|
3568   ink.....................................|ale-ink-options|
3569     ink-language-server...................|ale-ink-language-server|
3570   inko....................................|ale-inko-options|
3571     inko..................................|ale-inko-inko|
3572   ispc....................................|ale-ispc-options|
3573     ispc..................................|ale-ispc-ispc|
3574   java....................................|ale-java-options|
3575     checkstyle............................|ale-java-checkstyle|
3576     clang-format..........................|ale-java-clangformat|
3577     cspell................................|ale-java-cspell|
3578     javac.................................|ale-java-javac|
3579     google-java-format....................|ale-java-google-java-format|
3580     pmd...................................|ale-java-pmd|
3581     javalsp...............................|ale-java-javalsp|
3582     eclipselsp............................|ale-java-eclipselsp|
3583     uncrustify............................|ale-java-uncrustify|
3584   javascript..............................|ale-javascript-options|
3585     biome.................................|ale-javascript-biome|
3586     clang-format..........................|ale-javascript-clangformat|
3587     cspell................................|ale-javascript-cspell|
3588     deno..................................|ale-javascript-deno|
3589     dprint................................|ale-javascript-dprint|
3590     eslint................................|ale-javascript-eslint|
3591     fecs..................................|ale-javascript-fecs|
3592     flow..................................|ale-javascript-flow|
3593     importjs..............................|ale-javascript-importjs|
3594     jscs..................................|ale-javascript-jscs|
3595     jshint................................|ale-javascript-jshint|
3596     prettier..............................|ale-javascript-prettier|
3597     prettier-eslint.......................|ale-javascript-prettier-eslint|
3598     prettier-standard.....................|ale-javascript-prettier-standard|
3599     standard..............................|ale-javascript-standard|
3600     xo....................................|ale-javascript-xo|
3601   jinja...................................|ale-jinja-options|
3602     djlint................................|ale-jinja-djlint|
3603   json....................................|ale-json-options|
3604     biome.................................|ale-json-biome|
3605     clang-format..........................|ale-json-clangformat|
3606     cspell................................|ale-json-cspell|
3607     dprint................................|ale-json-dprint|
3608     eslint................................|ale-json-eslint|
3609     fixjson...............................|ale-json-fixjson|
3610     pytool................................|ale-json-pytool|
3611     jsonlint..............................|ale-json-jsonlint|
3612     jq....................................|ale-json-jq|
3613     prettier..............................|ale-json-prettier|
3614     spectral..............................|ale-json-spectral|
3615     vscodejson............................|ale-json-vscode|
3616   jsonc...................................|ale-jsonc-options|
3617     biome.................................|ale-jsonc-biome|
3618     eslint................................|ale-jsonc-eslint|
3619   jsonnet.................................|ale-jsonnet-options|
3620     jsonnetfmt............................|ale-jsonnet-jsonnetfmt|
3621     jsonnet-lint..........................|ale-jsonnet-jsonnet-lint|
3622   json5...................................|ale-json5-options|
3623     eslint................................|ale-json5-eslint|
3624   julia...................................|ale-julia-options|
3625     languageserver........................|ale-julia-languageserver|
3626   kotlin..................................|ale-kotlin-options|
3627     kotlinc...............................|ale-kotlin-kotlinc|
3628     ktlint................................|ale-kotlin-ktlint|
3629     languageserver........................|ale-kotlin-languageserver|
3630   latex...................................|ale-latex-options|
3631     cspell................................|ale-latex-cspell|
3632     write-good............................|ale-latex-write-good|
3633     textlint..............................|ale-latex-textlint|
3634   less....................................|ale-less-options|
3635     lessc.................................|ale-less-lessc|
3636     prettier..............................|ale-less-prettier|
3637     stylelint.............................|ale-less-stylelint|
3638   llvm....................................|ale-llvm-options|
3639     llc...................................|ale-llvm-llc|
3640   lua.....................................|ale-lua-options|
3641     cspell................................|ale-lua-cspell|
3642     lua-format............................|ale-lua-lua-format|
3643     lua-language-server...................|ale-lua-lua-language-server|
3644     luac..................................|ale-lua-luac|
3645     luacheck..............................|ale-lua-luacheck|
3646     luafmt................................|ale-lua-luafmt|
3647     selene................................|ale-lua-selene|
3648     stylua................................|ale-lua-stylua|
3649   make....................................|ale-make-options|
3650     checkmake.............................|ale-make-checkmake|
3651   markdown................................|ale-markdown-options|
3652     cspell................................|ale-markdown-cspell|
3653     dprint................................|ale-markdown-dprint|
3654     markdownlint..........................|ale-markdown-markdownlint|
3655     marksman..............................|ale-markdown-marksman|
3656     mdl...................................|ale-markdown-mdl|
3657     pandoc................................|ale-markdown-pandoc|
3658     prettier..............................|ale-markdown-prettier|
3659     pymarkdown............................|ale-markdown-pymarkdown|
3660     remark-lint...........................|ale-markdown-remark-lint|
3661     textlint..............................|ale-markdown-textlint|
3662     write-good............................|ale-markdown-write-good|
3663   mercury.................................|ale-mercury-options|
3664     mmc...................................|ale-mercury-mmc|
3665   nasm....................................|ale-nasm-options|
3666     nasm..................................|ale-nasm-nasm|
3667   nickel..................................|ale-nickel-options|
3668     nickel_format.........................|ale-nickel-nickel-format|
3669   nim.....................................|ale-nim-options|
3670     nimcheck..............................|ale-nim-nimcheck|
3671     nimlsp................................|ale-nim-nimlsp|
3672     nimpretty.............................|ale-nim-nimpretty|
3673   nix.....................................|ale-nix-options|
3674     alejandra.............................|ale-nix-alejandra|
3675     nixfmt................................|ale-nix-nixfmt|
3676     nixpkgs-fmt...........................|ale-nix-nixpkgs-fmt|
3677     statix................................|ale-nix-statix|
3678     deadnix...............................|ale-nix-deadnix|
3679   nroff...................................|ale-nroff-options|
3680     write-good............................|ale-nroff-write-good|
3681   nunjucks................................|ale-nunjucks-options|
3682     djlint................................|ale-nunjucks-djlint|
3683   objc....................................|ale-objc-options|
3684     ccls..................................|ale-objc-ccls|
3685     clang.................................|ale-objc-clang|
3686     clang-format..........................|ale-objc-clangformat|
3687     clangd................................|ale-objc-clangd|
3688     uncrustify............................|ale-objc-uncrustify|
3689   objcpp..................................|ale-objcpp-options|
3690     clang.................................|ale-objcpp-clang|
3691     clangd................................|ale-objcpp-clangd|
3692     uncrustify............................|ale-objcpp-uncrustify|
3693   ocaml...................................|ale-ocaml-options|
3694     dune..................................|ale-ocaml-dune|
3695     merlin................................|ale-ocaml-merlin|
3696     ocamllsp..............................|ale-ocaml-ocamllsp|
3697     ols...................................|ale-ocaml-ols|
3698     ocamlformat...........................|ale-ocaml-ocamlformat|
3699     ocp-indent............................|ale-ocaml-ocp-indent|
3700   odin....................................|ale-odin-options|
3701     ols...................................|ale-odin-ols|
3702   openapi.................................|ale-openapi-options|
3703     ibm_validator.........................|ale-openapi-ibm-validator|
3704     prettier..............................|ale-openapi-prettier|
3705     yamllint..............................|ale-openapi-yamllint|
3706   openscad................................|ale-openscad-options|
3707     sca2d.................................|ale-openscad-sca2d|
3708     scadformat............................|ale-openscad-scadformat|
3709   packer..................................|ale-packer-options|
3710     packer-fmt-fixer......................|ale-packer-fmt-fixer|
3711   pascal..................................|ale-pascal-options|
3712     ptop..................................|ale-pascal-ptop|
3713   pawn....................................|ale-pawn-options|
3714     uncrustify............................|ale-pawn-uncrustify|
3715   perl....................................|ale-perl-options|
3716     perl..................................|ale-perl-perl|
3717     perlcritic............................|ale-perl-perlcritic|
3718     perltidy..............................|ale-perl-perltidy|
3719   perl6...................................|ale-perl6-options|
3720     perl6.................................|ale-perl6-perl6|
3721   php.....................................|ale-php-options|
3722     cspell................................|ale-php-cspell|
3723     langserver............................|ale-php-langserver|
3724     phan..................................|ale-php-phan|
3725     phpcbf................................|ale-php-phpcbf|
3726     phpcs.................................|ale-php-phpcs|
3727     phpmd.................................|ale-php-phpmd|
3728     phpstan...............................|ale-php-phpstan|
3729     psalm.................................|ale-php-psalm|
3730     php-cs-fixer..........................|ale-php-php-cs-fixer|
3731     php...................................|ale-php-php|
3732     pint..................................|ale-php-pint|
3733     tlint.................................|ale-php-tlint|
3734     intelephense..........................|ale-php-intelephense|
3735   po......................................|ale-po-options|
3736     write-good............................|ale-po-write-good|
3737   pod.....................................|ale-pod-options|
3738     write-good............................|ale-pod-write-good|
3739   pony....................................|ale-pony-options|
3740     ponyc.................................|ale-pony-ponyc|
3741   powershell..............................|ale-powershell-options|
3742     cspell................................|ale-powershell-cspell|
3743     powershell............................|ale-powershell-powershell|
3744     psscriptanalyzer......................|ale-powershell-psscriptanalyzer|
3745   prolog..................................|ale-prolog-options|
3746     swipl.................................|ale-prolog-swipl|
3747   proto...................................|ale-proto-options|
3748     buf-format............................|ale-proto-buf-format|
3749     buf-lint..............................|ale-proto-buf-lint|
3750     clang-format..........................|ale-proto-clangformat|
3751     protoc-gen-lint.......................|ale-proto-protoc-gen-lint|
3752     protolint.............................|ale-proto-protolint|
3753   pug.....................................|ale-pug-options|
3754     puglint...............................|ale-pug-puglint|
3755   puppet..................................|ale-puppet-options|
3756     puppet................................|ale-puppet-puppet|
3757     puppetlint............................|ale-puppet-puppetlint|
3758     puppet-languageserver.................|ale-puppet-languageserver|
3759   purescript..............................|ale-purescript-options|
3760     purescript-language-server............|ale-purescript-language-server|
3761     purs-tidy.............................|ale-purescript-tidy|
3762     purty.................................|ale-purescript-purty|
3763   pyrex (cython)..........................|ale-pyrex-options|
3764     cython................................|ale-pyrex-cython|
3765   python..................................|ale-python-options|
3766     autoflake.............................|ale-python-autoflake|
3767     autoimport............................|ale-python-autoimport|
3768     autopep8..............................|ale-python-autopep8|
3769     bandit................................|ale-python-bandit|
3770     black.................................|ale-python-black|
3771     cspell................................|ale-python-cspell|
3772     flake8................................|ale-python-flake8|
3773     flakehell.............................|ale-python-flakehell|
3774     isort.................................|ale-python-isort|
3775     mypy..................................|ale-python-mypy|
3776     prospector............................|ale-python-prospector|
3777     pycln.................................|ale-python-pycln|
3778     pycodestyle...........................|ale-python-pycodestyle|
3779     pydocstyle............................|ale-python-pydocstyle|
3780     pyflakes..............................|ale-python-pyflakes|
3781     pyflyby...............................|ale-python-pyflyby|
3782     pylama................................|ale-python-pylama|
3783     pylint................................|ale-python-pylint|
3784     pylsp.................................|ale-python-pylsp|
3785     pyre..................................|ale-python-pyre|
3786     pyright...............................|ale-python-pyright|
3787     refurb................................|ale-python-refurb|
3788     reorder-python-imports................|ale-python-reorder_python_imports|
3789     ruff..................................|ale-python-ruff|
3790     ruff-format...........................|ale-python-ruff-format|
3791     unimport..............................|ale-python-unimport|
3792     vulture...............................|ale-python-vulture|
3793     yapf..................................|ale-python-yapf|
3794   qml.....................................|ale-qml-options|
3795     qmlfmt................................|ale-qml-qmlfmt|
3796   r.......................................|ale-r-options|
3797     languageserver........................|ale-r-languageserver|
3798     lintr.................................|ale-r-lintr|
3799     styler................................|ale-r-styler|
3800   racket..................................|ale-racket-options|
3801     racket_langserver.....................|ale-racket-langserver|
3802     raco_fmt..............................|ale-racket-raco-fmt|
3803   reasonml................................|ale-reasonml-options|
3804     merlin................................|ale-reasonml-merlin|
3805     ols...................................|ale-reasonml-ols|
3806     reason-language-server................|ale-reasonml-language-server|
3807     refmt.................................|ale-reasonml-refmt|
3808   rego....................................|ale-rego-options|
3809     cspell................................|ale-rego-cspell|
3810     opacheck..............................|ale-rego-opa-check|
3811     opafmt................................|ale-rego-opa-fmt-fixer|
3812   rest....................................|ale-rest-options|
3813     kulala_fmt............................|ale-rest-kulala_fmt|
3814   restructuredtext........................|ale-restructuredtext-options|
3815     cspell................................|ale-restructuredtext-cspell|
3816     textlint..............................|ale-restructuredtext-textlint|
3817     write-good............................|ale-restructuredtext-write-good|
3818   robot...................................|ale-robot-options|
3819     rflint................................|ale-robot-rflint|
3820   ruby....................................|ale-ruby-options|
3821     brakeman..............................|ale-ruby-brakeman|
3822     cspell................................|ale-ruby-cspell|
3823     debride...............................|ale-ruby-debride|
3824     packwerk..............................|ale-ruby-packwerk|
3825     prettier..............................|ale-ruby-prettier|
3826     rails_best_practices..................|ale-ruby-rails_best_practices|
3827     reek..................................|ale-ruby-reek|
3828     rubocop...............................|ale-ruby-rubocop|
3829     ruby..................................|ale-ruby-ruby|
3830     rufo..................................|ale-ruby-rufo|
3831     solargraph............................|ale-ruby-solargraph|
3832     sorbet................................|ale-ruby-sorbet|
3833     standardrb............................|ale-ruby-standardrb|
3834     syntax_tree...........................|ale-ruby-syntax_tree|
3835     rubyfmt...............................|ale-ruby-rubyfmt|
3836   rust....................................|ale-rust-options|
3837     analyzer..............................|ale-rust-analyzer|
3838     cargo.................................|ale-rust-cargo|
3839     cspell................................|ale-rust-cspell|
3840     rls...................................|ale-rust-rls|
3841     rustc.................................|ale-rust-rustc|
3842     rustfmt...............................|ale-rust-rustfmt|
3843   salt....................................|ale-salt-options|
3844     salt-lint.............................|ale-salt-salt-lint|
3845   sass....................................|ale-sass-options|
3846     sasslint..............................|ale-sass-sasslint|
3847     stylelint.............................|ale-sass-stylelint|
3848   scala...................................|ale-scala-options|
3849     cspell................................|ale-scala-cspell|
3850     metals................................|ale-scala-metals|
3851     sbtserver.............................|ale-scala-sbtserver|
3852     scalafmt..............................|ale-scala-scalafmt|
3853     scalastyle............................|ale-scala-scalastyle|
3854   scss....................................|ale-scss-options|
3855     prettier..............................|ale-scss-prettier|
3856     sasslint..............................|ale-scss-sasslint|
3857     stylelint.............................|ale-scss-stylelint|
3858   sh......................................|ale-sh-options|
3859     bashate...............................|ale-sh-bashate|
3860     cspell................................|ale-sh-cspell|
3861     sh-language-server....................|ale-sh-language-server|
3862     shell.................................|ale-sh-shell|
3863     shellcheck............................|ale-sh-shellcheck|
3864     shfmt.................................|ale-sh-shfmt|
3865   sml.....................................|ale-sml-options|
3866     smlnj.................................|ale-sml-smlnj|
3867   solidity................................|ale-solidity-options|
3868     solc..................................|ale-solidity-solc|
3869     solhint...............................|ale-solidity-solhint|
3870     solium................................|ale-solidity-solium|
3871     forge.................................|ale-solidity-forge|
3872   spec....................................|ale-spec-options|
3873     rpmlint...............................|ale-spec-rpmlint|
3874   sql.....................................|ale-sql-options|
3875     dprint................................|ale-sql-dprint|
3876     pgformatter...........................|ale-sql-pgformatter|
3877     sqlfluff..............................|ale-sql-sqlfluff|
3878     sqlfmt................................|ale-sql-sqlfmt|
3879     sqlformat.............................|ale-sql-sqlformat|
3880   stylus..................................|ale-stylus-options|
3881     stylelint.............................|ale-stylus-stylelint|
3882   sugarss.................................|ale-sugarss-options|
3883     stylelint.............................|ale-sugarss-stylelint|
3884   svelte..................................|ale-svelte-options|
3885     prettier..............................|ale-svelte-prettier|
3886     svelteserver..........................|ale-svelte-svelteserver|
3887   swift...................................|ale-swift-options|
3888     apple-swift-format....................|ale-swift-apple-swift-format|
3889     cspell................................|ale-swift-cspell|
3890     sourcekitlsp..........................|ale-swift-sourcekitlsp|
3891   systemd.................................|ale-systemd-options|
3892     systemd-analyze.......................|ale-systemd-analyze|
3893   tcl.....................................|ale-tcl-options|
3894     nagelfar..............................|ale-tcl-nagelfar|
3895   terraform...............................|ale-terraform-options|
3896     checkov...............................|ale-terraform-checkov|
3897     terraform-fmt-fixer...................|ale-terraform-fmt-fixer|
3898     terraform.............................|ale-terraform-terraform|
3899     terraform-ls..........................|ale-terraform-terraform-ls|
3900     terraform-lsp.........................|ale-terraform-terraform-lsp|
3901     tflint................................|ale-terraform-tflint|
3902     tfsec.................................|ale-terraform-tfsec|
3903   tex.....................................|ale-tex-options|
3904     chktex................................|ale-tex-chktex|
3905     cspell................................|ale-tex-cspell|
3906     lacheck...............................|ale-tex-lacheck|
3907     latexindent...........................|ale-tex-latexindent|
3908     texlab................................|ale-tex-texlab|
3909   texinfo.................................|ale-texinfo-options|
3910     cspell................................|ale-texinfo-cspell|
3911     write-good............................|ale-texinfo-write-good|
3912   text....................................|ale-text-options|
3913     cspell................................|ale-text-cspell|
3914     textlint..............................|ale-text-textlint|
3915     write-good............................|ale-text-write-good|
3916   thrift..................................|ale-thrift-options|
3917     thrift................................|ale-thrift-thrift|
3918     thriftcheck...........................|ale-thrift-thriftcheck|
3919   toml....................................|ale-toml-options|
3920     dprint................................|ale-toml-dprint|
3921   typescript..............................|ale-typescript-options|
3922     biome.................................|ale-typescript-biome|
3923     cspell................................|ale-typescript-cspell|
3924     deno..................................|ale-typescript-deno|
3925     dprint................................|ale-typescript-dprint|
3926     eslint................................|ale-typescript-eslint|
3927     prettier..............................|ale-typescript-prettier|
3928     standard..............................|ale-typescript-standard|
3929     tslint................................|ale-typescript-tslint|
3930     tsserver..............................|ale-typescript-tsserver|
3931     xo....................................|ale-typescript-xo|
3932   typst...................................|ale-typst-options|
3933     typstyle..............................|ale-typst-typstyle|
3934   v.......................................|ale-v-options|
3935     v.....................................|ale-v-v|
3936     vfmt..................................|ale-v-vfmt|
3937   vala....................................|ale-vala-options|
3938     uncrustify............................|ale-vala-uncrustify|
3939   verilog/systemverilog...................|ale-verilog-options|
3940     hdl-checker...........................|ale-verilog-hdl-checker|
3941     iverilog..............................|ale-verilog-iverilog|
3942     slang.................................|ale-verilog-slang|
3943     verilator.............................|ale-verilog-verilator|
3944     vlog..................................|ale-verilog-vlog|
3945     xvlog.................................|ale-verilog-xvlog|
3946     yosys.................................|ale-verilog-yosys|
3947   vhdl....................................|ale-vhdl-options|
3948     ghdl..................................|ale-vhdl-ghdl|
3949     hdl-checker...........................|ale-vhdl-hdl-checker|
3950     vcom..................................|ale-vhdl-vcom|
3951     xvhdl.................................|ale-vhdl-xvhdl|
3952   vim help................................|ale-vim-help-options|
3953     write-good............................|ale-vim-help-write-good|
3954   vim.....................................|ale-vim-options|
3955     vimls.................................|ale-vim-vimls|
3956     vint..................................|ale-vim-vint|
3957   vue.....................................|ale-vue-options|
3958     cspell................................|ale-vue-cspell|
3959     prettier..............................|ale-vue-prettier|
3960     vls...................................|ale-vue-vls|
3961     volar.................................|ale-vue-volar|
3962   wgsl....................................|ale-wgsl-options|
3963     naga..................................|ale-wgsl-naga|
3964   xhtml...................................|ale-xhtml-options|
3965     cspell................................|ale-xhtml-cspell|
3966     write-good............................|ale-xhtml-write-good|
3967   xml.....................................|ale-xml-options|
3968     xmllint...............................|ale-xml-xmllint|
3969   yaml....................................|ale-yaml-options|
3970     actionlint............................|ale-yaml-actionlint|
3971     circleci..............................|ale-yaml-circleci|
3972     prettier..............................|ale-yaml-prettier|
3973     spectral..............................|ale-yaml-spectral|
3974     swaglint..............................|ale-yaml-swaglint|
3975     yaml-language-server..................|ale-yaml-language-server|
3976     yamlfix...............................|ale-yaml-yamlfix|
3977     yamlfmt...............................|ale-yaml-yamlfmt|
3978     yamllint..............................|ale-yaml-yamllint|
3979     gitlablint............................|ale-yaml-gitlablint|
3980     yq....................................|ale-yaml-yq|
3981   yang....................................|ale-yang-options|
3982     yang-lsp..............................|ale-yang-lsp|
3983   yara....................................|ale-yara-options|
3984     yls...................................|ale-yara-yls|
3985   zeek....................................|ale-zeek-options|
3986     zeek..................................|ale-zeek-zeek|
3987   zig.....................................|ale-zig-options|
3988     zigfmt................................|ale-zig-zigfmt|
3989     zlint.................................|ale-zig-zlint|
3990     zls...................................|ale-zig-zls|
3991
3992
3993 ===============================================================================
3994 8. Commands/Keybinds                                             *ale-commands*
3995
3996 :ALEComplete                                                     *:ALEComplete*
3997
3998   Manually trigger LSP autocomplete and show the menu. Works only when called
3999   from insert mode. >
4000
4001     inoremap <silent> <C-Space> <C-\><C-O>:ALEComplete<CR>
4002 <
4003   A plug mapping `<Plug>(ale_complete)` is defined for this command. >
4004
4005     imap <C-Space> <Plug>(ale_complete)
4006 <
4007
4008 :ALEDocumentation                                           *:ALEDocumentation*
4009
4010   Similar to the `:ALEHover` command, retrieve documentation information for
4011   the symbol at the cursor. Documentation data will always be shown in a
4012   preview window, no matter how small the documentation content is.
4013
4014   NOTE: This command is only available for `tsserver`.
4015
4016   A plug mapping `<Plug>(ale_documentation)` is defined for this command.
4017
4018
4019 :ALEFindReferences                                         *:ALEFindReferences*
4020
4021   Find references in the codebase for the symbol under the cursor using the
4022   enabled LSP linters for the buffer. ALE will display a preview window
4023   containing the results if some references are found.
4024
4025   The window can be navigated using the usual Vim navigation commands. The
4026   Enter key (<CR>) can be used to jump to a referencing location, or the `t`
4027   key can be used to jump to the location in a new tab.
4028
4029   The locations opened in different ways using the following variations.
4030
4031   `:ALEFindReferences -tab`       - Open the location in a new tab.
4032   `:ALEFindReferences -split`     - Open the location in a horizontal split.
4033   `:ALEFindReferences -vsplit`    - Open the location in a vertical split.
4034   `:ALEFindReferences -quickfix`  - Put the locations into quickfix list.
4035
4036   The default method used for navigating to a new location can be changed
4037   by modifying |g:ale_default_navigation|.
4038
4039   You can add `-relative` to the command to view results with relatives paths,
4040   instead of absolute paths. This option has no effect if `-quickfix` is used.
4041
4042   The selection can be opened again with the `:ALERepeatSelection` command.
4043
4044   You can jump back to the position you were at before going to a reference of
4045   something with jump motions like CTRL-O. See |jump-motions|.
4046
4047   A plug mapping `<Plug>(ale_find_references)` is defined for this command.
4048   You can define additional plug mapping with any additional options you want
4049   like so: >
4050
4051   nnoremap <silent> <Plug>(my_mapping) :ALEFindReferences -relative<Return>
4052 <
4053
4054 :ALEFix [linter]                                                      *:ALEFix*
4055
4056   Fix problems with the current buffer. See |ale-fix| for more information.
4057
4058   If the command is run with a bang (`:ALEFix!`), all warnings will be
4059   suppressed, including warnings about no fixers being defined, and warnings
4060   about not being able to apply fixes to a file because it has been changed.
4061
4062   A plug mapping `<Plug>(ale_fix)` is defined for this command.
4063
4064
4065 :ALEFixSuggest                                                 *:ALEFixSuggest*
4066
4067   Suggest tools that can be used to fix problems in the current buffer.
4068
4069   See |ale-fix| for more information.
4070
4071
4072 :ALEGoToDefinition [options]                               *:ALEGoToDefinition*
4073
4074   Jump to the definition of a symbol under the cursor using the enabled LSP
4075   linters for the buffer. ALE will jump to a definition if an LSP server
4076   provides a location to jump to. Otherwise, ALE will do nothing.
4077
4078   The locations opened in different ways using the following variations.
4079
4080   `:ALEGoToDefinition -tab`    - Open the location in a new tab.
4081   `:ALEGoToDefinition -split`  - Open the location in a horizontal split.
4082   `:ALEGoToDefinition -vsplit` - Open the location in a vertical split.
4083
4084   The default method used for navigating to a new location can be changed
4085   by modifying |g:ale_default_navigation|.
4086
4087   You can jump back to the position you were at before going to the definition
4088   of something with jump motions like CTRL-O. See |jump-motions|.
4089
4090   You should consider using the 'hidden' option in combination with this
4091   command. Otherwise, Vim will refuse to leave the buffer you're jumping from
4092   unless you have saved your edits.
4093
4094   The following Plug mappings are defined for this command, which correspond
4095   to the following commands.
4096
4097   `<Plug>(ale_go_to_definition)`           - `:ALEGoToDefinition`
4098   `<Plug>(ale_go_to_definition_in_tab)`    - `:ALEGoToDefinition -tab`
4099   `<Plug>(ale_go_to_definition_in_split)`  - `:ALEGoToDefinition -split`
4100   `<Plug>(ale_go_to_definition_in_vsplit)` - `:ALEGoToDefinition -vsplit`
4101
4102
4103 :ALEGoToTypeDefinition [options]                       *:ALEGoToTypeDefinition*
4104
4105   This works similar to `:ALEGoToDefinition` but instead jumps to the
4106   definition of a type of a symbol under the cursor. ALE will jump to a
4107   definition if an LSP server provides a location to jump to. Otherwise, ALE
4108   will do nothing.
4109
4110   The locations opened in different ways using the following variations.
4111
4112   `:ALEGoToTypeDefinition -tab`    - Open the location in a new tab.
4113   `:ALEGoToTypeDefinition -split`  - Open the location in a horizontal split.
4114   `:ALEGoToTypeDefinition -vsplit` - Open the location in a vertical split.
4115
4116   The default method used for navigating to a new location can be changed
4117   by modifying |g:ale_default_navigation|.
4118
4119   You can jump back to the position you were at before going to the definition
4120   of something with jump motions like CTRL-O. See |jump-motions|.
4121
4122   The following Plug mappings are defined for this command, which correspond
4123   to the following commands.
4124
4125   `<Plug>(ale_go_to_type_definition)`           - `:ALEGoToTypeDefinition`
4126   `<Plug>(ale_go_to_type_definition_in_tab)`    - `:ALEGoToTypeDefinition -tab`
4127   `<Plug>(ale_go_to_type_definition_in_split)`  - `:ALEGoToTypeDefinition -split`
4128   `<Plug>(ale_go_to_type_definition_in_vsplit)` - `:ALEGoToTypeDefinition -vsplit`
4129
4130
4131 :ALEGoToImplementation [options]                       *:ALEGoToImplementation*
4132
4133   This works similar to `:ALEGoToDefinition` but instead jumps to the
4134   implementation of symbol under the cursor. ALE will jump to a definition if
4135   an LSP server provides a location to jump to. Otherwise, ALE will do nothing.
4136
4137   The locations opened in different ways using the following variations.
4138
4139   `:ALEGoToImplementation -tab`    - Open the location in a new tab.
4140   `:ALEGoToImplementation -split`  - Open the location in a horizontal split.
4141   `:ALEGoToImplementation -vsplit` - Open the location in a vertical split.
4142
4143   The default method used for navigating to a new location can be changed
4144   by modifying |g:ale_default_navigation|.
4145
4146   You can jump back to the position you were at before going to the definition
4147   of something with jump motions like CTRL-O. See |jump-motions|.
4148
4149   The following Plug mappings are defined for this command, which correspond
4150   to the following commands.
4151
4152   `<Plug>(ale_go_to_implementation)`           - `:ALEGoToImplementation`
4153   `<Plug>(ale_go_to_implementation_in_tab)`    - `:ALEGoToImplementation -tab`
4154   `<Plug>(ale_go_to_implementation_in_split)`  - `:ALEGoToImplementation -split`
4155   `<Plug>(ale_go_to_implementation_in_vsplit)` - `:ALEGoToImplementation -vsplit`
4156
4157
4158 :ALEHover                                                           *:ALEHover*
4159
4160   Print brief information about the symbol under the cursor, taken from any
4161   available LSP linters. There may be a small non-blocking delay before
4162   information is printed.
4163
4164   NOTE: In Vim 8, long messages will be shown in a preview window, as Vim 8
4165   does not support showing a prompt to press enter to continue for long
4166   messages from asynchronous callbacks.
4167
4168   A plug mapping `<Plug>(ale_hover)` is defined for this command.
4169
4170
4171 :ALEImport                                                         *:ALEImport*
4172
4173   Try to import a symbol using `tsserver` or a Language Server.
4174
4175   ALE will look for completions for the word at the cursor which contain
4176   additional text edits that possible insert lines to import the symbol. The
4177   first match with additional text edits will be used, and may add other code
4178   to the current buffer other than import lines.
4179
4180   If linting is enabled, and |g:ale_lint_on_text_changed| is set to ever check
4181   buffers when text is changed, the buffer will be checked again after changes
4182   are made.
4183
4184   A Plug mapping `<Plug>(ale_import)` is defined for this command. This
4185   mapping should only be bound for normal mode.
4186
4187
4188 :ALEOrganizeImports                                       *:ALEOrganizeImports*
4189
4190   Organize imports using tsserver. Currently not implemented for LSPs.
4191
4192
4193 :ALERename                                                         *:ALERename*
4194
4195   Rename a symbol using `tsserver` or a Language Server.
4196
4197   The symbol where the cursor is resting will be the symbol renamed, and a
4198   prompt will open to request a new name.
4199
4200   The rename operation will not save modified buffers when 'hidden' is on
4201   unless |g:ale_save_hidden| is `true` or `1`.
4202
4203
4204 :ALEFileRename                                                 *:ALEFileRename*
4205
4206   Rename a file and fix imports using `tsserver`.
4207
4208
4209 :ALECodeAction                                                 *:ALECodeAction*
4210
4211   Apply a code action via LSP servers or `tsserver`.
4212
4213   If there is an error present on a line that can be fixed, ALE will
4214   automatically fix a line, unless there are multiple possible code fixes to
4215   apply.
4216
4217   This command can be run in visual mode apply actions, such as applicable
4218   refactors. A menu will be shown to select code action to apply.
4219
4220
4221 :ALERepeatSelection                                       *:ALERepeatSelection*
4222
4223   Repeat the last selection displayed in the preview window.
4224
4225
4226 :ALESymbolSearch [query]                                     *:ALESymbolSearch*
4227
4228   Search for symbols in the workspace, taken from any available LSP linters.
4229
4230   The arguments provided to this command will be used as a search query for
4231   finding symbols in the workspace, such as functions, types, etc.
4232
4233   You can add `-relative` to the command to view results with relatives paths,
4234   instead of absolute paths.
4235
4236
4237 :ALELint                                                             *:ALELint*
4238
4239   Run ALE once for the current buffer. This command can be used to run ALE
4240   manually, instead of automatically, if desired.
4241
4242   This command will also run linters where `lint_file` is evaluates to `1`,
4243   meaning linters which check the file instead of the Vim buffer.
4244
4245   A plug mapping `<Plug>(ale_lint)` is defined for this command.
4246
4247
4248 :ALELintStop                                                     *:ALELintStop*
4249
4250   Stop any currently running jobs for checking the current buffer.
4251
4252   Any problems from previous linter results will continue to be shown.
4253
4254
4255 :ALEPopulateQuickfix                                     *:ALEPopulateQuickfix*
4256 :ALEPopulateLocList                                       *:ALEPopulateLocList*
4257
4258   Manually populate the |quickfix| or |location-list| and show the
4259   corresponding list. Useful when you have other uses for both the |quickfix|
4260   and |location-list| and don't want them automatically populated. Be sure to
4261   disable auto populating: >
4262
4263     let g:ale_set_quickfix = 0
4264     let g:ale_set_loclist = 0
4265 <
4266   With these settings, ALE will still run checking and display it with signs,
4267   highlighting, and other output described in |ale-lint-file-linters|.
4268
4269 :ALEPrevious                                                     *:ALEPrevious*
4270 :ALEPreviousWrap                                             *:ALEPreviousWrap*
4271 :ALENext                                                             *:ALENext*
4272 :ALENextWrap                                                     *:ALENextWrap*
4273 :ALEFirst                                                           *:ALEFirst*
4274 :ALELast                                                             *:ALELast*
4275                                                       *ale-navigation-commands*
4276
4277   Move between warnings or errors in a buffer. ALE will only navigate between
4278   the errors or warnings it generated, even if both |g:ale_set_quickfix|
4279   and |g:ale_set_loclist| are set to `0`.
4280
4281   `:ALEPrevious` and `:ALENext` will stop at the top and bottom of a file, while
4282   `:ALEPreviousWrap` and `:ALENextWrap` will wrap around the file to find
4283   the last or first warning or error in the file, respectively.
4284
4285   `:ALEPrevious` and `:ALENext` take optional flags arguments to custom their
4286   behavior :
4287   `-wrap` enable wrapping around the file
4288   `-error`, `-warning` and `-info` enable jumping to errors, warnings or infos
4289     respectively, ignoring anything else. They are mutually exclusive and if
4290     several are provided the priority is the following: error > warning > info.
4291   `-style` and `-nostyle` allow you to jump respectively to style error or
4292     warning and to not style error or warning. They also are mutually
4293     exclusive and nostyle has priority over style.
4294
4295   Flags can be combined to create create custom jumping. Thus you can use
4296   ":ALENext -wrap -error -nosyle" to jump to the next error which is not a
4297   style error while going back to the beginning of the file if needed.
4298
4299   `:ALEFirst` goes to the first error or warning in the buffer, while `:ALELast`
4300   goes to the last one.
4301
4302   The following |<Plug>| mappings are defined for the commands: >
4303   <Plug>(ale_previous) - ALEPrevious
4304   <Plug>(ale_previous_wrap) - ALEPreviousWrap
4305   <Plug>(ale_previous_error) - ALEPrevious -error
4306   <Plug>(ale_previous_wrap_error) - ALEPrevious -wrap -error
4307   <Plug>(ale_previous_warning) - ALEPrevious -warning
4308   <Plug>(ale_previous_wrap_warning) - ALEPrevious -wrap -warning
4309   <Plug>(ale_next) - ALENext
4310   <Plug>(ale_next_wrap) - ALENextWrap
4311   <Plug>(ale_next_error) - ALENext -error
4312   <Plug>(ale_next_wrap_error) - ALENext -wrap -error
4313   <Plug>(ale_next_warning) - ALENext -warning
4314   <Plug>(ale_next_wrap_warning) - ALENext -wrap -warning
4315   <Plug>(ale_first) - ALEFirst
4316   <Plug>(ale_last) - ALELast
4317 <
4318   For example, these commands could be bound to the keys CTRL-j
4319   and CTRL-k: >
4320
4321   " Map movement through errors without wrapping.
4322   nmap <silent> <C-k> <Plug>(ale_previous)
4323   nmap <silent> <C-j> <Plug>(ale_next)
4324   " OR map keys to use wrapping.
4325   nmap <silent> <C-k> <Plug>(ale_previous_wrap)
4326   nmap <silent> <C-j> <Plug>(ale_next_wrap)
4327 <
4328
4329 :ALEToggle                                                         *:ALEToggle*
4330 :ALEEnable                                                         *:ALEEnable*
4331 :ALEDisable                                                       *:ALEDisable*
4332 :ALEToggleBuffer                                             *:ALEToggleBuffer*
4333 :ALEEnableBuffer                                             *:ALEEnableBuffer*
4334 :ALEDisableBuffer                                           *:ALEDisableBuffer*
4335
4336   `:ALEToggle`, `:ALEEnable`, and `:ALEDisable` enable or disable ALE linting,
4337   including all of its autocmd events, loclist items, quickfix items, signs,
4338   current jobs, etc., globally. Executing any of these commands will change
4339   the |g:ale_enabled| variable.
4340
4341   ALE can be disabled or enabled for only a single buffer with
4342   `:ALEToggleBuffer`, `:ALEEnableBuffer`, and `:ALEDisableBuffer`. Disabling ALE
4343   for a buffer will not remove autocmd events, but will prevent ALE from
4344   checking for problems and reporting problems for whatever buffer the
4345   `:ALEDisableBuffer` or `:ALEToggleBuffer` command is executed from. These
4346   commands can be used for temporarily disabling ALE for a buffer. These
4347   commands will modify the |b:ale_enabled| variable.
4348
4349   ALE linting cannot be enabled for a single buffer when it is disabled
4350   globally, as disabling ALE globally removes the autocmd events needed to
4351   perform linting with.
4352
4353   The following plug mappings are defined, for conveniently defining keybinds:
4354
4355   `:ALEToggle`        - `<Plug>(ale_toggle)`
4356   `:ALEEnable`        - `<Plug>(ale_enable)`
4357   `:ALEDisable`       - `<Plug>(ale_disable)`
4358   `:ALEToggleBuffer`  - `<Plug>(ale_toggle_buffer)`
4359   `:ALEEnableBuffer`  - `<Plug>(ale_enable_buffer)`
4360   `:ALEDisableBuffer` - `<Plug>(ale_disable_buffer)`
4361
4362   For removing problems reported by ALE, but leaving ALE enabled, see
4363   `:ALEReset` and `:ALEResetBuffer`.
4364
4365
4366 :ALEDetail                                                         *:ALEDetail*
4367
4368   Show the full linter message for the problem nearest to the cursor on the
4369   given line in the preview window. The preview window can be easily closed
4370   with the `q` key. If there is no message to show, the window will not be
4371   opened.
4372
4373   If a loclist item has a `detail` key set, the message for that key will be
4374   preferred over `text`. See |ale-loclist-format|.
4375
4376   A plug mapping `<Plug>(ale_detail)` is defined for this command.
4377
4378
4379 :ALEInfo                                                             *:ALEInfo*
4380                                                                *:ALEInfoToFile*
4381
4382   Print runtime information about ALE, including the values of global and
4383   buffer-local settings for ALE, the linters that are enabled, the commands
4384   that have been run, and the output of commands.
4385
4386   ALE will log the commands that are run by default. If you wish to disable
4387   this, set |g:ale_history_enabled| to `0`. Because it could be expensive, ALE
4388   does not remember the output of recent commands by default. Set
4389   |g:ale_history_log_output| to `1` to enable logging of output for commands.
4390   ALE will only log the output captured for parsing problems, etc.
4391
4392   You can pass options to the command to control how ALE displays the
4393   information, such as `:ALEInfo -echo`, etc. >
4394
4395   -preview             Show the info in a preview window.
4396   -clip OR -clipboard  Copy the information to your clipboard.
4397   -echo                echo all of the information with :echo
4398 <
4399   The default mode can be configured with |g:ale_info_default_mode|.
4400
4401   When shown in a preview window, syntax highlights can be defined for the
4402   `ale-info` filetype.
4403
4404   `:ALEInfoToFile` will write the ALE runtime information to a given filename.
4405   The filename works just like `:write`.
4406
4407
4408 :ALEReset                                                           *:ALEReset*
4409 :ALEResetBuffer                                               *:ALEResetBuffer*
4410
4411   `:ALEReset` will remove all problems reported by ALE for all buffers.
4412   `:ALEResetBuffer` will remove all problems reported for a single buffer.
4413
4414   Either command will leave ALE linting enabled, so ALE will report problems
4415   when linting is performed again. See |ale-lint| for more information.
4416
4417   The following plug mappings are defined, for conveniently defining keybinds:
4418
4419   `:ALEReset`       - `<Plug>(ale_reset)`
4420   `:ALEResetBuffer` - `<Plug>(ale_reset_buffer)`
4421
4422   ALE can be disabled globally or for a buffer with `:ALEDisable` or
4423   `:ALEDisableBuffer`.
4424
4425
4426 :ALEStopAllLSPs                                               *:ALEStopAllLSPs*
4427
4428   `:ALEStopAllLSPs` will close and stop all channels and jobs for all LSP-like
4429   clients, including tsserver, remove all of the data stored for them, and
4430   delete all of the problems found for them, updating every linted buffer.
4431
4432   This command can be used when LSP clients mess up and need to be restarted.
4433
4434
4435 :ALEStopLSP [linter]                                              *:ALEStopLSP*
4436
4437   `:ALEStopLSP` will stop a specific language server with a given linter name.
4438   Completion is supported for currently running language servers. All language
4439   servers with the given name will be stopped across all buffers for all
4440   projects.
4441
4442   If the command is run with a bang (`:ALEStopLSP!`), all warnings will be
4443   suppressed.
4444
4445
4446 ===============================================================================
4447 9. API                                                                *ale-api*
4448
4449 ALE offers a number of functions for running linters or fixers, or defining
4450 them. The following functions are part of the publicly documented part of that
4451 API, and should be expected to continue to work. Functions documented with
4452 Vim autocmd names `ale#Foo` are available in the Vim context, and functions
4453 documented with dot names `ale.foo` are available in Lua scripts.
4454
4455
4456 ale.env(variable_name, value)                                       *ale.env()*
4457 ale#Env(variable_name, value)                                       *ale#Env()*
4458
4459   Given a variable name and a string value, produce a string for including in
4460   a command for setting environment variables. This function can be used for
4461   building a command like so. >
4462
4463     :echo string(ale#Env('VAR', 'some value') . 'command')
4464     'VAR=''some value'' command'      # On Linux or Mac OSX
4465     'set VAR="some value" && command' # On Windows
4466
4467
4468 ale.escape(str)                                                  *ale.escape()*
4469 ale#Escape(str)                                                  *ale#Escape()*
4470
4471   Given a string, escape that string so it is ready for shell execution.
4472
4473   If the shell is detected to be `cmd.exe`, ALE will apply its own escaping
4474   that tries to avoid escaping strings unless absolutely necessary to avoid
4475   issues with Windows programs that do not properly handle quoted arguments.
4476
4477   In all other cases, ALE will call |shellescape|.
4478
4479
4480 ale.get_filename_mappings(buffer, name)           *ale.get_filename_mappings()*
4481 ale#GetFilenameMappings(buffer, name)               *ale#GetFilenameMappings()*
4482
4483   Given a `buffer` and the `name` of either a linter for fixer, return a
4484   |List| of two-item |List|s that describe mapping to and from the local and
4485   foreign file systems for running a particular linter or fixer.
4486
4487   See |g:ale_filename_mappings| for details on filename mapping.
4488
4489
4490 ale.has(feature)                                                    *ale.has()*
4491 ale#Has(feature)                                                    *ale#Has()*
4492
4493   In Vim, `ale#Has` returns `1` if ALE supports a given feature, like |has()|
4494   for Vim features. In Lua `ale.has` returns `true` instead, and `false` if a
4495   feature is not supported.
4496
4497   ALE versions can be checked with version strings in the format
4498   `ale#Has('ale-x.y.z')`, such as `ale#Has('ale-2.4.0')`.
4499
4500
4501 ale.pad(str)                                                        *ale.pad()*
4502 ale#Pad(str)                                                        *ale#Pad()*
4503
4504   Given a string or any |empty()| value, return either the string prefixed
4505   with a single space, or an empty string. This function can be used to build
4506   parts of a command from variables.
4507
4508
4509 ale.queue(delay, [linting_flag, buffer])                          *ale.queue()*
4510 ale#Queue(delay, [linting_flag, buffer])                          *ale#Queue()*
4511
4512   Run linters for the current buffer, based on the filetype of the buffer,
4513   with a given `delay`. A `delay` of `0` will run the linters immediately.
4514   The linters will always be run in the background. Calling this function
4515   several times will reset an internal timer so ALE doesn't check buffers too
4516   often.
4517
4518   An optional `linting_flag` argument can be given. If `linting_flag` is
4519   `'lint_file'`, then linters where the `lint_file` option evaluates to `1`
4520   will be run. Otherwise, those linters will not be run.
4521
4522   An optional `buffer` argument can be given for specifying the buffer to
4523   check. The active buffer (`bufnr('')`) will be checked by default.
4524
4525                                                                 *ale-cool-down*
4526   If an exception is thrown when queuing/running ALE linters, ALE will enter
4527   a cool down period where it will stop checking anything for a short period
4528   of time. This is to prevent ALE from seriously annoying users if a linter
4529   is broken, or when developing ALE itself.
4530
4531
4532 ale.setup(config)                                                 *ale.setup()*
4533
4534   Configure ALE global settings, which are documented in |ale-options|. For
4535   example: >
4536
4537     require("ale").setup({
4538       completion_enabled = true,
4539       maximum_file_size = 1024 * 1024,
4540       warn_about_trailing_whitespace = false,
4541     })
4542 <
4543   You can also call this function with `ale.setup.global` to make what context
4544   ALE is being configured in less ambiguous if you like.
4545
4546
4547 ale.setup.buffer(config)                                   *ale.setup.buffer()*
4548
4549   Configure ALE buffer-local settings, which are documented in |ale-options|.
4550   For example: >
4551     require("ale").setup.buffer({
4552       linters = {"ruff", "pyright"},
4553       fixers = {"ruff"}
4554     })
4555 <
4556
4557 ale.var(buffer, variable_name)                                      *ale.var()*
4558 ale#Var(buffer, variable_name)                                      *ale#Var()*
4559
4560   Given a buffer number and an ALE variable name return the value of that
4561   if defined in the buffer, and if not defined in the buffer return the
4562   global value. The `ale_` prefix will be added to the Vim variable name.
4563
4564   The `ale#Var` Vim function will return errors if the variable is not defined
4565   in either the buffer or globally. The `ale.var` Lua function will return
4566   `nil` if the variable is not defined in either the buffer or globally.
4567
4568
4569 ale#command#CreateDirectory(buffer)             *ale#command#CreateDirectory()*
4570
4571   Create a new temporary directory with a unique name, and manage that
4572   directory with |ale#command#ManageDirectory()|, so it will be removed as soon
4573   as possible.
4574
4575   It is advised to only call this function from a callback function for
4576   returning a linter command to run.
4577
4578
4579 ale#command#CreateFile(buffer)                       *ale#command#CreateFile()*
4580
4581   Create a new temporary file with a unique name, and manage that file with
4582   |ale#command#ManageFile()|, so it will be removed as soon as possible.
4583
4584   It is advised to only call this function from a callback function for
4585   returning a linter command to run.
4586
4587
4588 ale#command#Run(buffer, command, callback, [options])       *ale#command#Run()*
4589
4590   Start running a job in the background, and pass the results to the given
4591   callback later.
4592
4593   This function can be used for computing the results of ALE linter or fixer
4594   functions asynchronously with jobs. `buffer` must match the buffer being
4595   linted or fixed, `command` must be a |String| for a shell command to
4596   execute, `callback` must be defined as a |Funcref| to call later with the
4597   results, and an optional |Dictionary| of `options` can be provided.
4598
4599   The `callback` will receive the arguments `(buffer, output, metadata)`,
4600   where the `buffer` will match the buffer given to the function, the `output`
4601   will be a `List` of lines of output from the job that was run, and the
4602   `metadata` will be a |Dictionary| with additional information about the job
4603   that was run, including:
4604
4605     `exit_code` - A |Number| with the exit code for the program that was run.
4606
4607   The result of this function is either a special |Dictionary| ALE will use
4608   for waiting for the command to finish, or `0` if the job is not started. The
4609   The return value of the `callback` will be used as the eventual result for
4610   whatever value is being given to ALE. For example: >
4611
4612     function! s:GetCommand(buffer, output, meta) abort
4613         " Do something with a:output here, from the foo command.
4614
4615         " This is used as the command to run for linting.
4616         return 'final command'
4617     endfunction
4618
4619     " ...
4620
4621     'command': {b -> ale#command#Run(b, 'foo', function('s:GetCommand'))}
4622 <
4623   The result of a callback can also be the result of another call to this
4624   function, so that several commands can be arbitrarily chained together. For
4625   example: >
4626
4627     function! s:GetAnotherCommand(buffer, output, meta) abort
4628         " We can finally return this command.
4629         return 'last command'
4630     endfunction
4631
4632     function! s:GetCommand(buffer, output, meta) abort
4633         " We can return another deferred result.
4634         return ale#command#Run(
4635         \   a:buffer,
4636         \   'second command',
4637         \   function('s:GetAnotherCommand')
4638         \)
4639     endfunction
4640
4641     " ...
4642
4643     'command': {b -> ale#command#Run(b, 'foo', function('s:GetCommand'))}
4644 <
4645   The following `options` can be provided.
4646
4647     `cwd`               - An optional |String| for setting the working directory
4648                         for the command, just as per |ale#linter#Define|.
4649
4650                         If not set, or `v:null`, the `cwd` of the last command
4651                         that spawned this one will be used.
4652
4653     `output_stream`     - Either `'stdout'`, `'stderr'`, `'both'`, or
4654                         `'none`' for selecting which output streams to read
4655                         lines from.
4656
4657                         The default is `'stdout'`
4658
4659     `executable`        - An executable for formatting into `%e` in the
4660                         command. If this option is not provided, formatting
4661                         commands with `%e` will not work.
4662
4663     `read_buffer`       - If set to `1`, the buffer will be piped into the
4664                         command.
4665
4666                         The default is `0`.
4667
4668     `input`             - When creating temporary files with `%t` or piping
4669                         text into a command `input` can be set to a |List| of
4670                         text to use instead of the buffer's text.
4671
4672     `filename_mappings` - A |List| of two-item |List|s describing filename
4673                         mappings to apply for formatted filenames in the
4674                         command string, as per |g:ale_filename_mappings|.
4675
4676                         If the call to this function is being used for a
4677                         linter or fixer, the mappings should be provided with
4678                         this option, and can be retrieved easily with
4679                         |ale#GetFilenameMappings()|.
4680
4681                         The default is `[]`.
4682
4683
4684 ale#command#EscapeCommandPart(command_part)   *ale#command#EscapeCommandPart()*
4685
4686   Given a |String|, return a |String| with all `%` characters replaced with
4687   `%%` instead. This function can be used to escape strings which are
4688   dynamically generated for commands before handing them over to ALE,
4689   so that ALE doesn't treat any strings with `%` formatting sequences
4690   specially.
4691
4692
4693 ale#command#ManageDirectory(buffer, directory)  *ale#command#ManageDirectory()*
4694
4695   Like |ale#command#ManageFile()|, but directories and all of their contents
4696   will be deleted, akin to `rm -rf directory`, which could lead to loss of
4697   data if mistakes are made. This command will also delete any temporary
4698   filenames given to it.
4699
4700   It is advised to use |ale#command#ManageFile()| instead for deleting single
4701   files.
4702
4703
4704 ale#command#ManageFile(buffer, filename)             *ale#command#ManageFile()*
4705
4706   Given a buffer number for a buffer currently running some linting or fixing
4707   tasks and a filename, register a filename with ALE for automatic deletion
4708   after linting or fixing is complete, or when Vim exits.
4709
4710   If Vim exits suddenly, ALE will try its best to remove temporary files, but
4711   ALE cannot guarantee with absolute certainty that the files will be removed.
4712   It is advised to create temporary files in the operating system's managed
4713   temporary file directory, such as with |tempname()|.
4714
4715   Directory names should not be given to this function. ALE will only delete
4716   files and symlinks given to this function. This is to prevent entire
4717   directories from being accidentally deleted, say in cases of writing
4718   `dir . '/' . filename` where `filename` is actually `''`, etc. ALE instead
4719   manages directories separately with the |ale#command#ManageDirectory| function.
4720
4721
4722 ale#completion#OmniFunc(findstart, base)            *ale#completion#OmniFunc()*
4723
4724   A completion function to use with 'omnifunc'.
4725
4726   See |ale-completion|.
4727
4728
4729 ale#engine#GetLoclist(buffer)                         *ale#engine#GetLoclist()*
4730
4731   Given a buffer number, this function will return the list of problems
4732   reported by ALE for a given buffer in the format accepted by |setqflist()|.
4733
4734   A reference to the buffer's list of problems will be returned. The list must
4735   be copied before applying |map()| or |filter()|.
4736
4737
4738 ale#engine#IsCheckingBuffer(buffer)             *ale#engine#IsCheckingBuffer()*
4739
4740   Given a buffer number, returns `1` when ALE is busy checking that buffer.
4741
4742   This function can be used for status lines, tab names, etc.
4743
4744                                                        *ale#fix#registry#Add()*
4745 ale#fix#registry#Add(name, func, filetypes, desc, [aliases])
4746
4747   Given a |String| `name` for a name to add to the registry, a |String| `func`
4748   for a function name, a |List| `filetypes` for a list of filetypes to
4749   set for suggestions, and a |String| `desc` for a short description of
4750   the fixer, register a fixer in the registry.
4751
4752   The `name` can then be used for |g:ale_fixers| in place of the function
4753   name, and suggested for fixing files.
4754
4755   An optional |List| of |String|s for aliases can be passed as the `aliases`
4756   argument. These aliases can also be used for looking up a fixer function.
4757   ALE will search for fixers in the registry first by `name`, then by their
4758   `aliases`.
4759
4760   For example to register a custom fixer for `luafmt`: >
4761
4762   function! FormatLua(buffer) abort
4763     return {
4764     \   'command': 'luafmt --stdin'
4765     \}
4766   endfunction
4767
4768   execute ale#fix#registry#Add('luafmt', 'FormatLua', ['lua'], 'luafmt for lua')
4769
4770   " You can now use it in g:ale_fixers
4771   let g:ale_fixers = {
4772     \ 'lua': ['luafmt']
4773   }
4774 <
4775
4776 ale#linter#Define(filetype, linter)                       *ale#linter#Define()*
4777
4778   Given a |String| for a filetype and a |Dictionary| Describing a linter
4779   configuration, add a linter for the given filetype. The dictionaries each
4780   offer the following options:
4781
4782   `name`                   The name of the linter. These names will be used by
4783                          |g:ale_linters| option for enabling/disabling
4784                          particular linters.
4785
4786                          This argument is required.
4787
4788   `callback`               A |String| or |Funcref| for a callback function
4789                          accepting two arguments (buffer, lines), for a
4790                          buffer number the output is for, and the lines of
4791                          output from a linter.
4792
4793                          This callback function should return a |List| of
4794                          |Dictionary| objects in the format accepted by
4795                          |setqflist()|. The |List| will be sorted by line and
4796                          then column order so it can be searched with a binary
4797                          search by in future before being passed on to the
4798                          |location-list|, etc.
4799
4800                          This argument is required, unless the linter is an
4801                          LSP linter. In which case, this argument must not be
4802                          defined, as LSP linters handle diagnostics
4803                          automatically. See |ale-lsp-linters|.
4804
4805                          If the function named does not exist, including if
4806                          the function is later deleted, ALE will behave as if
4807                          the callback returned an empty list.
4808
4809                          The keys for each item in the List will be handled in
4810                          the following manner:
4811                                                            *ale-loclist-format*
4812                          `text` - This error message is required.
4813                          `detail` - An optional, more descriptive message.
4814                            This message can be displayed with the `:ALEDetail`
4815                            command instead of the message for `text`, if set.
4816                          `lnum` - The line number is required. Any strings
4817                            will be automatically converted to numbers by
4818                            using |str2nr()|.
4819
4820                            Line 0 will be moved to line 1, and lines beyond
4821                            the end of the file will be moved to the end.
4822                          `col` - The column number is optional and will
4823                            default to `0`. Any strings will be automatically
4824                            converted to number using |str2nr()|.
4825                          `end_col` - An optional end column number.
4826                            This key can be set to specify the column problems
4827                            end on, for improved highlighting.
4828                          `end_lnum` - An optional end line number.
4829                            This key can set along with `end_col` for
4830                            highlighting multi-line problems.
4831                          `bufnr` - This key represents the buffer number the
4832                            problems are for. This value will default to
4833                            the buffer number being checked.
4834
4835                            The `filename` key can be set instead of this key,
4836                            and then the eventual `bufnr` value in the final
4837                            list will either represent the number for an open
4838                            buffer or `-1` for a file not open in any buffer.
4839                          `filename` - An optional filename for the file the
4840                            problems are for. This should be an absolute path to
4841                            a file.
4842
4843                            Problems for files which have not yet been opened
4844                            will be set in those files after they are opened
4845                            and have been checked at least once.
4846
4847                            Temporary files in directories used for Vim
4848                            temporary files with |tempname()| will be assumed
4849                            to be the buffer being checked, unless the `bufnr`
4850                            key is also set with a valid number for some other
4851                            buffer.
4852                          `vcol` - Defaults to `0`.
4853
4854                            If set to `1`, ALE will convert virtual column
4855                            positions for `col` and `end_col` to byte column
4856                            positions. If the buffer is changed in-between
4857                            checking it and displaying the results, the
4858                            calculated byte column positions will probably be
4859                            wrong.
4860                          `type` - Defaults to `'E'`.
4861                          `nr` - Defaults to `-1`.
4862
4863                            Numeric error code. If `nr` is not `-1`, `code`
4864                            likely should contain the string representation of
4865                            the same value.
4866                          `code` - No default; may be unset.
4867
4868                            Human-readable |String| error code.
4869
4870   `executable`             A |String| naming the executable itself which
4871                          will be run, or a |Funcref| for a function to call
4872                          for computing the executable, accepting a buffer
4873                          number.
4874
4875                          The result can be computed with |ale#command#Run()|.
4876
4877                          This value will be used to check if the program
4878                          requested is installed or not.
4879
4880                          If an `executable` is not defined, the command will
4881                          be run without checking if a program is executable
4882                          first. Defining an executable path is recommended to
4883                          avoid starting too many processes.
4884
4885   `command`                A |String| for a command to run asynchronously, or a
4886                          |Funcref| for a function to call for computing the
4887                          command, accepting a buffer number.
4888
4889                          The result can be computed with |ale#command#Run()|.
4890
4891                          The command string can be formatted with format
4892                          markers. See |ale-command-format-strings|.
4893
4894                          This command will be fed the lines from the buffer to
4895                          check, and will produce the lines of output given to
4896                          the `callback`.
4897
4898   `cwd`                    An optional |String| for setting the working
4899                          directory for the command, or a |Funcref| for a
4900                          function to call for computing the command, accepting
4901                          a buffer number. The working directory can be
4902                          specified as a format string for determining the path
4903                          dynamically. See |ale-command-format-strings|.
4904
4905                          To set the working directory to the directory
4906                          containing the file you're checking, you should
4907                          probably use `'%s:h'` as the option value.
4908
4909                          If this option is absent or the string is empty, the
4910                          `command` will be run with no determined working
4911                          directory in particular.
4912
4913                          The directory specified with this option will be used
4914                          as the default working directory for all commands run
4915                          in a chain with |ale#command#Run()|, unless otherwise
4916                          specified.
4917
4918   `output_stream`          A |String| for the output stream the lines of output
4919                          should be read from for the command which is run. The
4920                          accepted values are `'stdout'`, `'stderr'`, and
4921                          `'both'`. This argument defaults to `'stdout'`. This
4922                          argument can be set for linter programs which output
4923                          their errors and warnings to the stderr stream
4924                          instead of stdout. The option `'both'` will read
4925                          from both stder and stdout at the same time.
4926
4927   `read_buffer`            A |Number| (`0` or `1`) indicating whether a command
4928                          should read the Vim buffer as input via stdin. This
4929                          option is set to `1` by default, and can be disabled
4930                          if a command manually reads from a temporary file
4931                          instead, etc.
4932
4933                          This option behaves as if it was set to `0` when the
4934                          `lint_file` option evaluates to `1`.
4935
4936                                                                 *ale-lint-file*
4937   `lint_file`              A |Number| (`0` or `1`), or a |Funcref| for a function
4938                          accepting a buffer number for computing either `0` or
4939                          `1`, indicating whether a command should read the file
4940                          instead of the Vim buffer. This option can be used
4941                          for linters which must check the file on disk, and
4942                          which cannot check a Vim buffer instead.
4943
4944                          The result can be computed with |ale#command#Run()|.
4945
4946                          Linters where the eventual value of this option
4947                          evaluates to `1` will not be run as a user types, per
4948                          |g:ale_lint_on_text_changed|. Linters will instead be
4949                          run only when events occur against the file on disk,
4950                          including |g:ale_lint_on_enter| and
4951                          |g:ale_lint_on_save|. Linters where this option
4952                          evaluates to `1` will also be run when the `:ALELint`
4953                          command is run.
4954
4955                          When this option is evaluates to `1`, ALE will behave
4956                          as if `read_buffer` was set to `0`.
4957
4958                                                               *ale-lsp-linters*
4959   `lsp`                    A |String| for defining LSP (Language Server Protocol)
4960                          linters.
4961
4962                          This argument may be omitted or `''` when a linter
4963                          does not represent an LSP linter.
4964
4965                          When this argument is set to `'stdio'`, then the
4966                          linter will be defined as an LSP linter which keeps a
4967                          process for a language server running, and
4968                          communicates with it directly via a |channel|.
4969                          `executable` and `command` must be set.
4970
4971                          When this argument is set to `'socket'`, then the
4972                          linter will be defined as an LSP linter via a TCP
4973                          or named pipe socket connection. `address` must be set.
4974
4975                          ALE will not start a server automatically.
4976
4977                          When this argument is not empty `project_root` must
4978                          be defined.
4979
4980                          `language` can be defined to describe the language
4981                          for a file. The filetype will be used as the language
4982                          by default.
4983
4984                          LSP linters handle diagnostics automatically, so
4985                          the `callback` argument must not be defined.
4986
4987                          An optional `completion_filter` callback may be
4988                          defined for filtering completion results.
4989
4990                          `initialization_options` may be defined to pass
4991                          initialization options to the LSP.
4992
4993                          `lsp_config` may be defined to pass configuration
4994                          settings to the LSP.
4995
4996   `address`                A |String| representing an address to connect to,
4997                          or a |Funcref| accepting a buffer number and
4998                          returning the |String|. If the value contains a
4999                          colon, it is interpreted as referring to a TCP
5000                          socket; otherwise it is interpreted as the path of a
5001                          named pipe.
5002
5003                          The result can be computed with |ale#command#Run()|.
5004
5005                          This argument must only be set if the `lsp` argument
5006                          is set to `'socket'`.
5007
5008   `project_root`           A |String| representing a path to the project for
5009                          the file being checked with the language server, or
5010                          a |Funcref| accepting a buffer number and returning
5011                          the |String|.
5012
5013                          If an empty string is returned, the file will not be
5014                          checked at all.
5015
5016                          This argument must only be set if the `lsp` argument
5017                          is also set to a non-empty string.
5018
5019   `language`               A |String| representing the name of the language
5020                          being checked, or a |Funcref| accepting a buffer
5021                          number and returning the |String|. This string will
5022                          be sent to the LSP to tell it what type of language
5023                          is being checked.
5024
5025                          If a language isn't provided, the language will
5026                          default to the value of the filetype given to
5027                          |ale#linter#Define|.
5028
5029   `completion_filter`      A |String| or |Funcref| for a callback function
5030                          accepting a buffer number and a completion item.
5031
5032                          The completion item will be a |Dictionary| following
5033                          the Language Server Protocol `CompletionItem`
5034                          interface as described in the specification,
5035                          available online here:
5036                          https://microsoft.github.io/language-server-protocol
5037
5038   `aliases`                A |List| of aliases for the linter name.
5039
5040                          This argument can be set with alternative names for
5041                          selecting the linter with |g:ale_linters|. This
5042                          setting can make it easier to guess the linter name
5043                          by offering a few alternatives.
5044
5045   `initialization_options` A |Dictionary| of initialization options for LSPs,
5046                          or a |Funcref| for a callback function accepting
5047                          a buffer number and returning the |Dictionary|.
5048
5049                          This will be fed (as JSON) to the LSP in the
5050                          initialize command.
5051
5052   `lsp_config`             A |Dictionary| for configuring a language server,
5053                          or a |Funcref| for a callback function accepting
5054                          a buffer number and returning the |Dictionary|.
5055
5056                          This will be fed (as JSON) to the LSP in the
5057                          workspace/didChangeConfiguration command.
5058
5059   If temporary files or directories are created for commands run with
5060   `command`, then these temporary files or directories can be managed by ALE,
5061   for automatic deletion. See |ale#command#ManageFile()| and
5062   |ale#command#ManageDirectory| for more information.
5063
5064                                                    *ale-command-format-strings*
5065
5066   All command strings will be formatted for special character sequences.
5067   Any substring `%s` will be replaced with the full path to the current file
5068   being edited. This format option can be used to pass the exact filename
5069   being edited to a program.
5070
5071   For example: >
5072   'command': 'eslint -f unix --stdin --stdin-filename %s'
5073 <
5074   Any substring `%t` will be replaced with a path to a temporary file. Merely
5075   adding `%t` will cause ALE to create a temporary file containing the
5076   contents of the buffer being checked. All occurrences of `%t` in command
5077   strings will reference the one temporary file. The temporary file will be
5078   created inside a temporary directory, and the entire temporary directory
5079   will be automatically deleted, following the behavior of
5080   |ale#command#ManageDirectory|. This option can be used for some linters which
5081   do not support reading from stdin.
5082
5083   For example: >
5084   'command': 'ghc -fno-code -v0 %t',
5085 <
5086   Any substring `%e` will be replaced with the escaped executable supplied
5087   with `executable`. This provides a convenient way to define a command string
5088   which needs to include a dynamic executable name, but which is otherwise
5089   static.
5090
5091   For example: >
5092   'command': '%e --some-argument',
5093 <
5094   The character sequence `%%` can be used to emit a literal `%` into a
5095   command, so literal character sequences `%s` and `%t` can be escaped by
5096   using `%%s` and `%%t` instead, etc.
5097
5098   Some |filename-modifiers| can be applied to `%s` and `%t`. Only `:h`, `:t`,
5099   `:r`, and `:e` may be applied, other modifiers will be ignored. Filename
5100   modifiers can be applied to the format markers by placing them after them.
5101
5102   For example: >
5103   'command': '%s:h %s:e %s:h:t',
5104 <
5105   Given a path `/foo/baz/bar.txt`, the above command string will generate
5106   something akin to `'/foo/baz' 'txt' 'baz'`
5107
5108   If a callback for a command generates part of a command string which might
5109   possibly contain `%%`, `%s`, `%t`, or `%e`, where the special formatting
5110   behavior is not desired, the |ale#command#EscapeCommandPart()| function can
5111   be used to replace those characters to avoid formatting issues.
5112
5113                                                   *ale-linter-loading-behavior*
5114
5115   Linters for ALE will be loaded by searching |runtimepath| in the following
5116   format: >
5117
5118   ale_linters/<filetype>/<linter_name>.vim
5119 <
5120   Any linters which exist anywhere in 'runtimepath' with that directory
5121   structure will be automatically loaded for the matching |filetype|. Filetypes
5122   containing `.` characters will be split into individual parts, and files
5123   will be loaded for each filetype between the `.` characters.
5124
5125   Linters can be defined from vimrc and other files as long as this function
5126   is loaded first. For example, the following code will define a Hello World
5127   linter in vimrc in Vim 8: >
5128
5129   " Plugins have to be loaded first.
5130   " If you are using a plugin manager, run that first.
5131   packloadall
5132
5133   call ale#linter#Define('vim', {
5134   \   'name': 'echo-test',
5135   \   'executable': 'echo',
5136   \   'command': 'echo hello world',
5137   \   'callback': {buffer, lines -> map(lines, '{"text": v:val, "lnum": 1}')},
5138   \})
5139 <
5140
5141 ale#linter#Get(filetype)                                     *ale#linter#Get()*
5142
5143   Return all of linters configured for a given filetype as a |List| of
5144   |Dictionary| values in the format specified by |ale#linter#Define()|.
5145
5146   Filetypes may be dot-separated to invoke linters for multiple filetypes:
5147   for instance, the filetype `javascript.jsx` will return linters for both the
5148   `javascript` and `jsx` filetype.
5149
5150   Aliases may be defined in as described in |g:ale_linter_aliases|. Aliases
5151   are applied after dot-separated filetypes are broken up into their
5152   components.
5153
5154
5155 ale#linter#PreventLoading(filetype)               *ale#linter#PreventLoading()*
5156
5157   Given a `filetype`, prevent any more linters from being loaded from
5158   |runtimepath| for that filetype. This function can be called from vimrc or
5159   similar to prevent ALE from loading linters.
5160
5161                                                  *ale#lsp_linter#SendRequest()*
5162 ale#lsp_linter#SendRequest(buffer, linter_name, message, [Handler])
5163
5164   Send a custom request to an LSP linter. The arguments are defined as
5165   follows:
5166
5167   `buffer`       A valid buffer number.
5168
5169   `linter_name`  A |String| identifying an LSP linter that is available and
5170                  enabled for the |filetype| of `buffer`.
5171
5172   `message`      A |List| in the form `[is_notification, method, parameters]`,
5173                  containing three elements:
5174                  `is_notification` - an |Integer| that has value 1 if the
5175                    request is a notification, 0 otherwise;
5176                  `method` - a |String|, identifying an LSP method supported
5177                    by `linter`;
5178                  `parameters` - a |dictionary| of LSP parameters that are
5179                    applicable to `method`.
5180
5181   `Handler`      Optional argument, meaningful only when `message[0]` is 0.
5182                  A |Funcref| that is called when a response to the request is
5183                  received, and takes as unique argument a dictionary
5184                  representing the response obtained from the server.
5185
5186                                                *ale#other_source#ShowResults()*
5187 ale#other_source#ShowResults(buffer, linter_name, loclist)
5188
5189   Show results from another source of information.
5190
5191   `buffer` must be a valid buffer number, and `linter_name` must be a unique
5192   name for identifying another source of information. The `loclist` given
5193   where the problems in a buffer are, and should be provided in the format ALE
5194   uses for regular linter results. See |ale-loclist-format|.
5195
5196                                              *ale#other_source#StartChecking()*
5197 ale#other_source#StartChecking(buffer, linter_name)
5198
5199   Tell ALE that another source of information has started checking a buffer.
5200
5201   `buffer` must be a valid buffer number, and `linter_name` must be a unique
5202   name for identifying another source of information.
5203
5204
5205 ale#statusline#Count(buffer)                           *ale#statusline#Count()*
5206
5207   Given the number of a buffer which may have problems, return a |Dictionary|
5208   containing information about the number of problems detected by ALE. The
5209   following keys are supported:
5210
5211   `error`         -> The number of problems with type `E` and `sub_type != 'style'`
5212   `warning`       -> The number of problems with type `W` and `sub_type != 'style'`
5213   `info`          -> The number of problems with type `I`
5214   `style_error`   -> The number of problems with type `E` and `sub_type == 'style'`
5215   `style_warning` -> The number of problems with type `W` and `sub_type == 'style'`
5216   `total`         -> The total number of problems.
5217
5218
5219 ale#statusline#FirstProblem(buffer, type)       *ale#statusline#FirstProblem()*
5220
5221   Returns a copy of the first entry in the `loclist` that matches the supplied
5222   buffer number and problem type. If there is no such entry, an empty dictionary
5223   is returned.
5224   Problem type should be one of the strings listed below:
5225
5226   `error`         -> Returns the first `loclist` item with type `E` and
5227                      `sub_type != 'style'`
5228   `warning`       -> First item with type `W` and `sub_type != 'style'`
5229   `info`          -> First item with type `I`
5230   `style_error`   -> First item with type `E` and `sub_type == 'style'`
5231   `style_warning` -> First item with type `W` and `sub_type == 'style'`
5232
5233
5234 b:ale_linted                                                     *b:ale_linted*
5235
5236   `b:ale_linted` is set to the number of times a buffer has been checked by
5237   ALE after all linters for one lint cycle have finished checking a buffer.
5238   This variable may not be defined until ALE first checks a buffer, so it
5239   should be accessed with |get()| or |getbufvar()|. For example: >
5240
5241     " Print a message indicating how many times ALE has checked this buffer.
5242     echo 'ALE has checked this buffer ' . get(b:, 'ale_linted') . ' time(s).'
5243     " Print 'checked' using getbufvar() if a buffer has been checked.
5244     echo getbufvar(bufnr(''), 'ale_linted', 0) > 0 ? 'checked' : 'not checked'
5245 <
5246
5247 g:ale_want_results_buffer                           *g:ale_want_results_buffer*
5248
5249   `g:ale_want_results_buffer` is set to the number of the buffer being checked
5250   when the |ALEWantResults| event is signaled. This variable should be read to
5251   figure out which buffer other sources should lint. This variable can be read
5252   in Lua scripts in the usual way via `vim.g.ale_want_results_buffer`.
5253
5254                                                       *ALECompletePost-autocmd*
5255 ALECompletePost                                               *ALECompletePost*
5256
5257   This |User| autocmd is triggered after ALE inserts an item on
5258   |CompleteDone|. This event can be used to run commands after a buffer
5259   is changed by ALE as the result of completion. For example, `:ALEFix` can
5260   be configured to run automatically when completion is done: >
5261
5262   augroup FixAfterComplete
5263       autocmd!
5264       " Run ALEFix when completion items are added.
5265       autocmd User ALECompletePost ALEFix!
5266       " If ALE starts fixing a file, stop linters running for now.
5267       autocmd User ALEFixPre ALELintStop
5268   augroup END
5269 <
5270                                                            *ALELintPre-autocmd*
5271 ALELintPre                                                         *ALELintPre*
5272                                                           *ALELintPost-autocmd*
5273 ALELintPost                                                       *ALELintPost*
5274                                                             *ALEFixPre-autocmd*
5275 ALEFixPre                                                           *ALEFixPre*
5276                                                            *ALEFixPost-autocmd*
5277 ALEFixPost                                                         *ALEFixPost*
5278
5279   These |User| autocommands are triggered before and after every lint or fix
5280   cycle. They can be used to update statuslines, send notifications, etc.
5281   The autocmd commands are run with |:silent|, so |:unsilent| is required for
5282   echoing messages.
5283
5284   For example to change the color of the statusline while the linter is
5285   running: >
5286
5287   augroup ALEProgress
5288       autocmd!
5289       autocmd User ALELintPre  hi Statusline ctermfg=darkgrey
5290       autocmd User ALELintPost hi Statusline ctermfg=NONE
5291   augroup END
5292 <
5293   Or to display the progress in the statusline: >
5294
5295   let s:ale_running = 0
5296   let l:stl .= '%{s:ale_running ? "[linting]" : ""}'
5297   augroup ALEProgress
5298       autocmd!
5299       autocmd User ALELintPre  let s:ale_running = 1 | redrawstatus
5300       autocmd User ALELintPost let s:ale_running = 0 | redrawstatus
5301   augroup END
5302 <
5303                                                         *ALEJobStarted-autocmd*
5304 ALEJobStarted                                                   *ALEJobStarted*
5305
5306   This |User| autocommand is triggered immediately after a job is successfully
5307   run. This provides better accuracy for checking linter status with
5308   |ale#engine#IsCheckingBuffer()| over |ALELintPre-autocmd|, which is actually
5309   triggered before any linters are executed.
5310
5311                                                         *ALELSPStarted-autocmd*
5312 ALELSPStarted                                                   *ALELSPStarted*
5313
5314   This |User| autocommand is triggered immediately after an LSP connection is
5315   successfully initialized. This provides a way to perform any additional
5316   initialization work, such as setting up buffer-level mappings.
5317
5318                                                        *ALEWantResults-autocmd*
5319 ALEWantResults                                                 *ALEWantResults*
5320
5321   This |User| autocommand is triggered before ALE begins a lint cycle. Another
5322   source can respond by calling |ale#other_source#StartChecking()|, and
5323   |ALELintPre| will be signaled thereafter, to allow other plugins to know
5324   that another source is checking the buffer.
5325
5326   |g:ale_want_results_buffer| will be set to the number for a buffer being
5327   checked when the event is signaled, and deleted after the event is done.
5328   This variable should be read to know which buffer to check.
5329
5330   Other plugins can use this event to start checking buffers when ALE events
5331   for checking buffers are triggered.
5332
5333
5334 ===============================================================================
5335 10. Special Thanks                                         *ale-special-thanks*
5336
5337 Special thanks to Mark Grealish (https://www.bhalash.com/) for providing ALE's
5338 snazzy looking ale glass logo. Cheers, Mark!
5339
5340
5341 ===============================================================================
5342 11. Contact                                                       *ale-contact*
5343
5344 If you like this plugin, and wish to get in touch, check out the GitHub
5345 page for issues and more at https://github.com/dense-analysis/ale
5346
5347 If you wish to contact the author of this plugin directly, please feel
5348 free to send an email to devw0rp@gmail.com.
5349
5350 Please drink responsibly, or not at all, which is ironically the preference
5351 of w0rp, who is teetotal.
5352
5353
5354 ===============================================================================
5355   vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: