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_command_exists 10from powerline.theme import requires_segment_info 11 12# coc_status's format: E1 W2 13def parse_coc_status(coc_status): 14 # type(coc_status) is tuple 15 errors_count = 0 16 warnings_count = 0 17 if len(coc_status) <= 0: 18 return errors_count, warnings_count 19 status_str = coc_status[0] 20 if len(status_str) <= 0: 21 return errors_count, warnings_count 22 status_list = status_str.split(' ') 23 for item in status_list: 24 if len(item) > 0 and item[0] == 'E': 25 errors_count = int(item[1:]) 26 if len(item) > 0 and item[0] == 'W': 27 warnings_count = int(item[1:]) 28 return errors_count, warnings_count 29 30@requires_segment_info 31def coc(segment_info, pl): 32 '''Show whether coc.nvim has found any errors or warnings 33 34 Highlight groups used: ``coc:warning`` or ``warning``, ``coc:error`` or ``error``. 35 ''' 36 segments = [] 37 if not vim_command_exists('CocCommand'): 38 return segments 39 coc_status = vim.eval('coc#status()'), 40 errors_count, warnings_count = parse_coc_status(coc_status) 41 if errors_count > 0: 42 segments.append({ 43 'contents': 'E:' + str(errors_count), 44 'highlight_groups': ['coc:error', 'error'], 45 }) 46 if warnings_count > 0: 47 segments.append({ 48 'contents': 'W:' + str(warnings_count), 49 'highlight_groups': ['coc:warning', 'warning'], 50 }) 51 return segments 52