Skip to content

Commit a82143c

Browse files
committed
Improve sorting of dependencies tree
Fixes #1622.
1 parent 64ea91c commit a82143c

2 files changed

Lines changed: 18 additions & 7 deletions

File tree

‎src/views/packages_view.ts‎

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import * as path from "path";
33
import * as vs from "vscode";
44
import { PackageMap } from "../debug/package_map";
55
import { fsPath } from "../utils";
6+
import { sortBy } from "../utils/array";
67
import { hasPackagesFile } from "../utils/fs";
78
import { logWarn } from "../utils/log";
89

@@ -75,7 +76,7 @@ export class DartPackagesProvider extends vs.Disposable implements vs.TreeDataPr
7576
private getPackages(project: PackageDepProject): PackageDep[] {
7677
const map = new PackageMap(path.join(fsPath(project.resourceUri), ".packages"));
7778
const packages = map.packages;
78-
const packageNames = Object.keys(packages).sort();
79+
const packageNames = sortBy(Object.keys(packages), (s) => s.toLowerCase());
7980

8081
return packageNames.filter((name) => name !== map.localPackageName).map((name) => {
8182
const path = packages[name];
@@ -84,15 +85,21 @@ export class DartPackagesProvider extends vs.Disposable implements vs.TreeDataPr
8485
}
8586

8687
private getFilesAndFolders(folder: PackageDepFolder): PackageDep[] {
87-
return fs.readdirSync(fsPath(folder.resourceUri)).map((name) => {
88+
const childNames = sortBy(fs.readdirSync(fsPath(folder.resourceUri)), (s) => s.toLowerCase());
89+
const folders: PackageDepFolder[] = [];
90+
const files: PackageDepFile[] = [];
91+
92+
childNames.forEach((name) => {
8893
const filePath = path.join(fsPath(folder.resourceUri), name);
8994
const stat = fs.statSync(filePath);
9095
if (stat.isFile()) {
91-
return new PackageDepFile(name, vs.Uri.file(filePath));
96+
files.push(new PackageDepFile(name, vs.Uri.file(filePath)));
9297
} else if (stat.isDirectory()) {
93-
return new PackageDepFolder(name, vs.Uri.file(filePath));
98+
folders.push(new PackageDepFolder(name, vs.Uri.file(filePath)));
9499
}
95100
});
101+
102+
return [...folders, ...files];
96103
}
97104
}
98105

‎test/dart_only/views/packages_view.test.ts‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,18 @@ describe("packages tree", () => {
3434
const myPackageLibContents = extApi.packagesTreeProvider.getChildren(myPackage);
3535

3636
const names = myPackageLibContents.map((f) => f.label);
37+
// This isn't quite the same as VS Code explorer, as it does complicated things
38+
// like trying to sort file_9 and file_10 as a user would expect, and also
39+
// seems to put capitals after lowercase for the same letter.
3740
const expectedNamesInOrder = ["z_folder",
38-
"MY_FILE_2.txt",
3941
"my_file.txt",
40-
"ZZZ_2.txt",
42+
"MY_FILE_2.txt",
4143
"zzz.txt",
44+
"ZZZ_2.txt",
4245
];
4346
const actualNames = names.filter((n) => expectedNamesInOrder.indexOf(n) !== -1);
4447

45-
assert.equal(actualNames, expectedNamesInOrder);
48+
assert.equal(actualNames.length, expectedNamesInOrder.length);
49+
actualNames.forEach((name, index) => assert.equal(name, expectedNamesInOrder[index]));
4650
});
4751
});

0 commit comments

Comments
 (0)