1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2014-2023 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
@available(*, deprecated, renamed: "PluginModule")
public typealias PluginTarget = PluginModule
public final class PluginModule: Module {
/// Description of the module type used in `swift package describe` output. Preserved for backwards compatibility.
public override class var typeDescription: String { "PluginTarget" }
/// Declared capability of the plugin.
public let capability: PluginCapability
/// API version to use for PackagePlugin API availability.
public let apiVersion: ToolsVersion
public init(
name: String,
sources: Sources,
apiVersion: ToolsVersion,
pluginCapability: PluginCapability,
dependencies: [Module.Dependency] = [],
packageAccess: Bool
) {
self.capability = pluginCapability
self.apiVersion = apiVersion
super.init(
name: name,
type: .plugin,
path: .root,
sources: sources,
dependencies: dependencies,
packageAccess: packageAccess,
buildSettings: .init(),
buildSettingsDescription: [],
pluginUsages: [],
usesUnsafeFlags: false
)
}
}
public enum PluginCapability: Hashable {
case buildTool
case command(intent: PluginCommandIntent, permissions: [PluginPermission])
public init(from desc: TargetDescription.PluginCapability) {
switch desc {
case .buildTool:
self = .buildTool
case .command(let intent, let permissions):
self = .command(intent: .init(from: intent), permissions: permissions.map{ .init(from: $0) })
}
}
}
public enum PluginCommandIntent: Hashable {
case documentationGeneration
case sourceCodeFormatting
case custom(verb: String, description: String)
public init(from desc: TargetDescription.PluginCommandIntent) {
switch desc {
case .documentationGeneration:
self = .documentationGeneration
case .sourceCodeFormatting:
self = .sourceCodeFormatting
case .custom(let verb, let description):
self = .custom(verb: verb, description: description)
}
}
}
public enum PluginNetworkPermissionScope: Hashable {
case none
case local(ports: [Int])
case all(ports: [Int])
case docker
case unixDomainSocket
init(_ scope: TargetDescription.PluginNetworkPermissionScope) {
switch scope {
case .none: self = .none
case .local(let ports): self = .local(ports: ports)
case .all(let ports): self = .all(ports: ports)
case .docker: self = .docker
case .unixDomainSocket: self = .unixDomainSocket
}
}
public var label: String {
switch self {
case .all: return "all"
case .local: return "local"
case .none: return "none"
case .docker: return "docker unix domain socket"
case .unixDomainSocket: return "unix domain socket"
}
}
public var ports: [Int] {
switch self {
case .all(let ports): return ports
case .local(let ports): return ports
case .none, .docker, .unixDomainSocket: return []
}
}
}
public enum PluginPermission: Hashable {
case allowNetworkConnections(scope: PluginNetworkPermissionScope, reason: String)
case writeToPackageDirectory(reason: String)
public init(from desc: TargetDescription.PluginPermission) {
switch desc {
case .allowNetworkConnections(let scope, let reason):
self = .allowNetworkConnections(scope: .init(scope), reason: reason)
case .writeToPackageDirectory(let reason):
self = .writeToPackageDirectory(reason: reason)
}
}
}
|