So the proposal is intentionally very limited in scope, however that's not the limitations ![]()
It is not just code generators, but there is a big focus on them. You can absolutely build a linter plugin using the prebuild hook. The same with generating documentation, which can be installed as postbuild extension if you wanted to.
The proposal is not limited to tools implemented in Swift. Notice that one of the main use cases shown is protoc (protocol buffers) which definitely is not written in Swift
What has to be written in swift though is the extension definitions -- these only construct the "commands" that determine how to run such tool.
Binary tools can be automatically fetched thanks to the binary targets, notice this:
/// Binary target that provides the prebuilt `protoc` executable.
.binaryTarget(
name: "protoc"
url: "https://url/to/the/built/protoc-executables.zip",
checksum: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
),
which will make the protobuf extension download protoc for you before the build kicks off.
They're supported -- you can write a prebuild extension that runs swiftlint etc. If you're asking about "it should show up natively in Xcode" that's not part of Swift evolution really, so we can't really discuss this here.
But yes it is understood and an accepted limitation that these integrations are a bit bare bones right now -- they are a tremendous help for a large amount of SPM projects though, and we would not want to delay adopting this feature as a first step only because Xcode specific details and things we can do in the future to improve the integration. Hope this helps understand what this proposal is -- a first, small, step on a long road towards improving the entire experience.