Skip to content

Commit c48cb82

Browse files
authored
Merge pull request swiftlang#122 from krzyzanowskim/language-struct
Convert Language enum to struct
2 parents b8e79cc + c614c70 commit c48cb82

File tree

3 files changed

+20
-20
lines changed

3 files changed

+20
-20
lines changed

Sources/LanguageServerProtocol/Language.swift

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,18 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
/// A source code language identifier, such as "swift", or "objective-c".
14-
public enum Language: String, Codable, Hashable {
15-
case c
16-
case cpp // C++, not C preprocessor
17-
case objective_c = "objective-c"
18-
case objective_cpp = "objective-cpp"
19-
case swift
14+
public struct Language: RawRepresentable, Codable, Equatable, Hashable {
15+
public typealias LanguageId = String
2016

21-
case unknown
17+
public static let c: Language = Language(rawValue: "c")
18+
public static let cpp: Language = Language(rawValue: "cpp") // C++, not C preprocessor
19+
public static let objective_c: Language = Language(rawValue: "objective-c")
20+
public static let objective_cpp: Language = Language(rawValue: "objective-cpp")
21+
public static let swift: Language = Language(rawValue: "swift")
2222

23-
public init(from decoder: Decoder) throws {
24-
let container = try decoder.singleValueContainer()
25-
let str = try container.decode(String.self)
26-
if let value = Language(rawValue: str) {
27-
self = value
28-
} else {
29-
self = .unknown
30-
}
23+
public let rawValue: LanguageId
24+
public init(rawValue: LanguageId) {
25+
self.rawValue = rawValue
3126
}
3227

3328
/// Clang-compatible language name suitable for use with `-x <language>`.
@@ -38,7 +33,7 @@ public enum Language: String, Codable, Hashable {
3833
case .cpp: return "c++"
3934
case .objective_c: return "objective-c"
4035
case .objective_cpp: return "objective-c++"
41-
case .unknown: return nil
36+
default: return nil
4237
}
4338
}
4439

@@ -47,3 +42,9 @@ public enum Language: String, Codable, Hashable {
4742
return xflag.map { "\($0)-header" }
4843
}
4944
}
45+
46+
extension Language: CustomStringConvertible {
47+
public var description: String {
48+
return rawValue
49+
}
50+
}

Tests/LanguageServerProtocolTests/CodingTests.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,7 @@ final class CodingTests: XCTestCase {
202202
checkCoding(Language.objective_c, json: "\"objective-c\"")
203203
checkCoding(Language.objective_cpp, json: "\"objective-cpp\"")
204204
checkCoding(Language.swift, json: "\"swift\"")
205-
checkCoding(Language.unknown, json: "\"unknown\"")
206-
checkDecoding(json: "\"asdfAF\"", expected: Language.unknown)
205+
checkCoding(Language(rawValue: "unknown"), json: "\"unknown\"")
207206

208207
checkCoding(DiagnosticCode.number(123), json: "123")
209208
checkCoding(DiagnosticCode.string("hi"), json: "\"hi\"")

Tests/SKCoreTests/FallbackBuildSystemTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
@testable import SKCore
14-
14+
import LanguageServerProtocol
1515
import Basic
1616
import XCTest
1717

@@ -100,6 +100,6 @@ final class FallbackBuildSystemTests: XCTestCase {
100100
func testUnknown() {
101101
let source = AbsolutePath("/my/source.mm")
102102
let bs = FallbackBuildSystem()
103-
XCTAssertNil(bs.settings(for: source.asURL, .unknown))
103+
XCTAssertNil(bs.settings(for: source.asURL, Language(rawValue: "unknown")))
104104
}
105105
}

0 commit comments

Comments
 (0)