-
Notifications
You must be signed in to change notification settings - Fork 349
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
At the moment the custom
case of the CompletionKind
enumeration supports being given a custom closure to generate completions on the command line. However, since the provided closure must be synchronous, it is difficult to incorporate functionality that requires swift's concurrency features. The lack of this functionality prevents certain tasks from being possible with these completions and causes other tasks to be possible, but only in a non-thread safe way. Examples of this include working with databases (such as those managed by Apple's Core Data framework).
Example:
struct SomeCommand: AsyncParseableCommand {
@Argument(help: "<Helpful help>", completion: .custom({ arguments in
return try? await completionGenerator(arguments: arguments) ?? []
}))
var argument: String
mutating func run() async throws {
// Code that makes the command Run
}
}
@MainActor
private func completionGenerator(arguments: [String]) async throws -> [String] {
// Code that generates completions that has some asynchronous system in use and/or must be run on the main actor.
}
luispadron, bartekpacia and rgoldberg
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request