File tree Expand file tree Collapse file tree 3 files changed +16
-10
lines changed
CodeGeneration/Sources/generate-swiftsyntax/templates/swiftsyntax Expand file tree Collapse file tree 3 files changed +16
-10
lines changed Original file line number Diff line number Diff line change @@ -42,10 +42,13 @@ let syntaxRewriterFile = SourceFileSyntax(leadingTrivia: copyrightHeader) {
42
42
43
43
DeclSyntax (
44
44
"""
45
- /// Rewrite `node` and anchor, making sure that the rewritten node also has
46
- /// a parent if `node` had one.
47
- public func rewrite<SyntaxType: SyntaxProtocol>(_ node: SyntaxType) -> Syntax {
45
+ /// Rewrite `node`, keeping its parent unless `detach` is `true`.
46
+ public func rewrite<SyntaxType: SyntaxProtocol>(_ node: SyntaxType, detach: Bool = false) -> Syntax {
48
47
let rewritten = self.visit(node.data)
48
+ if detach {
49
+ return rewritten
50
+ }
51
+
49
52
return withExtendedLifetime(rewritten) {
50
53
return Syntax(node.data.replacingSelf(rewritten.raw, arena: SyntaxArena()))
51
54
}
@@ -100,7 +103,7 @@ let syntaxRewriterFile = SourceFileSyntax(leadingTrivia: copyrightHeader) {
100
103
/// Visit any Syntax node.
101
104
/// - Parameter node: the node that is being visited
102
105
/// - Returns: the rewritten node
103
- @available(*, deprecated, renamed: " rewrite(_:) " )
106
+ @available(*, deprecated, renamed: " rewrite(_:detach: ) " )
104
107
public func visit(_ node: Syntax) -> Syntax {
105
108
return visit(node.data)
106
109
}
Original file line number Diff line number Diff line change @@ -93,7 +93,7 @@ extension FixIt.MultiNodeChange {
93
93
guard let node = node else {
94
94
return FixIt . MultiNodeChange ( primitiveChanges: [ ] )
95
95
}
96
- var changes = [ FixIt . Change. replace ( oldNode: Syntax ( node) , newNode: MissingMaker ( ) . rewrite ( node) ) ]
96
+ var changes = [ FixIt . Change. replace ( oldNode: Syntax ( node) , newNode: MissingMaker ( ) . rewrite ( node, detach : true ) ) ]
97
97
if transferTrivia {
98
98
changes += FixIt . MultiNodeChange. transferTriviaAtSides ( from: [ node] ) . primitiveChanges
99
99
}
@@ -138,7 +138,7 @@ extension FixIt.MultiNodeChange {
138
138
leadingTrivia: Trivia ? = nil ,
139
139
trailingTrivia: Trivia ? = nil
140
140
) -> Self {
141
- var presentNode = MissingNodesBasicFormatter ( viewMode: . fixedUp) . rewrite ( node)
141
+ var presentNode = MissingNodesBasicFormatter ( viewMode: . fixedUp) . rewrite ( node, detach : true )
142
142
presentNode = PresentMaker ( ) . rewrite ( presentNode)
143
143
144
144
if let leadingTrivia = leadingTrivia {
Original file line number Diff line number Diff line change @@ -28,10 +28,13 @@ open class SyntaxRewriter {
28
28
self . viewMode = viewMode
29
29
}
30
30
31
- /// Rewrite `node` and anchor, making sure that the rewritten node also has
32
- /// a parent if `node` had one.
33
- public func rewrite< SyntaxType: SyntaxProtocol > ( _ node: SyntaxType ) -> Syntax {
31
+ /// Rewrite `node`, keeping its parent unless `detach` is `true`.
32
+ public func rewrite< SyntaxType: SyntaxProtocol > ( _ node: SyntaxType , detach: Bool = false ) -> Syntax {
34
33
let rewritten = self . visit ( node. data)
34
+ if detach {
35
+ return rewritten
36
+ }
37
+
35
38
return withExtendedLifetime ( rewritten) {
36
39
return Syntax ( node. data. replacingSelf ( rewritten. raw, arena: SyntaxArena ( ) ) )
37
40
}
@@ -68,7 +71,7 @@ open class SyntaxRewriter {
68
71
/// Visit any Syntax node.
69
72
/// - Parameter node: the node that is being visited
70
73
/// - Returns: the rewritten node
71
- @available ( * , deprecated, renamed: " rewrite(_:) " )
74
+ @available ( * , deprecated, renamed: " rewrite(_:detach: ) " )
72
75
public func visit( _ node: Syntax ) -> Syntax {
73
76
return visit ( node. data)
74
77
}
You can’t perform that action at this time.
0 commit comments