Files

248 lines
9.4 KiB
Swift

// swift-tools-version:5.9
import CompilerPluginSupport
import PackageDescription
let swiftFeatures: [SwiftSetting] = [
.enableUpcomingFeature("ConciseMagicFile"),
.enableUpcomingFeature("ExistentialAny"),
.enableUpcomingFeature("ForwardTrailingClosures"),
.enableUpcomingFeature("GlobalActorIsolatedTypesUsability"),
.enableUpcomingFeature("ImplicitOpenExistentials"),
.enableUpcomingFeature("ImportObjcForwardDeclarations"),
.enableUpcomingFeature("InferIsolatedConformances"),
.enableUpcomingFeature("InferSendableFromCaptures"),
.enableUpcomingFeature("MemberImportVisibility"),
]
let strictConcurrency = [SwiftSetting.enableExperimentalFeature("StrictConcurrency=complete")]
let targetedConcurrency = [SwiftSetting.enableExperimentalFeature("StrictConcurrency=targeted")]
let swiftLintPluginDependencies: [Target.Dependency]
// Workaround for a download issue on Linux with Swift 5.10.
#if compiler(>=6) || compiler(<5.10) || !os(Linux)
swiftLintPluginDependencies = [.target(name: "SwiftLintBinary")]
#else
swiftLintPluginDependencies = [.target(name: "swiftlint")]
#endif
let package = Package(
name: "SwiftLint",
platforms: [.macOS(.v13)],
products: [
.executable(name: "swiftlint", targets: ["swiftlint"]),
.library(name: "SwiftLintFramework", targets: ["SwiftLintFramework"]),
.plugin(name: "SwiftLintBuildToolPlugin", targets: ["SwiftLintBuildToolPlugin"]),
.plugin(name: "SwiftLintCommandPlugin", targets: ["SwiftLintCommandPlugin"]),
],
dependencies: [
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMajor(from: "1.6.1")),
.package(url: "https://github.com/swiftlang/swift-syntax.git", exact: "604.0.0-prerelease-2026-04-21"),
.package(url: "https://github.com/jpsim/SourceKitten.git", .upToNextMajor(from: "0.37.2")),
.package(url: "https://github.com/jpsim/Yams.git", .upToNextMajor(from: "6.0.2")),
.package(url: "https://github.com/scottrhoyt/SwiftyTextTable.git", .upToNextMajor(from: "0.9.0")),
.package(url: "https://github.com/JohnSundell/CollectionConcurrencyKit.git", .upToNextMajor(from: "0.2.0")),
.package(url: "https://github.com/krzyzanowskim/CryptoSwift.git", .upToNextMajor(from: "1.9.0")),
.package(url: "https://github.com/ileitch/swift-filename-matcher", .upToNextMinor(from: "2.0.1")),
],
targets: [
.executableTarget(
name: "swiftlint",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
"CollectionConcurrencyKit",
"SwiftLintFramework",
"SwiftyTextTable",
],
swiftSettings: swiftFeatures + strictConcurrency
),
.executableTarget(
name: "swiftlint-dev",
dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
"SwiftLintFramework",
],
swiftSettings: swiftFeatures + strictConcurrency
),
.target(
name: "SwiftLintFramework",
dependencies: [
.product(name: "FilenameMatcher", package: "swift-filename-matcher"),
"SwiftLintBuiltInRules",
"SwiftLintCore",
"SwiftLintExtraRules",
"CollectionConcurrencyKit",
],
swiftSettings: swiftFeatures + targetedConcurrency
),
.plugin(
name: "SwiftLintBuildToolPlugin",
capability: .buildTool(),
dependencies: swiftLintPluginDependencies,
packageAccess: false
),
.plugin(
name: "SwiftLintCommandPlugin",
capability: .command(
intent: .custom(verb: "swiftlint", description: "SwiftLint Command Plugin"),
permissions: [
.writeToPackageDirectory(
reason: "When this command is run with the `--fix` option it may modify source files."
),
]
),
dependencies: swiftLintPluginDependencies,
packageAccess: false
),
.target(
name: "SwiftLintCore",
dependencies: [
.product(name: "CryptoSwift", package: "CryptoSwift", condition: .when(platforms: [.linux, .windows])),
.target(name: "DyldWarningWorkaround", condition: .when(platforms: [.macOS])),
.product(name: "FilenameMatcher", package: "swift-filename-matcher"),
.product(name: "SourceKittenFramework", package: "SourceKitten"),
.product(name: "SwiftIDEUtils", package: "swift-syntax"),
.product(name: "SwiftOperators", package: "swift-syntax"),
.product(name: "SwiftParser", package: "swift-syntax"),
.product(name: "SwiftSyntax", package: "swift-syntax"),
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
.product(name: "SwiftyTextTable", package: "SwiftyTextTable"),
.product(name: "Yams", package: "Yams"),
"SwiftLintCoreMacros",
],
swiftSettings: swiftFeatures + strictConcurrency
),
.target(
name: "SwiftLintBuiltInRules",
dependencies: [
.product(name: "SwiftLexicalLookup", package: "swift-syntax"),
"SwiftLintCore",
],
swiftSettings: swiftFeatures + strictConcurrency
),
.target(
name: "SwiftLintExtraRules",
dependencies: ["SwiftLintCore"],
swiftSettings: swiftFeatures + strictConcurrency
),
.target(name: "DyldWarningWorkaround"),
.macro(
name: "SwiftLintCoreMacros",
dependencies: [
.product(name: "SwiftSyntaxMacros", package: "swift-syntax"),
.product(name: "SwiftCompilerPlugin", package: "swift-syntax"),
],
path: "Source/SwiftLintCoreMacros",
swiftSettings: swiftFeatures + strictConcurrency
),
.testTarget(
name: "BuiltInRulesTests",
dependencies: [
"SwiftLintBuiltInRules",
"TestHelpers",
],
exclude: [
"Resources",
],
swiftSettings: swiftFeatures + strictConcurrency
),
.testTarget(
name: "CoreTests",
dependencies: [
"SwiftLintCore",
"TestHelpers",
],
exclude: [
"Resources",
],
swiftSettings: swiftFeatures + strictConcurrency
),
.testTarget(
name: "ExtraRulesTests",
dependencies: [
"SwiftLintFramework",
"TestHelpers",
],
exclude: [
"BUILD",
],
swiftSettings: swiftFeatures + strictConcurrency
),
.testTarget(
name: "FileSystemAccessTests",
dependencies: [
.product(name: "FilenameMatcher", package: "swift-filename-matcher"),
"SwiftLintFramework",
"TestHelpers",
"SwiftLintCoreMacros",
],
exclude: [
"Resources",
],
swiftSettings: swiftFeatures + strictConcurrency
),
.testTarget(
name: "FrameworkTests",
dependencies: [
"SwiftLintFramework",
"TestHelpers",
"SwiftLintCoreMacros",
],
exclude: [
"Resources",
],
swiftSettings: swiftFeatures + strictConcurrency
),
.testTarget(
name: "GeneratedTests",
dependencies: [
"SwiftLintFramework",
"TestHelpers",
],
swiftSettings: swiftFeatures + strictConcurrency
),
.testTarget(
name: "IntegrationTests",
dependencies: [
"SwiftLintCore",
"SwiftLintFramework",
"TestHelpers",
],
exclude: [
"Resources",
],
swiftSettings: swiftFeatures + targetedConcurrency // Set to strict once SwiftLintFramework is updated
),
.testTarget(
name: "MacroTests",
dependencies: [
"SwiftLintCoreMacros",
"TestHelpers",
.product(name: "SwiftSyntaxMacrosTestSupport", package: "swift-syntax"),
],
swiftSettings: swiftFeatures + strictConcurrency
),
.target(
name: "TestHelpers",
dependencies: [
"SwiftLintFramework"
],
path: "Tests/TestHelpers",
exclude: [
"BUILD",
],
swiftSettings: swiftFeatures + strictConcurrency
),
]
)
// Workaround for a download issue on Linux with Swift 5.10.
#if compiler(>=6) || compiler(<5.10) || !os(Linux)
package.targets.append(
.binaryTarget(
name: "SwiftLintBinary",
url: "https://github.com/realm/SwiftLint/releases/download/0.63.2/SwiftLintBinary.artifactbundle.zip",
checksum: "12befab676fc972ffde2ec295d016d53c3a85f64aabd9c7fee0032d681e307e9"
)
)
#endif