-
Notifications
You must be signed in to change notification settings - Fork 0
chore: add CI check for nonisolated on classes with background DispatchQueue/OperationQueue #699
Copy link
Copy link
Open
Labels
CIContinuous integrationContinuous integrationpriority: highCritical priorityCritical prioritytoolingDeveloper toolingDeveloper tooling
Description
Summary
Add a CI script that greps all classes using DispatchQueue or OperationQueue for background work and verifies they are marked nonisolated. Fail CI if any class with a background queue is missing nonisolated.
Motivation
v1.16.0 shipped with a crash in ConfigValidator because it uses a background DispatchQueue but was implicitly @MainActor due to SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor. This was missed in code review and not caught by tests (PineTests target is Swift 5, which doesn't enforce isolation at compile time).
Similar crashes already hit SyntaxHighlighter, FileNode, and PreviewItem during development.
Implementation ideas
- Shell script in
.github/scripts/that:- Finds all
.swiftfiles inPine/containingDispatchQueue(label:orOperationQueue()(excluding.main) - For each match, checks if the enclosing class/struct has
nonisolated - Fails with a clear error message listing non-compliant classes
- Finds all
- Add as a CI step after SwiftLint
- Could also check for
DispatchQueue.global()usage in closures within MainActor classes
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
CIContinuous integrationContinuous integrationpriority: highCritical priorityCritical prioritytoolingDeveloper toolingDeveloper tooling