def add_regions(self, view: sublime.View, items: List[DiagnosticItem]): """add region to view""" # clean region in view self.erase_regions(view) err_region = [ item.get_region(view) for item in items if item.severity == "error" ] warn_region = [ item.get_region(view) for item in items if item.severity == "warning" ] info_region = [ item.get_region(view) for item in items if item.severity == "info" ] hint_region = [ item.get_region(view) for item in items if item.severity == "hint" ] for key_map, region in enumerate( (hint_region, info_region, warn_region, err_region), start=1): LOGGER.debug( f"add region '{self.region_keys[key_map]}' to {repr(region)}") view.add_regions( key=self.region_keys[key_map], regions=region, scope="Invalid", icon="circle", flags=sublime.DRAW_NO_OUTLINE | sublime.DRAW_SQUIGGLY_UNDERLINE | sublime.DRAW_NO_FILL, )
def refresh_view(self, view: sublime.View) -> None: regions = view.get_regions(self.regionName) p = view.text_point(self.line - 1, 0) view.erase_regions(self.regionName) view.add_regions(self.regionName, [sublime.Region(p, p)], scope=self.scope(), icon=self.image().file, flags=sublime.HIDDEN)
def add_to_view(self, view: sublime.View) -> None: self.views.append(view) p = view.text_point(self.line - 1, 0) image = self.image().file view.add_regions(self.regionName, [sublime.Region(p, p)], scope='type', icon=image, flags=sublime.HIDDEN)
def draw_uri_regions(view: sublime.View, uri_regions: Iterable[sublime.Region]) -> None: draw_uri_regions = get_setting("draw_uri_regions") view.add_regions( "OUIB_uri_regions", tuple(uri_regions), scope=draw_uri_regions["scope"], icon=draw_uri_regions["icon"], flags=parse_draw_region_flags(draw_uri_regions["flags"]), )
def mark(self, view: sublime.View): "Marks tracker in given view" scope = emmet.get_settings('marker_scope', 'region.accent') mark_opt = sublime.DRAW_SOLID_UNDERLINE | sublime.DRAW_NO_FILL | sublime.DRAW_NO_OUTLINE view.erase_regions(ABBR_REGION_ID) view.add_regions(ABBR_REGION_ID, [self.region], scope, '', mark_opt) if self.forced: phantoms = [sublime.Phantom(self.region, forced_indicator('⋮>'), sublime.LAYOUT_INLINE)] if not self.forced_indicator: self.forced_indicator = sublime.PhantomSet(view, ABBR_REGION_ID) self.forced_indicator.update(phantoms)
def update_diagnostics_regions(view: sublime.View, diagnostics: 'List[Diagnostic]', severity: int): region_name = "lsp_" + format_severity(severity) if show_diagnostics_phantoms and not view.is_dirty(): regions = None else: regions = list(diagnostic.range.to_region(view) for diagnostic in diagnostics if diagnostic.severity == severity) if regions: scope_name = diagnostic_severity_scopes[severity] view.add_regions(region_name, regions, scope_name, "dot", sublime.DRAW_SQUIGGLY_UNDERLINE | UNDERLINE_FLAGS) else: view.erase_regions(region_name)
def update_diagnostics_regions(view: sublime.View, diagnostics: 'List[Diagnostic]', severity: int): region_name = "code_intel_" + format_severity(severity) if settings.show_diagnostics_phantoms and not view.is_dirty(): regions = None else: regions = list(range_to_region(diagnostic.range, view) for diagnostic in diagnostics if diagnostic.severity == severity) if regions: scope_name = diagnostic_severity_scopes[severity] view.add_regions( region_name, regions, scope_name, settings.diagnostics_gutter_marker, UNDERLINE_FLAGS if settings.diagnostics_highlight_style == "underline" else BOX_FLAGS) else: view.erase_regions(region_name)
async def on_hover(self, view: sublime.View, point: int, hover_zone: int): if self.ignore(view): return debugger = debugger_for_view(view) if not debugger: return project = debugger.project if hover_zone != sublime.HOVER_TEXT or not project.is_source_file( view): return if not debugger.session: return session = debugger.session r = session.adapter_configuration.on_hover_provider(view, point) if not r: return word_string, region = r try: def on_close(): view.erase_regions('selected_hover') # ensure we take at least 0.5 seconds... and then redraw the popup # this is is a hack because we are competing against lsp and other popups on hover... sleep = core.sleep(0.5) response = await session.evaluate_expression(word_string, 'hover') component = VariableComponent( dap.Variable.from_evaluate(session, '', response)) component.toggle_expand() view.add_regions('selected_hover', [region], scope='comment', flags=sublime.DRAW_NO_OUTLINE) popup = ui.Popup(view, region.a, on_close=on_close)[component] await sleep popup[component] # errors trying to evaluate a hover expression should be ignored except dap.Error as e: core.error('adapter failed hover evaluation', e)
def mark(editor: sublime.View, tracker: AbbreviationTracker): "Marks tracker in given view" scope = get_settings('marker_scope', 'region.accent') editor.erase_regions(ABBR_REGION_ID) if tracker.valid_candidate: # Do not mark abbreviation if it’s not known candidate mark_opt = sublime.DRAW_SOLID_UNDERLINE | sublime.DRAW_NO_FILL | sublime.DRAW_NO_OUTLINE editor.add_regions(ABBR_REGION_ID, [tracker.region], scope, '', mark_opt) if isinstance(tracker, AbbreviationTrackerValid) and tracker.forced: phantoms = [ sublime.Phantom(tracker.region, forced_indicator('⋮>'), sublime.LAYOUT_INLINE) ] key = editor.id() if key not in _forced_indicator: _forced_indicator[key] = sublime.PhantomSet(editor, ABBR_REGION_ID) _forced_indicator[key].update(phantoms)
async def on_hover(self, view: sublime.View, point: int, hover_zone: int): if self.ignore(view): return debugger = debugger_for_view(view) if not debugger: return project = debugger.project sessions = debugger.sessions if hover_zone != sublime.HOVER_TEXT or not project.is_source_file(view): return if not sessions.has_active: return session = sessions.active r = session.adapter_configuration.on_hover_provider(view, point) if not r: return word_string, region = r try: response = await session.evaluate_expression(word_string, 'hover') await core.sleep(0.25) variable = dap.types.Variable("", response.result, response.variablesReference) view.add_regions('selected_hover', [region], scope="comment", flags=sublime.DRAW_NO_OUTLINE) def on_close() -> None: view.erase_regions('selected_hover') component = VariableComponent(dap.Variable(session, variable)) component.toggle_expand() ui.Popup(ui.div(width=100)[component], view, region.a, on_close=on_close) # errors trying to evaluate a hover expression should be ignored except dap.Error as e: core.log_error("adapter failed hover evaluation", e)
def add_regions(view: sublime.View, key, regions, scope, icon, flags): view.add_regions( key=key, regions=list(regions), scope=scope, icon=icon, flags=flags )