@@ -899,7 +899,7 @@ interface HistoryItemTemplate {
899
899
readonly disposables : IDisposable ;
900
900
}
901
901
902
- class HistoryItemRenderer implements ICompressibleTreeRenderer < SCMHistoryItemTreeElement , void , HistoryItemTemplate > {
902
+ class HistoryItemRenderer implements ICompressibleTreeRenderer < SCMHistoryItemTreeElement , LabelFuzzyScore , HistoryItemTemplate > {
903
903
904
904
static readonly TEMPLATE_ID = 'history-item' ;
905
905
get templateId ( ) : string { return HistoryItemRenderer . TEMPLATE_ID ; }
@@ -915,7 +915,7 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
915
915
916
916
const element = append ( container , $ ( '.history-item' ) ) ;
917
917
918
- const iconLabel = new IconLabel ( element , { supportIcons : true } ) ;
918
+ const iconLabel = new IconLabel ( element , { supportIcons : true , supportHighlights : true , supportDescriptionHighlights : true } ) ;
919
919
const iconContainer = prepend ( iconLabel . element , $ ( '.icon-container' ) ) ;
920
920
921
921
const disposables = new DisposableStore ( ) ;
@@ -931,15 +931,16 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
931
931
return { iconContainer, label : iconLabel , actionBar, statsContainer, filesLabel, insertionsLabel, deletionsLabel, elementDisposables : new DisposableStore ( ) , disposables } ;
932
932
}
933
933
934
- renderElement ( node : ITreeNode < SCMHistoryItemTreeElement , void > , index : number , templateData : HistoryItemTemplate , height : number | undefined ) : void {
934
+ renderElement ( node : ITreeNode < SCMHistoryItemTreeElement , LabelFuzzyScore > , index : number , templateData : HistoryItemTemplate , height : number | undefined ) : void {
935
935
const historyItem = node . element ;
936
936
937
937
templateData . iconContainer . className = 'icon-container' ;
938
938
if ( historyItem . icon && ThemeIcon . isThemeIcon ( historyItem . icon ) ) {
939
939
templateData . iconContainer . classList . add ( ...ThemeIcon . asClassNameArray ( historyItem . icon ) ) ;
940
940
}
941
941
942
- templateData . label . setLabel ( historyItem . label , historyItem . description ) ;
942
+ const [ matches , descriptionMatches ] = this . processMatches ( historyItem , node . filterData ) ;
943
+ templateData . label . setLabel ( historyItem . label , historyItem . description , { matches, descriptionMatches } ) ;
943
944
944
945
templateData . actionBar . clear ( ) ;
945
946
templateData . actionBar . context = historyItem ;
@@ -953,11 +954,22 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
953
954
this . renderStatistics ( node , index , templateData , height ) ;
954
955
}
955
956
956
- renderCompressedElements ( node : ITreeNode < ICompressedTreeNode < SCMHistoryItemTreeElement > , void > , index : number , templateData : HistoryItemTemplate , height : number | undefined ) : void {
957
+ renderCompressedElements ( node : ITreeNode < ICompressedTreeNode < SCMHistoryItemTreeElement > , LabelFuzzyScore > , index : number , templateData : HistoryItemTemplate , height : number | undefined ) : void {
957
958
throw new Error ( 'Should never happen since node is incompressible' ) ;
958
959
}
959
960
960
- private renderStatistics ( node : ITreeNode < SCMHistoryItemTreeElement , void > , index : number , templateData : HistoryItemTemplate , height : number | undefined ) : void {
961
+ private processMatches ( historyItem : SCMHistoryItemTreeElement , filterData : LabelFuzzyScore | undefined ) : [ IMatch [ ] | undefined , IMatch [ ] | undefined ] {
962
+ if ( ! filterData ) {
963
+ return [ undefined , undefined ] ;
964
+ }
965
+
966
+ return [
967
+ historyItem . label === filterData . label ? createMatches ( filterData . score ) : undefined ,
968
+ historyItem . description === filterData . label ? createMatches ( filterData . score ) : undefined
969
+ ] ;
970
+ }
971
+
972
+ private renderStatistics ( node : ITreeNode < SCMHistoryItemTreeElement , LabelFuzzyScore > , index : number , templateData : HistoryItemTemplate , height : number | undefined ) : void {
961
973
const historyItem = node . element ;
962
974
963
975
if ( historyItem . statistics ) {
@@ -988,9 +1000,10 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
988
1000
templateData . statsContainer . classList . toggle ( 'hidden' , historyItem . statistics === undefined ) ;
989
1001
}
990
1002
991
- disposeElement ( element : ITreeNode < SCMHistoryItemTreeElement , void > , index : number , templateData : HistoryItemTemplate , height : number | undefined ) : void {
1003
+ disposeElement ( element : ITreeNode < SCMHistoryItemTreeElement , LabelFuzzyScore > , index : number , templateData : HistoryItemTemplate , height : number | undefined ) : void {
992
1004
templateData . elementDisposables . clear ( ) ;
993
1005
}
1006
+
994
1007
disposeTemplate ( templateData : HistoryItemTemplate ) : void {
995
1008
templateData . disposables . dispose ( ) ;
996
1009
}
@@ -1289,7 +1302,10 @@ export class SCMTreeKeyboardNavigationLabelProvider implements ICompressibleKeyb
1289
1302
} else if ( isSCMHistoryItemGroupTreeElement ( element ) ) {
1290
1303
return element . label ;
1291
1304
} else if ( isSCMHistoryItemTreeElement ( element ) ) {
1292
- return element . label ;
1305
+ // For a history item we want to match both the message and
1306
+ // the author. A match in the message takes precedence over
1307
+ // a match in the author.
1308
+ return [ element . label , element . description ] ;
1293
1309
} else if ( isSCMViewSeparator ( element ) ) {
1294
1310
return element . label ;
1295
1311
} else {
0 commit comments