Skip to content

Conversation

@NSFatalError
Copy link
Owner

@NSFatalError NSFatalError commented Nov 30, 2025

Summary by CodeRabbit

  • Chores

    • Updated SwiftLint configs and enabled swiftformat-tagged style rules.
  • Refactor

    • Simplified isolation handling and parsing entry points; tightened type handling and initializers.
    • Added diagnostic fix‑it helpers and modifier/access-control utilities.
    • Made access-control enum Sendable.
  • New Public APIs

    • Added single-property parsing helper and flattened member-sequence accessors.
    • Added a public nonisolated factory and access-control modifier helper.
  • Tests

    • Added and updated unit tests for access control, parsing, and member flattening.

✏️ Tip: You can customize this high-level summary in your review settings.

@NSFatalError NSFatalError self-assigned this Nov 30, 2025
@coderabbitai
Copy link

coderabbitai bot commented Nov 30, 2025

Walkthrough

Configuration updates to SwiftLint and tests; multiple public API additions and signatures changes across macro syntax code (FixIt helpers, GlobalActorIsolation, access-control utilities), parser signature/simplifications, flattened member helpers, and corresponding test updates.

Changes

Cohort / File(s) Change Summary
SwiftLint Configuration
\.swiftlint.yml, \.swiftlint.tests.yml
Added type_body_length to disabled rules for tests; annotated/enabled several swiftformat-tagged rules, removed global_actor_attribute_order custom rule, tightened empty_line_after_type_declaration regex, and set ignores_multiline_strings: true for line_length.
Fix-It Helpers
Sources/PrincipleMacros/Diagnostics/FixIt.swift
Added public helpers remove(message:oldNode:) and replace(message:oldNode:newNode:) that build fix-its preserving trivia and attaching messages.
GlobalActorIsolation & Parameter Extraction
Sources/PrincipleMacros/Syntax/Concepts/GlobalActorIsolation.swift, Sources/PrincipleMacros/Parameters/ParameterExtractor.swift
Added public static nonisolated factory on GlobalActorIsolation; ParameterExtractor now returns plain .nonisolated when input is nil (removing associated trimmed-modifier usage).
Parser API & Member Flattening
Sources/PrincipleMacros/Parsers/Common/Parser.swift, Sources/PrincipleMacros/Syntax/Extensions/MemberBlockItemListSyntax.swift, Sources/PrincipleMacros/Syntax/Extensions/IfConfigDeclSyntax+EnclosingIfConfig.swift
Replaced parse(ifConfig:)/parse(memberBlock:) with parse(declarationGroup:) and generalized parse(members:); added flattened/flattenedMembers computed sequences for member flattening; adjusted enclosing-ifconfig helpers and imports.
Parser Fallbacks & Properties Parsing
Sources/PrincipleMacros/Parsers/EnumCases/EnumCasesParser.swift, Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift
Changed empty/error-path returns from .init() to explicit EnumCasesList() / PropertiesList(); added public static func parseStandalone(declaration:) throws -> Property? that validates single-binding and throws if >1.
Attributed Type & Modifiers Utilities
Sources/PrincipleMacros/Syntax/Extensions/AttributedTypeSyntax.swift, Sources/PrincipleMacros/Syntax/Extensions/WithModifiersSyntax+AccessControlLevel.swift
Narrowed primary AttributedTypeSyntax initializer to accept TypeSyntax, added overload accepting some TypeSyntaxProtocol; added DeclModifierListSyntax.withAccessControlLevel(_:) to filter/insert access-control modifiers.
AccessControlLevel Changes & Tests
Sources/PrincipleMacros/Syntax/Concepts/AccessControlLevel.swift, Tests/PrincipleMacrosTests/Syntax/Concepts/AccessControlLevelTests.swift
Marked AccessControlLevel as Sendable; added unit tests for token conversion, ordering, and inheritance/defaulting behaviors.
IfConfig / MemberBlock Tests & Updates
Tests/PrincipleMacrosTests/Syntax/Extensions/IfConfigDeclSyntaxTests.swift, Tests/PrincipleMacrosTests/Syntax/Extensions/MemberBlockItemListSyntaxTests.swift, Tests/PrincipleMacrosTests/Parsers/PropertiesListTests.swift
Updated tests to use declarationGroup-based parsing and new withIfConfigIfPresent(from:) APIs; added tests for MemberBlockItemListSyntax.flattened and renamed/adjusted test cases accordingly.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Pay attention to public API changes (Parser signatures, new public methods, enum factory, initializer type changes).
  • Review trivia handling in FixIt helpers and any placement/order assumptions in withAccessControlLevel and flattened sequences.
  • Confirm all call sites and tests were updated to match parser signature changes.

