Skip to content

Commit 15c6ec6

Browse files
authored
Swift package identity is case-insensitive (#414)
* Update resolved package identity to be lowercased. * Use case-insensitive comparison for package identity. * Add test case for identity case insensitivity. * Add actual assertions for case-insensitivity. * Assertion style fix
1 parent b1860d6 commit 15c6ec6

File tree

6 files changed

+61
-2
lines changed

6 files changed

+61
-2
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"object": {
3+
"pins": [
4+
{
5+
"package": "Yams",
6+
"repositoryURL": "https://github.com/jpsim/Yams.git",
7+
"state": {
8+
"branch": null,
9+
"revision": "01835dc202670b5bb90d07f3eae41867e9ed29f6",
10+
"version": "5.0.1"
11+
}
12+
}
13+
]
14+
},
15+
"version": 1
16+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// swift-tools-version:5.4
2+
// The swift-tools-version declares the minimum version of Swift required to build this package.
3+
4+
import PackageDescription
5+
6+
let package = Package(
7+
name: "identity-case",
8+
products: [
9+
// Products define the executables and libraries a package produces, and make them visible to other packages.
10+
.library(
11+
name: "identity-case",
12+
targets: ["identity-case"]),
13+
],
14+
dependencies: [
15+
// Dependencies declare other packages that this package depends on.
16+
.package(url: "https://github.com/jpsim/Yams.git", from: "5.0.0"),
17+
],
18+
targets: [
19+
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
20+
// Targets can depend on other targets in this package, and on products in packages this package depends on.
21+
.target(
22+
name: "identity-case",
23+
dependencies: ["Yams"]),
24+
]
25+
)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
public struct identity_case {
2+
public private(set) var text = "Hello, World!"
3+
4+
public init() {
5+
}
6+
}

src/SwiftPackage.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ export class PackageResolved {
6868
if (this.version === 1) {
6969
const v1Json = json as PackageResolvedFileV1;
7070
this.pins = v1Json.object.pins.map(
71-
pin => new PackageResolvedPin(pin.package, pin.repositoryURL, pin.state)
71+
pin =>
72+
new PackageResolvedPin(pin.package.toLowerCase(), pin.repositoryURL, pin.state)
7273
);
7374
} else if (this.version === 2) {
7475
const v2Json = json as PackageResolvedFileV2;

src/ui/PackageDependencyProvider.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,9 @@ export class PackageDependenciesProvider implements vscode.TreeDataProvider<Tree
171171
const inUseDependencies = await this.getInUseDependencies(workspaceState, folderContext);
172172
return (
173173
workspaceState?.object.dependencies
174-
.filter(dependency => inUseDependencies.has(dependency.packageRef.identity))
174+
.filter(dependency =>
175+
inUseDependencies.has(dependency.packageRef.identity.toLowerCase())
176+
)
175177
.map(dependency => {
176178
const type = this.dependencyType(dependency);
177179
const version = this.dependencyDisplayVersion(dependency);

test/suite/SwiftPackage.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,13 @@ suite("SwiftPackage Test Suite", () => {
6363
assert.strictEqual(spmPackage.isValid, true);
6464
assert(spmPackage.resolved !== undefined);
6565
}).timeout(15000);
66+
67+
test("Identity case-insensitivity", async () => {
68+
const spmPackage = await SwiftPackage.create(testAssetUri("identity-case"));
69+
assert.strictEqual(spmPackage.isValid, true);
70+
assert.strictEqual(spmPackage.dependencies.length, 1);
71+
assert(spmPackage.resolved !== undefined);
72+
assert.strictEqual(spmPackage.resolved.pins.length, 1);
73+
assert.strictEqual(spmPackage.resolved.pins[0].identity, "yams");
74+
}).timeout(10000);
6675
});

0 commit comments

Comments
 (0)