summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortaylorskalyo <taylorskalyo@users.noreply.github.com>2017-03-30 18:21:37 -0400
committerw0rp <w0rp@users.noreply.github.com>2017-03-30 23:21:37 +0100
commit36f9631512fe164ae115c4a216d3cddbf81e6daa (patch)
tree053e4741faeb285bf34d880a539c803f789f67ee
parent3a74d242f9b2b09dd066e5cfd6ed9a0149395b87 (diff)
downloadale-36f9631512fe164ae115c4a216d3cddbf81e6daa.zip
Add options to facilitate linting only in normal mode (#425)
* [#420] Add options to facilitate linting only in normal mode ale_lint_on_text_changed: Allow setting to 'insert' or 'normal' to lint when text is changed only in insert or normal mode respectively. ale_lint_on_insert_leave: This flag can be set to 1 to enable linting when leaving insert mode. * [#420] Test updated global options Ale should - bind to TextChanged events when g:ale_lint_on_text_changed = 1 - bind to TextChanged events when g:ale_lint_on_text_changed = 'always' - bind to InsertLeave event when g:ale_lint_on_insert_leave = 1
-rw-r--r--README.md10
-rw-r--r--doc/ale.txt20
-rw-r--r--plugin/ale.vim33
-rw-r--r--test/test_ale_info.vader2
-rw-r--r--test/test_ale_init_au_groups.vader66
5 files changed, 113 insertions, 18 deletions
diff --git a/README.md b/README.md
index e9eaf3b1..f7ec48bc 100644
--- a/README.md
+++ b/README.md
@@ -368,7 +368,7 @@ options off.
```vim
" Write this in your vimrc file
-let g:ale_lint_on_text_changed = 0
+let g:ale_lint_on_text_changed = 'never'
" You can disable this option too
" if you don't want linters to run on opening a file
let g:ale_lint_on_enter = 0
@@ -453,10 +453,10 @@ 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 `0`. 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.
+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 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/doc/ale.txt b/doc/ale.txt
index af8e39d3..4aac58c0 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -286,7 +286,7 @@ g:ale_lint_delay *g:ale_lint_delay*
This variable controls the milliseconds delay after which the linters will
be run after text is changed. This option is only meaningful with the
- |g:ale_lint_on_text_changed| variable set to `1`.
+ |g:ale_lint_on_text_changed| variable set to `always`, `insert`, or `normal`.
g:ale_lint_on_enter *g:ale_lint_on_enter*
@@ -325,17 +325,27 @@ g:ale_lint_on_save *g:ale_lint_on_save*
g:ale_lint_on_text_changed *g:ale_lint_on_text_changed*
- Type: |Number|
- Default: `1`
+ Type: |String|
+ Default: `always`
By default, ALE will check files with the various supported programs when
text is changed by using the |TextChanged| event. If this behaviour is not
- desired, then this option can be disabled by setting it to 0. The
+ desired, then this option can be disabled by setting it to `never`. The
|g:ale_lint_delay| variable will be used to set a |timer_start()| on a
delay, and each change to a file will continue to call |timer_stop()| and
|timer_start()| repeatedly until the timer ticks by, and the linters will be
run. The checking of files will run in the background, so it should not
- inhibit editing files.
+ inhibit editing files. This option can also be set to `insert` or `normal`
+ to lint when text is changed only in insert or normal mode respectively.
+
+
+g:ale_lint_on_insert_leave *g:ale_lint_on_insert_leave*
+
+ Type: |Number|
+ Default: `0`
+
+ This option will make ALE run the linters whenever leaving insert mode when
+ it it set to `1` in your vimrc file.
g:ale_linter_aliases *g:ale_linter_aliases*
diff --git a/plugin/ale.vim b/plugin/ale.vim
index d728854c..6c044e8f 100644
--- a/plugin/ale.vim
+++ b/plugin/ale.vim
@@ -69,8 +69,13 @@ let g:ale_linter_aliases = get(g:, 'ale_linter_aliases', {})
" jobs for linting until enough time has passed after editing is done.
let g:ale_lint_delay = get(g:, 'ale_lint_delay', 200)
-" This flag can be set to 0 to disable linting when text is changed.
-let g:ale_lint_on_text_changed = get(g:, 'ale_lint_on_text_changed', 1)
+" 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 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)
" 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)
@@ -149,11 +154,17 @@ let g:ale_history_enabled = get(g:, 'ale_history_enabled', 1)
" A flag for storing the full output of commands in the history.
let g:ale_history_log_output = get(g:, 'ale_history_log_output', 0)
-function! s:ALEInitAuGroups() abort
+function! ALEInitAuGroups() abort
augroup ALERunOnTextChangedGroup
autocmd!
- if g:ale_enabled && g:ale_lint_on_text_changed
- autocmd TextChanged,TextChangedI * call ale#Queue(g:ale_lint_delay)
+ if g:ale_enabled
+ if g:ale_lint_on_text_changed ==? 'always' || g:ale_lint_on_text_changed == 1
+ autocmd TextChanged,TextChangedI * call ale#Queue(g:ale_lint_delay)
+ elseif g:ale_lint_on_text_changed ==? 'normal'
+ autocmd TextChanged * call ale#Queue(g:ale_lint_delay)
+ elseif g:ale_lint_on_text_changed ==? 'insert'
+ autocmd TextChangedI * call ale#Queue(g:ale_lint_delay)
+ endif
endif
augroup END
@@ -178,6 +189,13 @@ function! s:ALEInitAuGroups() abort
endif
augroup END
+ augroup ALERunOnInsertLeave
+ autocmd!
+ if g:ale_enabled && g:ale_lint_on_insert_leave
+ autocmd InsertLeave * call ale#Queue(0, 'lint_file')
+ endif
+ augroup END
+
augroup ALECursorGroup
autocmd!
if g:ale_enabled && g:ale_echo_cursor
@@ -193,6 +211,7 @@ function! s:ALEInitAuGroups() abort
augroup! ALERunOnTextChangedGroup
augroup! ALERunOnEnterGroup
augroup! ALERunOnSaveGroup
+ augroup! ALERunOnInsertLeave
augroup! ALECursorGroup
endif
endfunction
@@ -219,10 +238,10 @@ function! s:ALEToggle() abort
endif
endif
- call s:ALEInitAuGroups()
+ call ALEInitAuGroups()
endfunction
-call s:ALEInitAuGroups()
+call ALEInitAuGroups()
" Define commands for moving through warnings and errors.
command! -bar ALEPrevious :call ale#loclist_jumping#Jump('before', 0)
diff --git a/test/test_ale_info.vader b/test/test_ale_info.vader
index 6dd6afee..d5a8ed62 100644
--- a/test/test_ale_info.vader
+++ b/test/test_ale_info.vader
@@ -19,7 +19,7 @@ Before:
\ 'let g:ale_lint_delay = 200',
\ 'let g:ale_lint_on_enter = 1',
\ 'let g:ale_lint_on_save = 1',
- \ 'let g:ale_lint_on_text_changed = 1',
+ \ 'let g:ale_lint_on_text_changed = ''always''',
\ 'let g:ale_linter_aliases = {}',
\ 'let g:ale_linters = {}',
\ 'let g:ale_open_list = 0',
diff --git a/test/test_ale_init_au_groups.vader b/test/test_ale_init_au_groups.vader
new file mode 100644
index 00000000..bcefabe1
--- /dev/null
+++ b/test/test_ale_init_au_groups.vader
@@ -0,0 +1,66 @@
+Before:
+ Save g:ale_lint_on_text_changed
+ Save g:ale_lint_on_insert_leave
+ autocmd!
+
+After:
+ Restore g:ale_lint_on_text_changed
+ Restore g:ale_lint_on_insert_leave
+ unlet! g:output
+ unlet! g:expected_autocmd
+ autocmd!
+
+Execute (ALE should bind to TextChanged events when g:ale_lint_on_text_changed = 1):
+ let g:expected_autocmd = join([
+ \ '',
+ \ '--- Auto-Commands ---',
+ \ 'ALERunOnTextChangedGroup TextChanged',
+ \ ' * call ale#Queue(g:ale_lint_delay)',
+ \ 'ALERunOnTextChangedGroup TextChangedI',
+ \ ' * call ale#Queue(g:ale_lint_delay)',
+ \], "\n")
+
+ let g:ale_lint_on_text_changed = 1
+ call ALEInitAuGroups()
+
+ redir => g:output
+ autocmd ALERunOnTextChangedGroup TextChanged,TextChangedI *
+ redir END
+
+ AssertEqual g:expected_autocmd, g:output
+
+Execute (ALE should bind to TextChanged events when g:ale_lint_on_text_changed = 'always'):
+ let g:expected_autocmd = join([
+ \ '',
+ \ '--- Auto-Commands ---',
+ \ 'ALERunOnTextChangedGroup TextChanged',
+ \ ' * call ale#Queue(g:ale_lint_delay)',
+ \ 'ALERunOnTextChangedGroup TextChangedI',
+ \ ' * call ale#Queue(g:ale_lint_delay)',
+ \], "\n")
+
+ let g:ale_lint_on_text_changed = 'always'
+ call ALEInitAuGroups()
+
+ redir => g:output
+ autocmd ALERunOnTextChangedGroup TextChanged,TextChangedI *
+ redir END
+
+ AssertEqual g:expected_autocmd, g:output
+
+Execute (ALE should bind to InsertLeave event when g:ale_lint_on_insert_leave = 1):
+ let g:expected_autocmd = join([
+ \ "",
+ \ "--- Auto-Commands ---",
+ \ "ALERunOnInsertLeave InsertLeave",
+ \ " * call ale#Queue(0, 'lint_file')",
+ \], "\n")
+
+ let g:ale_lint_on_insert_leave = 1
+ call ALEInitAuGroups()
+
+ redir => g:output
+ autocmd ALERunOnInsertLeave InsertLeave *
+ redir END
+
+ AssertEqual g:expected_autocmd, g:output