@@ -13,7 +13,7 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView
1313import { IMenuService , MenuId , MenuItemAction , registerAction2 , Action2 } from 'vs/platform/actions/common/actions' ;
1414import { ContextAwareMenuEntryActionViewItem , createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem' ;
1515import { IContextKeyService , ContextKeyExpr , ContextKeyEqualsExpr , RawContextKey , IContextKey } from 'vs/platform/contextkey/common/contextkey' ;
16- import { ITreeView , ITreeItem , TreeItemCollapsibleState , ITreeViewDataProvider , TreeViewItemHandleArg , ITreeItemLabel , IViewDescriptorService , ViewContainer , ViewContainerLocation } from 'vs/workbench/common/views' ;
16+ import { ITreeView , ITreeItem , TreeItemCollapsibleState , ITreeViewDataProvider , TreeViewItemHandleArg , ITreeItemLabel , IViewDescriptorService , ViewContainer , ViewContainerLocation , ResolvableTreeItem } from 'vs/workbench/common/views' ;
1717import { IConfigurationService } from 'vs/platform/configuration/common/configuration' ;
1818import { INotificationService } from 'vs/platform/notification/common/notification' ;
1919import { IProgressService } from 'vs/platform/progress/common/progress' ;
@@ -38,7 +38,6 @@ import { FuzzyScore, createMatches } from 'vs/base/common/filters';
3838import { CollapseAllAction } from 'vs/base/browser/ui/tree/treeDefaults' ;
3939import { isFalsyOrWhitespace } from 'vs/base/common/strings' ;
4040import { SIDE_BAR_BACKGROUND , PANEL_BACKGROUND } from 'vs/workbench/common/theme' ;
41- import { IMarkdownString } from 'vs/base/common/htmlContent' ;
4241import { IHoverService } from 'vs/workbench/services/hover/browser/hover' ;
4342
4443class Root implements ITreeItem {
@@ -727,7 +726,7 @@ class TreeRenderer extends Disposable implements ITreeRenderer<ITreeItem, FuzzyS
727726 templateData . elementDisposable . dispose ( ) ;
728727 const node = element . element ;
729728 const resource = node . resourceUri ? URI . revive ( node . resourceUri ) : null ;
730- const treeItemLabel : ITreeItemLabel | undefined = node . label ? node . label : resource ? { label : basename ( resource ) } : undefined ;
729+ const treeItemLabel : ITreeItemLabel | undefined = node . label ? node . label : ( resource ? { label : basename ( resource ) } : undefined ) ;
731730 const description = isString ( node . description ) ? node . description : resource && node . description === true ? this . labelService . getUriLabel ( dirname ( resource ) , { relative : true } ) : undefined ;
732731 const label = treeItemLabel ? treeItemLabel . label : undefined ;
733732 const matches = ( treeItemLabel && treeItemLabel . highlights && label ) ? treeItemLabel . highlights . map ( ( [ start , end ] ) => {
@@ -749,7 +748,8 @@ class TreeRenderer extends Disposable implements ITreeRenderer<ITreeItem, FuzzyS
749748 } ) : undefined ;
750749 const icon = this . themeService . getColorTheme ( ) . type === LIGHT ? node . icon : node . iconDark ;
751750 const iconUrl = icon ? URI . revive ( icon ) : null ;
752- const title = node . tooltip ? isString ( node . tooltip ) ? node . tooltip : undefined : resource ? undefined : label ;
751+ const canResolve = node instanceof ResolvableTreeItem && node . hasResolve ;
752+ const title = node . tooltip ? ( isString ( node . tooltip ) ? node . tooltip : undefined ) : ( resource ? undefined : ( canResolve ? undefined : label ) ) ;
753753
754754 // reset
755755 templateData . actionBar . clear ( ) ;
@@ -785,14 +785,14 @@ class TreeRenderer extends Disposable implements ITreeRenderer<ITreeItem, FuzzyS
785785 const disposableStore = new DisposableStore ( ) ;
786786 templateData . elementDisposable = disposableStore ;
787787 disposableStore . add ( this . themeService . onDidFileIconThemeChange ( ( ) => this . setAlignment ( templateData . container , node ) ) ) ;
788- this . setupHovers ( node . tooltip , templateData . container , disposableStore ) ;
788+ this . setupHovers ( node , templateData . container , disposableStore , label ) ;
789789 }
790790
791- private setupHovers ( tooltip : string | IMarkdownString | undefined , htmlElement : HTMLElement , disposableStore : DisposableStore ) : void {
792- if ( ! tooltip || isString ( tooltip ) ) {
791+ private setupHovers ( node : ITreeItem , htmlElement : HTMLElement , disposableStore : DisposableStore , label : string | undefined ) : void {
792+ if ( ( node . tooltip && isString ( node . tooltip ) ) || ! ( node instanceof ResolvableTreeItem ) || ! node . hasResolve ) {
793793 return ;
794794 }
795- const text : IMarkdownString = tooltip ;
795+ const resolvableNode : ResolvableTreeItem = node ;
796796 const hoverService = this . hoverService ;
797797 const hoverDelay = this . hoverDelay ;
798798 function mouseOver ( this : HTMLElement , e : MouseEvent ) : any {
@@ -801,9 +801,11 @@ class TreeRenderer extends Disposable implements ITreeRenderer<ITreeItem, FuzzyS
801801 isHovering = false ;
802802 }
803803 this . addEventListener ( DOM . EventType . MOUSE_LEAVE , mouseLeave , { passive : true } ) ;
804- setTimeout ( ( ) => {
805- if ( isHovering ) {
806- hoverService . showHover ( { text, target : this } ) ;
804+ setTimeout ( async ( ) => {
805+ await resolvableNode . resolve ( ) ;
806+ const tooltip = resolvableNode . tooltip ?? label ;
807+ if ( isHovering && tooltip ) {
808+ hoverService . showHover ( { text : isString ( tooltip ) ? { value : tooltip } : tooltip , target : this } ) ;
807809 }
808810 this . removeEventListener ( DOM . EventType . MOUSE_LEAVE , mouseLeave ) ;
809811 } , hoverDelay ) ;
0 commit comments