@@ -1499,8 +1499,7 @@ def register_session_buffer_async(self, sb: SessionBufferProtocol) -> None:
14991499 def _publish_diagnostics_to_session_buffer_async (
15001500 self , sb : SessionBufferProtocol , diagnostics : list [Diagnostic ], version : int | None = None
15011501 ) -> None :
1502- visible_session_views , _ = self .session_views_by_visibility ()
1503- sb .on_diagnostics_async (diagnostics , version , visible_session_views )
1502+ sb .on_diagnostics_async (diagnostics , version , self .visible_session_views ())
15041503
15051504 def unregister_session_buffer_async (self , sb : SessionBufferProtocol ) -> None :
15061505 self ._session_buffers .discard (sb )
@@ -2099,24 +2098,25 @@ def decode_semantic_token(
20992098 return decode_semantic_token (
21002099 types_legend , modifiers_legend , self ._semantic_tokens_map , token_type_encoded , token_modifiers_encoded )
21012100
2102- def session_views_by_visibility (self ) -> tuple [set [SessionViewProtocol ], set [SessionViewProtocol ]]:
2103- visible_session_views : set [SessionViewProtocol ] = set ()
2104- not_visible_session_views : set [SessionViewProtocol ] = set ()
2105- selected_sheets : set [sublime .Sheet ] = set ()
2106- for group in range (self .window .num_groups ()):
2107- selected_sheets = selected_sheets .union (self .window .selected_sheets_in_group (group ))
2108- for sheet in self .window .sheets ():
2109- view = sheet .view ()
2110- if not view :
2111- continue
2112- sv = self .session_view_for_view_async (view )
2113- if not sv :
2114- continue
2115- if sheet in selected_sheets :
2116- visible_session_views .add (sv )
2101+ def session_buffers_by_visibility (
2102+ self
2103+ ) -> tuple [list [tuple [SessionBufferProtocol , SessionViewProtocol ]], list [SessionBufferProtocol ]]:
2104+ selected_sheets = set (itertools .chain .from_iterable (
2105+ self .window .selected_sheets_in_group (group ) for group in range (self .window .num_groups ())
2106+ ))
2107+ visible_session_buffers : list [tuple [SessionBufferProtocol , SessionViewProtocol ]] = []
2108+ not_visible_session_buffers : list [SessionBufferProtocol ] = []
2109+ for session_buffer in self .session_buffers_async ():
2110+ for session_view in session_buffer .session_views :
2111+ if (sheet := session_view .view .sheet ()) and sheet in selected_sheets :
2112+ visible_session_buffers .append ((session_buffer , session_view ))
2113+ break
21172114 else :
2118- not_visible_session_views .add (sv )
2119- return visible_session_views , not_visible_session_views
2115+ not_visible_session_buffers .append (session_buffer )
2116+ return visible_session_buffers , not_visible_session_buffers
2117+
2118+ def visible_session_views (self ) -> set [SessionViewProtocol ]:
2119+ return set (sv for sv in self .session_views_async () if (sheet := sv .view .sheet ()) and sheet .is_selected ())
21202120
21212121 # --- Workspace Pull Diagnostics -----------------------------------------------------------------------------------
21222122
@@ -2225,11 +2225,11 @@ def on_workspace_apply_edit(self, params: ApplyWorkspaceEditParams) -> Promise[A
22252225 def on_workspace_code_lens_refresh (self , _ : None ) -> Promise [None ]:
22262226
22272227 def continue_after_response () -> None :
2228- visible_session_views , not_visible_session_views = self .session_views_by_visibility ()
2229- for sv in visible_session_views :
2230- sv . session_buffer .do_code_lenses_async (sv .view )
2231- for sv in not_visible_session_views :
2232- sv . session_buffer .set_code_lenses_pending_refresh ()
2228+ visible_session_buffers , not_visible_session_buffers = self .session_buffers_by_visibility ()
2229+ for session_buffer , session_view in visible_session_buffers :
2230+ session_buffer .do_code_lenses_async (session_view .view )
2231+ for session_buffer in not_visible_session_buffers :
2232+ session_buffer .set_code_lenses_pending_refresh ()
22332233
22342234 sublime .set_timeout_async (continue_after_response )
22352235 return Promise .resolve (None )
@@ -2238,14 +2238,14 @@ def continue_after_response() -> None:
22382238 def on_workspace_semantic_tokens_refresh (self , _ : None ) -> Promise [None ]:
22392239
22402240 def continue_after_response () -> None :
2241- visible_session_views , not_visible_session_views = self .session_views_by_visibility ()
2242- for sv in visible_session_views :
2243- if sv .get_request_flags () & RequestFlags .SEMANTIC_TOKENS :
2244- sv . session_buffer .do_semantic_tokens_async (sv .view )
2241+ visible_session_buffers , not_visible_session_buffers = self .session_buffers_by_visibility ()
2242+ for session_buffer , session_view in visible_session_buffers :
2243+ if session_view .get_request_flags () & RequestFlags .SEMANTIC_TOKENS :
2244+ session_buffer .do_semantic_tokens_async (session_view .view )
22452245 else :
2246- sv . session_buffer .set_semantic_tokens_pending_refresh ()
2247- for sv in not_visible_session_views :
2248- sv . session_buffer .set_semantic_tokens_pending_refresh ()
2246+ session_buffer .set_semantic_tokens_pending_refresh ()
2247+ for session_buffer in not_visible_session_buffers :
2248+ session_buffer .set_semantic_tokens_pending_refresh ()
22492249
22502250 sublime .set_timeout_async (continue_after_response )
22512251 return Promise .resolve (None )
@@ -2254,31 +2254,31 @@ def continue_after_response() -> None:
22542254 def on_workspace_inlay_hint_refresh (self , _ : None ) -> Promise [None ]:
22552255
22562256 def continue_after_response () -> None :
2257- visible_session_views , not_visible_session_views = self .session_views_by_visibility ()
2258- for sv in visible_session_views :
2259- if sv .get_request_flags () & RequestFlags .INLAY_HINT :
2260- sv . session_buffer .do_inlay_hints_async (sv .view )
2257+ visible_session_buffers , not_visible_session_buffers = self .session_buffers_by_visibility ()
2258+ for session_buffer , session_view in visible_session_buffers :
2259+ if session_view .get_request_flags () & RequestFlags .INLAY_HINT :
2260+ session_buffer .do_inlay_hints_async (session_view .view )
22612261 else :
2262- sv . session_buffer .set_inlay_hints_pending_refresh ()
2263- for sv in not_visible_session_views :
2264- sv . session_buffer .set_inlay_hints_pending_refresh ()
2262+ session_buffer .set_inlay_hints_pending_refresh ()
2263+ for session_buffer in not_visible_session_buffers :
2264+ session_buffer .set_inlay_hints_pending_refresh ()
22652265
22662266 sublime .set_timeout_async (continue_after_response )
22672267 return Promise .resolve (None )
22682268
22692269 @request_handler ('workspace/diagnostic/refresh' )
22702270 def on_workspace_diagnostic_refresh (self , _ : None ) -> Promise [None ]:
2271-
2272- def continue_after_response () -> None :
2273- visible_session_views , not_visible_session_views = self .session_views_by_visibility ()
2274- for sv in visible_session_views :
2275- sv .session_buffer .do_document_diagnostic_async (sv .view , sv .view .change_count (), forced_update = True )
2276- for sv in not_visible_session_views :
2277- sv .session_buffer .set_document_diagnostic_pending_refresh ()
2278-
2279- sublime .set_timeout_async (continue_after_response )
2271+ sublime .set_timeout_async (self ._refresh_diagnostics )
22802272 return Promise .resolve (None )
22812273
2274+ def _refresh_diagnostics (self ) -> None :
2275+ visible_session_buffers , not_visible_session_buffers = self .session_buffers_by_visibility ()
2276+ for session_buffer , session_view in visible_session_buffers :
2277+ view = session_view .view
2278+ session_buffer .do_document_diagnostic_async (view , view .change_count (), forced_update = True )
2279+ for session_buffer in not_visible_session_buffers :
2280+ session_buffer .set_document_diagnostic_pending_refresh ()
2281+
22822282 @notification_handler ('textDocument/publishDiagnostics' )
22832283 def on_text_document_publish_diagnostics (self , params : PublishDiagnosticsParams ) -> None :
22842284 self .handle_diagnostics_async (params ['uri' ], None , None , params ['diagnostics' ])
@@ -2301,6 +2301,7 @@ def handle_diagnostics_async(
23012301
23022302 @request_handler ('client/registerCapability' )
23032303 def on_client_register_capability (self , params : RegistrationParams ) -> Promise [None ]:
2304+ new_diagnostics_provider = False
23042305 new_workspace_diagnostics_provider = False
23052306 for registration in params ["registrations" ]:
23062307 capability_path , registration_path = method_to_capability (registration ["method" ])
@@ -2312,6 +2313,7 @@ def on_client_register_capability(self, params: RegistrationParams) -> Promise[N
23122313 options = self .config .filter_out_disabled_capabilities (capability_path , options )
23132314 registration_id = registration ["id" ]
23142315 if capability_path == 'diagnosticProvider' :
2316+ new_diagnostics_provider = True
23152317 options = cast (DiagnosticOptions , options )
23162318 self .diagnostics .register_provider (registration_id , options )
23172319 if options ['workspaceDiagnostics' ]:
@@ -2339,6 +2341,8 @@ def on_client_register_capability(self, params: RegistrationParams) -> Promise[N
23392341 self .register_file_system_watchers (registration_id , capability_options ['watchers' ])
23402342
23412343 def continue_after_response () -> None :
2344+ if new_diagnostics_provider :
2345+ self ._refresh_diagnostics ()
23422346 if new_workspace_diagnostics_provider :
23432347 self .do_workspace_diagnostics_async ()
23442348
0 commit comments