Merge pull request #36 from JohnSundell/keywords-as-function-names

Don’t treat keywords used as function names as keywords
This commit is contained in:
John Sundell 2019-03-08 18:05:20 +01:00 committed by GitHub
commit b6232fc67f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 0 deletions

View File

@ -221,6 +221,10 @@ private extension SwiftGrammar {
return false return false
} }
} }
guard !segment.tokens.previous.isAny(of: "func", "`") else {
return false
}
} }
return keywords.contains(segment.tokens.current) return keywords.contains(segment.tokens.current)

View File

@ -520,6 +520,50 @@ final class DeclarationTests: SyntaxHighlighterTestCase {
]) ])
} }
func testFunctionDeclarationWithNonEscapedKeywordAsName() {
let components = highlighter.highlight("func get() -> Int { return 7 }")
XCTAssertEqual(components, [
.token("func", .keyword),
.whitespace(" "),
.plainText("get()"),
.whitespace(" "),
.plainText("->"),
.whitespace(" "),
.token("Int", .type),
.whitespace(" "),
.plainText("{"),
.whitespace(" "),
.token("return", .keyword),
.whitespace(" "),
.token("7", .number),
.whitespace(" "),
.plainText("}")
])
}
func testFunctionDeclarationWithEscapedKeywordAsName() {
let components = highlighter.highlight("func `public`() -> Int { return 7 }")
XCTAssertEqual(components, [
.token("func", .keyword),
.whitespace(" "),
.plainText("`public`()"),
.whitespace(" "),
.plainText("->"),
.whitespace(" "),
.token("Int", .type),
.whitespace(" "),
.plainText("{"),
.whitespace(" "),
.token("return", .keyword),
.whitespace(" "),
.token("7", .number),
.whitespace(" "),
.plainText("}")
])
}
func testIndirectEnumDeclaration() { func testIndirectEnumDeclaration() {
let components = highlighter.highlight(""" let components = highlighter.highlight("""
indirect enum Content { indirect enum Content {
@ -583,6 +627,8 @@ extension DeclarationTests {
("testSubscriptDeclaration", testSubscriptDeclaration), ("testSubscriptDeclaration", testSubscriptDeclaration),
("testDeferDeclaration", testDeferDeclaration), ("testDeferDeclaration", testDeferDeclaration),
("testFunctionDeclarationWithInOutParameter", testFunctionDeclarationWithInOutParameter), ("testFunctionDeclarationWithInOutParameter", testFunctionDeclarationWithInOutParameter),
("testFunctionDeclarationWithNonEscapedKeywordAsName", testFunctionDeclarationWithNonEscapedKeywordAsName),
("testFunctionDeclarationWithEscapedKeywordAsName", testFunctionDeclarationWithEscapedKeywordAsName),
("testIndirectEnumDeclaration", testIndirectEnumDeclaration) ("testIndirectEnumDeclaration", testIndirectEnumDeclaration)
] ]
} }