From 78e9b16def86a8cb5fc4b854159f867c0aaae9ac Mon Sep 17 00:00:00 2001 From: Xi Ge Date: Thu, 13 Sep 2018 14:51:15 -0700 Subject: [PATCH] Allow TokenKind to check whether it's a keyword. --- Sources/SwiftSyntax/TokenKind.swift.gyb | 13 +++++++++++++ Tests/SwiftSyntaxTest/TokenTest.swift | 11 +++++++++++ 2 files changed, 24 insertions(+) create mode 100644 Tests/SwiftSyntaxTest/TokenTest.swift 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) + } +}