Source code for eye.helpers.build_annotations
# this project is licensed under the WTFPLv2, see COPYING.txt for details
"""Editor annotations from builders
This plugin will add annotations to open editors when a builder emits a warning or an error.
When a builder starts, it clears annotations of all open editors of files under the working directory of the builder.
The global styles `"builder/warning"` and `"builder/error"` are used for annotations. The styles are accessed with
:any:`eye.helpers.styles`.
"""
import os
from eye.connector import register_signal, category_objects, disabled
from eye.helpers.buffers import find_editor
from eye.helpers.styles import STYLES
from eye.pathutils import is_in
__all__ = ('set_enabled',)
def editors_for_project(path):
path = os.path.dirname(path)
for ed in category_objects('editor'):
if is_in(ed.path, path):
yield ed
@register_signal('builder', 'started')
@disabled
def on_build_start(builder):
for ed in editors_for_project(builder.working_directory()):
ed.clearAnnotations()
@register_signal('builder', 'warning_printed')
@disabled
def on_build_warning(builder, info):
annotate(builder, info, 'warning')
@register_signal('builder', 'error_printed')
@disabled
def on_build_error(builder, info):
annotate(builder, info, 'error')
def annotate(builder, info, msg_type):
ed = find_editor(info['path'])
if ed is None:
return
style = STYLES['builder/%s' % msg_type]
ed.annotate_append_line(info['line'] - 1, info['message'], style)
[docs]
def set_enabled(enabled=True):
"""Enable or disable the plugin"""
on_build_start.enabled = enabled
on_build_error.enabled = enabled
on_build_warning.enabled = enabled