@@ -443,18 +443,19 @@ pub(crate) fn inlay_hint(
443443 inlay_hint : InlayHint ,
444444) -> Cancellable < lsp_types:: InlayHint > {
445445 let needs_resolve = inlay_hint. needs_resolve ;
446- let ( label, tooltip) =
446+ let ( label, tooltip, mut something_to_resolve ) =
447447 inlay_hint_label ( snap, fields_to_resolve, needs_resolve, inlay_hint. label ) ?;
448- let data = if needs_resolve && fields_to_resolve. can_resolve ( ) {
449- Some ( to_value ( lsp_ext:: InlayHintResolveData { file_id : file_id. 0 } ) . unwrap ( ) )
450- } else {
451- None
452- } ;
453448 let text_edits = if needs_resolve && fields_to_resolve. resolve_text_edits {
449+ something_to_resolve |= inlay_hint. text_edit . is_some ( ) ;
454450 None
455451 } else {
456452 inlay_hint. text_edit . map ( |it| text_edit_vec ( line_index, it) )
457453 } ;
454+ let data = if needs_resolve && something_to_resolve {
455+ Some ( to_value ( lsp_ext:: InlayHintResolveData { file_id : file_id. 0 } ) . unwrap ( ) )
456+ } else {
457+ None
458+ } ;
458459
459460 Ok ( lsp_types:: InlayHint {
460461 position : match inlay_hint. position {
@@ -480,11 +481,13 @@ fn inlay_hint_label(
480481 fields_to_resolve : & InlayFieldsToResolve ,
481482 needs_resolve : bool ,
482483 mut label : InlayHintLabel ,
483- ) -> Cancellable < ( lsp_types:: InlayHintLabel , Option < lsp_types:: InlayHintTooltip > ) > {
484- let res = match & * label. parts {
484+ ) -> Cancellable < ( lsp_types:: InlayHintLabel , Option < lsp_types:: InlayHintTooltip > , bool ) > {
485+ let mut something_to_resolve = false ;
486+ let ( label, tooltip) = match & * label. parts {
485487 [ InlayHintLabelPart { linked_location : None , .. } ] => {
486488 let InlayHintLabelPart { text, tooltip, .. } = label. parts . pop ( ) . unwrap ( ) ;
487489 let hint_tooltip = if needs_resolve && fields_to_resolve. resolve_hint_tooltip {
490+ something_to_resolve |= tooltip. is_some ( ) ;
488491 None
489492 } else {
490493 match tooltip {
@@ -508,6 +511,7 @@ fn inlay_hint_label(
508511 . into_iter ( )
509512 . map ( |part| {
510513 let tooltip = if needs_resolve && fields_to_resolve. resolve_label_tooltip {
514+ something_to_resolve |= part. tooltip . is_some ( ) ;
511515 None
512516 } else {
513517 match part. tooltip {
@@ -526,6 +530,7 @@ fn inlay_hint_label(
526530 }
527531 } ;
528532 let location = if needs_resolve && fields_to_resolve. resolve_label_location {
533+ something_to_resolve |= part. linked_location . is_some ( ) ;
529534 None
530535 } else {
531536 part. linked_location . map ( |range| location ( snap, range) ) . transpose ( ) ?
@@ -541,7 +546,7 @@ fn inlay_hint_label(
541546 ( lsp_types:: InlayHintLabel :: LabelParts ( parts) , None )
542547 }
543548 } ;
544- Ok ( res )
549+ Ok ( ( label , tooltip , something_to_resolve ) )
545550}
546551
547552static TOKEN_RESULT_COUNTER : AtomicU32 = AtomicU32 :: new ( 1 ) ;
0 commit comments