def text_document_item(view: sublime.View, language_id: str) -> Dict[str, Any]: return { "uri": uri_from_view(view), "languageId": language_id, "version": view.change_count(), "text": entire_content(view) }
def _request_async( self, view: sublime.View, region: sublime.Region, session_buffer_diagnostics: Sequence[Tuple[SessionBufferProtocol, Sequence[Diagnostic]]], only_with_diagnostics: bool, actions_handler: Callable[[CodeActionsByConfigName], None], on_save_actions: Optional[Dict[str, bool]] = None) -> None: use_cache = on_save_actions is None if use_cache: location_cache_key = "{}#{}:{}:{}".format(view.buffer_id(), view.change_count(), region, only_with_diagnostics) if self._response_cache: cache_key, cache_collector = self._response_cache if location_cache_key == cache_key: sublime.set_timeout( lambda: actions_handler(cache_collector.get_actions())) return else: self._response_cache = None collector = CodeActionsCollector(actions_handler) with collector: listener = windows.listener_for_view(view) if listener: for session in listener.sessions_async('codeActionProvider'): if on_save_actions: supported_kinds = session.get_capability( 'codeActionProvider.codeActionKinds') matching_kinds = get_matching_kinds( on_save_actions, supported_kinds or []) if matching_kinds: params = text_document_code_action_params( view, region, [], matching_kinds) request = Request.codeAction(params, view) session.send_request_async( request, *filtering_collector(session.config.name, matching_kinds, collector)) else: diagnostics = [] # type: Sequence[Diagnostic] for sb, diags in session_buffer_diagnostics: if sb.session == session: diagnostics = diags break if only_with_diagnostics and not diagnostics: continue params = text_document_code_action_params( view, region, diagnostics) request = Request.codeAction(params, view) session.send_request_async( request, collector.create_collector(session.config.name)) if use_cache: self._response_cache = (location_cache_key, collector)
def purge_changes_async(self, view: sublime.View) -> None: if self.pending_changes is not None: sync_kind = self.text_sync_kind() if sync_kind == TextDocumentSyncKindNone: return if sync_kind == TextDocumentSyncKindFull: changes = None version = view.change_count() else: changes = self.pending_changes.changes version = self.pending_changes.version try: notification = did_change(view, version, changes) self.session.send_notification(notification) except MissingUriError: pass # we're closing self.pending_changes = None self.session.notify_plugin_on_session_buffer_change(self)
def on_revert_async(self, view: sublime.View) -> None: self.pending_changes = None # Don't bother with pending changes self.session.send_notification( did_change(view, view.change_count(), None))
def versioned_text_document_identifier(view: sublime.View) -> Dict[str, Any]: return {"uri": uri_from_view(view), "version": view.change_count()}
def get_location_key(self, view: sublime.View, point: int) -> str: return "{}#{}:{}".format(view.file_name(), view.change_count(), point)