summaryrefslogtreecommitdiff
path: root/autoload/ale/autocmd.vim
blob: 8570adaa1c8e9407054e3376fb76e628185cea55 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
function! ale#autocmd#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!
        autocmd BufEnter,BufRead * call ale#pattern_options#SetOptions(str2nr(expand('<abuf>')))
    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!
        autocmd BufWritePost * call ale#events#SaveEvent(str2nr(expand('<abuf>')))
    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
        augroup! ALERunOnTextChangedGroup
        augroup! ALERunOnEnterGroup
        augroup! ALERunOnInsertLeave
        augroup! ALECursorGroup
    endif
endfunction