From f35ea82125c2a53e2d32b389af298eaa577e6f4d Mon Sep 17 00:00:00 2001 From: Pavel Yaskevich Date: Tue, 26 Aug 2025 09:40:55 -0700 Subject: [PATCH 1/3] [SwiftRefactor] PackageManifest: Remove handling of auxiliary files This is now handled by the Swift Package Manager itself and refactoring actions are only responsible for package manifest updates. --- .../PackageManifest/AddPackageTarget.swift | 184 +----------------- .../PackageManifest/PackageEdit.swift | 3 - .../SwiftRefactorTest/ManifestEditTests.swift | 95 +-------- 3 files changed, 3 insertions(+), 279 deletions(-) diff --git a/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift b/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift index e47ca957518..9ba7ee4921e 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift @@ -86,44 +86,10 @@ public struct AddPackageTarget: ManifestEditRefactoringProvider { newElement: target.asSyntax() ) - let outerDirectory: String? - switch target.type { - case .binary, .plugin, .system: outerDirectory = nil - case .executable, .library, .macro: outerDirectory = "Sources" - case .test: outerDirectory = "Tests" - } - - guard let outerDirectory else { - return PackageEdit( - manifestEdits: [ - .replace(packageCall, with: newPackageCall.description) - ] - ) - } - - let outerPath = outerDirectory - - /// The set of auxiliary files this refactoring will create. - var auxiliaryFiles: AuxiliaryFiles = [] - - // Add the primary source file. Every target type has this. - addPrimarySourceFile( - outerPath: outerPath, - target: target, - in: context, - to: &auxiliaryFiles - ) - // Perform any other actions that are needed for this target type. var extraManifestEdits: [SourceEdit] = [] switch target.type { case .macro: - addProvidedMacrosSourceFile( - outerPath: outerPath, - target: target, - to: &auxiliaryFiles - ) - if !manifest.containsStringLiteral("swift-syntax") { newPackageCall = try AddPackageDependency @@ -156,157 +122,9 @@ public struct AddPackageTarget: ManifestEditRefactoringProvider { return PackageEdit( manifestEdits: [ .replace(packageCall, with: newPackageCall.description) - ] + extraManifestEdits, - auxiliaryFiles: auxiliaryFiles - ) - } - - /// Add the primary source file for a target to the list of auxiliary - /// source files. - fileprivate static func addPrimarySourceFile( - outerPath: String, - target: PackageTarget, - in context: Context, - to auxiliaryFiles: inout AuxiliaryFiles - ) { - let sourceFilePath = "\(outerPath)/\(target.name)/\(target.name).swift" - - // Introduce imports for each of the dependencies that were specified. - var importModuleNames = target.dependencies.map { - $0.name - } - - // Add appropriate test module dependencies. - if target.type == .test { - switch context.testHarness { - case .none: - break - - case .xctest: - importModuleNames.append("XCTest") - - case .swiftTesting: - importModuleNames.append("Testing") - } - } - - let importDecls = importModuleNames.lazy.sorted().map { name in - DeclSyntax("import \(raw: name)\n") - } - - let imports = CodeBlockItemListSyntax { - for importDecl in importDecls { - importDecl - } - } - - let sourceFileText: SourceFileSyntax - switch target.type { - case .binary, .plugin, .system: - fatalError("should have exited above") - - case .macro: - sourceFileText = """ - \(imports) - struct \(raw: target.sanitizedName): Macro { - /// TODO: Implement one or more of the protocols that inherit - /// from Macro. The appropriate macro protocol is determined - /// by the "macro" declaration that \(raw: target.sanitizedName) implements. - /// Examples include: - /// @freestanding(expression) macro --> ExpressionMacro - /// @attached(member) macro --> MemberMacro - } - """ - - case .test: - switch context.testHarness { - case .none: - sourceFileText = """ - \(imports) - // Test code here - """ - - case .xctest: - sourceFileText = """ - \(imports) - class \(raw: target.sanitizedName)Tests: XCTestCase { - func test\(raw: target.sanitizedName)() { - XCTAssertEqual(42, 17 + 25) - } - } - """ - - case .swiftTesting: - sourceFileText = """ - \(imports) - @Suite - struct \(raw: target.sanitizedName)Tests { - @Test("\(raw: target.sanitizedName) tests") - func example() { - #expect(42 == 17 + 25) - } - } - """ - } - - case .library: - sourceFileText = """ - \(imports) - """ - - case .executable: - sourceFileText = """ - \(imports) - @main - struct \(raw: target.sanitizedName)Main { - static func main() { - print("Hello, world") - } - } - """ - } - - auxiliaryFiles.addSourceFile( - path: sourceFilePath, - sourceCode: sourceFileText + ] + extraManifestEdits ) } - - /// Add a file that introduces the main entrypoint and provided macros - /// for a macro target. - fileprivate static func addProvidedMacrosSourceFile( - outerPath: String, - target: PackageTarget, - to auxiliaryFiles: inout AuxiliaryFiles - ) { - auxiliaryFiles.addSourceFile( - path: "\(outerPath)/\(target.name)/ProvidedMacros.swift", - sourceCode: """ - import SwiftCompilerPlugin - - @main - struct \(raw: target.sanitizedName)Macros: CompilerPlugin { - let providingMacros: [Macro.Type] = [ - \(raw: target.sanitizedName).self, - ] - } - """ - ) - } -} - -/// The array of auxiliary files that can be added by a package editing -/// operation. -private typealias AuxiliaryFiles = [(String, SourceFileSyntax)] - -fileprivate extension AuxiliaryFiles { - /// Add a source file to the list of auxiliary files. - mutating func addSourceFile( - path: String, - sourceCode: SourceFileSyntax - ) { - self.append((path, sourceCode)) - } } /// The set of dependencies we need to introduce to a newly-created macro diff --git a/Sources/SwiftRefactor/PackageManifest/PackageEdit.swift b/Sources/SwiftRefactor/PackageManifest/PackageEdit.swift index c7fb054583c..9fa6b77a905 100644 --- a/Sources/SwiftRefactor/PackageManifest/PackageEdit.swift +++ b/Sources/SwiftRefactor/PackageManifest/PackageEdit.swift @@ -18,7 +18,4 @@ import SwiftSyntax public struct PackageEdit { /// Edits to perform to the package manifest. public var manifestEdits: [SourceEdit] = [] - - /// Auxiliary files to write. - public var auxiliaryFiles: [(relativePath: String, contents: SourceFileSyntax)] = [] } diff --git a/Tests/SwiftRefactorTest/ManifestEditTests.swift b/Tests/SwiftRefactorTest/ManifestEditTests.swift index 9e412e6eaaa..fa875d22adf 100644 --- a/Tests/SwiftRefactorTest/ManifestEditTests.swift +++ b/Tests/SwiftRefactorTest/ManifestEditTests.swift @@ -442,11 +442,6 @@ final class ManifestEditTests: XCTestCase { ] ) """, - expectedAuxiliarySources: [ - "Sources/MyLib/MyLib.swift": """ - - """ - ], provider: AddPackageTarget.self, context: .init( target: PackageTarget(name: "MyLib") @@ -478,14 +473,6 @@ final class ManifestEditTests: XCTestCase { ] ) """, - expectedAuxiliarySources: [ - "Sources/MyLib/MyLib.swift": """ - import OtherLib - import SwiftSyntax - import TargetLib - - """ - ], provider: AddPackageTarget.self, context: .init( target: PackageTarget( @@ -530,20 +517,6 @@ final class ManifestEditTests: XCTestCase { ] ) """, - expectedAuxiliarySources: [ - "Sources/MyProgram target-name/MyProgram target-name.swift": """ - import MyLib - import SwiftSyntax - import TargetLib - - @main - struct MyProgram_target_nameMain { - static func main() { - print("Hello, world") - } - } - """ - ], provider: AddPackageTarget.self, context: .init( target: PackageTarget( @@ -590,31 +563,6 @@ final class ManifestEditTests: XCTestCase { ] ) """, - expectedAuxiliarySources: [ - "Sources/MyMacro target-name/MyMacro target-name.swift": """ - import SwiftCompilerPlugin - import SwiftSyntaxMacros - - struct MyMacro_target_name: Macro { - /// TODO: Implement one or more of the protocols that inherit - /// from Macro. The appropriate macro protocol is determined - /// by the "macro" declaration that MyMacro_target_name implements. - /// Examples include: - /// @freestanding(expression) macro --> ExpressionMacro - /// @attached(member) macro --> MemberMacro - } - """, - "Sources/MyMacro target-name/ProvidedMacros.swift": """ - import SwiftCompilerPlugin - - @main - struct MyMacro_target_nameMacros: CompilerPlugin { - let providingMacros: [Macro.Type] = [ - MyMacro_target_name.self, - ] - } - """, - ], provider: AddPackageTarget.self, context: .init( target: PackageTarget( @@ -642,19 +590,6 @@ final class ManifestEditTests: XCTestCase { ] ) """, - expectedAuxiliarySources: [ - "Tests/MyTest target-name/MyTest target-name.swift": """ - import Testing - - @Suite - struct MyTest_target_nameTests { - @Test("MyTest_target_name tests") - func example() { - #expect(42 == 17 + 25) - } - } - """ - ], provider: AddPackageTarget.self, context: .init( target: PackageTarget( @@ -1033,12 +968,10 @@ final class ManifestEditTests: XCTestCase { } /// Assert that applying the given edit/refactor operation to the manifest -/// produces the expected manifest source file and the expected auxiliary -/// files. +/// produces the expected manifest source file. func assertManifestRefactor( _ originalManifest: SourceFileSyntax, expectedManifest: SourceFileSyntax, - expectedAuxiliarySources: [String: SourceFileSyntax] = [:], provider: Provider.Type, context: Provider.Context, file: StaticString = #filePath, @@ -1047,7 +980,6 @@ func assertManifestRefactor( return try assertManifestRefactor( originalManifest, expectedManifest: expectedManifest, - expectedAuxiliarySources: expectedAuxiliarySources, file: file, line: line ) { (manifest) in @@ -1056,12 +988,10 @@ func assertManifestRefactor( } /// Assert that applying the given edit/refactor operation to the manifest -/// produces the expected manifest source file and the expected auxiliary -/// files. +/// produces the expected manifest source file. func assertManifestRefactor( _ originalManifest: SourceFileSyntax, expectedManifest: SourceFileSyntax, - expectedAuxiliarySources: [String: SourceFileSyntax] = [:], file: StaticString = #filePath, line: UInt = #line, operation: (SourceFileSyntax) throws -> PackageEdit @@ -1079,25 +1009,4 @@ func assertManifestRefactor( file: file, line: line ) - - // Check all of the auxiliary sources. - for (auxSourcePath, auxSourceSyntax) in edits.auxiliaryFiles { - guard let expectedSyntax = expectedAuxiliarySources[auxSourcePath] else { - XCTFail("unexpected auxiliary source file '\(auxSourcePath)' in \(expectedAuxiliarySources)") - return - } - - assertStringsEqualWithDiff( - auxSourceSyntax.description, - expectedSyntax.description, - file: file, - line: line - ) - } - - XCTAssertEqual( - edits.auxiliaryFiles.count, - expectedAuxiliarySources.count, - "didn't get all of the auxiliary files we expected" - ) } From 78016460f94a3ee8b3c5d4e4f0e07a5b086f893b Mon Sep 17 00:00:00 2001 From: Pavel Yaskevich Date: Tue, 26 Aug 2025 10:35:34 -0700 Subject: [PATCH 2/3] [SwiftRefactor] PackageManifest: Replace `PackageEdit` with `[SourceEdit]` None more auxiliary files means that we don't need an extra type. --- Sources/SwiftRefactor/CMakeLists.txt | 1 - .../AddPackageDependency.swift | 12 +++++------ .../PackageManifest/AddPackageTarget.swift | 10 ++++----- .../PackageManifest/AddPluginUsage.swift | 10 ++++----- .../PackageManifest/AddProduct.swift | 10 ++++----- .../PackageManifest/AddSwiftSetting.swift | 18 +++++++--------- .../PackageManifest/AddTargetDependency.swift | 10 ++++----- .../ManifestEditRefactoringProvider.swift | 4 ++-- .../PackageManifest/PackageEdit.swift | 21 ------------------- .../SwiftRefactorTest/ManifestEditTests.swift | 4 ++-- 10 files changed, 33 insertions(+), 67 deletions(-) delete mode 100644 Sources/SwiftRefactor/PackageManifest/PackageEdit.swift diff --git a/Sources/SwiftRefactor/CMakeLists.txt b/Sources/SwiftRefactor/CMakeLists.txt index 11594aa9f5d..03d8f25956f 100644 --- a/Sources/SwiftRefactor/CMakeLists.txt +++ b/Sources/SwiftRefactor/CMakeLists.txt @@ -33,7 +33,6 @@ add_swift_syntax_library(SwiftRefactor PackageManifest/ManifestEditRefactoringProvider.swift PackageManifest/ManifestSyntaxRepresentable.swift PackageManifest/PackageDependency.swift - PackageManifest/PackageEdit.swift PackageManifest/PackageTarget.swift PackageManifest/ProductDescription.swift PackageManifest/StringUtils.swift diff --git a/Sources/SwiftRefactor/PackageManifest/AddPackageDependency.swift b/Sources/SwiftRefactor/PackageManifest/AddPackageDependency.swift index ec111d299c0..e42aef58d09 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddPackageDependency.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddPackageDependency.swift @@ -39,7 +39,7 @@ public struct AddPackageDependency: ManifestEditRefactoringProvider { public static func manifestRefactor( syntax manifest: SourceFileSyntax, in context: Context - ) throws -> PackageEdit { + ) throws -> [SourceEdit] { let dependency = context.dependency guard let packageCall = manifest.findCall(calleeName: "Package") else { throw ManifestEditError.cannotFindPackage @@ -51,7 +51,7 @@ public struct AddPackageDependency: ManifestEditRefactoringProvider { in: packageCall ) else { - return PackageEdit(manifestEdits: []) + return [] } let newPackageCall = try addPackageDependencyLocal( @@ -59,11 +59,9 @@ public struct AddPackageDependency: ManifestEditRefactoringProvider { to: packageCall ) - return PackageEdit( - manifestEdits: [ - .replace(packageCall, with: newPackageCall.description) - ] - ) + return [ + .replace(packageCall, with: newPackageCall.description) + ] } /// Return `true` if the dependency already exists in the manifest, otherwise return `false`. diff --git a/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift b/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift index 9ba7ee4921e..269212fbfa5 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift @@ -60,7 +60,7 @@ public struct AddPackageTarget: ManifestEditRefactoringProvider { public static func manifestRefactor( syntax manifest: SourceFileSyntax, in context: Context - ) throws -> PackageEdit { + ) throws -> [SourceEdit] { guard let packageCall = manifest.findCall(calleeName: "Package") else { throw ManifestEditError.cannotFindPackage } @@ -119,11 +119,9 @@ public struct AddPackageTarget: ManifestEditRefactoringProvider { default: break } - return PackageEdit( - manifestEdits: [ - .replace(packageCall, with: newPackageCall.description) - ] + extraManifestEdits - ) + return [ + .replace(packageCall, with: newPackageCall.description) + ] + extraManifestEdits } } diff --git a/Sources/SwiftRefactor/PackageManifest/AddPluginUsage.swift b/Sources/SwiftRefactor/PackageManifest/AddPluginUsage.swift index 4af17aa92a6..5b9c24d3ecb 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddPluginUsage.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddPluginUsage.swift @@ -33,7 +33,7 @@ public struct AddPluginUsage: ManifestEditRefactoringProvider { public static func manifestRefactor( syntax manifest: SourceFileSyntax, in context: Context - ) throws -> PackageEdit { + ) throws -> [SourceEdit] { let targetName = context.targetName let pluginUsage = context.pluginUsage @@ -50,10 +50,8 @@ public struct AddPluginUsage: ManifestEditRefactoringProvider { newElement: pluginUsage.asSyntax() ) - return PackageEdit( - manifestEdits: [ - .replace(targetCall, with: newTargetCall.description) - ] - ) + return [ + .replace(targetCall, with: newTargetCall.description) + ] } } diff --git a/Sources/SwiftRefactor/PackageManifest/AddProduct.swift b/Sources/SwiftRefactor/PackageManifest/AddProduct.swift index e735780fd78..3c85670eed4 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddProduct.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddProduct.swift @@ -39,7 +39,7 @@ public struct AddProduct: ManifestEditRefactoringProvider { public static func manifestRefactor( syntax manifest: SourceFileSyntax, in context: Context - ) throws -> PackageEdit { + ) throws -> [SourceEdit] { let product = context.product guard let packageCall = manifest.findCall(calleeName: "Package") else { @@ -52,10 +52,8 @@ public struct AddProduct: ManifestEditRefactoringProvider { newElement: product.asSyntax() ) - return PackageEdit( - manifestEdits: [ - .replace(packageCall, with: newPackageCall.description) - ] - ) + return [ + .replace(packageCall, with: newPackageCall.description) + ] } } diff --git a/Sources/SwiftRefactor/PackageManifest/AddSwiftSetting.swift b/Sources/SwiftRefactor/PackageManifest/AddSwiftSetting.swift index 63534b79645..5ef7edbdc24 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddSwiftSetting.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddSwiftSetting.swift @@ -34,7 +34,7 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { to target: String, name: String, manifest: SourceFileSyntax - ) throws -> PackageEdit { + ) throws -> [SourceEdit] { try manifestRefactor( syntax: manifest, in: .init( @@ -49,7 +49,7 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { to target: String, name: String, manifest: SourceFileSyntax - ) throws -> PackageEdit { + ) throws -> [SourceEdit] { try manifestRefactor( syntax: manifest, in: .init( @@ -64,7 +64,7 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { to target: String, mode rawMode: String, manifest: SourceFileSyntax - ) throws -> PackageEdit { + ) throws -> [SourceEdit] { let mode: String switch rawMode { case "3", "4", "5", "6": @@ -88,7 +88,7 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { public static func strictMemorySafety( to target: String, manifest: SourceFileSyntax - ) throws -> PackageEdit { + ) throws -> [SourceEdit] { try manifestRefactor( syntax: manifest, in: .init( @@ -102,7 +102,7 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { public static func manifestRefactor( syntax manifest: SourceFileSyntax, in context: Context - ) throws -> PackageEdit { + ) throws -> [SourceEdit] { guard let packageCall = manifest.findCall(calleeName: "Package") else { throw ManifestEditError.cannotFindPackage } @@ -154,10 +154,8 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { ) } - return PackageEdit( - manifestEdits: [ - .replace(targetCall, with: newTargetCall.description) - ] - ) + return [ + .replace(targetCall, with: newTargetCall.description) + ] } } diff --git a/Sources/SwiftRefactor/PackageManifest/AddTargetDependency.swift b/Sources/SwiftRefactor/PackageManifest/AddTargetDependency.swift index 3d0f72ad7b9..a482d9eb976 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddTargetDependency.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddTargetDependency.swift @@ -51,7 +51,7 @@ public struct AddTargetDependency: ManifestEditRefactoringProvider { public static func manifestRefactor( syntax manifest: SourceFileSyntax, in context: Context - ) throws -> PackageEdit { + ) throws -> [SourceEdit] { let dependency = context.dependency let targetName = context.targetName @@ -67,11 +67,9 @@ public struct AddTargetDependency: ManifestEditRefactoringProvider { to: targetCall ) - return PackageEdit( - manifestEdits: [ - .replace(targetCall, with: newTargetCall.description) - ] - ) + return [ + .replace(targetCall, with: newTargetCall.description) + ] } /// Implementation of adding a target dependency to an existing call. diff --git a/Sources/SwiftRefactor/PackageManifest/ManifestEditRefactoringProvider.swift b/Sources/SwiftRefactor/PackageManifest/ManifestEditRefactoringProvider.swift index f3d04af10c2..dceee34d050 100644 --- a/Sources/SwiftRefactor/PackageManifest/ManifestEditRefactoringProvider.swift +++ b/Sources/SwiftRefactor/PackageManifest/ManifestEditRefactoringProvider.swift @@ -16,11 +16,11 @@ import SwiftSyntax public protocol ManifestEditRefactoringProvider: EditRefactoringProvider where Self.Input == SourceFileSyntax { - static func manifestRefactor(syntax: SourceFileSyntax, in context: Context) throws -> PackageEdit + static func manifestRefactor(syntax: SourceFileSyntax, in context: Context) throws -> [SourceEdit] } extension ManifestEditRefactoringProvider { public static func textRefactor(syntax: Input, in context: Context) -> [SourceEdit] { - return (try? manifestRefactor(syntax: syntax, in: context).manifestEdits) ?? [] + return (try? manifestRefactor(syntax: syntax, in: context)) ?? [] } } diff --git a/Sources/SwiftRefactor/PackageManifest/PackageEdit.swift b/Sources/SwiftRefactor/PackageManifest/PackageEdit.swift deleted file mode 100644 index 9fa6b77a905..00000000000 --- a/Sources/SwiftRefactor/PackageManifest/PackageEdit.swift +++ /dev/null @@ -1,21 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2025 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import SwiftSyntax - -/// The result of editing a package, including any edits to the package -/// manifest and any new files that are introduced. -@_spi(PackageRefactor) -public struct PackageEdit { - /// Edits to perform to the package manifest. - public var manifestEdits: [SourceEdit] = [] -} diff --git a/Tests/SwiftRefactorTest/ManifestEditTests.swift b/Tests/SwiftRefactorTest/ManifestEditTests.swift index fa875d22adf..f5c9e5f93b4 100644 --- a/Tests/SwiftRefactorTest/ManifestEditTests.swift +++ b/Tests/SwiftRefactorTest/ManifestEditTests.swift @@ -994,11 +994,11 @@ func assertManifestRefactor( expectedManifest: SourceFileSyntax, file: StaticString = #filePath, line: UInt = #line, - operation: (SourceFileSyntax) throws -> PackageEdit + operation: (SourceFileSyntax) throws -> [SourceEdit] ) rethrows { let edits = try operation(originalManifest) let editedManifestSource = FixItApplier.apply( - edits: edits.manifestEdits, + edits: edits, to: originalManifest ) From 2cf51935bce6e127bc894b5f9cd54b59b30ff304 Mon Sep 17 00:00:00 2001 From: Pavel Yaskevich Date: Tue, 26 Aug 2025 11:01:43 -0700 Subject: [PATCH 3/3] [SwiftRefactor] PackageManifest: Switch refactoring actions to `EditRefactoringProvider` Since `PackageEdit` is gone all of the package manifest refactoring actions can now conform to `EditRefactoringProvider` directly. --- Sources/SwiftRefactor/CMakeLists.txt | 1 - .../AddPackageDependency.swift | 4 +-- .../PackageManifest/AddPackageTarget.swift | 4 +-- .../PackageManifest/AddPluginUsage.swift | 4 +-- .../PackageManifest/AddProduct.swift | 4 +-- .../PackageManifest/AddSwiftSetting.swift | 12 ++++----- .../PackageManifest/AddTargetDependency.swift | 4 +-- .../ManifestEditRefactoringProvider.swift | 26 ------------------- .../SwiftRefactorTest/ManifestEditTests.swift | 16 ++++++------ 9 files changed, 24 insertions(+), 51 deletions(-) delete mode 100644 Sources/SwiftRefactor/PackageManifest/ManifestEditRefactoringProvider.swift diff --git a/Sources/SwiftRefactor/CMakeLists.txt b/Sources/SwiftRefactor/CMakeLists.txt index 03d8f25956f..e478a428a79 100644 --- a/Sources/SwiftRefactor/CMakeLists.txt +++ b/Sources/SwiftRefactor/CMakeLists.txt @@ -30,7 +30,6 @@ add_swift_syntax_library(SwiftRefactor PackageManifest/AddSwiftSetting.swift PackageManifest/AddTargetDependency.swift PackageManifest/ManifestEditError.swift - PackageManifest/ManifestEditRefactoringProvider.swift PackageManifest/ManifestSyntaxRepresentable.swift PackageManifest/PackageDependency.swift PackageManifest/PackageTarget.swift diff --git a/Sources/SwiftRefactor/PackageManifest/AddPackageDependency.swift b/Sources/SwiftRefactor/PackageManifest/AddPackageDependency.swift index e42aef58d09..0c29c68b642 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddPackageDependency.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddPackageDependency.swift @@ -16,7 +16,7 @@ import SwiftSyntaxBuilder /// Add a package dependency to a package manifest's source code. @_spi(PackageRefactor) -public struct AddPackageDependency: ManifestEditRefactoringProvider { +public struct AddPackageDependency: EditRefactoringProvider { public struct Context { public var dependency: PackageDependency @@ -36,7 +36,7 @@ public struct AddPackageDependency: ManifestEditRefactoringProvider { /// Produce the set of source edits needed to add the given package /// dependency to the given manifest file. - public static func manifestRefactor( + public static func textRefactor( syntax manifest: SourceFileSyntax, in context: Context ) throws -> [SourceEdit] { diff --git a/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift b/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift index 269212fbfa5..948fcea87c6 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddPackageTarget.swift @@ -16,7 +16,7 @@ import SwiftSyntaxBuilder /// Add a target to a manifest's source code. @_spi(PackageRefactor) -public struct AddPackageTarget: ManifestEditRefactoringProvider { +public struct AddPackageTarget: EditRefactoringProvider { public struct Context { public let target: PackageTarget public var testHarness: TestHarness @@ -57,7 +57,7 @@ public struct AddPackageTarget: ManifestEditRefactoringProvider { /// Add the given target to the manifest, producing a set of edit results /// that updates the manifest and adds some source files to stub out the /// new target. - public static func manifestRefactor( + public static func textRefactor( syntax manifest: SourceFileSyntax, in context: Context ) throws -> [SourceEdit] { diff --git a/Sources/SwiftRefactor/PackageManifest/AddPluginUsage.swift b/Sources/SwiftRefactor/PackageManifest/AddPluginUsage.swift index 5b9c24d3ecb..420c6468f9e 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddPluginUsage.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddPluginUsage.swift @@ -17,7 +17,7 @@ import SwiftSyntaxBuilder /// Add a plugin usage to a particular target in the manifest's source /// code. @_spi(PackageRefactor) -public struct AddPluginUsage: ManifestEditRefactoringProvider { +public struct AddPluginUsage: EditRefactoringProvider { public struct Context { public let targetName: String public let pluginUsage: PackageTarget.PluginUsage @@ -30,7 +30,7 @@ public struct AddPluginUsage: ManifestEditRefactoringProvider { /// Produce the set of source edits needed to add the given package /// dependency to the given manifest file. - public static func manifestRefactor( + public static func textRefactor( syntax manifest: SourceFileSyntax, in context: Context ) throws -> [SourceEdit] { diff --git a/Sources/SwiftRefactor/PackageManifest/AddProduct.swift b/Sources/SwiftRefactor/PackageManifest/AddProduct.swift index 3c85670eed4..366d543e6d9 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddProduct.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddProduct.swift @@ -16,7 +16,7 @@ import SwiftSyntaxBuilder /// Add a product to the manifest's source code. @_spi(PackageRefactor) -public struct AddProduct: ManifestEditRefactoringProvider { +public struct AddProduct: EditRefactoringProvider { public struct Context { public let product: ProductDescription @@ -36,7 +36,7 @@ public struct AddProduct: ManifestEditRefactoringProvider { /// Produce the set of source edits needed to add the given package /// dependency to the given manifest file. - public static func manifestRefactor( + public static func textRefactor( syntax manifest: SourceFileSyntax, in context: Context ) throws -> [SourceEdit] { diff --git a/Sources/SwiftRefactor/PackageManifest/AddSwiftSetting.swift b/Sources/SwiftRefactor/PackageManifest/AddSwiftSetting.swift index 5ef7edbdc24..e51c294accb 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddSwiftSetting.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddSwiftSetting.swift @@ -16,7 +16,7 @@ import SwiftSyntaxBuilder /// Add a swift setting to a manifest's source code. @_spi(PackageRefactor) -public struct AddSwiftSetting: ManifestEditRefactoringProvider { +public struct AddSwiftSetting: EditRefactoringProvider { public struct Context { let target: String let setting: String @@ -35,7 +35,7 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { name: String, manifest: SourceFileSyntax ) throws -> [SourceEdit] { - try manifestRefactor( + try textRefactor( syntax: manifest, in: .init( target: target, @@ -50,7 +50,7 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { name: String, manifest: SourceFileSyntax ) throws -> [SourceEdit] { - try manifestRefactor( + try textRefactor( syntax: manifest, in: .init( target: target, @@ -75,7 +75,7 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { mode = ".version(\"\(rawMode)\")" } - return try manifestRefactor( + return try textRefactor( syntax: manifest, in: .init( target: target, @@ -89,7 +89,7 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { to target: String, manifest: SourceFileSyntax ) throws -> [SourceEdit] { - try manifestRefactor( + try textRefactor( syntax: manifest, in: .init( target: target, @@ -99,7 +99,7 @@ public struct AddSwiftSetting: ManifestEditRefactoringProvider { ) } - public static func manifestRefactor( + public static func textRefactor( syntax manifest: SourceFileSyntax, in context: Context ) throws -> [SourceEdit] { diff --git a/Sources/SwiftRefactor/PackageManifest/AddTargetDependency.swift b/Sources/SwiftRefactor/PackageManifest/AddTargetDependency.swift index a482d9eb976..9b3e0fceef2 100644 --- a/Sources/SwiftRefactor/PackageManifest/AddTargetDependency.swift +++ b/Sources/SwiftRefactor/PackageManifest/AddTargetDependency.swift @@ -16,7 +16,7 @@ import SwiftSyntaxBuilder /// Add a target dependency to a manifest's source code. @_spi(PackageRefactor) -public struct AddTargetDependency: ManifestEditRefactoringProvider { +public struct AddTargetDependency: EditRefactoringProvider { public struct Context { /// The dependency to add. public var dependency: PackageTarget.Dependency @@ -48,7 +48,7 @@ public struct AddTargetDependency: ManifestEditRefactoringProvider { /// Produce the set of source edits needed to add the given target /// dependency to the given manifest file. - public static func manifestRefactor( + public static func textRefactor( syntax manifest: SourceFileSyntax, in context: Context ) throws -> [SourceEdit] { diff --git a/Sources/SwiftRefactor/PackageManifest/ManifestEditRefactoringProvider.swift b/Sources/SwiftRefactor/PackageManifest/ManifestEditRefactoringProvider.swift deleted file mode 100644 index dceee34d050..00000000000 --- a/Sources/SwiftRefactor/PackageManifest/ManifestEditRefactoringProvider.swift +++ /dev/null @@ -1,26 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2025 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -import SwiftSyntax - -@_spi(PackageRefactor) -public protocol ManifestEditRefactoringProvider: EditRefactoringProvider -where Self.Input == SourceFileSyntax { - - static func manifestRefactor(syntax: SourceFileSyntax, in context: Context) throws -> [SourceEdit] -} - -extension ManifestEditRefactoringProvider { - public static func textRefactor(syntax: Input, in context: Context) -> [SourceEdit] { - return (try? manifestRefactor(syntax: syntax, in: context)) ?? [] - } -} diff --git a/Tests/SwiftRefactorTest/ManifestEditTests.swift b/Tests/SwiftRefactorTest/ManifestEditTests.swift index f5c9e5f93b4..eb53f384f90 100644 --- a/Tests/SwiftRefactorTest/ManifestEditTests.swift +++ b/Tests/SwiftRefactorTest/ManifestEditTests.swift @@ -160,7 +160,7 @@ final class ManifestEditTests: XCTestCase { func testAddPackageDependencyDuplicates() throws { XCTAssertThrowsError( - try AddPackageDependency.manifestRefactor( + try AddPackageDependency.textRefactor( syntax: """ // swift-tools-version: 5.5 let package = Package( @@ -351,7 +351,7 @@ final class ManifestEditTests: XCTestCase { func testAddPackageDependencyErrors() { XCTAssertThrowsError( - try AddPackageDependency.manifestRefactor( + try AddPackageDependency.textRefactor( syntax: """ // swift-tools-version: 5.5 let package: Package = .init( @@ -368,7 +368,7 @@ final class ManifestEditTests: XCTestCase { } XCTAssertThrowsError( - try AddPackageDependency.manifestRefactor( + try AddPackageDependency.textRefactor( syntax: """ // swift-tools-version: 5.5 let package = Package( @@ -969,21 +969,21 @@ final class ManifestEditTests: XCTestCase { /// Assert that applying the given edit/refactor operation to the manifest /// produces the expected manifest source file. -func assertManifestRefactor( - _ originalManifest: SourceFileSyntax, - expectedManifest: SourceFileSyntax, +func assertManifestRefactor( + _ originalManifest: Provider.Input, + expectedManifest: Provider.Input, provider: Provider.Type, context: Provider.Context, file: StaticString = #filePath, line: UInt = #line -) throws { +) throws where Provider.Input == SourceFileSyntax { return try assertManifestRefactor( originalManifest, expectedManifest: expectedManifest, file: file, line: line ) { (manifest) in - try provider.manifestRefactor(syntax: manifest, in: context) + try provider.textRefactor(syntax: manifest, in: context) } }