@@ -50,16 +50,20 @@ struct PackageManifestEdits: SyntaxCodeActionProvider {
50
50
type: type
51
51
)
52
52
53
- let edits = try AddPackageTarget . manifestRefactor (
54
- syntax: scope. file,
55
- in: . init( target: target)
56
- )
53
+ guard
54
+ let edit = try AddPackageTarget . textRefactor (
55
+ syntax: scope. file,
56
+ in: . init( target: target)
57
+ ) . asWorkspaceEdit ( snapshot: scope. snapshot)
58
+ else {
59
+ continue
60
+ }
57
61
58
62
actions. append (
59
63
CodeAction (
60
64
title: " Add \( name) target " ,
61
65
kind: . refactor,
62
- edit: edits . asWorkspaceEdit ( snapshot : scope . snapshot )
66
+ edit: edit
63
67
)
64
68
)
65
69
}
@@ -98,16 +102,20 @@ struct PackageManifestEdits: SyntaxCodeActionProvider {
98
102
dependencies: [ . byName( name: targetName) ] ,
99
103
)
100
104
101
- let edits = try AddPackageTarget . manifestRefactor (
102
- syntax: scope. file,
103
- in: . init( target: target, testHarness: testingLibrary)
104
- )
105
+ guard
106
+ let edit = try AddPackageTarget . textRefactor (
107
+ syntax: scope. file,
108
+ in: . init( target: target, testHarness: testingLibrary)
109
+ ) . asWorkspaceEdit ( snapshot: scope. snapshot)
110
+ else {
111
+ continue
112
+ }
105
113
106
114
actions. append (
107
115
CodeAction (
108
116
title: " Add test target ( \( libraryName) ) " ,
109
117
kind: . refactor,
110
- edit: edits . asWorkspaceEdit ( snapshot : scope . snapshot )
118
+ edit: edit
111
119
)
112
120
)
113
121
}
@@ -151,16 +159,20 @@ struct PackageManifestEdits: SyntaxCodeActionProvider {
151
159
targets: [ targetName]
152
160
)
153
161
154
- let edits = try AddProduct . manifestRefactor (
155
- syntax: scope. file,
156
- in: . init( product: product)
157
- )
162
+ guard
163
+ let edit = try AddProduct . textRefactor (
164
+ syntax: scope. file,
165
+ in: . init( product: product)
166
+ ) . asWorkspaceEdit ( snapshot: scope. snapshot)
167
+ else {
168
+ return [ ]
169
+ }
158
170
159
171
return [
160
172
CodeAction (
161
173
title: " Add product to export this target " ,
162
174
kind: . refactor,
163
- edit: edits . asWorkspaceEdit ( snapshot : scope . snapshot )
175
+ edit: edit
164
176
)
165
177
]
166
178
} catch {
@@ -175,85 +187,6 @@ struct PackageManifestEdits: SyntaxCodeActionProvider {
175
187
]
176
188
}
177
189
178
- fileprivate extension PackageEdit {
179
- /// Translate package manifest edits into a workspace edit. This can
180
- /// involve both modifications to the manifest file as well as the creation
181
- /// of new files.
182
- /// `snapshot` is the latest snapshot of the `Package.swift` file.
183
- func asWorkspaceEdit( snapshot: DocumentSnapshot ) -> WorkspaceEdit {
184
- // The edits to perform on the manifest itself.
185
- let manifestTextEdits = manifestEdits. map { edit in
186
- TextEdit (
187
- range: snapshot. absolutePositionRange ( of: edit. range) ,
188
- newText: edit. replacement
189
- )
190
- }
191
-
192
- // If we couldn't figure out the manifest directory, or there are no
193
- // files to add, the only changes are the manifest edits. We're done
194
- // here.
195
- let manifestDirectoryURL = snapshot. uri. fileURL?
196
- . deletingLastPathComponent ( )
197
- guard let manifestDirectoryURL, !auxiliaryFiles. isEmpty else {
198
- return WorkspaceEdit (
199
- changes: [ snapshot. uri: manifestTextEdits]
200
- )
201
- }
202
-
203
- // Use the more full-featured documentChanges, which takes precedence
204
- // over the individual changes to documents.
205
- var documentChanges : [ WorkspaceEditDocumentChange ] = [ ]
206
-
207
- // Put the manifest changes into the array.
208
- documentChanges. append (
209
- . textDocumentEdit(
210
- TextDocumentEdit (
211
- textDocument: . init( snapshot. uri, version: snapshot. version) ,
212
- edits: manifestTextEdits. map { . textEdit( $0) }
213
- )
214
- )
215
- )
216
-
217
- // Create an populate all of the auxiliary files.
218
- for (relativePath, contents) in auxiliaryFiles {
219
- guard
220
- let url = URL (
221
- string: relativePath,
222
- relativeTo: manifestDirectoryURL
223
- )
224
- else {
225
- continue
226
- }
227
-
228
- let documentURI = DocumentURI ( url)
229
- let createFile = CreateFile (
230
- uri: documentURI
231
- )
232
-
233
- let zeroPosition = Position ( line: 0 , utf16index: 0 )
234
- let edit = TextEdit (
235
- range: zeroPosition..< zeroPosition,
236
- newText: contents. description
237
- )
238
-
239
- documentChanges. append ( . createFile( createFile) )
240
- documentChanges. append (
241
- . textDocumentEdit(
242
- TextDocumentEdit (
243
- textDocument: . init( documentURI, version: snapshot. version) ,
244
- edits: [ . textEdit( edit) ]
245
- )
246
- )
247
- )
248
- }
249
-
250
- return WorkspaceEdit (
251
- changes: [ snapshot. uri: manifestTextEdits] ,
252
- documentChanges: documentChanges
253
- )
254
- }
255
- }
256
-
257
190
fileprivate extension SyntaxProtocol {
258
191
// Find an enclosing call syntax expression.
259
192
func findEnclosingCall( ) -> FunctionCallExprSyntax ? {
0 commit comments