1# vim:fileencoding=utf-8:noet
2from __future__ import (unicode_literals, division, absolute_import, print_function)
3
4try:
5	import vim
6except ImportError:
7	vim = object()
8
9from powerline.bindings.vim import vim_global_exists
10from powerline.theme import requires_segment_info
11
12
13@requires_segment_info
14def ale(segment_info, pl, err_format='ERR: ln {first_line} ({num}) ', warn_format='WARN: ln {first_line} ({num}) '):
15	'''Show whether ALE has found any errors or warnings
16
17	:param str err_format:
18		Format string for errors.
19
20	:param str warn_format:
21		Format string for warnings.
22
23	Highlight groups used: ``ale:warning`` or ``warning``, ``ale:error`` or ``error``.
24	'''
25	if not (vim_global_exists('ale_enabled') and int(vim.eval('g:ale_enabled'))):
26		return None
27	has_errors = int(vim.eval('ale#statusline#Count(' + str(segment_info['bufnr']) + ').total'))
28	if not has_errors:
29		return
30	error = None
31	warning = None
32	errors_count = 0
33	warnings_count = 0
34	for issue in vim.eval('ale#engine#GetLoclist(' + str(segment_info['bufnr']) + ')'):
35		if issue['type'] == 'E':
36			error = error or issue
37			errors_count += 1
38		elif issue['type'] == 'W':
39			warning = warning or issue
40			warnings_count += 1
41	segments = []
42	if error:
43		segments.append({
44			'contents': err_format.format(first_line=error['lnum'], num=errors_count),
45			'highlight_groups': ['ale:error', 'error'],
46		})
47	if warning:
48		segments.append({
49			'contents': warn_format.format(first_line=warning['lnum'], num=warnings_count),
50			'highlight_groups': ['ale:warning', 'warning'],
51		})
52	return segments
53