2.4 KiB
2.4 KiB
SwiftPM Coverage Plan · SCANNER-ENG-0013 (2025-12-08)
Goals
- Plan Swift Package Manager coverage for Scanner: inventory, dependency graph, xcframework/binary target awareness, runtime hints.
- Keep processing offline and deterministic; no
swift packageexecution.
Inputs
Package.swift(manifest) andPackage.resolved(v2/v3 lockfile)..build/checkouts/**(optional for checksum verification only).- Binary targets:
binaryTargetentries, xcframeworks under.xcframework/. - Platform hints:
platforms,cLanguageStandard,cxxLanguageStandard.
Pipeline (deterministic, offline)
- Resolve lockfile:
- Parse
Package.resolved; emit packages with identity, version, repo URL, checksum. - PURL:
pkg:swift/<identity>@<version>; includevcsmetadata (git URL, revision). - Sort packages by identity.
- Parse
- Manifest signals:
- Parse
Package.swift(static parse via tree-sitter Swift or manifest JSON dump if available) to extract:- products/targets (name, type library/test/executable).
- binary targets (path/url, checksum).
- platform minimum versions.
- Parse
- Graph builder:
- Edges from targets → dependencies; packages → transitive dependencies from lockfile pins.
- Mark binary targets with
provenance: binary-targetand attach checksum if supplied.
- Runtime hints:
- Collect
unsafeFlags, linker settings,swiftSettings/cSettings/cxxSettingsindicators (e.g.,-enable-library-evolution). - Emit
xcframeworkpresence for Apple platform binaries.
- Collect
- Outputs:
- Inventory: Swift packages (PURL + checksum/vcs), binary targets (type=binary, checksum/path).
- Graph: package dependency edges; target-to-target edges (optional).
- Signals: platform minimums, binary target flags, unsafe flags presence.
Tests & fixtures
- Fixtures under
src/Scanner/__Tests/StellaOps.Scanner.Analyzers.Native.Tests/Fixtures/SwiftPM/:- Simple library/executable, binary target with checksum, mixed platform constraints.
- Determinism: stable ordering, normalized checksums, no filesystem time dependency.
Deliverables
- Implementation to land under
StellaOps.Scanner.Analyzers.Native(SwiftPM module). - Documentation cross-link to sprint log and
docs/modules/scanner/implementation_plan.md. - Offline posture: never invoke
swift build; rely solely onPackage.resolved/manifest; error clearly when lockfile missing.