@@ -24,8 +24,7 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
24
24
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
25
25
// token.
26
26
guard var modifiers = node. modifiers else {
27
- let nodeWithModifier = node. with ( \. modifiers, . init( [ modifierKeyword] ) )
28
- let result = nodeByRelocatingTrivia ( in: nodeWithModifier) { $0. modifiers }
27
+ let result = setOnlyModifier ( in: node, keywordKeypath: \. bindingSpecifier)
29
28
return DeclSyntax ( result)
30
29
}
31
30
// If variable already has an accessor keyword, skip (do not overwrite)
@@ -40,8 +39,7 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
40
39
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
41
40
// token.
42
41
guard var modifiers = node. modifiers else {
43
- let nodeWithModifier = node. with ( \. modifiers, . init( [ modifierKeyword] ) )
44
- let result = nodeByRelocatingTrivia ( in: nodeWithModifier) { $0. modifiers }
42
+ let result = setOnlyModifier ( in: node, keywordKeypath: \. funcKeyword)
45
43
return DeclSyntax ( result)
46
44
}
47
45
guard modifiers. accessLevelModifier == nil else { return DeclSyntax ( node) }
@@ -53,8 +51,7 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
53
51
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
54
52
// token.
55
53
guard var modifiers = node. modifiers else {
56
- let nodeWithModifier = node. with ( \. modifiers, . init( [ modifierKeyword] ) )
57
- let result = nodeByRelocatingTrivia ( in: nodeWithModifier) { $0. modifiers }
54
+ let result = setOnlyModifier ( in: node, keywordKeypath: \. associatedtypeKeyword)
58
55
return DeclSyntax ( result)
59
56
}
60
57
guard modifiers. accessLevelModifier == nil else { return DeclSyntax ( node) }
@@ -66,8 +63,7 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
66
63
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
67
64
// token.
68
65
guard var modifiers = node. modifiers else {
69
- let nodeWithModifier = node. with ( \. modifiers, . init( [ modifierKeyword] ) )
70
- let result = nodeByRelocatingTrivia ( in: nodeWithModifier) { $0. modifiers }
66
+ let result = setOnlyModifier ( in: node, keywordKeypath: \. classKeyword)
71
67
return DeclSyntax ( result)
72
68
}
73
69
guard modifiers. accessLevelModifier == nil else { return DeclSyntax ( node) }
@@ -79,8 +75,7 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
79
75
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
80
76
// token.
81
77
guard var modifiers = node. modifiers else {
82
- let nodeWithModifier = node. with ( \. modifiers, . init( [ modifierKeyword] ) )
83
- let result = nodeByRelocatingTrivia ( in: nodeWithModifier) { $0. modifiers }
78
+ let result = setOnlyModifier ( in: node, keywordKeypath: \. enumKeyword)
84
79
return DeclSyntax ( result)
85
80
}
86
81
guard modifiers. accessLevelModifier == nil else { return DeclSyntax ( node) }
@@ -92,8 +87,7 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
92
87
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
93
88
// token.
94
89
guard var modifiers = node. modifiers else {
95
- let nodeWithModifier = node. with ( \. modifiers, . init( [ modifierKeyword] ) )
96
- let result = nodeByRelocatingTrivia ( in: nodeWithModifier) { $0. modifiers }
90
+ let result = setOnlyModifier ( in: node, keywordKeypath: \. protocolKeyword)
97
91
return DeclSyntax ( result)
98
92
}
99
93
guard modifiers. accessLevelModifier == nil else { return DeclSyntax ( node) }
@@ -105,8 +99,7 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
105
99
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
106
100
// token.
107
101
guard var modifiers = node. modifiers else {
108
- let nodeWithModifier = node. with ( \. modifiers, . init( [ modifierKeyword] ) )
109
- let result = nodeByRelocatingTrivia ( in: nodeWithModifier) { $0. modifiers }
102
+ let result = setOnlyModifier ( in: node, keywordKeypath: \. structKeyword)
110
103
return DeclSyntax ( result)
111
104
}
112
105
guard modifiers. accessLevelModifier == nil else { return DeclSyntax ( node) }
@@ -118,8 +111,7 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
118
111
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
119
112
// token.
120
113
guard var modifiers = node. modifiers else {
121
- let nodeWithModifier = node. with ( \. modifiers, . init( [ modifierKeyword] ) )
122
- let result = nodeByRelocatingTrivia ( in: nodeWithModifier) { $0. modifiers }
114
+ let result = setOnlyModifier ( in: node, keywordKeypath: \. typealiasKeyword)
123
115
return DeclSyntax ( result)
124
116
}
125
117
guard modifiers. accessLevelModifier == nil else { return DeclSyntax ( node) }
@@ -131,8 +123,7 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
131
123
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
132
124
// token.
133
125
guard var modifiers = node. modifiers else {
134
- let nodeWithModifier = node. with ( \. modifiers, . init( [ modifierKeyword] ) )
135
- let result = nodeByRelocatingTrivia ( in: nodeWithModifier) { $0. modifiers }
126
+ let result = setOnlyModifier ( in: node, keywordKeypath: \. initKeyword)
136
127
return DeclSyntax ( result)
137
128
}
138
129
guard modifiers. accessLevelModifier == nil else { return DeclSyntax ( node) }
@@ -144,8 +135,7 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
144
135
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
145
136
// token.
146
137
guard var modifiers = node. modifiers else {
147
- let nodeWithModifier = node. with ( \. modifiers, . init( [ modifierKeyword] ) )
148
- let result = nodeByRelocatingTrivia ( in: nodeWithModifier) { $0. modifiers }
138
+ let result = setOnlyModifier ( in: node, keywordKeypath: \. subscriptKeyword)
149
139
return DeclSyntax ( result)
150
140
}
151
141
guard modifiers. accessLevelModifier == nil else { return DeclSyntax ( node) }
@@ -161,24 +151,16 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
161
151
/// this method does nothing and returns the given node as-is.
162
152
/// - Parameter node: A node that was updated to include a new modifier.
163
153
/// - Parameter modifiersProvider: A closure that returns all modifiers for the given node.
164
- private func nodeByRelocatingTrivia < NodeType: DeclSyntaxProtocol > (
154
+ private func setOnlyModifier < NodeType: DeclSyntaxProtocol & WithModifiersSyntax > (
165
155
in node: NodeType ,
166
- for modifiersProvider : ( NodeType ) -> DeclModifierListSyntax ?
156
+ keywordKeypath : WritableKeyPath < NodeType , TokenSyntax >
167
157
) -> NodeType {
168
- guard let modifier = modifiersProvider ( node) ? . firstAndOnly,
169
- let movingLeadingTrivia = modifier. nextToken ( viewMode: . sourceAccurate) ? . leadingTrivia
170
- else {
171
- // Otherwise, there's no trivia that needs to be relocated so the node is fine.
172
- return node
173
- }
174
- let nodeWithTrivia = replaceTrivia (
175
- on: node,
176
- token: modifier. firstToken ( viewMode: . sourceAccurate) ,
177
- leadingTrivia: movingLeadingTrivia)
178
- return replaceTrivia (
179
- on: nodeWithTrivia,
180
- token: modifiersProvider ( nodeWithTrivia) ? . first? . nextToken ( viewMode: . sourceAccurate) ,
181
- leadingTrivia: [ ] )
158
+ var node = node
159
+ var modifier = modifierKeyword
160
+ modifier. leadingTrivia = node [ keyPath: keywordKeypath] . leadingTrivia
161
+ node [ keyPath: keywordKeypath] . leadingTrivia = [ ]
162
+ node. modifiers = . init( [ modifier] )
163
+ return node
182
164
}
183
165
}
184
166
0 commit comments