From 903dfa2bbd1a8a8fe0d8e4f11b1016e3ef5e41e6 Mon Sep 17 00:00:00 2001 From: Ben Pious Date: Sun, 24 Sep 2023 12:09:38 -0700 Subject: [PATCH 1/4] fix bug and TODO --- .../GenerateSwiftSyntax.swift | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift b/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift index dd23798a666..c1b350e2814 100644 --- a/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift +++ b/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift @@ -154,6 +154,7 @@ struct GenerateSwiftSyntax: ParsableCommand { } ) + let errorsLock = NSLock() var errors: [Error] = [] DispatchQueue.concurrentPerform(iterations: fileSpecs.count) { index in let fileSpec = fileSpecs[index] @@ -173,13 +174,23 @@ struct GenerateSwiftSyntax: ParsableCommand { verbose: verbose ) } catch { + errorsLock.lock() errors.append(error) + errorsLock.unlock() } } - if let firstError = errors.first { - // TODO: It would be nice if we could emit all errors - throw firstError + if errors.count > 0 { + struct ComposititeError: Error, CustomStringConvertible { + var errors: [Error] + var description: String { + "Multiple errors emitted: \n" + + errors + .map(String.init(describing: )) + .joined(separator: "\n") + } + } + throw ComposititeError(errors: errors) } for file in previouslyGeneratedFiles { From 24615c90363b78afff37f726e5eced61d1a2d1f2 Mon Sep 17 00:00:00 2001 From: Ben Pious Date: Mon, 25 Sep 2023 19:37:17 -0700 Subject: [PATCH 2/4] cr feedback --- .../GenerateSwiftSyntax.swift | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift b/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift index c1b350e2814..5d763968823 100644 --- a/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift +++ b/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift @@ -181,15 +181,6 @@ struct GenerateSwiftSyntax: ParsableCommand { } if errors.count > 0 { - struct ComposititeError: Error, CustomStringConvertible { - var errors: [Error] - var description: String { - "Multiple errors emitted: \n" + - errors - .map(String.init(describing: )) - .joined(separator: "\n") - } - } throw ComposititeError(errors: errors) } @@ -221,3 +212,13 @@ struct GenerateSwiftSyntax: ParsableCommand { } } } + +struct ComposititeError: Error, CustomStringConvertible { + var errors: [Error] + var description: String { + "Multiple errors emitted:\n" + + errors + .map(String.init(describing: )) + .joined(separator: "\n") + } +} From de321e03885fc5a9f7c39af85a564d939a790dcd Mon Sep 17 00:00:00 2001 From: Ben Pious Date: Mon, 25 Sep 2023 19:41:30 -0700 Subject: [PATCH 3/4] run formatter --- .../Sources/generate-swift-syntax/GenerateSwiftSyntax.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift b/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift index 5d763968823..51d89952448 100644 --- a/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift +++ b/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift @@ -216,9 +216,9 @@ struct GenerateSwiftSyntax: ParsableCommand { struct ComposititeError: Error, CustomStringConvertible { var errors: [Error] var description: String { - "Multiple errors emitted:\n" + - errors - .map(String.init(describing: )) + "Multiple errors emitted:\n" + + errors + .map(String.init(describing:)) .joined(separator: "\n") } } From e0fe1ca36fba7f33b3dd2b54c3a9a0a54015fd8d Mon Sep 17 00:00:00 2001 From: Ben Pious Date: Mon, 25 Sep 2023 19:44:10 -0700 Subject: [PATCH 4/4] use one lock --- .../generate-swift-syntax/GenerateSwiftSyntax.swift | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift b/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift index 51d89952448..a64b22f3d3e 100644 --- a/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift +++ b/CodeGeneration/Sources/generate-swift-syntax/GenerateSwiftSyntax.swift @@ -139,7 +139,7 @@ struct GenerateSwiftSyntax: ParsableCommand { let modules = Set(fileSpecs.compactMap { $0.pathComponents.first }) - let previouslyGeneratedFilesLock = NSLock() + let filesAndErrorsLock = NSLock() var previouslyGeneratedFiles = Set( modules.flatMap { (module) -> [URL] in let generatedDir = @@ -154,7 +154,6 @@ struct GenerateSwiftSyntax: ParsableCommand { } ) - let errorsLock = NSLock() var errors: [Error] = [] DispatchQueue.concurrentPerform(iterations: fileSpecs.count) { index in let fileSpec = fileSpecs[index] @@ -164,9 +163,9 @@ struct GenerateSwiftSyntax: ParsableCommand { destination = destination.appendingPathComponent(component) } - previouslyGeneratedFilesLock.lock(); + filesAndErrorsLock.lock(); _ = previouslyGeneratedFiles.remove(destination) - previouslyGeneratedFilesLock.unlock() + filesAndErrorsLock.unlock() try generateFile( contents: fileSpec.contents, @@ -174,9 +173,9 @@ struct GenerateSwiftSyntax: ParsableCommand { verbose: verbose ) } catch { - errorsLock.lock() + filesAndErrorsLock.lock() errors.append(error) - errorsLock.unlock() + filesAndErrorsLock.unlock() } }