diff --git a/Example/KnitExample.xcodeproj/project.pbxproj b/Example/KnitExample.xcodeproj/project.pbxproj index fa214e7..e2958ef 100644 --- a/Example/KnitExample.xcodeproj/project.pbxproj +++ b/Example/KnitExample.xcodeproj/project.pbxproj @@ -239,7 +239,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/usr/bin/xcrun --sdk macosx swift run knit gen \\\n--assembly-input-path KnitExample/KnitExampleAssembly.swift \\\n--assembly-input-path KnitExample/KnitExampleUserAssembly.swift \\\n--type-safety-extensions-output-path KnitExample/KnitDITypeSafety.swift \\\n--unit-test-output-path KnitExampleTests/KnitDIRegistrationTests.swift\n"; + shellScript = "/usr/bin/xcrun --sdk macosx swift run knit-cli gen \\\n--assembly-input-path KnitExample/KnitExampleAssembly.swift \\\n--assembly-input-path KnitExample/KnitExampleUserAssembly.swift \\\n--type-safety-extensions-output-path KnitExample/KnitDITypeSafety.swift \\\n--unit-test-output-path KnitExampleTests/KnitDIRegistrationTests.swift\n"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/Example/KnitExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Example/KnitExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 86fdbdc..6082bc9 100644 --- a/Example/KnitExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Example/KnitExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -14,8 +14,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-syntax.git", "state" : { - "revision" : "2c49d66d34dfd6f8130afdba889de77504b58ec0", - "version" : "508.0.1" + "revision" : "6ad4ea24b01559dde0773e3d091f1b9e36175036", + "version" : "509.0.2" } }, { diff --git a/Example/KnitExample/KnitExampleApp.swift b/Example/KnitExample/KnitExampleApp.swift index 6f03c94..96372c6 100644 --- a/Example/KnitExample/KnitExampleApp.swift +++ b/Example/KnitExample/KnitExampleApp.swift @@ -1,7 +1,7 @@ // Copyright © Square, Inc. All rights reserved. import SwiftUI -import Knit +import KnitLib @main struct KnitExampleApp: App { diff --git a/Example/KnitExample/KnitExampleUserAssembly.swift b/Example/KnitExample/KnitExampleUserAssembly.swift index b7caff1..7c8aac5 100644 --- a/Example/KnitExample/KnitExampleUserAssembly.swift +++ b/Example/KnitExample/KnitExampleUserAssembly.swift @@ -1,7 +1,7 @@ // Copyright © Square, Inc. All rights reserved. import Foundation -import Knit +import KnitLib // @knit internal getter-named /// An assembly expected to be registered at the user level rather than at the app level diff --git a/Sources/KnitCodeGen/AssemblyParsing.swift b/Sources/KnitCodeGen/AssemblyParsing.swift index e1b8a13..59d768b 100644 --- a/Sources/KnitCodeGen/AssemblyParsing.swift +++ b/Sources/KnitCodeGen/AssemblyParsing.swift @@ -2,7 +2,7 @@ import Foundation import SwiftSyntax import SwiftParser -public func parseAssemblies(at paths: [String]) throws -> ConfigurationSet { +public func parseAssemblies(at paths: [String], defaultTargetResolver: String) throws -> ConfigurationSet { var configs = [Configuration]() for path in paths { let url = URL(fileURLWithPath: path, isDirectory: false) @@ -15,7 +15,11 @@ public func parseAssemblies(at paths: [String]) throws -> ConfigurationSet { throw AssemblyParsingError.fileReadError(error, path: path) } let syntaxTree = Parser.parse(source: source) - let configuration = try parseSyntaxTree(syntaxTree, errorsToPrint: &errorsToPrint) + let configuration = try parseSyntaxTree( + syntaxTree, + errorsToPrint: &errorsToPrint, + defaultTargetResolver: defaultTargetResolver + ) configs.append(configuration) printErrors(errorsToPrint, filePath: path, syntaxTree: syntaxTree) } @@ -24,7 +28,8 @@ public func parseAssemblies(at paths: [String]) throws -> ConfigurationSet { func parseSyntaxTree( _ syntaxTree: SyntaxProtocol, - errorsToPrint: inout [Error] + errorsToPrint: inout [Error], + defaultTargetResolver: String ) throws -> Configuration { let assemblyFileVisitor = AssemblyFileVisitor() assemblyFileVisitor.walk(syntaxTree) @@ -41,7 +46,7 @@ func parseSyntaxTree( registrations: assemblyFileVisitor.registrations, registrationsIntoCollections: assemblyFileVisitor.registrationsIntoCollections, imports: assemblyFileVisitor.imports, - targetResolver: assemblyFileVisitor.targetResolver + targetResolver: assemblyFileVisitor.targetResolver ?? defaultTargetResolver ) } @@ -68,8 +73,8 @@ private class AssemblyFileVisitor: SyntaxVisitor { return classDeclVisitor?.registrationErrors ?? [] } - var targetResolver: String { - return classDeclVisitor?.targetResolver ?? "Resolver" + var targetResolver: String? { + return classDeclVisitor?.targetResolver } init() { diff --git a/Sources/KnitCommand/GenCommand.swift b/Sources/KnitCommand/GenCommand.swift index 29edc07..64b4055 100644 --- a/Sources/KnitCommand/GenCommand.swift +++ b/Sources/KnitCommand/GenCommand.swift @@ -40,12 +40,15 @@ struct GenCommand: ParsableCommand { """) var jsonDataOutputPath: String? + @Option(help: "Default type to extend when generating Resolver type safety methods") + var defaultExtensionTarget = "Resolver" + public init() {} public func run() throws { let parsedConfig: ConfigurationSet do { - parsedConfig = try parseAssemblies(at: assemblyInputPath) + parsedConfig = try parseAssemblies(at: assemblyInputPath, defaultTargetResolver: defaultExtensionTarget) if let jsonDataOutputPath { let data = try JSONEncoder().encode(parsedConfig.assemblies) try data.write(to: URL(fileURLWithPath: jsonDataOutputPath)) diff --git a/Tests/KnitCodeGenTests/AssemblyParsingTests.swift b/Tests/KnitCodeGenTests/AssemblyParsingTests.swift index c19868a..16dadab 100644 --- a/Tests/KnitCodeGenTests/AssemblyParsingTests.swift +++ b/Tests/KnitCodeGenTests/AssemblyParsingTests.swift @@ -267,7 +267,11 @@ private func assertParsesSyntaxTree( ) throws -> Configuration { var errorsToPrint = [Error]() - let configuration = try parseSyntaxTree(sourceFile, errorsToPrint: &errorsToPrint) + let configuration = try parseSyntaxTree( + sourceFile, + errorsToPrint: &errorsToPrint, + defaultTargetResolver: "Resolver" + ) if let assertErrorsCallback { assertErrorsCallback(errorsToPrint)