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