mirror of
https://github.com/garrytan/gstack.git
synced 2026-06-20 08:40:11 +02:00
4334c65177
Replaces fork's regex-based codegen with SwiftPM swift-syntax tool (production) plus a TS port (test + fast first-run). Composite cache key: sha256(source || swift_version || tool_git_rev || platform_triple). Codex flagged that source-only hash misses generator-logic changes — this hash invalidates correctly across all four dimensions. 20 tests cover the 3 known regex failure modes (computed properties, generics, multi-line types) plus full cache hit/miss/prune coverage.
41 lines
1.3 KiB
Swift
41 lines
1.3 KiB
Swift
// swift-tools-version:5.9
|
|
//
|
|
// gen-accessors-tool — SwiftPM tool that reads an app's Swift source via
|
|
// swift-syntax, finds @Observable classes with @Snapshotable-marked fields,
|
|
// and emits StateAccessor.swift for each one.
|
|
//
|
|
// First build is 2-5 min on a cold machine (swift-syntax compile chain).
|
|
// Subsequent runs are content-hash-cached and finish in ~50ms.
|
|
//
|
|
// Invocation:
|
|
// swift run --package-path ios-qa/scripts/gen-accessors-tool \
|
|
// gen-accessors --input <swift-source-dir> [--output <out-dir>]
|
|
|
|
import PackageDescription
|
|
|
|
let package = Package(
|
|
name: "gen-accessors-tool",
|
|
platforms: [.macOS(.v13)],
|
|
products: [
|
|
.executable(name: "gen-accessors", targets: ["GenAccessors"]),
|
|
],
|
|
dependencies: [
|
|
.package(url: "https://github.com/swiftlang/swift-syntax.git", from: "510.0.0"),
|
|
],
|
|
targets: [
|
|
.executableTarget(
|
|
name: "GenAccessors",
|
|
dependencies: [
|
|
.product(name: "SwiftSyntax", package: "swift-syntax"),
|
|
.product(name: "SwiftParser", package: "swift-syntax"),
|
|
],
|
|
path: "Sources/GenAccessors"
|
|
),
|
|
.testTarget(
|
|
name: "GenAccessorsTests",
|
|
dependencies: ["GenAccessors"],
|
|
path: "Tests/GenAccessorsTests"
|
|
),
|
|
]
|
|
)
|