diff --git a/Sources/SwiftSyntax/TokenKind.swift.gyb b/Sources/SwiftSyntax/TokenKind.swift.gyb index 463fdbb8719..cb39f0a6a77 100644 --- a/Sources/SwiftSyntax/TokenKind.swift.gyb +++ b/Sources/SwiftSyntax/TokenKind.swift.gyb @@ -45,6 +45,19 @@ public enum TokenKind: Codable { } } + public var isKeyword: Bool { + switch self { + case .eof: return false +% for token in SYNTAX_TOKENS: +% if token.is_keyword: + case .${token.swift_kind()}: return true +% else: + case .${token.swift_kind()}: return false +% end +% end + } + } + /// Keys for serializing and deserializing token kinds. enum CodingKeys: String, CodingKey { case kind, text diff --git a/Tests/SwiftSyntaxTest/TokenTest.swift b/Tests/SwiftSyntaxTest/TokenTest.swift new file mode 100644 index 00000000000..f1f2f963fa0 --- /dev/null +++ b/Tests/SwiftSyntaxTest/TokenTest.swift @@ -0,0 +1,11 @@ +import XCTest +import SwiftSyntax + +public class TokenSyntaxTestCase: XCTestCase { + public func testKeywordKinds() { + XCTAssertTrue(TokenKind.operatorKeyword.isKeyword) + XCTAssertTrue(TokenKind.funcKeyword.isKeyword) + XCTAssertFalse(TokenKind.leftAngle.isKeyword) + XCTAssertFalse(TokenKind.rightAngle.isKeyword) + } +}