From c920fcd1bada404b13b8758c020829efd9319685 Mon Sep 17 00:00:00 2001 From: Artem Chikin Date: Thu, 7 Sep 2023 14:04:30 -0700 Subject: [PATCH] Fix handling of the '--' argument followed by inputs for the immediate compilation mode ('swift') Resolves rdar://114191406 --- Sources/SwiftOptions/OptionParsing.swift | 2 +- Sources/SwiftOptions/ParsedOptions.swift | 6 +++++- Tests/SwiftDriverTests/SwiftDriverTests.swift | 12 ++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Sources/SwiftOptions/OptionParsing.swift b/Sources/SwiftOptions/OptionParsing.swift index 3eac29780..e4d4892ba 100644 --- a/Sources/SwiftOptions/OptionParsing.swift +++ b/Sources/SwiftOptions/OptionParsing.swift @@ -153,7 +153,7 @@ extension OptionTable { throw OptionParseError.unknownOption( index: index - 1, argument: argument) } - parsedOptions.addOption(.DASHDASH, argument: .single("--")) + parsedOptions.addOption(.DASHDASH, argument: .multiple(Array())) arguments[index...].map { String($0) }.forEach { parsedOptions.addInput($0) } index = arguments.endIndex diff --git a/Sources/SwiftOptions/ParsedOptions.swift b/Sources/SwiftOptions/ParsedOptions.swift index 4adf69056..8b209b1fa 100644 --- a/Sources/SwiftOptions/ParsedOptions.swift +++ b/Sources/SwiftOptions/ParsedOptions.swift @@ -75,7 +75,11 @@ extension ParsedOption: CustomStringConvertible { return option.spelling + " " + argument.asSingle.spm_shellEscaped() case .remaining: - return argument.asSingle + let args = argument.asMultiple + if args.isEmpty { + return option.spelling + } + return option.spelling + " " + argument.asMultiple.map { $0.spm_shellEscaped() }.joined(separator: " ") } } } diff --git a/Tests/SwiftDriverTests/SwiftDriverTests.swift b/Tests/SwiftDriverTests/SwiftDriverTests.swift index bf28891bc..04b5f0777 100644 --- a/Tests/SwiftDriverTests/SwiftDriverTests.swift +++ b/Tests/SwiftDriverTests/SwiftDriverTests.swift @@ -2907,6 +2907,18 @@ final class SwiftDriverTests: XCTestCase { } } + func testDashDashImmediateInput() throws { + do { + var driver = try Driver(args: ["swift", "--", "main.swift"]) + let plannedJobs = try driver.planBuild().removingAutolinkExtractJobs() + XCTAssertFalse(driver.diagnosticEngine.hasErrors) + XCTAssertEqual(plannedJobs.count, 1) + XCTAssertEqual(plannedJobs[0].kind, .interpret) + XCTAssertEqual(plannedJobs[0].inputs.count, 1) + XCTAssertEqual(plannedJobs[0].inputs[0].file, VirtualPath.relative(RelativePath("main.swift"))) + } + } + func testWholeModuleOptimizationOutputFileMap() throws { let contents = """ {