summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale/toggle.vim140
-rw-r--r--plugin/ale.vim140
-rw-r--r--test/test_ale_toggle.vader29
-rw-r--r--test/test_autocmd_commands.vader5
4 files changed, 178 insertions, 136 deletions
diff --git a/autoload/ale/toggle.vim b/autoload/ale/toggle.vim
new file mode 100644
index 00000000..acddea4b
--- /dev/null
+++ b/autoload/ale/toggle.vim
@@ -0,0 +1,140 @@
+function! ale#toggle#InitAuGroups() abort
+ " This value used to be a Boolean as a Number, and is now a String.
+ let l:text_changed = '' . g:ale_lint_on_text_changed
+
+ augroup ALEPatternOptionsGroup
+ autocmd!
+ if g:ale_enabled && g:ale_pattern_options_enabled
+ autocmd BufEnter,BufRead * call ale#pattern_options#SetOptions()
+ endif
+ augroup END
+
+ augroup ALERunOnTextChangedGroup
+ autocmd!
+ if g:ale_enabled
+ if l:text_changed is? 'always' || l:text_changed is# '1'
+ autocmd TextChanged,TextChangedI * call ale#Queue(g:ale_lint_delay)
+ elseif l:text_changed is? 'normal'
+ autocmd TextChanged * call ale#Queue(g:ale_lint_delay)
+ elseif l:text_changed is? 'insert'
+ autocmd TextChangedI * call ale#Queue(g:ale_lint_delay)
+ endif
+ endif
+ augroup END
+
+ augroup ALERunOnEnterGroup
+ autocmd!
+ if g:ale_enabled
+ " Handle everything that needs to happen when buffers are entered.
+ autocmd BufEnter * call ale#events#EnterEvent(str2nr(expand('<abuf>')))
+ endif
+ if g:ale_enabled && g:ale_lint_on_enter
+ autocmd BufWinEnter,BufRead * call ale#Queue(0, 'lint_file', str2nr(expand('<abuf>')))
+ " Track when the file is changed outside of Vim.
+ autocmd FileChangedShellPost * call ale#events#FileChangedEvent(str2nr(expand('<abuf>')))
+ endif
+ augroup END
+
+ augroup ALERunOnFiletypeChangeGroup
+ autocmd!
+ if g:ale_enabled && g:ale_lint_on_filetype_changed
+ " Only start linting if the FileType actually changes after
+ " opening a buffer. The FileType will fire when buffers are opened.
+ autocmd FileType * call ale#events#FileTypeEvent(
+ \ str2nr(expand('<abuf>')),
+ \ expand('<amatch>')
+ \)
+ endif
+ augroup END
+
+ augroup ALERunOnSaveGroup
+ autocmd!
+ if (g:ale_enabled && g:ale_lint_on_save) || g:ale_fix_on_save
+ autocmd BufWritePost * call ale#events#SaveEvent(str2nr(expand('<abuf>')))
+ endif
+ augroup END
+
+ augroup ALERunOnInsertLeave
+ autocmd!
+ if g:ale_enabled && g:ale_lint_on_insert_leave
+ autocmd InsertLeave * call ale#Queue(0)
+ endif
+ augroup END
+
+ augroup ALECursorGroup
+ autocmd!
+ if g:ale_enabled && g:ale_echo_cursor
+ autocmd CursorMoved,CursorHold * call ale#cursor#EchoCursorWarningWithDelay()
+ " Look for a warning to echo as soon as we leave Insert mode.
+ " The script's position variable used when moving the cursor will
+ " not be changed here.
+ autocmd InsertLeave * call ale#cursor#EchoCursorWarning()
+ endif
+ augroup END
+
+ if !g:ale_enabled
+ if !g:ale_fix_on_save
+ augroup! ALERunOnSaveGroup
+ endif
+
+ augroup! ALEPatternOptionsGroup
+ augroup! ALERunOnTextChangedGroup
+ augroup! ALERunOnEnterGroup
+ augroup! ALERunOnInsertLeave
+ augroup! ALECursorGroup
+ endif
+endfunction
+
+function! ale#toggle#Toggle() abort
+ let g:ale_enabled = !get(g:, 'ale_enabled')
+
+ if g:ale_enabled
+ " Set pattern options again, if enabled.
+ if g:ale_pattern_options_enabled
+ call ale#pattern_options#SetOptions()
+ endif
+
+ " Lint immediately, including running linters against the file.
+ call ale#Queue(0, 'lint_file')
+
+ if g:ale_set_balloons
+ call ale#balloon#Enable()
+ endif
+ else
+ for l:key in keys(g:ale_buffer_info)
+ " The key could be a filename or a buffer number, so try and
+ " convert it to a number. We need a number for the other
+ " functions.
+ let l:buffer = str2nr(l:key)
+
+ if l:buffer > 0
+ " Stop all jobs and clear the results for everything, and delete
+ " all of the data we stored for the buffer.
+ call ale#engine#Cleanup(l:buffer)
+ endif
+ endfor
+
+ " Remove highlights for the current buffer now.
+ if g:ale_set_highlights
+ call ale#highlight#UpdateHighlights()
+ endif
+
+ if g:ale_set_balloons
+ call ale#balloon#Disable()
+ endif
+ endif
+
+ call ale#toggle#InitAuGroups()
+endfunction
+
+function! ale#toggle#Enable() abort
+ if !g:ale_enabled
+ call ale#toggle#Toggle()
+ endif
+endfunction
+
+function! ale#toggle#Disable() abort
+ if g:ale_enabled
+ call ale#toggle#Toggle()
+ endif
+endfunction
diff --git a/plugin/ale.vim b/plugin/ale.vim
index 23e8572a..83ca2dd0 100644
--- a/plugin/ale.vim
+++ b/plugin/ale.vim
@@ -201,137 +201,6 @@ call ale#Set('completion_enabled', 0)
call ale#Set('completion_delay', 100)
call ale#Set('completion_max_suggestions', 50)
-function! ALEInitAuGroups() abort
- " This value used to be a Boolean as a Number, and is now a String.
- let l:text_changed = '' . g:ale_lint_on_text_changed
-
- augroup ALEPatternOptionsGroup
- autocmd!
- if g:ale_enabled && g:ale_pattern_options_enabled
- autocmd BufEnter,BufRead * call ale#pattern_options#SetOptions()
- endif
- augroup END
-
- augroup ALERunOnTextChangedGroup
- autocmd!
- if g:ale_enabled
- if l:text_changed is? 'always' || l:text_changed is# '1'
- autocmd TextChanged,TextChangedI * call ale#Queue(g:ale_lint_delay)
- elseif l:text_changed is? 'normal'
- autocmd TextChanged * call ale#Queue(g:ale_lint_delay)
- elseif l:text_changed is? 'insert'
- autocmd TextChangedI * call ale#Queue(g:ale_lint_delay)
- endif
- endif
- augroup END
-
- augroup ALERunOnEnterGroup
- autocmd!
- if g:ale_enabled
- " Handle everything that needs to happen when buffers are entered.
- autocmd BufEnter * call ale#events#EnterEvent(str2nr(expand('<abuf>')))
- endif
- if g:ale_enabled && g:ale_lint_on_enter
- autocmd BufWinEnter,BufRead * call ale#Queue(0, 'lint_file', str2nr(expand('<abuf>')))
- " Track when the file is changed outside of Vim.
- autocmd FileChangedShellPost * call ale#events#FileChangedEvent(str2nr(expand('<abuf>')))
- endif
- augroup END
-
- augroup ALERunOnFiletypeChangeGroup
- autocmd!
- if g:ale_enabled && g:ale_lint_on_filetype_changed
- " Only start linting if the FileType actually changes after
- " opening a buffer. The FileType will fire when buffers are opened.
- autocmd FileType * call ale#events#FileTypeEvent(
- \ str2nr(expand('<abuf>')),
- \ expand('<amatch>')
- \)
- endif
- augroup END
-
- augroup ALERunOnSaveGroup
- autocmd!
- if (g:ale_enabled && g:ale_lint_on_save) || g:ale_fix_on_save
- autocmd BufWritePost * call ale#events#SaveEvent(str2nr(expand('<abuf>')))
- endif
- augroup END
-
- augroup ALERunOnInsertLeave
- autocmd!
- if g:ale_enabled && g:ale_lint_on_insert_leave
- autocmd InsertLeave * call ale#Queue(0)
- endif
- augroup END
-
- augroup ALECursorGroup
- autocmd!
- if g:ale_enabled && g:ale_echo_cursor
- autocmd CursorMoved,CursorHold * call ale#cursor#EchoCursorWarningWithDelay()
- " Look for a warning to echo as soon as we leave Insert mode.
- " The script's position variable used when moving the cursor will
- " not be changed here.
- autocmd InsertLeave * call ale#cursor#EchoCursorWarning()
- endif
- augroup END
-
- if !g:ale_enabled
- if !g:ale_fix_on_save
- augroup! ALERunOnSaveGroup
- endif
-
- augroup! ALEPatternOptionsGroup
- augroup! ALERunOnTextChangedGroup
- augroup! ALERunOnEnterGroup
- augroup! ALERunOnInsertLeave
- augroup! ALECursorGroup
- endif
-endfunction
-
-function! s:ALEToggle() abort
- let g:ale_enabled = !get(g:, 'ale_enabled')
-
- if g:ale_enabled
- " Set pattern options again, if enabled.
- if g:ale_pattern_options_enabled
- call ale#pattern_options#SetOptions()
- endif
-
- " Lint immediately, including running linters against the file.
- call ale#Queue(0, 'lint_file')
-
- if g:ale_set_balloons
- call ale#balloon#Enable()
- endif
- else
- for l:key in keys(g:ale_buffer_info)
- " The key could be a filename or a buffer number, so try and
- " convert it to a number. We need a number for the other
- " functions.
- let l:buffer = str2nr(l:key)
-
- if l:buffer > 0
- " Stop all jobs and clear the results for everything, and delete
- " all of the data we stored for the buffer.
- call ale#engine#Cleanup(l:buffer)
- endif
- endfor
-
- " Remove highlights for the current buffer now.
- if g:ale_set_highlights
- call ale#highlight#UpdateHighlights()
- endif
-
- if g:ale_set_balloons
- call ale#balloon#Disable()
- endif
- endif
-
- call ALEInitAuGroups()
-endfunction
-
-call ALEInitAuGroups()
-
if g:ale_set_balloons
call ale#balloon#Enable()
endif
@@ -352,9 +221,9 @@ command! -bar ALELast :call ale#loclist_jumping#JumpToIndex(-1)
command! -bar ALEDetail :call ale#cursor#ShowCursorDetail()
" Define commands for turning ALE on or off.
-command! -bar ALEToggle :call s:ALEToggle()
-command! -bar ALEEnable :if !g:ale_enabled | ALEToggle | endif
-command! -bar ALEDisable :if g:ale_enabled | ALEToggle | endif
+command! -bar ALEToggle :call ale#toggle#Toggle()
+command! -bar ALEEnable :call ale#toggle#Enable()
+command! -bar ALEDisable :call ale#toggle#Disable()
" A command for linting manually.
command! -bar ALELint :call ale#Queue(0, 'lint_file')
@@ -381,6 +250,9 @@ nnoremap <silent> <Plug>(ale_lint) :ALELint<Return>
nnoremap <silent> <Plug>(ale_detail) :ALEDetail<Return>
nnoremap <silent> <Plug>(ale_fix) :ALEFix<Return>
+" Set up autocmd groups now.
+call ale#toggle#InitAuGroups()
+
" Housekeeping
augroup ALECleanupGroup
diff --git a/test/test_ale_toggle.vader b/test/test_ale_toggle.vader
index f3dbf102..733ae35d 100644
--- a/test/test_ale_toggle.vader
+++ b/test/test_ale_toggle.vader
@@ -2,6 +2,7 @@ Before:
Save g:ale_buffer_info
Save g:ale_set_signs
Save g:ale_set_lists_synchronously
+ Save g:ale_run_synchronously
let g:ale_set_signs = 1
let g:ale_set_lists_synchronously = 1
@@ -175,3 +176,31 @@ Execute(ALEToggle should skip filename keys and preserve them):
\ 'history': [],
\ },
\ get(g:ale_buffer_info, '/foo/bar/baz.txt', {})
+
+Execute(ALEDisable should reset everything and stay disabled):
+ " We can just lint sychronously for these tests.
+ let g:ale_run_synchronously = 1
+
+ call ale#Lint()
+
+ AssertEqual g:expected_loclist, getloclist(0)
+
+ ALEDisable
+
+ AssertEqual [], getloclist(0)
+ AssertEqual 0, g:ale_enabled
+
+ ALEDisable
+
+ AssertEqual [], getloclist(0)
+ AssertEqual 0, g:ale_enabled
+
+Execute(ALEEnable should enable ALE and lint again):
+ " We can just lint sychronously for these tests.
+ let g:ale_enabled = 0
+ let g:ale_run_synchronously = 1
+
+ ALEEnable
+
+ AssertEqual g:expected_loclist, getloclist(0)
+ AssertEqual 1, g:ale_enabled
diff --git a/test/test_autocmd_commands.vader b/test/test_autocmd_commands.vader
index 17e3b16d..6bc3f5cd 100644
--- a/test/test_autocmd_commands.vader
+++ b/test/test_autocmd_commands.vader
@@ -1,6 +1,7 @@
Before:
function! CheckAutocmd(group)
- call ALEInitAuGroups()
+ call ale#toggle#InitAuGroups()
+
redir => l:output
execute 'silent! autocmd ' . a:group
redir END
@@ -58,7 +59,7 @@ After:
call ale#completion#Disable()
endif
- call ALEInitAuGroups()
+ call ale#toggle#InitAuGroups()
Execute (g:ale_lint_on_text_changed = 0 should bind no events):
let g:ale_lint_on_text_changed = 0