2018-01-05 17:37:59 +08:00
|
|
|
" MIT License. Copyright (c) 2013-2018 Bjorn Neergaard, w0rp et al.
|
2016-10-10 09:27:51 +08:00
|
|
|
" vim: et ts=2 sts=2 sw=2
|
|
|
|
|
2018-01-05 17:18:22 +08:00
|
|
|
scriptencoding utf-8
|
|
|
|
|
2016-10-10 09:27:51 +08:00
|
|
|
let s:error_symbol = get(g:, 'airline#extensions#ale#error_symbol', 'E:')
|
|
|
|
let s:warning_symbol = get(g:, 'airline#extensions#ale#warning_symbol', 'W:')
|
2018-03-19 18:28:45 +08:00
|
|
|
let s:show_line_numbers = get(g:, 'airline#extensions#ale#show_line_numbers', 1)
|
2016-10-10 09:27:51 +08:00
|
|
|
|
2017-06-27 19:52:48 +08:00
|
|
|
function! s:airline_ale_count(cnt, symbol)
|
|
|
|
return a:cnt ? a:symbol. a:cnt : ''
|
|
|
|
endfunction
|
|
|
|
|
2017-11-17 02:08:41 +08:00
|
|
|
function! s:airline_ale_get_line_number(cnt, type) abort
|
|
|
|
if a:cnt == 0
|
|
|
|
return ''
|
|
|
|
endif
|
|
|
|
|
|
|
|
let buffer = bufnr('')
|
|
|
|
let problem_type = (a:type ==# 'error') ? 'E' : 'W'
|
|
|
|
let problems = copy(ale#engine#GetLoclist(buffer))
|
|
|
|
|
|
|
|
call filter(problems, 'v:val.bufnr is buffer && v:val.type is# problem_type')
|
|
|
|
|
|
|
|
if empty(problems)
|
|
|
|
return ''
|
|
|
|
endif
|
|
|
|
|
|
|
|
let open_lnum_symbol = get(g:, 'airline#extensions#ale#open_lnum_symbol', '(L')
|
|
|
|
let close_lnum_symbol = get(g:, 'airline#extensions#ale#close_lnum_symbol', ')')
|
|
|
|
|
|
|
|
return open_lnum_symbol . problems[0].lnum . close_lnum_symbol
|
|
|
|
endfunction
|
|
|
|
|
2017-06-26 02:49:18 +08:00
|
|
|
function! airline#extensions#ale#get(type)
|
|
|
|
if !exists(':ALELint')
|
|
|
|
return ''
|
|
|
|
endif
|
|
|
|
|
2017-06-27 19:52:48 +08:00
|
|
|
let is_err = a:type ==# 'error'
|
|
|
|
let symbol = is_err ? s:error_symbol : s:warning_symbol
|
|
|
|
|
|
|
|
let is_err = a:type ==# 'error'
|
|
|
|
let counts = ale#statusline#Count(bufnr(''))
|
|
|
|
let symbol = is_err ? s:error_symbol : s:warning_symbol
|
|
|
|
|
|
|
|
if type(counts) == type({}) && has_key(counts, 'error')
|
2017-06-26 02:49:18 +08:00
|
|
|
" Use the current Dictionary format.
|
2017-06-27 19:52:48 +08:00
|
|
|
let errors = counts.error + counts.style_error
|
|
|
|
let num = is_err ? errors : counts.total - errors
|
2016-10-10 09:27:51 +08:00
|
|
|
else
|
2017-06-26 02:49:18 +08:00
|
|
|
" Use the old List format.
|
2017-06-27 19:52:48 +08:00
|
|
|
let num = is_err ? counts[0] : counts[1]
|
2016-10-10 09:27:51 +08:00
|
|
|
endif
|
|
|
|
|
2018-03-19 18:28:45 +08:00
|
|
|
if s:show_line_numbers == 1
|
|
|
|
return s:airline_ale_count(num, symbol) . <sid>airline_ale_get_line_number(num, a:type)
|
|
|
|
else
|
|
|
|
return s:airline_ale_count(num, symbol)
|
|
|
|
endif
|
2016-10-10 09:27:51 +08:00
|
|
|
endfunction
|
|
|
|
|
2017-06-21 04:23:46 +08:00
|
|
|
function! airline#extensions#ale#get_warning()
|
|
|
|
return airline#extensions#ale#get('warning')
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! airline#extensions#ale#get_error()
|
|
|
|
return airline#extensions#ale#get('error')
|
|
|
|
endfunction
|
|
|
|
|
2016-10-10 09:27:51 +08:00
|
|
|
function! airline#extensions#ale#init(ext)
|
2017-06-21 04:23:46 +08:00
|
|
|
call airline#parts#define_function('ale_error_count', 'airline#extensions#ale#get_error')
|
|
|
|
call airline#parts#define_function('ale_warning_count', 'airline#extensions#ale#get_warning')
|
2017-08-26 19:00:40 +08:00
|
|
|
augroup airline_ale
|
|
|
|
autocmd!
|
|
|
|
autocmd CursorHold,BufWritePost * call <sid>ale_refresh()
|
|
|
|
augroup END
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! s:ale_refresh()
|
|
|
|
if get(g:, 'airline_skip_empty_sections', 0)
|
|
|
|
exe ':AirlineRefresh'
|
|
|
|
endif
|
2016-10-10 09:27:51 +08:00
|
|
|
endfunction
|