diff --git a/Sources/Splash/Grammar/SwiftGrammar.swift b/Sources/Splash/Grammar/SwiftGrammar.swift index 3fecf9c..c700a4c 100644 --- a/Sources/Splash/Grammar/SwiftGrammar.swift +++ b/Sources/Splash/Grammar/SwiftGrammar.swift @@ -48,7 +48,7 @@ private extension SwiftGrammar { "#selector", "required", "willSet", "didSet", "lazy", "subscript", "defer", "inout", "while", "continue", "fallthrough", "repeat", "indirect", - "deinit", "is" + "deinit", "is", "#file", "#line", "#function" ] as Set).union(accessControlKeywords) static let accessControlKeywords: Set = [ diff --git a/Tests/SplashTests/Tests/DeclarationTests.swift b/Tests/SplashTests/Tests/DeclarationTests.swift index bdaa9a6..62444c4 100644 --- a/Tests/SplashTests/Tests/DeclarationTests.swift +++ b/Tests/SplashTests/Tests/DeclarationTests.swift @@ -656,6 +656,41 @@ final class DeclarationTests: SyntaxHighlighterTestCase { ]) } + func testFunctionDeclarationWithPreProcessors() { + let components = highlighter.highlight(""" + func log(_ file: StaticString = #file, _ function: StaticString = #function) {} + """) + + XCTAssertEqual(components, [ + .token("func", .keyword), + .whitespace(" "), + .plainText("log("), + .token("_", .keyword), + .whitespace(" "), + .plainText("file:"), + .whitespace(" "), + .token("StaticString", .type), + .whitespace(" "), + .plainText("="), + .whitespace(" "), + .token("#file", .keyword), + .plainText(","), + .whitespace(" "), + .token("_", .keyword), + .whitespace(" "), + .plainText("function:"), + .whitespace(" "), + .token("StaticString", .type), + .whitespace(" "), + .plainText("="), + .whitespace(" "), + .token("#function", .keyword), + .plainText(")"), + .whitespace(" "), + .plainText("{}") + ]) + } + func testIndirectEnumDeclaration() { let components = highlighter.highlight(""" indirect enum Content { @@ -725,6 +760,7 @@ extension DeclarationTests { ("testFunctionDeclarationWithInOutParameter", testFunctionDeclarationWithInOutParameter), ("testFunctionDeclarationWithNonEscapedKeywordAsName", testFunctionDeclarationWithNonEscapedKeywordAsName), ("testFunctionDeclarationWithEscapedKeywordAsName", testFunctionDeclarationWithEscapedKeywordAsName), + ("testFunctionDeclarationWithPreProcessors", testFunctionDeclarationWithPreProcessors), ("testIndirectEnumDeclaration", testIndirectEnumDeclaration) ] }