Skip to content

Commit bfc49dc

Browse files
committed
refine type to find/highlight
1 parent 9440de2 commit bfc49dc

2 files changed

Lines changed: 40 additions & 29 deletions

File tree

src/vs/platform/list/browser/listService.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import { IEditorOptions } from 'vs/platform/editor/common/editor';
2525
import { Event, Emitter } from 'vs/base/common/event';
2626
import { createStyleSheet, addStandardDisposableListener } from 'vs/base/browser/dom';
2727
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
28-
import { FuzzyScore } from 'vs/base/common/filters';
2928
import { InputBox, IInputOptions } from 'vs/base/browser/ui/inputbox/inputBox';
3029
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
3130
import { TPromise } from 'vs/base/common/winjs.base';
@@ -559,7 +558,10 @@ export class TreeResourceNavigator extends Disposable {
559558

560559

561560
export interface IHighlightingRenderer extends ITreeRenderer {
562-
updateHighlights(tree: ITree, element: any, pattern: string): FuzzyScore;
561+
/**
562+
* Update hightlights and return the best matching element
563+
*/
564+
updateHighlights(tree: ITree, pattern: string): any;
563565
}
564566

565567
export interface IHighlightingTreeConfiguration extends ITreeConfiguration {
@@ -671,27 +673,29 @@ export class HighlightingWorkbenchTree extends WorkbenchTree {
671673
super.layout(isNaN(height) ? height : height - this.input.height, width);
672674
}
673675

676+
private lastSelection: any[];
677+
674678
private updateHighlights(pattern: string): void {
675-
let nav = this.getNavigator(undefined, false);
676-
let topScore: FuzzyScore;
677-
let topElement: any;
678-
while (nav.next()) {
679-
let element = nav.current();
680-
let score = this.renderer.updateHighlights(this, element, pattern);
681-
if (!topScore || score && topScore[0] < score[0]) {
682-
topScore = score;
683-
topElement = element;
684-
}
685-
this.refresh(element).then(undefined, onUnexpectedError);
679+
680+
// remember old selection
681+
let defaultSelection: any[];
682+
if (!this.lastSelection && pattern) {
683+
this.lastSelection = this.getSelection();
684+
defaultSelection = [];
685+
} else if (this.lastSelection && !pattern) {
686+
defaultSelection = this.lastSelection;
687+
this.lastSelection = [];
686688
}
687-
if (topElement) {
689+
690+
let topElement = this.renderer.updateHighlights(this, pattern);
691+
if (topElement && pattern) {
688692
this.reveal(topElement).then(_ => {
689-
this.setFocus(topElement);
690693
this.setSelection([topElement], this);
694+
return this.refresh();
691695
}, onUnexpectedError);
692696
} else {
693-
this.setSelection([], this);
694-
this.setFocus(undefined);
697+
this.setSelection(defaultSelection, this);
698+
this.refresh().then(undefined, onUnexpectedError);
695699
}
696700
}
697701
}

src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ export class FileDataSource implements IDataSource {
136136

137137
export class FileRenderer implements IRenderer, IHighlightingRenderer {
138138

139-
private readonly _scores = new WeakMap<IFileStat, FuzzyScore>();
139+
private readonly _scores = new Map<string, FuzzyScore>();
140140

141141
constructor(
142142
@IInstantiationService private readonly _instantiationService: IInstantiationService
@@ -159,18 +159,28 @@ export class FileRenderer implements IRenderer, IHighlightingRenderer {
159159
hidePath: true,
160160
fileKind: element.isDirectory ? FileKind.FOLDER : FileKind.FILE,
161161
fileDecorations: { colors: true, badges: true },
162-
matches: createMatches((this._scores.get(element) || [, []])[1])
162+
matches: createMatches((this._scores.get(element.resource.toString()) || [, []])[1])
163163
});
164164
}
165165

166166
disposeTemplate(tree: ITree, templateId: string, templateData: FileLabel): void {
167167
templateData.dispose();
168168
}
169169

170-
updateHighlights(tree: ITree, element: any, pattern: string): FuzzyScore {
171-
let score = fuzzyScore(pattern, (element as IFileStat).name, undefined, true);
172-
this._scores.set(element, score);
173-
return score;
170+
updateHighlights(tree: ITree, pattern: string): any {
171+
let nav = tree.getNavigator(undefined, false);
172+
let topScore: FuzzyScore;
173+
let topElement: any;
174+
while (nav.next()) {
175+
let element = nav.current() as IFileStat;
176+
let score = fuzzyScore(pattern, element.name, undefined, true);
177+
this._scores.set(element.resource.toString(), score);
178+
if (!topScore || score && topScore[0] < score[0]) {
179+
topScore = score;
180+
topElement = element;
181+
}
182+
}
183+
return topElement;
174184
}
175185
}
176186

@@ -227,13 +237,10 @@ export class BreadcrumbsFilePicker extends BreadcrumbsPicker {
227237

228238
class HighlightingOutlineRenderer extends OutlineRenderer implements IHighlightingRenderer {
229239

230-
updateHighlights(tree: ITree, element: any, pattern: string): FuzzyScore {
231-
if (element instanceof OutlineElement) {
232-
return element.score = fuzzyScore(pattern, element.symbol.name, undefined, true) || [-1, []];
233-
}
234-
return undefined;
240+
updateHighlights(tree: ITree, pattern: string): any {
241+
let model = OutlineModel.get(tree.getInput());
242+
return model.updateMatches(pattern);
235243
}
236-
237244
}
238245

239246
export class BreadcrumbsOutlinePicker extends BreadcrumbsPicker {

0 commit comments

Comments
 (0)