swift-openapi-generator
swift-openapi-generator copied to clipboard
Emit yaml processing errors that Xcode can display (#65)
Motivation
If there are any errors in the openapi.yaml file currently the errors show up in the build transcript but are not shown in the Xcode issue sidebar and are also not linked to the openapi.yaml file in the sidebar. This makes it hard to know what has failed, and what to do to fix the file.
Modifications
The YAML parser now catches decoding errors, and if they are common parsing or scanning errors it will emit a diagnostic message then throw a failure exit code. This required importing the swift-argument-parser module into the main _OpenAPIGeneratorCore.
Added absoluteFilePath and lineNumber optional properties to the Diagnostics struct to capture more info. Modified the Diagnostics.description method to build a properly formatted message that Xcode can parse to point out the file and line causing issues.
Result
In consuming projects, invalid yaml in the openapi.yaml file is now highlighted in the Xcode Issue Navigator after a build with this plugin.
Test Plan
Added unit tests to verify emitted diagnostic and thrown error. Also tested manually with an example project.
Resolves
- Resolves #65.
I'm not particularly happy with adding ArgumentParser as a dependency into the _OpenAPIGeneratorCore.
Without it, any thrown error is caught by ArgumentParser and the thrown error's localizedDescription is used with a prefix of "Error: " which completely blows away any other diagnostic that I was able to emit.
The code now throws an ArgumentParser.ExitCode.failure after emitting a diagnostic with the proper information for Xcode to pick up the filepath and line number. Using ArgumentParser.ExitCode was the only way I found to have the correct diagnostic message.
@swift-server-bot add to allowlist