DangerSwiftPeriphery

Danger Swift 插件,用于在 CI 上运行 Periphery

Test MIT License Latest Version Swift Compatibility Platform Compatibility

特性

此插件将通过 Danger Swift 注释 periphery 检测到的未引用代码。

Image

要求

用法

准备工作

Package.swift

  1. 将 DangerSwiftPeriphery 添加到您的 Package.swift 依赖项中

    .package(url: "https://github.com/taji-taji/DangerSwiftPeriphery.git", from: "1.0.0")
  2. 将 DangerSwiftPeriphery 添加到 DangerDependencies 目标的依赖项中

    .product(name: "DangerSwiftPeriphery", package: "DangerSwiftPeriphery")

以下是一个完整的 Package.swift 示例。

let package = Package(
    // ...
    dependencies: [
        // Danger
        .package(url: "https://github.com/danger/swift.git", from: "3.0.0"), // dev
        // Danger Plugins
        // 1. Add DangerSwiftPeriphery to your `Package.swift`  dependencies:
        .package(url: "https://github.com/taji-taji/DangerSwiftPeriphery.git", from: "1.0.0"), // dev
    ],
    targets: [
        // ...
        // Add DangerSwiftPeriphery to dependencies in DangerDependencies.
        .target(name: "DangerDependencies",
                dependencies: [
                    .product(name: "Danger", package: "swift"),
                    // 2. Add DangerSwiftPeriphery to your dependencies of `DangerDependencies` target:
                    .product(name: "DangerSwiftPeriphery", package: "DangerSwiftPeriphery"), 
                ]),
        // ...
    ]
)

Dangerfile.swift

设置扫描选项

如果您有一个 .periphery.yml 文件,只需在 Dangerfile.swift 中包含以下内容

import Danger
import DangerSwiftPeriphery

DangerPeriphery.scan()

或者,periphery 选项可以作为参数传递。

import Danger
import DangerSwiftPeriphery

DangerPeriphery.scan(arguments: [
    "--workspace MaApp.xcworkspace",
    "--schemes MyApp",
    "--index-store-path /path/to/index/store",
    "--skip-build"
])

// or use PeripheryScanOptions enum as array
DangerPeriphery.scan(arguments: [
    PeripheryScanOptions.workspace("MaApp.xcworkspace"),
    PeripheryScanOptions.schemes(["MyApp"]),
    PeripheryScanOptions.indexStorePath("/path/to/index/store"),
    PeripheryScanOptions.skipBuild
])

// or use PeripheryScanOptions enum with resultBuilder
DangerPeriphery.scan {
    PeripheryScanOptions.workspace("MaApp.xcworkspace")
    PeripheryScanOptions.schemes(["MyApp"])
    PeripheryScanOptions.indexStorePath("/path/to/index/store")
    PeripheryScanOptions.skipBuild
}

// All three scan methods above behave the same.

未来,如果 Periphery 添加了一个新选项,而此插件中未定义该选项,则可以使用 .custom。 例如,如果新版本的 Periphery 添加了一个 --new-option 选项,而此插件的 PeripheryScanOptions 中未定义该选项,则可以使用 PeripheryScanOptions.custom("--new-option foo") 来使用 --new-option

手动处理扫描结果

通过将 shouldComment 选项设置为 false,此插件将不会在目标 pull request 上进行注释。
您可以通过将此选项设置为 false 并使用扫描方法的返回值来手动处理扫描结果。

import Danger
import DangerSwiftPeriphery

let result = DangerPeriphery.scan(shouldComment: false)

// handle scan result manually
switch result {
case let .success(violations):
    // handle scan violations
    for violation in violations {
        warn(message: violation.message,
             file: violation.filePath,
             line: violation.line)
    }
case let .failure(error):
    // handle scan error
    fail(error.localizedDescription)
}

指定 periphery 可执行文件

您还可以指定 periphery 二进制文件的位置。

import DangerSwiftPeriphery

DangerPeriphery.scan(peripheryExecutable: "/path/to/periphery")

调试打印

Debug 选项可用于输出调试信息。 这可以通过以下方式之一完成。

  1. verbose 参数

    • 将扫描方法的 verbose 参数设置为 true。(默认值:false)
    // in Dangerfile.swift
    DangerPeriphery.scan(verbose: true)
  2. DANGER_SWIFT_PERIPHERY_DEBUG 环境变量

    • 在运行 danger-swift 的环境中设置 DANGER_SWIFT_PERIPHERY_DEBUG=1。 此环境变量将覆盖上面描述的 verbose 参数的值。