|
19 | 19 | import functools
|
20 | 20 | import sublime
|
21 | 21 |
|
22 |
| -DIAGNOSTIC_TAG_VALUES = [v for (k, v) in DiagnosticTag.__dict__.items() if not k.startswith('_')] |
| 22 | +DIAGNOSTIC_TAG_VALUES = [v for (k, v) in DiagnosticTag.__dict__.items() if not k.startswith('_')] # type: List[int] |
23 | 23 | HOVER_HIGHLIGHT_KEY = "lsp_hover_highlight"
|
24 | 24 |
|
25 | 25 |
|
| 26 | +class TagData: |
| 27 | + __slots__ = ('key', 'regions', 'scope') |
| 28 | + |
| 29 | + def __init__(self, key: str, regions: List[sublime.Region] = [], scope: str = '') -> None: |
| 30 | + self.key = key |
| 31 | + self.regions = regions |
| 32 | + self.scope = scope |
| 33 | + |
| 34 | + |
26 | 35 | class SessionView:
|
27 | 36 | """
|
28 | 37 | Holds state per session per view.
|
@@ -286,24 +295,28 @@ def present_diagnostics_async(self, is_view_visible: bool) -> None:
|
286 | 295 | def _draw_diagnostics(self, severity: int, max_severity_level: int, flags: int, multiline: bool) -> None:
|
287 | 296 | ICON_FLAGS = sublime.HIDE_ON_MINIMAP | sublime.DRAW_NO_FILL | sublime.DRAW_NO_OUTLINE
|
288 | 297 | key = self.diagnostics_key(severity, multiline)
|
289 |
| - key_tags = {tag: '{}_tags_{}'.format(key, tag) for tag in DIAGNOSTIC_TAG_VALUES} |
290 |
| - for key_tag in key_tags.values(): |
291 |
| - self.view.erase_regions(key_tag) |
| 298 | + tags = {tag: TagData('{}_tags_{}'.format(key, tag)) for tag in DIAGNOSTIC_TAG_VALUES} |
292 | 299 | data = self.session_buffer.data_per_severity.get((severity, multiline))
|
293 | 300 | if data and severity <= max_severity_level:
|
294 | 301 | non_tag_regions = data.regions
|
295 | 302 | for tag, regions in data.regions_with_tag.items():
|
296 | 303 | tag_scope = self.diagnostics_tag_scope(tag)
|
297 | 304 | # Trick to only add tag regions if there is a corresponding color scheme scope defined.
|
298 | 305 | if tag_scope and 'background' in self.view.style_for_scope(tag_scope):
|
299 |
| - self.view.add_regions(key_tags[tag], regions, tag_scope, flags=sublime.DRAW_NO_OUTLINE) |
| 306 | + tags[tag].regions = regions |
| 307 | + tags[tag].scope = tag_scope |
300 | 308 | else:
|
301 | 309 | non_tag_regions.extend(regions)
|
302 | 310 | self.view.add_regions("{}_icon".format(key), non_tag_regions, data.scope, data.icon, ICON_FLAGS)
|
303 | 311 | self.view.add_regions("{}_underline".format(key), non_tag_regions, data.scope, "", flags)
|
304 | 312 | else:
|
305 | 313 | self.view.erase_regions("{}_icon".format(key))
|
306 | 314 | self.view.erase_regions("{}_underline".format(key))
|
| 315 | + for data in tags.values(): |
| 316 | + if data.regions: |
| 317 | + self.view.add_regions(data.key, data.regions, data.scope, flags=sublime.DRAW_NO_OUTLINE) |
| 318 | + else: |
| 319 | + self.view.erase_regions(data.key) |
307 | 320 |
|
308 | 321 | def on_request_started_async(self, request_id: int, request: Request) -> None:
|
309 | 322 | self._active_requests[request_id] = ActiveRequest(self, request_id, request)
|
|
0 commit comments