@@ -50,16 +50,20 @@ struct PackageManifestEdits: SyntaxCodeActionProvider {
5050 type: type
5151 )
5252
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+ }
5761
5862 actions. append (
5963 CodeAction (
6064 title: " Add \( name) target " ,
6165 kind: . refactor,
62- edit: edits . asWorkspaceEdit ( snapshot : scope . snapshot )
66+ edit: edit
6367 )
6468 )
6569 }
@@ -98,16 +102,20 @@ struct PackageManifestEdits: SyntaxCodeActionProvider {
98102 dependencies: [ . byName( name: targetName) ] ,
99103 )
100104
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+ }
105113
106114 actions. append (
107115 CodeAction (
108116 title: " Add test target ( \( libraryName) ) " ,
109117 kind: . refactor,
110- edit: edits . asWorkspaceEdit ( snapshot : scope . snapshot )
118+ edit: edit
111119 )
112120 )
113121 }
@@ -151,16 +159,20 @@ struct PackageManifestEdits: SyntaxCodeActionProvider {
151159 targets: [ targetName]
152160 )
153161
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+ }
158170
159171 return [
160172 CodeAction (
161173 title: " Add product to export this target " ,
162174 kind: . refactor,
163- edit: edits . asWorkspaceEdit ( snapshot : scope . snapshot )
175+ edit: edit
164176 )
165177 ]
166178 } catch {
@@ -175,85 +187,6 @@ struct PackageManifestEdits: SyntaxCodeActionProvider {
175187 ]
176188}
177189
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-
257190fileprivate extension SyntaxProtocol {
258191 // Find an enclosing call syntax expression.
259192 func findEnclosingCall( ) -> FunctionCallExprSyntax ? {
0 commit comments