Skip to content

Commit cd981c6

Browse files
committed
Guard EntryMacro tests with SwiftSyntax600 availability check
Tests cover new lexical context feature of SwiftSyntaxMacros.
1 parent a78f06f commit cd981c6

File tree

2 files changed

+69
-64
lines changed

2 files changed

+69
-64
lines changed
+43-41
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,54 @@
1-
import MacroTesting
2-
import XCTest
1+
#if canImport(SwiftSyntax600)
2+
import MacroTesting
3+
import XCTest
34

4-
final class EntryMacroTests: BaseTestCase {
5-
override func invokeTest() {
6-
withMacroTesting(
7-
macros: [
8-
EntryMacro.self
9-
]
10-
) {
11-
super.invokeTest()
5+
final class EntryMacroTests: BaseTestCase {
6+
override func invokeTest() {
7+
withMacroTesting(
8+
macros: [
9+
EntryMacro.self
10+
]
11+
) {
12+
super.invokeTest()
13+
}
1214
}
13-
}
1415

15-
func testWithinEnvironmentValues() {
16-
assertMacro {
17-
"""
18-
extension EnvironmentValues {
19-
@Entry var x: String = ""
20-
}
21-
"""
22-
} expansion: {
23-
"""
24-
extension EnvironmentValues {
25-
var x: String {
26-
get {
27-
fatalError()
16+
func testWithinEnvironmentValues() {
17+
assertMacro {
18+
"""
19+
extension EnvironmentValues {
20+
@Entry var x: String = ""
21+
}
22+
"""
23+
} expansion: {
24+
"""
25+
extension EnvironmentValues {
26+
var x: String {
27+
get {
28+
fatalError()
29+
}
2830
}
2931
}
32+
"""
3033
}
31-
"""
3234
}
33-
}
3435

35-
func testNotWithinEnvironmentValues() {
36-
assertMacro {
37-
"""
38-
extension String {
39-
@Entry var x: String = ""
40-
}
41-
"""
42-
} diagnostics: {
43-
"""
44-
extension String {
45-
@Entry var x: String = ""
46-
┬─────
47-
╰─ 🛑 '@Entry' macro can only attach to var declarations inside extensions of EnvironmentValues
36+
func testNotWithinEnvironmentValues() {
37+
assertMacro {
38+
"""
39+
extension String {
40+
@Entry var x: String = ""
41+
}
42+
"""
43+
} diagnostics: {
44+
"""
45+
extension String {
46+
@Entry var x: String = ""
47+
┬─────
48+
╰─ 🛑 '@Entry' macro can only attach to var declarations inside extensions of EnvironmentValues
49+
}
50+
"""
4851
}
49-
"""
5052
}
5153
}
52-
}
54+
#endif
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
1-
import SwiftSyntax
2-
import SwiftSyntaxMacros
1+
#if canImport(SwiftSyntax600)
2+
import SwiftSyntax
3+
import SwiftSyntaxMacros
34

4-
// Not complete, just enough to unit test lexical context.
5-
public struct EntryMacro: AccessorMacro {
6-
public static func expansion(
7-
of node: AttributeSyntax,
8-
providingAccessorsOf declaration: some DeclSyntaxProtocol,
9-
in context: some MacroExpansionContext
10-
) throws -> [AccessorDeclSyntax] {
11-
let isInEnvironmentValues = context.lexicalContext.contains { lexicalContext in
12-
lexicalContext.as(ExtensionDeclSyntax.self)?.extendedType.trimmedDescription
13-
== "EnvironmentValues"
14-
}
15-
16-
guard isInEnvironmentValues else {
17-
throw MacroExpansionErrorMessage(
18-
"'@Entry' macro can only attach to var declarations inside extensions of EnvironmentValues")
19-
}
5+
// Not complete, just enough to unit test lexical context.
6+
public struct EntryMacro: AccessorMacro {
7+
public static func expansion(
8+
of node: AttributeSyntax,
9+
providingAccessorsOf declaration: some DeclSyntaxProtocol,
10+
in context: some MacroExpansionContext
11+
) throws -> [AccessorDeclSyntax] {
12+
let isInEnvironmentValues = context.lexicalContext.contains { lexicalContext in
13+
lexicalContext.as(ExtensionDeclSyntax.self)?.extendedType.trimmedDescription
14+
== "EnvironmentValues"
15+
}
2016

21-
return [
22-
AccessorDeclSyntax(accessorSpecifier: .keyword(.get)) {
23-
"fatalError()"
17+
guard isInEnvironmentValues else {
18+
throw MacroExpansionErrorMessage(
19+
"'@Entry' macro can only attach to var declarations inside extensions of EnvironmentValues"
20+
)
2421
}
25-
]
22+
23+
return [
24+
AccessorDeclSyntax(accessorSpecifier: .keyword(.get)) {
25+
"fatalError()"
26+
}
27+
]
28+
}
2629
}
27-
}
30+
#endif

0 commit comments

Comments
 (0)