@@ -20,86 +20,81 @@ let renamedChildrenCompatibilityFile = try! SourceFileSyntax(leadingTrivia: copy
20
20
try ExtensionDeclSyntax ( " extension \( layoutNode. type. syntaxBaseName) " ) {
21
21
for child in layoutNode. children {
22
22
if let deprecatedVarName = child. deprecatedVarName {
23
- let childType : TypeSyntax =
24
- child. kind. isNodeChoicesEmpty ? child. syntaxNodeKind. syntaxType : child. syntaxChoicesType
25
- let type = child. isOptional ? TypeSyntax ( " \( childType) ? " ) : childType
26
-
27
- DeclSyntax (
28
- """
29
- @available(*, deprecated, renamed: " \( child. identifier) " )
30
- public var \( deprecatedVarName) : \( type) {
31
- get {
32
- return \( child. baseCallName)
33
- }
34
- set {
35
- \( child. baseCallName) = newValue
36
- }
37
- }
38
- """
39
- )
40
- if let childNode = SYNTAX_NODE_MAP [ child. syntaxNodeKind] ? . collectionNode,
41
- !child. isUnexpectedNodes,
42
- case . collection(
43
- kind: _,
44
- collectionElementName: let collectionElementName,
45
- defaultsToEmpty: _,
46
- deprecatedCollectionElementName: let deprecatedCollectionElementName
47
- ) = child. kind,
48
- let deprecatedCollectionElementName
49
- {
50
- let childEltType = childNode. collectionElementType. syntaxBaseName
51
-
52
- DeclSyntax (
53
- """
54
- @available(*, deprecated, renamed: " add \( raw: collectionElementName) " )
55
- public func add \( raw: deprecatedCollectionElementName) (_ element: \( childEltType) ) -> \( layoutNode. kind. syntaxType) {
56
- return add \( raw: collectionElementName) (element)
57
- }
58
- """
59
- )
23
+ makeCompatibilityVar ( for: child, deprecatedVarName: deprecatedVarName)
24
+ if let addMethod = makeCompatibilityAddMethod ( for: child) {
25
+ addMethod
60
26
}
61
27
}
62
28
}
63
29
64
- let deprecatedNames = layoutNode. children
65
- . filter { !$0. isUnexpectedNodes && $0. hasDeprecatedName }
66
- . map { $0. identifier. description }
67
- . joined ( separator: " , " )
30
+ let renamedName = InitSignature ( layoutNode) . compoundName
31
+ makeCompatibilityInit ( for: InitSignature ( layoutNode) , renamedName: renamedName)
32
+ }
33
+ }
34
+ }
35
+
36
+ func makeCompatibilityVar( for child: Child , deprecatedVarName: TokenSyntax ) -> DeclSyntax {
37
+ let childType : TypeSyntax =
38
+ child. kind. isNodeChoicesEmpty ? child. syntaxNodeKind. syntaxType : child. syntaxChoicesType
39
+ let type = child. isOptional ? TypeSyntax ( " \( childType) ? " ) : childType
68
40
69
- let renamedArguments =
70
- layoutNode. children. map { child in
71
- if child. isUnexpectedNodes {
72
- return " _: "
73
- } else {
74
- return " \( child. labelDeclName) : "
75
- }
76
- } . joined ( separator: " " )
41
+ return DeclSyntax (
42
+ """
43
+ @available(*, deprecated, renamed: " \( child. identifier) " )
44
+ public var \( deprecatedVarName) : \( type) {
45
+ get {
46
+ return \( child. baseCallName)
47
+ }
48
+ set {
49
+ \( child. baseCallName) = newValue
50
+ }
51
+ }
52
+ """
53
+ )
54
+ }
77
55
78
- let renamedName = " \( layoutNode. type. syntaxBaseName) (leadingTrivia: \( renamedArguments) trailingTrivia:) "
56
+ func makeCompatibilityAddMethod( for child: Child ) -> DeclSyntax ? {
57
+ if let childNode = SYNTAX_NODE_MAP [ child. syntaxNodeKind] ? . collectionNode,
58
+ !child. isUnexpectedNodes,
59
+ case . collection(
60
+ kind: _,
61
+ collectionElementName: let collectionElementName,
62
+ defaultsToEmpty: _,
63
+ deprecatedCollectionElementName: let deprecatedCollectionElementName
64
+ ) = child. kind,
65
+ let deprecatedCollectionElementName
66
+ {
67
+ let childEltType = childNode. collectionElementType. syntaxBaseName
79
68
80
- try ! InitializerDeclSyntax (
81
- """
82
- @available(*, deprecated, renamed: \( literal: renamedName) )
83
- @_disfavoredOverload
84
- \( layoutNode. generateInitializerDeclHeader ( useDeprecatedChildName: true ) )
85
- """
86
- ) {
87
- FunctionCallExprSyntax ( callee: ExprSyntax ( " self.init " ) ) {
88
- LabeledExprSyntax ( label: " leadingTrivia " , expression: ExprSyntax ( " leadingTrivia " ) )
89
- for child in layoutNode. children {
90
- if child. isUnexpectedNodes {
91
- LabeledExprSyntax ( expression: ExprSyntax ( " \( child. deprecatedVarName ?? child. baseCallName) " ) )
92
- } else {
93
- LabeledExprSyntax (
94
- label: child. labelDeclName,
95
- colon: . colonToken( ) ,
96
- expression: DeclReferenceExprSyntax ( baseName: child. deprecatedVarName ?? child. baseCallName)
97
- )
98
- }
99
- }
100
- LabeledExprSyntax ( label: " trailingTrivia " , expression: ExprSyntax ( " trailingTrivia " ) )
101
- }
69
+ return DeclSyntax (
70
+ """
71
+ @available(*, deprecated, renamed: " add \( raw: collectionElementName) " )
72
+ public func add \( raw: deprecatedCollectionElementName) (_ element: \( childEltType) ) -> Self {
73
+ return add \( raw: collectionElementName) (element)
74
+ }
75
+ """
76
+ )
77
+ }
78
+
79
+ return nil
80
+ }
81
+
82
+ func makeCompatibilityInit( for signature: InitSignature , renamedName: String ) -> InitializerDeclSyntax {
83
+ try ! InitializerDeclSyntax (
84
+ """
85
+ @available(*, deprecated, renamed: \( literal: renamedName) )
86
+ @_disfavoredOverload
87
+ \( signature. generateInitializerDeclHeader ( useDeprecatedChildName: true ) )
88
+ """
89
+ ) {
90
+ FunctionCallExprSyntax ( callee: ExprSyntax ( " self.init " ) ) {
91
+ LabeledExprSyntax ( label: " leadingTrivia " , expression: ExprSyntax ( " leadingTrivia " ) )
92
+
93
+ for argExpr in signature. makeArgumentsToInitializeNewestChildren ( ) {
94
+ argExpr
102
95
}
96
+
97
+ LabeledExprSyntax ( label: " trailingTrivia " , expression: ExprSyntax ( " trailingTrivia " ) )
103
98
}
104
99
}
105
100
}
0 commit comments