Before: Save &filetype let g:queue_calls = [] unlet! b:ale_lint_on_enter function! ale#Queue(...) call add(g:queue_calls, a:000) endfunction After: Restore unlet! b:ale_lint_on_enter unlet! g:queue_calls " Reload the ALE code to load the real function again. runtime autoload/ale.vim unlet! b:ale_original_filetype Execute(The original filetype should be set on BufEnter): let &filetype = 'foobar' call ale#events#EnterEvent(bufnr('')) AssertEqual 'foobar', b:ale_original_filetype let &filetype = 'bazboz' call ale#events#EnterEvent(bufnr('')) AssertEqual 'bazboz', b:ale_original_filetype Execute(Linting should not be queued when the filetype is the same): let b:ale_original_filetype = 'foobar' let g:queue_calls = [] call ale#events#FileTypeEvent(bufnr(''), 'foobar') AssertEqual [], g:queue_calls Execute(Linting should be queued when the filetype changes): let b:ale_original_filetype = 'foobar' let g:queue_calls = [] call ale#events#FileTypeEvent(bufnr(''), 'bazboz') AssertEqual [[300, 'lint_file', bufnr('')]], g:queue_calls Execute(Linting shouldn't be done when the original filetype was blank and linting on enter is off): let b:ale_lint_on_enter = 0 let b:ale_original_filetype = '' call ale#events#FileTypeEvent(bufnr(''), 'bazboz') AssertEqual [], g:queue_calls Execute(Linting should be done when the original filetype was blank and linting on enter is on): let b:ale_lint_on_enter = 1 let b:ale_original_filetype = '' call ale#events#FileTypeEvent(bufnr(''), 'bazboz') AssertEqual [[300, 'lint_file', bufnr('')]], g:queue_calls Execute(The new filetype should become the "original" one if the original was blank and linting on enter is off): let b:ale_lint_on_enter = 0 let b:ale_original_filetype = '' call ale#events#FileTypeEvent(bufnr(''), 'bazboz') AssertEqual 'bazboz', b:ale_original_filetype