Skip to content

Commit 714be46

Browse files
authored
Merge pull request #2419 from xedin/preconcurrency-conformances
Add support for `@preconcurrency` type attribute
2 parents 7ba7687 + a93a3a2 commit 714be46

File tree

6 files changed

+26
-1
lines changed

6 files changed

+26
-1
lines changed

CodeGeneration/Sources/SyntaxSupport/KeywordSpec.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ public enum Keyword: CaseIterable {
232232
case package
233233
case postfix
234234
case `precedencegroup`
235+
case preconcurrency
235236
case prefix
236237
case `private`
237238
case `Protocol`
@@ -684,6 +685,8 @@ public enum Keyword: CaseIterable {
684685
return KeywordSpec("unavailable")
685686
case .unchecked:
686687
return KeywordSpec("unchecked")
688+
case .preconcurrency:
689+
return KeywordSpec("preconcurrency")
687690
case .unowned:
688691
return KeywordSpec("unowned")
689692
case .unsafe:

Sources/SwiftParser/TokenPrecedence.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ enum TokenPrecedence: Comparable {
247247
.escaping,
248248
.noDerivative,
249249
.noescape,
250+
.preconcurrency,
250251
.Sendable,
251252
.retroactive,
252253
.unchecked:

Sources/SwiftParser/TokenSpecSet.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,7 @@ enum TypeAttribute: TokenSpecSet {
636636
case escaping
637637
case noDerivative
638638
case noescape
639+
case preconcurrency
639640
case retroactive
640641
case Sendable
641642
case unchecked
@@ -652,6 +653,7 @@ enum TypeAttribute: TokenSpecSet {
652653
case TokenSpec(.escaping): self = .escaping
653654
case TokenSpec(.noDerivative): self = .noDerivative
654655
case TokenSpec(.noescape): self = .noescape
656+
case TokenSpec(.preconcurrency): self = .preconcurrency
655657
case TokenSpec(.Sendable): self = .Sendable
656658
case TokenSpec(.retroactive): self = .retroactive
657659
case TokenSpec(.unchecked): self = .unchecked
@@ -671,6 +673,7 @@ enum TypeAttribute: TokenSpecSet {
671673
case .escaping: return .keyword(.escaping)
672674
case .noDerivative: return .keyword(.noDerivative)
673675
case .noescape: return .keyword(.noescape)
676+
case .preconcurrency: return .keyword(.preconcurrency)
674677
case .retroactive: return .keyword(.retroactive)
675678
case .Sendable: return .keyword(.Sendable)
676679
case .unchecked: return .keyword(.unchecked)

Sources/SwiftParser/Types.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@ extension Parser {
924924
mutating func parseTypeAttribute() -> RawAttributeListSyntax.Element {
925925
switch peek(isAtAnyIn: TypeAttribute.self) {
926926
case ._local, ._noMetadata, .async, .escaping, .noDerivative, .noescape,
927-
.retroactive, .Sendable, .unchecked, .autoclosure:
927+
.preconcurrency, .retroactive, .Sendable, .unchecked, .autoclosure:
928928
// Known type attribute that doesn't take any arguments
929929
return parseAttributeWithoutArguments()
930930
case .differentiable:

Sources/SwiftSyntax/generated/Keyword.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ public enum Keyword: UInt8, Hashable {
174174
case package
175175
case postfix
176176
case `precedencegroup`
177+
case preconcurrency
177178
case prefix
178179
case `private`
179180
case `Protocol`
@@ -676,6 +677,8 @@ public enum Keyword: UInt8, Hashable {
676677
self = .associatedtype
677678
case "differentiable":
678679
self = .differentiable
680+
case "preconcurrency":
681+
self = .preconcurrency
679682
case "witness_method":
680683
self = .witness_method
681684
default:
@@ -949,6 +952,7 @@ public enum Keyword: UInt8, Hashable {
949952
"package",
950953
"postfix",
951954
"precedencegroup",
955+
"preconcurrency",
952956
"prefix",
953957
"private",
954958
"Protocol",

Tests/SwiftParserTest/DeclarationTests.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,20 @@ final class DeclarationTests: ParserTestCase {
742742
)
743743
}
744744

745+
func testParsePreconcurrency() {
746+
assertParse(
747+
"""
748+
struct MyValue: @preconcurrency P {}
749+
"""
750+
)
751+
752+
assertParse(
753+
"""
754+
extension MyValue: @preconcurrency P {}
755+
"""
756+
)
757+
}
758+
745759
func testParseDynamicReplacement() {
746760
assertParse(
747761
"""

0 commit comments

Comments
 (0)