Possibly related PRs

Poem

🐰
I nudged the lint, I folded braces neat,
I kept trivia soft and modifiers sweet,
Actors calmed, parsers flattened lines,
Tests hopped through newly shaped confines,
A carrot-cheer for tidy, tiny wins! 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The PR title 'FixIt improvements' is vague and does not clearly summarize the main changes in the changeset, which includes extensive refactoring across multiple files beyond just FixIt helper methods. Consider a more specific title that captures the scope of changes, such as 'Refactor SwiftLint configuration and macro parsing infrastructure' or break into multiple PRs focusing on distinct concerns.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/fix-it

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 760697b and c4733a3.

📒 Files selected for processing (1)
  • Tests/PrincipleMacrosTests/Syntax/Concepts/AccessControlLevelTests.swift (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • Tests/PrincipleMacrosTests/Syntax/Concepts/AccessControlLevelTests.swift
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: build-and-test (macos)
  • GitHub Check: build-and-test (visionos)
  • GitHub Check: build-and-test (maccatalyst)
  • GitHub Check: build-and-test (tvos)
  • GitHub Check: build-and-test (ios)

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
Sources/PrincipleMacros/Diagnostics/FixIt.swift (1)

13-22: Consider preserving trailing trivia when removing nodes.

The current implementation only preserves leadingTrivia when removing a node, which may result in formatting issues. If the removed node has trailing whitespace or newlines, they will be lost, potentially collapsing adjacent tokens or lines.

Consider whether trailing trivia should also be preserved:

     public static func remove(
         message: String,
         oldNode: some SyntaxProtocol
     ) -> Self {
         .replace(
             message: MacroExpansionFixItMessage(message),
             oldNode: oldNode,
-            newNode: "\(oldNode.leadingTrivia)" as TokenSyntax
+            newNode: "\(oldNode.leadingTrivia)\(oldNode.trailingTrivia)" as TokenSyntax
         )
     }

Alternatively, if leading-trivia-only is intentional for your use cases, consider adding a doc comment explaining this behavior.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cc9d2e8 and 39b7dc5.

📒 Files selected for processing (9)
  • .swiftlint.tests.yml (1 hunks)
  • .swiftlint.yml (6 hunks)
  • Sources/PrincipleMacros/Diagnostics/FixIt.swift (1 hunks)
  • Sources/PrincipleMacros/Parameters/ParameterExtractor.swift (1 hunks)
  • Sources/PrincipleMacros/Parsers/EnumCases/EnumCasesParser.swift (1 hunks)
  • Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift (1 hunks)
  • Sources/PrincipleMacros/Syntax/Concepts/GlobalActorIsolation.swift (1 hunks)
  • Sources/PrincipleMacros/Syntax/Extensions/AttributedTypeSyntax.swift (1 hunks)
  • Sources/PrincipleMacros/Syntax/Extensions/WithModifiersSyntax+AccessControlLevel.swift (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
Sources/PrincipleMacros/Syntax/Extensions/WithModifiersSyntax+AccessControlLevel.swift (2)
Sources/PrincipleMacros/Parsers/Common/ParserResultsCollection.swift (1)
  • filter (40-44)
Sources/PrincipleMacros/Parameters/ParameterExtractor.swift (1)
  • accessControlLevel (83-112)
Sources/PrincipleMacros/Diagnostics/FixIt.swift (1)
Sources/PrincipleMacros/Syntax/Extensions/SyntaxProtocol.swift (1)
  • withTrivia (37-40)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: build-and-test (watchos)
  • GitHub Check: build-and-test (visionos)
  • GitHub Check: build-and-test (tvos)
  • GitHub Check: build-and-test (macos)
  • GitHub Check: build-and-test (maccatalyst)
🔇 Additional comments (12)
Sources/PrincipleMacros/Parsers/EnumCases/EnumCasesParser.swift (1)

16-18: LGTM!

Using the explicit EnumCasesList() initializer instead of .init() improves code clarity by making the return type immediately visible at the call site.

Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift (1)

16-18: LGTM!

Consistent with the EnumCasesParser change—using explicit PropertiesList() improves readability.

.swiftlint.tests.yml (1)

1-4: LGTM!

Disabling type_body_length for tests is appropriate—test classes often grow large due to numerous test methods, and this rule would generate noise without actionable benefit.

Sources/PrincipleMacros/Syntax/Extensions/WithModifiersSyntax+AccessControlLevel.swift (1)

26-41: LGTM!

The withAccessControlLevel method correctly:

  1. Filters out existing access control modifiers (both getter and setter variants)
  2. Optionally prepends a new access control modifier when level is non-nil
  3. Follows Swift's with naming convention for copy-returning transformations

Clean and useful helper for macro-based code generation.

Sources/PrincipleMacros/Parameters/ParameterExtractor.swift (1)

189-191: LGTM!

Simplified return for the nil literal case—returning .nonisolated directly aligns with the updated GlobalActorIsolation API where the nonisolated variant no longer requires an associated modifier when created from a nil input.

Sources/PrincipleMacros/Syntax/Concepts/GlobalActorIsolation.swift (1)

16-19: LGTM!

The factory method provides a clean, convenient way to create the nonisolated case without requiring callers to manually construct the DeclModifierSyntax. This improves the API ergonomics.

Sources/PrincipleMacros/Diagnostics/FixIt.swift (1)

24-34: LGTM!

The helper correctly preserves trivia from the old node when replacing it with the new node using withTrivia(from:), which ensures proper formatting is maintained.

.swiftlint.yml (4)

11-11: LGTM!

The comment updates clearly indicate which rules are now handled by swiftformat, improving maintainability by documenting the tooling split.

Also applies to: 60-60, 70-70, 147-147


176-176: LGTM!

Adding ignores_multiline_strings: true is a sensible configuration, as breaking multiline string literals to meet line length requirements can alter their content or readability.


204-204: LGTM!

The updated regex pattern correctly excludes empty type bodies using (?!\\s*\\}) while enforcing the empty line requirement after type declarations. The pattern handles the various type keywords appropriately.


58-58: Enabling implicitly_unwrapped_optional is safe; no actual code violations exist.

The codebase contains no implicitly unwrapped optional type declarations in actual code. The only instances of ! in type contexts appear in test string fixtures (TypeSyntaxTests.swift and ClosureTypeSyntaxTests.swift), which are string representations and not executable code that would trigger the rule.

Sources/PrincipleMacros/Syntax/Extensions/AttributedTypeSyntax.swift (1)

13-16: This is a new initializer addition with no breaking changes; no action needed.

No existing callers use this two-parameter initializer. The method is a new convenience constructor that does not affect the default AttributedTypeSyntax(syntax:) initializer from SwiftSyntax, which is what existing code relies on. The type parameter is specific to this new initializer and poses no compatibility risk.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
Sources/PrincipleMacros/Syntax/Concepts/GlobalActorIsolation.swift (2)

13-19: Static nonisolated factory wiring looks correct; consider future‑proofing the label spelling

The new public static var nonisolated correctly constructs the .nonisolated case with a DeclModifierSyntax for the nonisolated keyword, and integrates cleanly with trimmedNonisolatedModifier.

One small API‑surface nit: the associated value label is spelled trimmedModifer (missing the second “i”). If you expect external code to construct .nonisolated(trimmedModifer:) directly, this typo becomes harder to fix later without a breaking change. If you can still afford it in this release, consider renaming to trimmedModifier (and updating the call here) or introducing an additional correctly spelled factory while deprecating the old spelling.


73-75: Generalizing _resolved to some Sequence<Syntax> is a sound internal improvement

Allowing _resolved to accept some Sequence<Syntax> makes the helper more flexible and lets call sites pass lightweight sequences like CollectionOfOne without first materializing an array, while preserving the existing for‑loop behavior.

As a minor improvement, you might add a brief doc comment noting the expected ordering of fullContext (e.g., starting from the innermost declaration outward) so future call sites constructing custom sequences don’t accidentally violate the early‑break assumptions around DeclGroupSyntax.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 39b7dc5 and 760697b.

📒 Files selected for processing (11)
  • Sources/PrincipleMacros/Parsers/Common/Parser.swift (1 hunks)
  • Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift (2 hunks)
  • Sources/PrincipleMacros/Syntax/Concepts/AccessControlLevel.swift (1 hunks)
  • Sources/PrincipleMacros/Syntax/Concepts/GlobalActorIsolation.swift (2 hunks)
  • Sources/PrincipleMacros/Syntax/Extensions/AttributedTypeSyntax.swift (2 hunks)
  • Sources/PrincipleMacros/Syntax/Extensions/IfConfigDeclSyntax+EnclosingIfConfig.swift (4 hunks)
  • Sources/PrincipleMacros/Syntax/Extensions/MemberBlockItemListSyntax.swift (1 hunks)
  • Tests/PrincipleMacrosTests/Parsers/PropertiesListTests.swift (1 hunks)
  • Tests/PrincipleMacrosTests/Syntax/Concepts/AccessControlLevelTests.swift (1 hunks)
  • Tests/PrincipleMacrosTests/Syntax/Extensions/IfConfigDeclSyntaxTests.swift (4 hunks)
  • Tests/PrincipleMacrosTests/Syntax/Extensions/MemberBlockItemListSyntaxTests.swift (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • Sources/PrincipleMacros/Syntax/Extensions/AttributedTypeSyntax.swift
🧰 Additional context used
🧬 Code graph analysis (6)
Tests/PrincipleMacrosTests/Parsers/PropertiesListTests.swift (3)
Sources/PrincipleMacros/Parsers/Common/Parser.swift (2)
  • parse (22-27)
  • parse (29-37)
Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift (1)
  • parse (13-44)
Sources/PrincipleMacros/Parsers/EnumCases/EnumCasesParser.swift (1)
  • parse (13-25)
Sources/PrincipleMacros/Syntax/Extensions/MemberBlockItemListSyntax.swift (1)
Tests/PrincipleMacrosTests/Syntax/Extensions/MemberBlockItemListSyntaxTests.swift (2)
  • ifConfig (28-42)
  • members (16-26)
Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift (3)
Sources/PrincipleMacros/Parsers/Common/Parser.swift (2)
  • parse (22-27)
  • parse (29-37)
Sources/PrincipleMacros/Parsers/EnumCases/EnumCasesParser.swift (1)
  • parse (13-25)
Sources/PrincipleMacros/Syntax/Extensions/TypeSyntax.swift (1)
  • first (31-35)
Sources/PrincipleMacros/Parsers/Common/Parser.swift (1)
Tests/PrincipleMacrosTests/Syntax/Extensions/MemberBlockItemListSyntaxTests.swift (1)
  • members (16-26)
Tests/PrincipleMacrosTests/Syntax/Concepts/AccessControlLevelTests.swift (1)
Sources/PrincipleMacros/Syntax/Concepts/AccessControlLevel.swift (3)
  • forMember (111-122)
  • forSibling (124-135)
  • forPeer (137-148)
Sources/PrincipleMacros/Syntax/Extensions/IfConfigDeclSyntax+EnclosingIfConfig.swift (1)
Tests/PrincipleMacrosTests/Syntax/Extensions/MemberBlockItemListSyntaxTests.swift (1)
  • ifConfig (28-42)
🪛 SwiftLint (0.57.0)
Tests/PrincipleMacrosTests/Syntax/Extensions/MemberBlockItemListSyntaxTests.swift

[Warning] 41-41: Magic numbers should be replaced by named constants

(no_magic_numbers)


[Warning] 61-61: Magic numbers should be replaced by named constants

(no_magic_numbers)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: build-and-test (visionos)
  • GitHub Check: build-and-test (tvos)
  • GitHub Check: build-and-test (macos)
  • GitHub Check: build-and-test (ios)
  • GitHub Check: build-and-test (maccatalyst)
🔇 Additional comments (24)
Sources/PrincipleMacros/Syntax/Extensions/IfConfigDeclSyntax+EnclosingIfConfig.swift (4)

9-9: LGTM: Import updated to SwiftSyntaxMacros.

The import change aligns with the macro-focused extensions in this file.


69-78: LGTM: Clean API for conditional IfConfig application.

The withIfConfigIfPresent method provides an intuitive interface for applying enclosing IfConfig when available, falling back to the original list when not.


97-109: LGTM: Consistent API extension for CodeBlockItemListSyntax.

The implementation mirrors MemberBlockItemListSyntax.withIfConfigIfPresent, appropriately using .statements(self) instead of .decls(self).


120-124: LGTM: Reduced visibility and improved formatting.

The method is now appropriately scoped as fileprivate since it's an internal helper, and the addition of withLeadingNewline ensures consistent formatting of the resulting IfConfig.

Tests/PrincipleMacrosTests/Parsers/PropertiesListTests.swift (1)

37-37: LGTM: Test updated to use new parser API.

The test correctly switches from parse(memberBlock:) to parse(declarationGroup:), aligning with the parser API refactoring.

Tests/PrincipleMacrosTests/Syntax/Extensions/MemberBlockItemListSyntaxTests.swift (1)

12-64: LGTM: Comprehensive test coverage for flattening.

The tests appropriately cover:

  • Basic member flattening (no IfConfig)
  • Single-level IfConfig flattening
  • Nested IfConfig flattening

The magic number warnings from SwiftLint are acceptable in test assertions.

Tests/PrincipleMacrosTests/Syntax/Extensions/IfConfigDeclSyntaxTests.swift (3)

18-18: LGTM: Test updated to use new parser API.

Correctly switches to parse(declarationGroup:) in line with the parser refactoring.


133-164: LGTM: Test renamed and updated for new API.

The test is appropriately renamed to applyToMemberBlock and correctly uses withIfConfigIfPresent(from:). The removal of optional chaining on .description at line 163 is correct since withIfConfigIfPresent always returns a non-optional value.


167-198: LGTM: Test renamed and updated for new API.

The test is appropriately renamed to applyToCodeBlock and correctly uses withIfConfigIfPresent(from:). The removal of optional chaining on .description at line 197 is correct since withIfConfigIfPresent always returns a non-optional value.

Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift (2)

17-17: LGTM: Explicit constructor improves clarity.

Using PropertiesList() is more explicit and readable than .init().


46-62: LGTM: Clean single-binding validation API.

The parseStandalone method provides a clear interface for parsing declarations that must contain exactly one binding. The validation logic correctly:

  • Returns nil for empty results
  • Throws a descriptive error for multiple bindings
  • Returns the single property when exactly one exists
Sources/PrincipleMacros/Parsers/Common/Parser.swift (2)

22-27: LGTM: Simplified parser entry point.

The refactored parse(declarationGroup:) method delegates IfConfig flattening to the flattened property, improving separation of concerns. The parser now focuses purely on parsing logic rather than structural traversal.


29-37: LGTM: Generalized member parsing.

The signature now accepts some Sequence<MemberBlockItemSyntax> instead of a concrete MemberBlockItemListSyntax, making it more flexible. The removal of IfConfig-specific handling is appropriate since flattening is now handled upstream.

Sources/PrincipleMacros/Syntax/Extensions/MemberBlockItemListSyntax.swift (3)

11-22: LGTM: Efficient recursive flattening implementation.

The flattened property correctly:

  • Uses lazy evaluation to defer computation
  • Recursively flattens IfConfigDeclSyntax members
  • Wraps non-IfConfig members in CollectionOfOne
  • Uses AnySequence for appropriate type erasure

24-29: LGTM: Clean flattening across IfConfig clauses.

The implementation efficiently concatenates flattened members from all clauses using lazy evaluation.


31-41: LGTM: Appropriate handling of clause elements.

The implementation correctly:

  • Recursively flattens .decls case members
  • Returns an empty collection for non-.decls cases (e.g., .statements)
Sources/PrincipleMacros/Syntax/Concepts/AccessControlLevel.swift (1)

9-9: LGTM! Appropriate Sendable conformance.

Adding Sendable conformance to this enum is safe and beneficial. The enum is a value type with only cases and computed properties, making it inherently thread-safe for use across concurrency boundaries.

Tests/PrincipleMacrosTests/Syntax/Concepts/AccessControlLevelTests.swift (6)

9-12: LGTM! Clean test setup.

The imports and test struct declaration are properly configured for the Swift Testing framework.


14-28: LGTM! Comprehensive round-trip conversion test.

The parameterized test correctly validates that all access control keywords can be converted to AccessControlLevel and back, ensuring the conversion logic is bidirectional.


30-37: LGTM! Correct access control ordering.

The comparison test validates the expected hierarchy of access control levels, which aligns with the enum's Int raw value ordering.


40-70: LGTM! Thorough member inheritance coverage.

The test suite correctly validates the forMember behavior:

  • Private members cannot inherit (return nil)
  • Open defaults to public for members
  • Other levels are preserved

The use of dropFirst().dropLast() appropriately excludes the edge cases (private and open) that are tested separately.


72-102: LGTM! Accurate sibling inheritance tests.

The sibling inheritance tests correctly validate:

  • Private becomes fileprivate for siblings
  • Open defaults to public
  • Other levels are preserved

104-127: LGTM! Correct peer inheritance tests.

The peer inheritance tests appropriately validate that:

  • Open defaults to public for peers
  • All other levels (including private) are preserved

The use of dropLast() (rather than dropFirst().dropLast()) is correct because private peers should retain their access level.

Sources/PrincipleMacros/Syntax/Concepts/GlobalActorIsolation.swift (1)

22-23: Extension boundary and placement are fine

Keeping the computed accessors in a dedicated extension GlobalActorIsolation keeps the core enum definition compact and is consistent with the rest of the file’s structure. No issues here.

@NSFatalError NSFatalError merged commit ed1067d into main Dec 1, 2025
8 of 9 checks passed
@NSFatalError NSFatalError deleted the feature/fix-it branch December 1, 2025 23:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants