Skip to content

Commit f726b85

Browse files
committed
Make the description of some nodes more clear
Refactor some codes to make them cleaner
1 parent c543645 commit f726b85

File tree

9 files changed

+33
-42
lines changed

9 files changed

+33
-42
lines changed

CodeGeneration/Sources/SyntaxSupport/AvailabilityNodes.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,27 +121,27 @@ public let AVAILABILITY_NODES: [Node] = [
121121
// version-tuple-element -> '.' interger-literal
122122
Node(
123123
name: "VersionComponent",
124-
nameForDiagnostics: "version tuple element",
125-
description: "An element to represent a dot and number pair",
124+
nameForDiagnostics: nil,
125+
description: "An element to represent a single component in a version, like `.1`.",
126126
kind: "Syntax",
127127
children: [
128128
Child(
129129
name: "Period",
130130
kind: .token(choices: [.token(tokenKind: "PeriodToken")]),
131-
description: "The period of this pair"
131+
description: "The period of this version component"
132132
),
133133
Child(
134134
name: "Number",
135135
kind: .token(choices: [.token(tokenKind: "IntegerLiteralToken")]),
136-
description: "The number of this pair"
136+
description: "The version number of this component"
137137
),
138138
]
139139
),
140140

141141
// version-list -> version-tuple-element version-list?
142142
Node(
143143
name: "VersionComponentList",
144-
nameForDiagnostics: "version list",
144+
nameForDiagnostics: nil,
145145
kind: "SyntaxCollection",
146146
element: "VersionComponent",
147147
omitWhenEmpty: true
@@ -162,7 +162,6 @@ public let AVAILABILITY_NODES: [Node] = [
162162
Child(
163163
name: "Components",
164164
kind: .collection(kind: "VersionComponentList", collectionElementName: "VersionComponent"),
165-
nameForDiagnostics: "components",
166165
isOptional: true
167166
),
168167
]

Sources/SwiftParser/Availability.swift

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ extension Parser {
123123
(.obsoleted, let handle)?:
124124
let argumentLabel = self.eat(handle)
125125
let (unexpectedBeforeColon, colon) = self.expect(.colon)
126-
let version = self.parseVersionTuple()
126+
let version = self.parseVersionTuple(maxComponentCount: 3)
127127
entry = .availabilityLabeledArgument(
128128
RawAvailabilityLabeledArgumentSyntax(
129129
label: argumentLabel,
@@ -136,7 +136,7 @@ extension Parser {
136136
case (.deprecated, let handle)?:
137137
let argumentLabel = self.eat(handle)
138138
if let colon = self.consume(if: .colon) {
139-
let version = self.parseVersionTuple()
139+
let version = self.parseVersionTuple(maxComponentCount: 3)
140140
entry = .availabilityLabeledArgument(
141141
RawAvailabilityLabeledArgumentSyntax(
142142
label: argumentLabel,
@@ -227,7 +227,7 @@ extension Parser {
227227

228228
let version: RawVersionTupleSyntax?
229229
if self.at(.integerLiteral, .floatingLiteral) {
230-
version = self.parseVersionTuple()
230+
version = self.parseVersionTuple(maxComponentCount: 3)
231231
} else {
232232
version = nil
233233
}
@@ -258,10 +258,10 @@ extension Parser {
258258
/// Grammar
259259
/// =======
260260
///
261-
/// platform-version → decimal-digits
262-
/// platform-version → decimal-digits '.' decimal-digits
263-
/// platform-version → decimal-digits '.' decimal-digits '.' decimal-digits
264-
mutating func parseVersionTuple(maxComponentCount: Int = 3) -> RawVersionTupleSyntax {
261+
/// version-tuple -> integer-literal version-list?
262+
/// version-list -> version-tuple-element version-list?
263+
/// version-tuple-element -> '.' interger-literal
264+
mutating func parseVersionTuple(maxComponentCount: Int) -> RawVersionTupleSyntax {
265265
if self.at(.floatingLiteral),
266266
let periodIndex = self.currentToken.tokenText.firstIndex(of: UInt8(ascii: ".")),
267267
self.currentToken.tokenText[0..<periodIndex].allSatisfy({ Unicode.Scalar($0).isDigit })
@@ -271,26 +271,24 @@ extension Parser {
271271
let major = self.consumePrefix(SyntaxText(rebasing: self.currentToken.tokenText[0..<periodIndex]), as: .integerLiteral)
272272

273273
var components: [RawVersionComponentSyntax] = []
274-
for _ in 1..<maxComponentCount {
274+
var trailingComponents: [RawVersionComponentSyntax] = []
275+
276+
for i in 1... {
275277
guard let period = self.consume(if: .period) else {
276278
break
277279
}
278280
let version = self.expectDecimalIntegerWithoutRecovery()
279281

280-
components.append(RawVersionComponentSyntax(period: period, number: version, arena: self.arena))
281-
}
282+
let versionComponent = RawVersionComponentSyntax(period: period, number: version, arena: self.arena)
282283

283-
var trailingComponents: [RawVersionComponentSyntax] = []
284-
var unexpectedTrailingComponents: RawUnexpectedNodesSyntax?
285-
286-
repeat {
287-
guard let period = self.consume(if: .period) else {
288-
break
284+
if i < maxComponentCount {
285+
components.append(versionComponent)
286+
} else {
287+
trailingComponents.append(versionComponent)
289288
}
290-
let version = self.expectDecimalIntegerWithoutRecovery()
291-
trailingComponents.append(RawVersionComponentSyntax(period: period, number: version, arena: self.arena))
289+
}
292290

293-
} while true
291+
var unexpectedTrailingComponents: RawUnexpectedNodesSyntax?
294292

295293
if !trailingComponents.isEmpty {
296294
unexpectedTrailingComponents = RawUnexpectedNodesSyntax(elements: trailingComponents.compactMap { $0.as(RawSyntax.self) }, arena: self.arena)

Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,7 @@ public class ParseDiagnosticsGenerator: SyntaxAnyVisitor {
545545
handledNodes: [label.id]
546546
)
547547

548-
[node.unexpectedBetweenLabelAndColon?.id, node.colon?.id, node.versionTuple?.id].compactMap { $0 }.forEach { handledNodes.append($0) }
548+
handledNodes.append(contentsOf: [node.unexpectedBetweenLabelAndColon?.id, node.colon?.id, node.versionTuple?.id].compactMap { $0 })
549549
}
550550

551551
if let versionTuple = node.versionTuple,

Sources/SwiftParserDiagnostics/generated/ChildNameForDiagnostics.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,8 +362,6 @@ private func childNameForDiagnostics(_ keyPath: AnyKeyPath) -> String? {
362362
return "attributes"
363363
case \VariableDeclSyntax.modifiers:
364364
return "modifiers"
365-
case \VersionTupleSyntax.components:
366-
return "components"
367365
default:
368366
return nil
369367
}

Sources/SwiftParserDiagnostics/generated/SyntaxKindNameForDiagnostics.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -385,10 +385,6 @@ extension SyntaxKind {
385385
return "value binding pattern"
386386
case .variableDecl:
387387
return "variable"
388-
case .versionComponentList:
389-
return "version list"
390-
case .versionComponent:
391-
return "version tuple element"
392388
case .versionTuple:
393389
return "version tuple"
394390
case .whereClause:

Sources/SwiftSyntax/generated/SyntaxCollections.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9905,8 +9905,8 @@ public struct VersionComponentListSyntax: SyntaxCollection, SyntaxHashable {
99059905
let data: SyntaxData = withExtendedLifetime(SyntaxArena()) { arena in
99069906
let raw = RawSyntax.makeLayout(kind: SyntaxKind.versionComponentList,
99079907
from: children.map {
9908-
$0.raw
9909-
}, arena: arena)
9908+
$0.raw
9909+
}, arena: arena)
99109910
return SyntaxData.forRoot(raw)
99119911
}
99129912
self.init(data)
@@ -10074,7 +10074,7 @@ extension VersionComponentListSyntax: BidirectionalCollection {
1007410074
return rawChildren.distance(from: start, to: end)
1007510075
}
1007610076

10077-
public subscript (position: SyntaxChildrenIndex) -> Element {
10077+
public subscript(position: SyntaxChildrenIndex) -> Element {
1007810078
let (raw, info) = rawChildren[position]
1007910079
let absoluteRaw = AbsoluteRawSyntax(raw: raw!, info: info)
1008010080
let data = SyntaxData(absoluteRaw, parent: Syntax(self))

Sources/SwiftSyntax/generated/raw/RawSyntaxNodes.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21956,8 +21956,8 @@ public struct RawVersionComponentListSyntax: RawSyntaxNodeProtocol {
2195621956
let raw = RawSyntax.makeLayout(
2195721957
kind: .versionComponentList, uninitializedCount: elements.count, arena: arena) { layout in
2195821958
guard var ptr = layout.baseAddress else {
21959-
return
21960-
}
21959+
return
21960+
}
2196121961
for elem in elements {
2196221962
ptr.initialize(to: elem.raw)
2196321963
ptr += 1

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodes.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17434,7 +17434,7 @@ public struct UnderscorePrivateAttributeArgumentsSyntax: SyntaxProtocol, SyntaxH
1743417434

1743517435
// MARK: - VersionComponentSyntax
1743617436

17437-
/// An element to represent a dot and number pair
17437+
/// An element to represent a single component in a version, like `.1`.
1743817438
public struct VersionComponentSyntax: SyntaxProtocol, SyntaxHashable {
1743917439
public let _syntaxNode: Syntax
1744017440

@@ -17501,7 +17501,7 @@ public struct VersionComponentSyntax: SyntaxProtocol, SyntaxHashable {
1750117501
}
1750217502
}
1750317503

17504-
/// The period of this pair
17504+
/// The period of this version component
1750517505
public var period: TokenSyntax {
1750617506
get {
1750717507
return TokenSyntax(data.child(at: 1, parent: Syntax(self))!)
@@ -17520,7 +17520,7 @@ public struct VersionComponentSyntax: SyntaxProtocol, SyntaxHashable {
1752017520
}
1752117521
}
1752217522

17523-
/// The number of this pair
17523+
/// The version number of this component
1752417524
public var number: TokenSyntax {
1752517525
get {
1752617526
return TokenSyntax(data.child(at: 3, parent: Syntax(self))!)

Tests/SwiftParserTest/AvailabilityTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ final class AvailabilityTests: XCTestCase {
163163
func test() {}
164164
""",
165165
diagnostics: [
166-
DiagnosticSpec(message: "expected integer literal in version tuple element", fixIts: ["insert integer literal"]),
166+
DiagnosticSpec(message: "expected integer literal in version tuple", fixIts: ["insert integer literal"]),
167167
DiagnosticSpec(message: "unexpected code '0e10' in attribute"),
168168
],
169169
fixedSource: """
@@ -193,7 +193,7 @@ final class AvailabilityTests: XCTestCase {
193193
func test() {}
194194
""",
195195
diagnostics: [
196-
DiagnosticSpec(message: "expected integer literal in version tuple element", fixIts: ["insert integer literal"]),
196+
DiagnosticSpec(message: "expected integer literal in version tuple", fixIts: ["insert integer literal"]),
197197
DiagnosticSpec(message: "unexpected code '0xff' in attribute"),
198198
],
199199
fixedSource: """

0 commit comments

Comments
 (0)