Exemplo n.º 1
0
    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,
            )
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
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"]),
    )
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
    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)
Exemplo n.º 10
0
	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)
Exemplo n.º 11
0
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
    )