Skip to content

Commit 0cfda35

Browse files
committed
Diagnose lack of input files
1 parent c835d02 commit 0cfda35

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,28 @@ public enum ModuleOutput: Equatable {
4141

4242
/// The Swift driver.
4343
public struct Driver {
44-
enum Error: Swift.Error {
44+
public enum Error: Swift.Error, LocalizedError {
4545
case invalidDriverName(String)
4646
case invalidInput(String)
47-
case subcommandPassedToDriver
47+
case noJobsPassedToDriverFromEmptyInputFileList
4848
case relativeFrontendPath(String)
49+
case subcommandPassedToDriver
50+
51+
public var errorDescription: String? {
52+
switch self {
53+
case .invalidDriverName(let driverName):
54+
return "invalid drive name: \(driverName)"
55+
case .invalidInput(let input):
56+
return "invalid input: \(input)"
57+
case .noJobsPassedToDriverFromEmptyInputFileList:
58+
return "no input files were passed and no subsequent jobs were generated for the driver"
59+
case .relativeFrontendPath(let path):
60+
// TODO: where is this error thrown
61+
return "relative frontend path: \(path)"
62+
case .subcommandPassedToDriver:
63+
return "subcommand passed to driver"
64+
}
65+
}
4966
}
5067

5168
/// The set of environment variables that are visible to the driver and
@@ -572,7 +589,7 @@ extension Driver {
572589
switch driverName {
573590
case "swift":
574591
return .interactive
575-
case "swiftc":
592+
case "swiftc", "swift-driver":
576593
return .batch
577594
case "swift-autolink-extract":
578595
return .autolinkExtract
@@ -604,7 +621,12 @@ extension Driver {
604621
try printVersion(outputStream: &stderrStream)
605622
}
606623

607-
if jobs.isEmpty { return }
624+
guard !jobs.isEmpty else {
625+
guard !inputFiles.isEmpty else {
626+
throw Error.noJobsPassedToDriverFromEmptyInputFileList
627+
}
628+
return
629+
}
608630

609631
let forceResponseFiles = parsedOptions.contains(.driverForceResponseFiles)
610632

Sources/swift-driver/main.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ do {
5252
exit(EXIT_FAILURE)
5353
} catch let diagnosticData as DiagnosticData {
5454
diagnosticsEngine.emit(.error(diagnosticData))
55+
} catch let driverError as Driver.Error {
56+
print("error: \(driverError.localizedDescription)")
57+
exit(EXIT_FAILURE)
5558
} catch {
5659
print("error: \(error)")
5760
exit(EXIT_FAILURE)

0 commit comments

Comments
 (0)