コード例 #1
0
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)
    }
コード例 #2
0
ファイル: code_actions.py プロジェクト: evandrocoan/LSP
    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)
コード例 #3
0
ファイル: session_buffer.py プロジェクト: evandrocoan/LSP
 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)
コード例 #4
0
ファイル: session_buffer.py プロジェクト: evandrocoan/LSP
 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))
コード例 #5
0
def versioned_text_document_identifier(view: sublime.View) -> Dict[str, Any]:
    return {"uri": uri_from_view(view), "version": view.change_count()}
コード例 #6
0
ファイル: code_actions.py プロジェクト: lumnn/LSP
 def get_location_key(self, view: sublime.View, point: int) -> str:
     return "{}#{}:{}".format(view.file_name(), view.change_count(), point)