krz/hutch

an ios client for sourcehut

clone: git clone https://gitbay.org/krz/hutch.git

b2a1265cadccc34cbdab71b9ed638b908cac9f62

verified · cmc

author: Christian Cleberg <hello@cleberg.net> · 2026-08-07T22:11:52Z

Fix Swift 6-mode isolation and attribute warnings

Under SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor these are warnings in Swift 5
mode and errors in Swift 6 mode:

- Drop @retroactive from 'extension LookupType: AppEnum'; LookupType is
  declared in this module, so the attribute never applied.
- Mark SyntaxHighlightTheme and SyntaxHighlighter nonisolated. They were
  inferred @MainActor but are built and used from the nonisolated markdown
  renderers in Task.detached; nonisolated makes the off-main confinement
  correct (Highlightr's JSContext was being driven off the main actor).
 Hutch/App/HutchIntents.swift                     | 2 +-
 Hutch/Views/Repositories/SyntaxHighlighter.swift | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/Hutch/App/HutchIntents.swift b/Hutch/App/HutchIntents.swift
index fe4ebdc..ff8fec8 100644
--- a/Hutch/App/HutchIntents.swift
+++ b/Hutch/App/HutchIntents.swift
@@ -337,7 +337,7 @@ struct CheckBuildsIntent: AppIntent {
 
 // MARK: - Search Type
 
-extension LookupType: @retroactive AppEnum {
+extension LookupType: AppEnum {
     public nonisolated static var typeDisplayRepresentation: TypeDisplayRepresentation {
         TypeDisplayRepresentation(name: "Search Type")
     }
diff --git a/Hutch/Views/Repositories/SyntaxHighlighter.swift b/Hutch/Views/Repositories/SyntaxHighlighter.swift
index 5ae8f58..f8b2cbb 100644
--- a/Hutch/Views/Repositories/SyntaxHighlighter.swift
+++ b/Hutch/Views/Repositories/SyntaxHighlighter.swift
@@ -3,7 +3,7 @@ import Highlightr
 import SwiftUI
 import UIKit
 
-enum SyntaxHighlightTheme {
+nonisolated enum SyntaxHighlightTheme {
     case light
     case dark
 
@@ -31,7 +31,7 @@ enum SyntaxHighlightTheme {
 /// instance must stay on the thread/task that created it. Callers that fail to
 /// resolve a language — or hit an unavailable engine — get `nil` and should
 /// fall back to plain, escaped text.
-final class SyntaxHighlighter {
+nonisolated final class SyntaxHighlighter {
     private let highlightr: Highlightr?
     private let supportedLanguages: Set<String>