Skip to content

Commit 85714ab

Browse files
committed
Address review comments
1 parent 1b4a841 commit 85714ab

File tree

2 files changed

+30
-26
lines changed

2 files changed

+30
-26
lines changed

Sources/SwiftSyntax/Identifier.swift

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,43 +14,47 @@
1414
public struct Identifier: Equatable, Hashable, Sendable {
1515
/// The sanitized `text` of a token.
1616
public var name: String {
17-
String(syntaxText: rawIdentifier.name)
17+
String(syntaxText: raw.name)
1818
}
1919

2020
@_spi(RawSyntax)
21-
public let rawIdentifier: RawIdentifier
22-
23-
let arena: RetainedSyntaxArena
21+
public let raw: RawIdentifier
2422

2523
public init?(_ token: TokenSyntax) {
26-
guard case .identifier(let text) = token.tokenKind else {
24+
guard case .identifier = token.tokenKind else {
2725
return nil
2826
}
2927

30-
var rawText = text.contains("`") ? text.trimmingCharacters(in: "`") : Substring(text)
28+
self.raw = RawIdentifier(token.tokenView)
29+
}
30+
}
3131

32-
let syntaxArena = SyntaxArena()
32+
@_spi(RawSyntax)
33+
public struct RawIdentifier: Equatable, Hashable, Sendable {
34+
public let name: SyntaxText
3335

34-
let name = rawText.withUTF8 {
35-
syntaxArena.intern(
36-
SyntaxText(buffer: SyntaxArenaAllocatedBufferPointer<UInt8>($0))
37-
)
38-
}
36+
private let arena: RetainedSyntaxArena
3937

40-
self.rawIdentifier = RawIdentifier(name: name)
41-
self.arena = RetainedSyntaxArena(syntaxArena)
38+
@_spi(RawSyntax)
39+
fileprivate init(_ raw: RawSyntaxTokenView) {
40+
let backtick = SyntaxText(StaticString(stringLiteral: "`"))
41+
let arena = SyntaxArena()
42+
if raw.rawText.count > 2 && raw.rawText.hasPrefix(backtick) && raw.rawText.hasSuffix(backtick) {
43+
let startIndex = raw.rawText.index(after: raw.rawText.startIndex)
44+
let endIndex = raw.rawText.index(before: raw.rawText.endIndex)
45+
46+
self.name = arena.intern(SyntaxText(rebasing: raw.rawText[startIndex..<endIndex]))
47+
} else {
48+
self.name = arena.intern(raw.rawText)
49+
}
50+
self.arena = RetainedSyntaxArena(arena)
4251
}
4352

44-
public static func == (lhs: Identifier, rhs: Identifier) -> Bool {
45-
lhs.rawIdentifier == rhs.rawIdentifier
53+
public static func == (lhs: RawIdentifier, rhs: RawIdentifier) -> Bool {
54+
lhs.name == rhs.name
4655
}
4756

4857
public func hash(into hasher: inout Hasher) {
49-
hasher.combine(rawIdentifier)
58+
hasher.combine(name)
5059
}
5160
}
52-
53-
@_spi(RawSyntax)
54-
public struct RawIdentifier: Equatable, Hashable, Sendable {
55-
public let name: SyntaxText
56-
}

Tests/SwiftSyntaxTest/IdentifierTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,22 @@ class IdentifierTests: XCTestCase {
3030
XCTAssertEqual(Identifier(backtickedToken)?.name, "backtickedToken")
3131

3232
let multiBacktickedToken = TokenSyntax(stringLiteral: "```multiBacktickedToken```")
33-
XCTAssertEqual(Identifier(multiBacktickedToken)?.name, "multiBacktickedToken")
33+
XCTAssertEqual(Identifier(multiBacktickedToken)?.name, "``multiBacktickedToken``")
3434

3535
let unicodeNormalizedToken = TokenSyntax(stringLiteral: "\u{e0}") // "a`"
3636
XCTAssertEqual(Identifier(unicodeNormalizedToken)?.name, "\u{61}\u{300}") // "à"
3737
}
3838

3939
public func testRawIdentifier() {
40-
let rawIdentifier = TokenSyntax(stringLiteral: "sometoken").identifier?.rawIdentifier
40+
let rawIdentifier = TokenSyntax(stringLiteral: "sometoken").identifier?.raw
4141
XCTAssertEqual(rawIdentifier?.name, SyntaxText("sometoken"))
4242
}
4343

44-
public func testTokenSyntaxIdentifier() {
44+
public func testTokenSyntaxIdentifier() throws {
4545
let tokenSyntax = TokenSyntax(stringLiteral: "sometoken")
4646
XCTAssertEqual(tokenSyntax.identifier, Identifier(tokenSyntax))
4747

48-
let nonIdentifierToken = DeclSyntax("let a = 1").firstToken(viewMode: .all)!
48+
let nonIdentifierToken = try XCTUnwrap(DeclSyntax("let a = 1").firstToken(viewMode: .all))
4949
XCTAssertNil(nonIdentifierToken.identifier)
5050
}
5151
}

0 commit comments

Comments
 (0)