@@ -443,18 +443,19 @@ pub(crate) fn inlay_hint(
443
443
inlay_hint : InlayHint ,
444
444
) -> Cancellable < lsp_types:: InlayHint > {
445
445
let needs_resolve = inlay_hint. needs_resolve ;
446
- let ( label, tooltip) =
446
+ let ( label, tooltip, mut something_to_resolve ) =
447
447
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
- } ;
453
448
let text_edits = if needs_resolve && fields_to_resolve. resolve_text_edits {
449
+ something_to_resolve |= inlay_hint. text_edit . is_some ( ) ;
454
450
None
455
451
} else {
456
452
inlay_hint. text_edit . map ( |it| text_edit_vec ( line_index, it) )
457
453
} ;
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
+ } ;
458
459
459
460
Ok ( lsp_types:: InlayHint {
460
461
position : match inlay_hint. position {
@@ -480,11 +481,13 @@ fn inlay_hint_label(
480
481
fields_to_resolve : & InlayFieldsToResolve ,
481
482
needs_resolve : bool ,
482
483
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 {
485
487
[ InlayHintLabelPart { linked_location : None , .. } ] => {
486
488
let InlayHintLabelPart { text, tooltip, .. } = label. parts . pop ( ) . unwrap ( ) ;
487
489
let hint_tooltip = if needs_resolve && fields_to_resolve. resolve_hint_tooltip {
490
+ something_to_resolve |= tooltip. is_some ( ) ;
488
491
None
489
492
} else {
490
493
match tooltip {
@@ -508,6 +511,7 @@ fn inlay_hint_label(
508
511
. into_iter ( )
509
512
. map ( |part| {
510
513
let tooltip = if needs_resolve && fields_to_resolve. resolve_label_tooltip {
514
+ something_to_resolve |= part. tooltip . is_some ( ) ;
511
515
None
512
516
} else {
513
517
match part. tooltip {
@@ -526,6 +530,7 @@ fn inlay_hint_label(
526
530
}
527
531
} ;
528
532
let location = if needs_resolve && fields_to_resolve. resolve_label_location {
533
+ something_to_resolve |= part. linked_location . is_some ( ) ;
529
534
None
530
535
} else {
531
536
part. linked_location . map ( |range| location ( snap, range) ) . transpose ( ) ?
@@ -541,7 +546,7 @@ fn inlay_hint_label(
541
546
( lsp_types:: InlayHintLabel :: LabelParts ( parts) , None )
542
547
}
543
548
} ;
544
- Ok ( res )
549
+ Ok ( ( label , tooltip , something_to_resolve ) )
545
550
}
546
551
547
552
static TOKEN_RESULT_COUNTER : AtomicU32 = AtomicU32 :: new ( 1 ) ;
0 commit comments