diff --git a/README.md b/README.md index 340ccb4d..91f0c3ea 100644 --- a/README.md +++ b/README.md @@ -722,11 +722,10 @@ while you type. ALE uses a timeout which is cancelled and reset every time you type, and this delay can be increased so linters are run less often. See `:help g:ale_lint_delay` for more information. -If you don't wish to run linters while you type, you can disable that -behaviour. Set `g:ale_lint_on_text_changed` to `never` or `normal`. You won't -get as frequent error checking, but ALE shouldn't block your ability to edit a -document after you save a file, so the asynchronous nature of the plugin will -still be an advantage. +If you don't wish to run linters while you type, you can disable that behaviour. +Set `g:ale_lint_on_text_changed` to `never`. You won't get as frequent error +checking, but ALE shouldn't block your ability to edit a document after you save +a file, so the asynchronous nature of the plugin will still be an advantage. If you are still concerned, you can turn the automatic linting off altogether, including the option `g:ale_lint_on_enter`, and you can run ALE manually with diff --git a/autoload/ale/events.vim b/autoload/ale/events.vim index c3dbd378..da554ef9 100644 --- a/autoload/ale/events.vim +++ b/autoload/ale/events.vim @@ -128,7 +128,7 @@ function! ale#events#Init() abort endif if g:ale_lint_on_insert_leave - autocmd InsertLeave * call ale#Queue(0) + autocmd InsertLeave * if ale#Var(str2nr(expand('')), 'lint_on_insert_leave') | call ale#Queue(0) | endif endif if g:ale_echo_cursor || g:ale_cursor_detail diff --git a/doc/ale.txt b/doc/ale.txt index 736d8e05..6aa03a12 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -84,7 +84,7 @@ have even saved your changes. ALE will check your code in the following circumstances, which can be configured with the associated options. * When you modify a buffer. - |g:ale_lint_on_text_changed| -* On leaving insert mode. (off by default) - |g:ale_lint_on_insert_leave| +* On leaving insert mode. - |g:ale_lint_on_insert_leave| * When you open a new or modified buffer. - |g:ale_lint_on_enter| * When you save a buffer. - |g:ale_lint_on_save| * When the filetype changes for a buffer. - |g:ale_lint_on_filetype_changed| @@ -953,7 +953,7 @@ g:ale_lint_on_save *g:ale_lint_on_save* g:ale_lint_on_text_changed *g:ale_lint_on_text_changed* Type: |String| - Default: `'always'` + Default: `'normal'` This option controls how ALE will check your files as you make changes. The following values can be used. @@ -978,6 +978,7 @@ g:ale_lint_on_text_changed *g:ale_lint_on_text_changed* g:ale_lint_on_insert_leave *g:ale_lint_on_insert_leave* + *b:ale_lint_on_insert_leave* Type: |Number| Default: `0` @@ -992,6 +993,10 @@ g:ale_lint_on_insert_leave *g:ale_lint_on_insert_leave* " Make using Ctrl+C do the same as Escape, to trigger autocmd commands inoremap < + A buffer-local version of this setting `b:ale_lint_on_insert_leave` can be + set to `0` to disable linting when leaving insert mode. The setting must + be enabled globally to be enabled locally. + You should set this setting once before ALE is loaded, and restart Vim if you want to change your preferences. See |ale-lint-settings-on-startup|. diff --git a/plugin/ale.vim b/plugin/ale.vim index cf39d632..7edf9a50 100644 --- a/plugin/ale.vim +++ b/plugin/ale.vim @@ -71,12 +71,12 @@ let g:ale_linter_aliases = get(g:, 'ale_linter_aliases', {}) let g:ale_lint_delay = get(g:, 'ale_lint_delay', 200) " This flag can be set to 'never' to disable linting when text is changed. -" This flag can also be set to 'insert' or 'normal' to lint when text is -" changed only in insert or normal mode respectively. -let g:ale_lint_on_text_changed = get(g:, 'ale_lint_on_text_changed', 'always') +" This flag can also be set to 'always' or 'insert' to lint when text is +" changed in both normal and insert mode, or only in insert mode respectively. +let g:ale_lint_on_text_changed = get(g:, 'ale_lint_on_text_changed', 'normal') " This flag can be set to 1 to enable linting when leaving insert mode. -let g:ale_lint_on_insert_leave = get(g:, 'ale_lint_on_insert_leave', 0) +let g:ale_lint_on_insert_leave = get(g:, 'ale_lint_on_insert_leave', 1) " This flag can be set to 0 to disable linting when the buffer is entered. let g:ale_lint_on_enter = get(g:, 'ale_lint_on_enter', 1) diff --git a/test/test_ale_info.vader b/test/test_ale_info.vader index c723dba3..decd49e9 100644 --- a/test/test_ale_info.vader +++ b/test/test_ale_info.vader @@ -31,8 +31,8 @@ Before: let g:ale_completion_enabled = 0 let g:ale_completion_max_suggestions = 50 let g:ale_history_log_output = 1 - let g:ale_lint_on_insert_leave = 0 - let g:ale_lint_on_text_changed = 'always' + let g:ale_lint_on_insert_leave = 1 + let g:ale_lint_on_text_changed = 'normal' let g:ale_lsp_error_messages = {} let g:ale_maximum_file_size = 0 let g:ale_pattern_options = {} @@ -88,9 +88,9 @@ Before: \ 'let g:ale_lint_delay = 200', \ 'let g:ale_lint_on_enter = 1', \ 'let g:ale_lint_on_filetype_changed = 1', - \ 'let g:ale_lint_on_insert_leave = 0', + \ 'let g:ale_lint_on_insert_leave = 1', \ 'let g:ale_lint_on_save = 1', - \ 'let g:ale_lint_on_text_changed = ''always''', + \ 'let g:ale_lint_on_text_changed = ''normal''', \ 'let g:ale_linter_aliases = {}', \ 'let g:ale_linters = {}', \ 'let g:ale_linters_explicit = 0', diff --git a/test/test_autocmd_commands.vader b/test/test_autocmd_commands.vader index 4bb894ba..241e7d3e 100644 --- a/test/test_autocmd_commands.vader +++ b/test/test_autocmd_commands.vader @@ -87,7 +87,7 @@ Execute (All events should be set up when everything is on): \ 'CursorMoved * if exists(''*ale#engine#Cleanup'') | call ale#cursor#EchoCursorWarningWithDelay() | endif', \ 'FileChangedShellPost * call ale#events#FileChangedEvent(str2nr(expand('''')))', \ 'FileType * call ale#events#FileTypeEvent( str2nr(expand('''')), expand(''''))', - \ 'InsertLeave * call ale#Queue(0)', + \ 'InsertLeave * if ale#Var(str2nr(expand('''')), ''lint_on_insert_leave'') | call ale#Queue(0) | endif', \ 'InsertLeave if exists(''*ale#engine#Cleanup'') | call ale#cursor#EchoCursorWarning() | endif', \ 'TextChanged * call ale#Queue(g:ale_lint_delay)', \ 'TextChangedI * call ale#Queue(g:ale_lint_delay)', @@ -158,7 +158,7 @@ Execute (g:ale_lint_on_insert_leave = 1 should bind InsertLeave): AssertEqual \ [ - \ 'InsertLeave * call ale#Queue(0)', + \ 'InsertLeave * if ale#Var(str2nr(expand('''')), ''lint_on_insert_leave'') | call ale#Queue(0) | endif', \ ], \ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^InsertLeave''') diff --git a/test/test_cursor_warnings.vader b/test/test_cursor_warnings.vader index 24652909..2a6156f0 100644 --- a/test/test_cursor_warnings.vader +++ b/test/test_cursor_warnings.vader @@ -1,6 +1,10 @@ Before: Save g:ale_echo_msg_format Save g:ale_echo_cursor + Save b:ale_lint_on_insert_leave + + let g:ale_echo_msg_format = '%code: %%s' + let b:ale_lint_on_insert_leave = 0 " We should prefer the error message at column 10 instead of the warning. let g:ale_buffer_info = { @@ -91,6 +95,9 @@ Before: return empty(l:lines) ? '' : l:lines[-1] endfunction + call ale#linter#Reset() + call ale#linter#PreventLoading('javascript') + After: Restore @@ -117,6 +124,8 @@ After: noautocmd :q! endif + call ale#linter#Reset() + Given javascript(A Javscript file with warnings/errors): var x = 3 + 12345678 var x = 5*2 + parseInt("10");