Skip to content

Commit fec2b49

Browse files
authored
fixed bug with collapsing compressed nodes (microsoft#162222)
fixed bug with collapsing compression nodes
1 parent dd4d29d commit fec2b49

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

src/vs/workbench/contrib/search/browser/searchActions.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,14 +292,21 @@ export function collapseDeepestExpandedLevel(accessor: ServicesAccessor) {
292292
let canCollapseFileMatchLevel = false;
293293
let canCollapseFirstLevel = false;
294294

295-
if (node instanceof FolderMatch) {
295+
if (node instanceof FolderMatchWorkspaceRoot) {
296296
while (node = navigator.next()) {
297297
if (node instanceof Match) {
298298
canCollapseFileMatchLevel = true;
299299
break;
300300
}
301301
if (searchView.isTreeLayoutViewVisible && !canCollapseFirstLevel) {
302-
const immediateParent = node.parent();
302+
let nodeToTest = node;
303+
304+
if (node instanceof FolderMatch) {
305+
nodeToTest = node.compressionStartParent ?? node;
306+
}
307+
308+
const immediateParent = nodeToTest.parent();
309+
303310
if (!(immediateParent instanceof FolderMatchWorkspaceRoot || immediateParent instanceof FolderMatchNoRoot || immediateParent instanceof SearchResult)) {
304311
canCollapseFirstLevel = true;
305312
}
@@ -318,7 +325,14 @@ export function collapseDeepestExpandedLevel(accessor: ServicesAccessor) {
318325
node = navigator.first();
319326
if (node) {
320327
do {
321-
const immediateParent = node.parent();
328+
329+
let nodeToTest = node;
330+
331+
if (node instanceof FolderMatch) {
332+
nodeToTest = node.compressionStartParent ?? node;
333+
}
334+
const immediateParent = nodeToTest.parent();
335+
322336
if (immediateParent instanceof FolderMatchWorkspaceRoot || immediateParent instanceof FolderMatchNoRoot) {
323337
if (viewer.hasElement(node)) {
324338
viewer.collapse(node, true);

src/vs/workbench/contrib/search/browser/searchResultsView.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ export class FolderMatchRenderer extends Disposable implements ICompressibleTree
9595
renderCompressedElements(node: ITreeNode<ICompressedTreeNode<FolderMatch>, any>, index: number, templateData: IFolderMatchTemplate, height: number | undefined): void {
9696
const compressed = node.element;
9797
const folder = compressed.elements[compressed.elements.length - 1];
98+
folder.compressionStartParent = compressed.elements[0];
9899
const label = compressed.elements.map(e => e.name());
99100

100101
if (folder.resource) {
@@ -134,6 +135,7 @@ export class FolderMatchRenderer extends Disposable implements ICompressibleTree
134135

135136
renderElement(node: ITreeNode<FolderMatch, any>, index: number, templateData: IFolderMatchTemplate): void {
136137
const folderMatch = node.element;
138+
folderMatch.compressionStartParent = undefined;
137139
if (folderMatch.resource) {
138140
const workspaceFolder = this.contextService.getWorkspaceFolder(folderMatch.resource);
139141
if (workspaceFolder && isEqual(workspaceFolder.uri, folderMatch.resource)) {

src/vs/workbench/contrib/search/common/searchModel.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,10 @@ export class FolderMatch extends Disposable {
492492
protected _unDisposedFileMatches: ResourceMap<FileMatch>;
493493
protected _unDisposedFolderMatches: ResourceMap<FolderMatchWithResource>;
494494
private _replacingAll: boolean = false;
495+
496+
// if this is compressed in a node with other FolderMatches, then this is set to the parent where compression starts
497+
public compressionStartParent: FolderMatch | undefined;
498+
495499
constructor(
496500
protected _resource: URI | null,
497501
private _id: string,

0 commit comments

Comments
 (0)