@@ -11,8 +11,8 @@ use ide::{
1111 Annotation , AnnotationKind , Assist , AssistKind , Cancellable , CompletionFieldsToResolve ,
1212 CompletionItem , CompletionItemKind , CompletionRelevance , Documentation , FileId , FileRange ,
1313 FileSystemEdit , Fold , FoldKind , Highlight , HlMod , HlOperator , HlPunct , HlRange , HlTag , Indel ,
14- InlayFieldsToResolve , InlayHint , InlayHintLabel , InlayHintLabelPart , InlayKind , Markup ,
15- NavigationTarget , ReferenceCategory , RenameError , Runnable , Severity , SignatureHelp ,
14+ InlayFieldsToResolve , InlayHint , InlayHintLabel , InlayHintLabelPart , InlayKind , LazyProperty ,
15+ Markup , NavigationTarget , ReferenceCategory , RenameError , Runnable , Severity , SignatureHelp ,
1616 SnippetEdit , SourceChange , StructureNodeKind , SymbolKind , TextEdit , TextRange , TextSize ,
1717} ;
1818use ide_db:: { assists, rust_doc:: format_docs, FxHasher } ;
@@ -549,12 +549,11 @@ pub(crate) fn inlay_hint(
549549) -> Cancellable < lsp_types:: InlayHint > {
550550 let hint_needs_resolve = |hint : & InlayHint | -> Option < TextRange > {
551551 hint. resolve_parent . filter ( |_| {
552- hint. text_edit . is_some ( )
553- || hint
554- . label
555- . parts
556- . iter ( )
557- . any ( |part| part. linked_location . is_some ( ) || part. tooltip . is_some ( ) )
552+ hint. text_edit . as_ref ( ) . is_some_and ( LazyProperty :: is_lazy)
553+ || hint. label . parts . iter ( ) . any ( |part| {
554+ part. linked_location . as_ref ( ) . is_some_and ( LazyProperty :: is_lazy)
555+ || part. tooltip . as_ref ( ) . is_some_and ( LazyProperty :: is_lazy)
556+ } )
558557 } )
559558 } ;
560559
@@ -569,22 +568,21 @@ pub(crate) fn inlay_hint(
569568 } ) ;
570569
571570 let mut something_to_resolve = false ;
572- let text_edits = if snap
573- . config
574- . visual_studio_code_version ( )
575- . is_none_or ( |version| VersionReq :: parse ( ">=1.86.0" ) . unwrap ( ) . matches ( version) )
576- && resolve_range_and_hash. is_some ( )
577- && fields_to_resolve. resolve_text_edits
578- {
579- something_to_resolve |= inlay_hint. text_edit . is_some ( ) ;
580- None
581- } else {
582- inlay_hint
583- . text_edit
584- . take ( )
585- . and_then ( |it| it. computed ( ) )
586- . map ( |it| text_edit_vec ( line_index, it) )
587- } ;
571+ let text_edits = inlay_hint
572+ . text_edit
573+ . take ( )
574+ . and_then ( |it| match it {
575+ LazyProperty :: Computed ( it) => Some ( it) ,
576+ LazyProperty :: Lazy => {
577+ something_to_resolve |=
578+ snap. config . visual_studio_code_version ( ) . is_none_or ( |version| {
579+ VersionReq :: parse ( ">=1.86.0" ) . unwrap ( ) . matches ( version)
580+ } ) && resolve_range_and_hash. is_some ( )
581+ && fields_to_resolve. resolve_text_edits ;
582+ None
583+ }
584+ } )
585+ . map ( |it| text_edit_vec ( line_index, it) ) ;
588586 let ( label, tooltip) = inlay_hint_label (
589587 snap,
590588 fields_to_resolve,
@@ -637,22 +635,23 @@ fn inlay_hint_label(
637635 let ( label, tooltip) = match & * label. parts {
638636 [ InlayHintLabelPart { linked_location : None , .. } ] => {
639637 let InlayHintLabelPart { text, tooltip, .. } = label. parts . pop ( ) . unwrap ( ) ;
640- let hint_tooltip = if needs_resolve && fields_to_resolve. resolve_hint_tooltip {
641- * something_to_resolve |= tooltip. is_some ( ) ;
642- None
643- } else {
644- match tooltip. and_then ( |it| it. computed ( ) ) {
645- Some ( ide:: InlayTooltip :: String ( s) ) => {
646- Some ( lsp_types:: InlayHintTooltip :: String ( s) )
647- }
648- Some ( ide:: InlayTooltip :: Markdown ( s) ) => {
649- Some ( lsp_types:: InlayHintTooltip :: MarkupContent ( lsp_types:: MarkupContent {
650- kind : lsp_types:: MarkupKind :: Markdown ,
651- value : s,
652- } ) )
653- }
654- None => None ,
638+ let tooltip = tooltip. and_then ( |it| match it {
639+ LazyProperty :: Computed ( it) => Some ( it) ,
640+ LazyProperty :: Lazy => {
641+ * something_to_resolve |=
642+ needs_resolve && fields_to_resolve. resolve_hint_tooltip ;
643+ None
655644 }
645+ } ) ;
646+ let hint_tooltip = match tooltip {
647+ Some ( ide:: InlayTooltip :: String ( s) ) => Some ( lsp_types:: InlayHintTooltip :: String ( s) ) ,
648+ Some ( ide:: InlayTooltip :: Markdown ( s) ) => {
649+ Some ( lsp_types:: InlayHintTooltip :: MarkupContent ( lsp_types:: MarkupContent {
650+ kind : lsp_types:: MarkupKind :: Markdown ,
651+ value : s,
652+ } ) )
653+ }
654+ None => None ,
656655 } ;
657656 ( lsp_types:: InlayHintLabel :: String ( text) , hint_tooltip)
658657 }
@@ -661,34 +660,38 @@ fn inlay_hint_label(
661660 . parts
662661 . into_iter ( )
663662 . map ( |part| {
664- let tooltip = if needs_resolve && fields_to_resolve. resolve_label_tooltip {
665- * something_to_resolve |= part. tooltip . is_some ( ) ;
666- None
667- } else {
668- match part. tooltip . and_then ( |it| it. computed ( ) ) {
669- Some ( ide:: InlayTooltip :: String ( s) ) => {
670- Some ( lsp_types:: InlayHintLabelPartTooltip :: String ( s) )
671- }
672- Some ( ide:: InlayTooltip :: Markdown ( s) ) => {
673- Some ( lsp_types:: InlayHintLabelPartTooltip :: MarkupContent (
674- lsp_types:: MarkupContent {
675- kind : lsp_types:: MarkupKind :: Markdown ,
676- value : s,
677- } ,
678- ) )
679- }
680- None => None ,
663+ let tooltip = part. tooltip . and_then ( |it| match it {
664+ LazyProperty :: Computed ( it) => Some ( it) ,
665+ LazyProperty :: Lazy => {
666+ * something_to_resolve |= fields_to_resolve. resolve_label_tooltip ;
667+ None
681668 }
669+ } ) ;
670+ let tooltip = match tooltip {
671+ Some ( ide:: InlayTooltip :: String ( s) ) => {
672+ Some ( lsp_types:: InlayHintLabelPartTooltip :: String ( s) )
673+ }
674+ Some ( ide:: InlayTooltip :: Markdown ( s) ) => {
675+ Some ( lsp_types:: InlayHintLabelPartTooltip :: MarkupContent (
676+ lsp_types:: MarkupContent {
677+ kind : lsp_types:: MarkupKind :: Markdown ,
678+ value : s,
679+ } ,
680+ ) )
681+ }
682+ None => None ,
682683 } ;
683- let location = if needs_resolve && fields_to_resolve. resolve_label_location {
684- * something_to_resolve |= part. linked_location . is_some ( ) ;
685- None
686- } else {
687- part. linked_location
688- . and_then ( |it| it. computed ( ) )
689- . map ( |range| location ( snap, range) )
690- . transpose ( ) ?
691- } ;
684+ let location = part
685+ . linked_location
686+ . and_then ( |it| match it {
687+ LazyProperty :: Computed ( it) => Some ( it) ,
688+ LazyProperty :: Lazy => {
689+ * something_to_resolve |= fields_to_resolve. resolve_label_location ;
690+ None
691+ }
692+ } )
693+ . map ( |range| location ( snap, range) )
694+ . transpose ( ) ?;
692695 Ok ( lsp_types:: InlayHintLabelPart {
693696 value : part. text ,
694697 tooltip,
0 commit comments