From d1ddd524b2e26fa030d554fd84f8a58ddc60dc31 Mon Sep 17 00:00:00 2001 From: cnkwocha Date: Wed, 4 Dec 2024 10:45:45 +0000 Subject: [PATCH 1/5] Enable strict concurrency Motivation: To catch potential data races at build time. Modifications: - Enable strict concurrency in Package.swift. (No further modifications were made as no warnings/errors were thrown.) Result: Strict concurrency adoption. --- Package.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Package.swift b/Package.swift index dacc987..80da2b4 100644 --- a/Package.swift +++ b/Package.swift @@ -45,3 +45,9 @@ let package = Package( ), ] ) + +for target in package.targets { + var settings = target.swiftSettings ?? [] + settings.append(.enableExperimentalFeature("StrictConcurrency=complete")) + target.swiftSettings = settings +} From 85245dd2404341d20a4f2cf6f670fbcd551e286a Mon Sep 17 00:00:00 2001 From: cnkwocha Date: Wed, 4 Dec 2024 11:21:23 +0000 Subject: [PATCH 2/5] Add `Sendable` conformance to `StructuredFieldType` --- Sources/StructuredFieldValues/StructuredFieldValue.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/StructuredFieldValues/StructuredFieldValue.swift b/Sources/StructuredFieldValues/StructuredFieldValue.swift index ad1370d..c9b3324 100644 --- a/Sources/StructuredFieldValues/StructuredFieldValue.swift +++ b/Sources/StructuredFieldValues/StructuredFieldValue.swift @@ -22,7 +22,7 @@ public protocol StructuredFieldValue: Codable { } /// The kinds of header fields used in HTTP Structured Headers. -public enum StructuredFieldType { +public enum StructuredFieldType: Sendable { /// An item field consists of a single item, optionally with parameters. case item From e3f15afecf4218c6d290d385e55e027323b0d02d Mon Sep 17 00:00:00 2001 From: cnkwocha Date: Wed, 4 Dec 2024 13:33:03 +0000 Subject: [PATCH 3/5] Copy over `CommandLine.arguments` instead of referencing --- Sources/sh-parser/main.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/sh-parser/main.swift b/Sources/sh-parser/main.swift index 54a1366..0c00063 100644 --- a/Sources/sh-parser/main.swift +++ b/Sources/sh-parser/main.swift @@ -21,8 +21,9 @@ struct Flags { init() { // Default to item self.headerType = .item + let arguments = CommandLine.arguments - for argument in CommandLine.arguments.dropFirst() { + for argument in arguments.dropFirst() { switch argument { case "--dictionary": self.headerType = .dictionary From b694b362714e87000598fea45829376968f82eae Mon Sep 17 00:00:00 2001 From: cnkwocha Date: Wed, 4 Dec 2024 15:59:46 +0000 Subject: [PATCH 4/5] Mark `Flags` as `Sendable` --- Sources/sh-parser/main.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/sh-parser/main.swift b/Sources/sh-parser/main.swift index 0c00063..1b352d5 100644 --- a/Sources/sh-parser/main.swift +++ b/Sources/sh-parser/main.swift @@ -15,7 +15,7 @@ import Foundation import RawStructuredFieldValues -struct Flags { +struct Flags: Sendable { var headerType: HeaderType init() { From 8f0c94c7bded14d1c18538795c3bc24cddfcc3a0 Mon Sep 17 00:00:00 2001 From: cnkwocha Date: Wed, 4 Dec 2024 17:03:14 +0000 Subject: [PATCH 5/5] Swap concurrency-unsafe `CommandLine.arguments` with `ProcessInfo.processInfo.arguments` --- Sources/sh-parser/main.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/sh-parser/main.swift b/Sources/sh-parser/main.swift index 1b352d5..21f305c 100644 --- a/Sources/sh-parser/main.swift +++ b/Sources/sh-parser/main.swift @@ -15,13 +15,13 @@ import Foundation import RawStructuredFieldValues -struct Flags: Sendable { +struct Flags { var headerType: HeaderType init() { // Default to item self.headerType = .item - let arguments = CommandLine.arguments + let arguments = ProcessInfo.processInfo.arguments for argument in arguments.dropFirst() { switch argument {