Skip to content

Commit 2499a21

Browse files
committed
Allow unicode chars in package-name in driver
Resolves rdar://110021211
1 parent 99cb8b1 commit 2499a21

File tree

3 files changed

+18
-19
lines changed

3 files changed

+18
-19
lines changed

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -698,11 +698,12 @@ public struct Driver {
698698
// Compute debug information output.
699699
self.debugInfo = Self.computeDebugInfo(&parsedOptions, diagnosticsEngine: diagnosticEngine)
700700

701-
// Validate package name; if package name is nil, it will be checked
702-
// in the frontend during type check on `package` symbols
701+
// Error if package-name is passed but the input is empty; if
702+
// package-name is not passed but `package` decls exist, error
703+
// will occur during the frontend type check.
703704
self.packageName = parsedOptions.getLastArgument(.packageName)?.asSingle
704-
if let packageName = packageName, !packageName.sd_isSwiftIdentifier {
705-
diagnosticsEngine.emit(.error_bad_package_name(packageName))
705+
if let packageName = packageName, packageName.isEmpty {
706+
diagnosticsEngine.emit(.error_empty_package_name)
706707
}
707708

708709
// Determine the module we're building and whether/how the module file itself will be emitted.

Sources/SwiftDriver/Utilities/Diagnostics.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,8 @@ extension Diagnostic.Message {
123123
return .error("bad module alias \"\(arg)\"")
124124
}
125125

126-
static func error_bad_package_name(_ packageName: String) -> Diagnostic.Message {
127-
if packageName.isEmpty {
128-
return .error("package name is empty; pass a non-empty string or remove \'-package-name\'")
129-
}
130-
return .error("package name \"\(packageName)\" is not a valid identifier")
126+
static var error_empty_package_name: Diagnostic.Message {
127+
return .error("package-name is empty")
131128
}
132129

133130
static var error_hermetic_seal_cannot_have_library_evolution: Diagnostic.Message {

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -690,25 +690,26 @@ final class SwiftDriverTests: XCTestCase {
690690
}
691691

692692
func testPackageNameFlag() throws {
693-
// -package-name mypkg (valid string)
694-
try assertNoDriverDiagnostics(args: "swiftc", "file.swift", "bar.swift", "-module-name", "MyModule", "-package-name", "mypkg", "-emit-module", "-emit-module-path", "../../path/to/MyModule.swiftmodule") { driver in
695-
XCTAssertEqual(driver.packageName, "mypkg")
693+
// -package-name com.perf.my-pkg (valid string)
694+
try assertNoDriverDiagnostics(args: "swiftc", "file.swift", "bar.swift", "-module-name", "MyModule", "-package-name", "com.perf.my-pkg", "-emit-module", "-emit-module-path", "../../path/to/MyModule.swiftmodule") { driver in
695+
XCTAssertEqual(driver.packageName, "com.perf.my-pkg")
696696
XCTAssertEqual(driver.moduleOutputInfo.output, .topLevel(try VirtualPath.intern(path: "../../path/to/MyModule.swiftmodule")))
697697
}
698698

699-
// -package-name is not passed
699+
// -package-name is not passed and file doesn't contain `package` decls; should pass
700700
try assertNoDriverDiagnostics(args: "swiftc", "file.swift") { driver in
701701
XCTAssertNil(driver.packageName)
702702
XCTAssertEqual(driver.moduleOutputInfo.name, "file")
703703
}
704-
}
705704

706-
func testPackageNameDiags() throws {
707-
try assertDriverDiagnostics(args: ["swiftc", "file.swift", "-package-name", ""]) {
708-
$1.expect(.error("package name is empty; pass a non-empty string or remove \'-package-name\'"))
705+
// -package-name 123a!@#$ (valid string)
706+
try assertNoDriverDiagnostics(args: "swiftc", "file.swift", "-module-name", "Foo", "-package-name", "123a!@#$") { driver in
707+
XCTAssertEqual(driver.packageName, "123a!@#$")
709708
}
710-
try assertDriverDiagnostics(args: ["swiftc", "file.swift", "-module-name", "Foo", "-package-name", "123a!@#$"]) {
711-
$1.expect(.error("package name \"123a!@#$\" is not a valid identifier"))
709+
710+
// -package-name input is an empty string
711+
try assertDriverDiagnostics(args: "swiftc", "file.swift", "-package-name", "") {
712+
$1.expect(.error("package-name is empty"))
712713
}
713714
}
714715

0 commit comments

Comments
 (0)