mirror of
https://github.com/apple/sourcekit-lsp.git
synced 2026-03-02 18:23:24 +01:00
The existing ad-hoc logic was not quite correct because it didn’t eg. remove `-MT/depfile` because it assumed that `-MT` was followed by a space. It also didn’t take into account that `serialize-diagnostics` can be spelled with a single dash or two dashes. Create a `CompilerCommandLineOption` type that forces decisions to be made about the dash spelling and argument styles, which should help avoid problems like this in the future.
57 lines
2.7 KiB
Swift
57 lines
2.7 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2019 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
@_spi(Testing) import SemanticIndex
|
|
import XCTest
|
|
|
|
final class CompilerCommandLineOptionMatchingTests: XCTestCase {
|
|
func testFlags() {
|
|
assertOption(.flag("a", [.singleDash]), "-a", .removeOption)
|
|
assertOption(.flag("a", [.doubleDash]), "--a", .removeOption)
|
|
assertOption(.flag("a", [.singleDash, .doubleDash]), "-a", .removeOption)
|
|
assertOption(.flag("a", [.singleDash, .doubleDash]), "--a", .removeOption)
|
|
assertOption(.flag("a", [.singleDash]), "-another", nil)
|
|
assertOption(.flag("a", [.singleDash]), "--a", nil)
|
|
assertOption(.flag("a", [.doubleDash]), "-a", nil)
|
|
}
|
|
|
|
func testOptions() {
|
|
assertOption(.option("a", [.singleDash], [.noSpace]), "-a/file.txt", .removeOption)
|
|
assertOption(.option("a", [.singleDash], [.noSpace]), "-another", .removeOption)
|
|
assertOption(.option("a", [.singleDash], [.separatedByEqualSign]), "-a=/file.txt", .removeOption)
|
|
assertOption(.option("a", [.singleDash], [.separatedByEqualSign]), "-a/file.txt", nil)
|
|
assertOption(.option("a", [.singleDash], [.separatedBySpace]), "-a", .removeOptionAndNextArgument)
|
|
assertOption(.option("a", [.singleDash], [.separatedBySpace]), "-another", nil)
|
|
assertOption(.option("a", [.singleDash], [.separatedBySpace]), "-a=/file.txt", nil)
|
|
assertOption(.option("a", [.singleDash], [.noSpace, .separatedBySpace]), "-a/file.txt", .removeOption)
|
|
assertOption(.option("a", [.singleDash], [.noSpace, .separatedBySpace]), "-a=/file.txt", .removeOption)
|
|
assertOption(.option("a", [.singleDash], [.noSpace, .separatedBySpace]), "-a", .removeOptionAndNextArgument)
|
|
assertOption(.option("a", [.singleDash], [.separatedByEqualSign, .separatedBySpace]), "-a/file.txt", nil)
|
|
assertOption(.option("a", [.singleDash], [.separatedByEqualSign, .separatedBySpace]), "-a=file.txt", .removeOption)
|
|
assertOption(
|
|
.option("a", [.singleDash], [.separatedByEqualSign, .separatedBySpace]),
|
|
"-a",
|
|
.removeOptionAndNextArgument
|
|
)
|
|
}
|
|
}
|
|
|
|
fileprivate func assertOption(
|
|
_ option: CompilerCommandLineOption,
|
|
_ argument: String,
|
|
_ expected: CompilerCommandLineOption.Match?,
|
|
file: StaticString = #filePath,
|
|
line: UInt = #line
|
|
) {
|
|
XCTAssertEqual(option.matches(argument: argument), expected, file: file, line: line)
|
|
}
|