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