File tree Expand file tree Collapse file tree 3 files changed +90
-0
lines changed Expand file tree Collapse file tree 3 files changed +90
-0
lines changed Original file line number Diff line number Diff line change
1
+ //===----------------------------------------------------------------------===//
2
+ //
3
+ // This source file is part of the Swift.org open source project
4
+ //
5
+ // Copyright (c) 2014 - 2024 Apple Inc. and the Swift project authors
6
+ // Licensed under Apache License v2.0 with Runtime Library Exception
7
+ //
8
+ // See https://swift.org/LICENSE.txt for license information
9
+ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10
+ //
11
+ //===----------------------------------------------------------------------===//
12
+
13
+ /// An abstraction for sanitized values on a token.
14
+ public struct Identifier {
15
+ /// The sanitized `text` of a token.
16
+ public let name : String
17
+
18
+ public init ( _ token: TokenSyntax ) {
19
+ let text = token. text
20
+
21
+ self . name =
22
+ if text. contains ( " ` " ) {
23
+ String ( text. trimmingCharacters ( " ` " ) )
24
+ } else {
25
+ text
26
+ }
27
+ }
28
+ }
Original file line number Diff line number Diff line change @@ -120,3 +120,38 @@ extension RawUnexpectedNodesSyntax {
120
120
self . init ( raw: raw)
121
121
}
122
122
}
123
+
124
+ extension String {
125
+ func removingCharactersStartingWith( _ charactersToTrim: String ) -> Substring {
126
+ var startCharactersToDrop = 0
127
+
128
+ for character in self {
129
+ if charactersToTrim. contains ( character) {
130
+ startCharactersToDrop += 1
131
+ } else {
132
+ break
133
+ }
134
+ }
135
+
136
+ return dropFirst ( startCharactersToDrop)
137
+ }
138
+
139
+ func removingCharactersEndingWith( _ charactersToTrim: String ) -> Substring {
140
+ var endCharactersToDrop = 0
141
+
142
+ for character in reversed ( ) {
143
+ if charactersToTrim. contains ( character) {
144
+ endCharactersToDrop += 1
145
+ } else {
146
+ break
147
+ }
148
+ }
149
+
150
+ return dropLast ( endCharactersToDrop)
151
+ }
152
+
153
+ func trimmingCharacters( _ characters: String ) -> Substring {
154
+ String ( removingCharactersStartingWith ( characters) )
155
+ . removingCharactersEndingWith ( characters)
156
+ }
157
+ }
Original file line number Diff line number Diff line change
1
+ //===----------------------------------------------------------------------===//
2
+ //
3
+ // This source file is part of the Swift.org open source project
4
+ //
5
+ // Copyright (c) 2014 - 2024 Apple Inc. and the Swift project authors
6
+ // Licensed under Apache License v2.0 with Runtime Library Exception
7
+ //
8
+ // See https://swift.org/LICENSE.txt for license information
9
+ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10
+ //
11
+ //===----------------------------------------------------------------------===//
12
+
13
+ import SwiftSyntax
14
+ import XCTest
15
+
16
+ class IdentifierTests : XCTestCase {
17
+ public func testInit( ) {
18
+ let basicToken = TokenSyntax ( stringLiteral: " sometoken " )
19
+ XCTAssertEqual ( Identifier ( basicToken) . name, " sometoken " )
20
+
21
+ let backtickedToken = TokenSyntax ( stringLiteral: " `backtickedtoken` " )
22
+ XCTAssertEqual ( Identifier ( backtickedToken) . name, " backtickedtoken " )
23
+
24
+ let multiBacktickedToken = TokenSyntax ( stringLiteral: " ```backtickedtoken``` " )
25
+ XCTAssertEqual ( Identifier ( multiBacktickedToken) . name, " backtickedtoken " )
26
+ }
27
+ }
You can’t perform that action at this time.
0 commit comments