From d50790ee8c2603d598b5142ddb1bce8c01bb0dc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20Do=C4=9Fan?= Date: Wed, 13 Dec 2023 13:55:01 +0300 Subject: [PATCH] Fix xcode command plugin --- .../SwiftFormatPluginXcode.swift | 52 +++++++++++++++++++ Tests/SwiftFormatTests.swift | 6 +-- 2 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 Plugins/SwiftFormatPlugin/SwiftFormatPluginXcode.swift diff --git a/Plugins/SwiftFormatPlugin/SwiftFormatPluginXcode.swift b/Plugins/SwiftFormatPlugin/SwiftFormatPluginXcode.swift new file mode 100644 index 00000000..7da0782d --- /dev/null +++ b/Plugins/SwiftFormatPlugin/SwiftFormatPluginXcode.swift @@ -0,0 +1,52 @@ +// +// SwiftFormatPluginXcode.swift +// SwiftFormat +// +// Created by Marco Eidinger +// Copyright 2022 Nick Lockwood +// +// Distributed under the permissive MIT license +// Get the latest version from here: +// +// https://github.com/nicklockwood/SwiftFormat +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import Foundation +import PackagePlugin + +#if swift(>=5.6) && canImport(XcodeProjectPlugin) + import XcodeProjectPlugin + + extension SwiftFormatPlugin: XcodeCommandPlugin { + /// This entry point is called when operating on an Xcode project. + func performCommand(context: XcodePluginContext, arguments: [String]) throws { + if arguments.contains("--verbose") { + print("Command plugin execution with arguments \(arguments.description) for Swift package \(context.xcodeProject.displayName). All target information: \(context.xcodeProject.targets.description)") + print("Plugin will run for directory: \(context.xcodeProject.directory.description)") + } + + var argExtractor = ArgumentExtractor(arguments) + _ = argExtractor.extractOption(named: "target") + + try formatCode(in: context.xcodeProject.directory, context: context, arguments: argExtractor.remainingArguments) + } + } +#endif diff --git a/Tests/SwiftFormatTests.swift b/Tests/SwiftFormatTests.swift index ef216b32..f6acfe94 100644 --- a/Tests/SwiftFormatTests.swift +++ b/Tests/SwiftFormatTests.swift @@ -67,7 +67,7 @@ class SwiftFormatTests: XCTestCase { return { files.append(inputURL) } } XCTAssertEqual(errors.count, 0) - XCTAssertEqual(files.count, 66) + XCTAssertEqual(files.count, 67) } func testInputFilesMatchOutputFilesForSameOutput() { @@ -78,7 +78,7 @@ class SwiftFormatTests: XCTestCase { return { files.append(inputURL) } } XCTAssertEqual(errors.count, 0) - XCTAssertEqual(files.count, 66) + XCTAssertEqual(files.count, 67) } func testInputFileNotEnumeratedWhenExcluded() { @@ -93,7 +93,7 @@ class SwiftFormatTests: XCTestCase { return { files.append(inputURL) } } XCTAssertEqual(errors.count, 0) - XCTAssertEqual(files.count, 41) + XCTAssertEqual(files.count, 42) } // MARK: format function