@@ -397,7 +397,7 @@ impl GlobalState {
397
397
tracing:: debug!( %cause, "will prime caches" ) ;
398
398
let num_worker_threads = self . config . prime_caches_num_threads ( ) ;
399
399
400
- self . task_pool . handle . spawn_with_sender ( {
400
+ self . task_pool . handle . spawn_with_sender ( stdx :: thread :: QoSClass :: Default , {
401
401
let analysis = self . snapshot ( ) . analysis ;
402
402
move |sender| {
403
403
sender. send ( Task :: PrimeCaches ( PrimeCachesProgress :: Begin ) ) . unwrap ( ) ;
@@ -678,7 +678,24 @@ impl GlobalState {
678
678
. on_sync :: < lsp_types:: request:: SelectionRangeRequest > ( handlers:: handle_selection_range)
679
679
. on_sync :: < lsp_ext:: MatchingBrace > ( handlers:: handle_matching_brace)
680
680
. on_sync :: < lsp_ext:: OnTypeFormatting > ( handlers:: handle_on_type_formatting)
681
- // All other request handlers:
681
+ // We can’t run latency-sensitive request handlers which do semantic
682
+ // analysis on the main thread because that would block other
683
+ // requests. Instead, we run these request handlers on higher QoS
684
+ // threads in the threadpool.
685
+ . on_latency_sensitive :: < lsp_types:: request:: Completion > ( handlers:: handle_completion)
686
+ . on_latency_sensitive :: < lsp_types:: request:: ResolveCompletionItem > (
687
+ handlers:: handle_completion_resolve,
688
+ )
689
+ . on_latency_sensitive :: < lsp_types:: request:: SemanticTokensFullRequest > (
690
+ handlers:: handle_semantic_tokens_full,
691
+ )
692
+ . on_latency_sensitive :: < lsp_types:: request:: SemanticTokensFullDeltaRequest > (
693
+ handlers:: handle_semantic_tokens_full_delta,
694
+ )
695
+ . on_latency_sensitive :: < lsp_types:: request:: SemanticTokensRangeRequest > (
696
+ handlers:: handle_semantic_tokens_range,
697
+ )
698
+ // All other request handlers
682
699
. on :: < lsp_ext:: FetchDependencyList > ( handlers:: fetch_dependency_list)
683
700
. on :: < lsp_ext:: AnalyzerStatus > ( handlers:: handle_analyzer_status)
684
701
. on :: < lsp_ext:: SyntaxTree > ( handlers:: handle_syntax_tree)
@@ -706,8 +723,6 @@ impl GlobalState {
706
723
. on :: < lsp_types:: request:: GotoTypeDefinition > ( handlers:: handle_goto_type_definition)
707
724
. on_no_retry :: < lsp_types:: request:: InlayHintRequest > ( handlers:: handle_inlay_hints)
708
725
. on :: < lsp_types:: request:: InlayHintResolveRequest > ( handlers:: handle_inlay_hints_resolve)
709
- . on :: < lsp_types:: request:: Completion > ( handlers:: handle_completion)
710
- . on :: < lsp_types:: request:: ResolveCompletionItem > ( handlers:: handle_completion_resolve)
711
726
. on :: < lsp_types:: request:: CodeLensRequest > ( handlers:: handle_code_lens)
712
727
. on :: < lsp_types:: request:: CodeLensResolve > ( handlers:: handle_code_lens_resolve)
713
728
. on :: < lsp_types:: request:: FoldingRangeRequest > ( handlers:: handle_folding_range)
@@ -725,15 +740,6 @@ impl GlobalState {
725
740
. on :: < lsp_types:: request:: CallHierarchyOutgoingCalls > (
726
741
handlers:: handle_call_hierarchy_outgoing,
727
742
)
728
- . on :: < lsp_types:: request:: SemanticTokensFullRequest > (
729
- handlers:: handle_semantic_tokens_full,
730
- )
731
- . on :: < lsp_types:: request:: SemanticTokensFullDeltaRequest > (
732
- handlers:: handle_semantic_tokens_full_delta,
733
- )
734
- . on :: < lsp_types:: request:: SemanticTokensRangeRequest > (
735
- handlers:: handle_semantic_tokens_range,
736
- )
737
743
. on :: < lsp_types:: request:: WillRenameFiles > ( handlers:: handle_will_rename_files)
738
744
. on :: < lsp_ext:: Ssr > ( handlers:: handle_ssr)
739
745
. finish ( ) ;
@@ -781,7 +787,7 @@ impl GlobalState {
781
787
tracing:: trace!( "updating notifications for {:?}" , subscriptions) ;
782
788
783
789
let snapshot = self . snapshot ( ) ;
784
- self . task_pool . handle . spawn ( move || {
790
+ self . task_pool . handle . spawn ( stdx :: thread :: QoSClass :: Default , move || {
785
791
let _p = profile:: span ( "publish_diagnostics" ) ;
786
792
let diagnostics = subscriptions
787
793
. into_iter ( )
0 commit comments