Harden .refitter settings deserialization and output path handling#1000
Conversation
- Add support for deserializing settings file as the primary source of truth, with CLI arguments overriding specific values. - Ensure output paths are rooted relative to the settings file when applicable. - Apply defaults for `OutputFolder` and `OutputFilename` when absent in the settings file.
…er and filename-from-.refitter behavior
📝 WalkthroughWalkthroughRefactors output-path resolution and settings-default application so .refitter Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant CLI as CLI / User
participant GenerateCMD as GenerateCommand
participant SettingsFile as .refitter File
participant Generator as RefitGenerator
participant FS as FileSystem
CLI->>GenerateCMD: invoke (with/without settings file)
alt settings file present
GenerateCMD->>SettingsFile: read & deserialize
GenerateCMD->>GenerateCMD: ApplySettingsFileDefaults() (default OutputFolder="./Generated", OutputFilename fallback)
GenerateCMD->>Generator: create generator with settings
else no settings file
GenerateCMD->>GenerateCMD: build settings from CLI args (use CLI output path directly)
GenerateCMD->>Generator: create generator with CLI settings
end
GenerateCMD->>Generator: Generate() -> generated code
Generator->>FS: write output to computed path (rooted under settings file dir when used)
FS-->>CLI: files created
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/Refitter/GenerateCommand.cs (1)
649-711:⚠️ Potential issue | 🟠 MajorLet an explicit CLI
--outputwin overOutputFolder.Once
ApplySettingsFileDefaults()backfillsOutputFolder, bothGetOutputPathoverloads keep prefixing that folder even whensettings.OutputPathwas explicitly provided. That turns--output Client.csinto<settingsDir>/Generated/Client.cs, and in multi-file mode the explicit override is ignored entirely. Based on learnings: Map new CLI settings inCreateRefitGeneratorSettings()method in GenerateCommand.cs.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/Refitter/GenerateCommand.cs` around lines 649 - 711, The bug is that ApplySettingsFileDefaults backfills OutputFolder which then overrides an explicit CLI --output; to fix, update CreateRefitGeneratorSettings() so CLI-provided settings.OutputPath (when not null/empty and not Settings.DefaultOutputPath) takes precedence and does NOT get shadowed by refitGeneratorSettings.OutputFolder—i.e. when mapping CLI into RefitGeneratorSettings, avoid setting or overwriting refitGeneratorSettings.OutputFolder if settings.OutputPath was explicitly provided (instead let GetOutputPath overloads use settings.OutputPath), and only map or default OutputFolder when CLI did not specify an output path; touch CreateRefitGeneratorSettings, ApplySettingsFileDefaults, and the two GetOutputPath overloads to ensure this precedence is preserved.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.gitignore:
- Line 288: The .gitignore currently only ignores
test/Generated/GeneratedCode/*.generated.cs but not the MSBuild regression
outputs; update the .gitignore to also ignore the MSBuild-generated directories
by adding patterns that match files under test/MSBuild/Generated/ and
test/MSBuild/GeneratedOutput/ (e.g., the generated C# files like *.generated.cs
and any temporary output files) so running test/MSBuild/build.ps1 no longer
leaves generated C# files in git status.
In `@src/Refitter.Tests/GenerateCommandTests.cs`:
- Around line 151-291: The tests (e.g.,
GetOutputPath_Should_Root_Relative_To_SettingsFile_When_OutputFolder_Is_Default,
GetOutputPath_Should_Use_SettingsFileName_When_OutputFilename_Is_Missing, and
ApplySettingsFileDefaults_* cases) hardcode Windows paths and backslashes which
break on Unix; update them to build platform-independent paths by creating a
settingsFilePath using Path.Combine/Path.GetFullPath (or Path.GetTempPath +
Path.DirectorySeparatorChar) and assert expected results using
Path.Combine/Path.GetFullPath/Path.GetFileNameWithoutExtension on the values
returned by GenerateCommand.GetOutputPath and after calling
GenerateCommand.ApplySettingsFileDefaults, and compare normalized paths rather
than raw @"C:\..." strings while still referencing Settings.DefaultOutputPath,
RefitGeneratorSettings.OutputFolder/OutputFilename to preserve intent.
In `@src/Refitter/GenerateCommand.cs`:
- Around line 42-58: The code that reads and deserializes the settings file
(File.ReadAllTextAsync(settings.SettingsFilePath),
Serializer.Deserialize<RefitGeneratorSettings>(...), and
ApplySettingsFileDefaults(...)) must be moved inside the main try block so any
IO or deserialization exceptions are caught and handled by the existing
catch/Analytics.LogError flow; update the GenerateCommand method to only build
refitGeneratorSettings from CreateRefitGeneratorSettings(settings) when no
settings file is provided, but if settings.SettingsFilePath is set perform
ReadAllTextAsync, Serializer.Deserialize<RefitGeneratorSettings>, optional
override of OpenApiPath, and ApplySettingsFileDefaults inside the try that
surrounds the overall generation logic (keeping reference to
refitGeneratorSettings variable unchanged) so failures surface in the normal
error panel and logging.
In `@test/MSBuild/build.ps1`:
- Around line 57-77: The script currently only warns when the expected interface
names are missing, so change the two checks that look for "interface
ISwaggerPetstore" and "interface ISwaggerPetstoreWithFolder" to fail the build
instead: replace the Write-Host warning branches for those two tests with error
output and an exit 1 (same style as the existing missing-file check) so the
pipeline fails if naming.interfaceName is ignored.
---
Outside diff comments:
In `@src/Refitter/GenerateCommand.cs`:
- Around line 649-711: The bug is that ApplySettingsFileDefaults backfills
OutputFolder which then overrides an explicit CLI --output; to fix, update
CreateRefitGeneratorSettings() so CLI-provided settings.OutputPath (when not
null/empty and not Settings.DefaultOutputPath) takes precedence and does NOT get
shadowed by refitGeneratorSettings.OutputFolder—i.e. when mapping CLI into
RefitGeneratorSettings, avoid setting or overwriting
refitGeneratorSettings.OutputFolder if settings.OutputPath was explicitly
provided (instead let GetOutputPath overloads use settings.OutputPath), and only
map or default OutputFolder when CLI did not specify an output path; touch
CreateRefitGeneratorSettings, ApplySettingsFileDefaults, and the two
GetOutputPath overloads to ensure this precedence is preserved.
🪄 Autofix (Beta)
✅ Autofix completed
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: a7bb2397-88fa-456c-b63d-d80f3d6d8a4f
📒 Files selected for processing (9)
.gitignoresrc/Refitter.MSBuild/RefitterGenerateTask.cssrc/Refitter.Tests/Examples/PropertyNamingPolicyTests.cssrc/Refitter.Tests/Examples/SettingsFileOutputPathTests.cssrc/Refitter.Tests/Examples/TrimUnusedSchemaAliasWithLeadingDigitPropertyTests.cssrc/Refitter.Tests/GenerateCommandTests.cssrc/Refitter/GenerateCommand.cstest/MSBuild/build.ps1test/MSBuild/petstore-with-outputfolder.refitter
|
Note Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it. Fixes Applied SuccessfullyFixed 4 file(s) based on 4 unresolved review comments. A stacked PR containing fixes has been created.
Time taken: |
Fixed 4 file(s) based on 4 unresolved review comments. Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
…0b90 CodeRabbit auto-fixes for PR #1000
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1000 +/- ##
=======================================
Coverage 93.18% 93.18%
=======================================
Files 27 27
Lines 1804 1804
=======================================
Hits 1681 1681
Misses 49 49
Partials 74 74
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/Refitter/GenerateCommand.cs`:
- Around line 696-700: When deriving the default OutputFilename in
GenerateCommand.cs, handle the special-case where
Path.GetFileNameWithoutExtension(settingsFilePath) returns an empty string for
dotfiles (e.g., ".refitter"); if refitterFileName is null/empty (or the original
filename equals ".refitter"), set refitterFileName = "Output" before assigning
refitGeneratorSettings.OutputFilename = $"{refitterFileName}.cs" so the fallback
becomes "Output.cs" instead of ".cs". Use the existing symbols settingsFilePath,
refitterFileName and refitGeneratorSettings.OutputFilename to locate and update
the logic.
🪄 Autofix (Beta)
✅ Autofix completed
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 438c10e2-2a05-4665-b3db-c109d53567e3
📒 Files selected for processing (4)
.gitignoresrc/Refitter.Tests/GenerateCommandTests.cssrc/Refitter/GenerateCommand.cstest/MSBuild/build.ps1
✅ Files skipped from review due to trivial changes (1)
- src/Refitter.Tests/GenerateCommandTests.cs
🚧 Files skipped from review as they are similar to previous changes (1)
- .gitignore
|
Note Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it. Fixes Applied SuccessfullyFixed 1 file(s) based on 1 unresolved review comment. A stacked PR containing fixes has been created.
Time taken: |
Updated [refitter](https://github.com/christianhelle/refitter) from 1.7.1 to 2.0.0. <details> <summary>Release notes</summary> _Sourced from [refitter's releases](https://github.com/christianhelle/refitter/releases)._ ## 2.0.0 ## What's Changed * Fix numeric format with pattern quirk - infer type from format for all numeric types by @Copilot in christianhelle/refitter#869 * Read group documentation from document tags. by @DJ4ddi in christianhelle/refitter#887 * Fix null reference and XML escaping in XmlDocumentationGenerator by @Copilot in christianhelle/refitter#890 * Fix build workflow: add dotnet restore before dotnet msbuild in Prepare step by @Copilot in christianhelle/refitter#892 christianhelle/refitter#895 * Fix MSBuild workflow by @christianhelle in christianhelle/refitter#898 * Add support for generating a single client from multiple OpenAPI specifications by @Copilot in christianhelle/refitter#904 * Migrate from Microsoft.OpenApi.Readers 1.x to Microsoft.OpenApi 3.x by @vgmello in christianhelle/refitter#907 * Improve Smoke Tests execution time by @christianhelle in christianhelle/refitter#915 * Fix #580: Nullable strings marked correctly by @christianhelle in christianhelle/refitter#921 * Fix #672: MultipleInterfaces ByTag method naming scoped per-interface by @christianhelle in christianhelle/refitter#922 * Fix #635: Refactor source generator to use context.AddSource() by @christianhelle in christianhelle/refitter#923 * Add custom format mappings configuration by @christianhelle in christianhelle/refitter#927 * Fix multipart form-data parameter extraction by @christianhelle in christianhelle/refitter#928 christianhelle/refitter#911 christianhelle/refitter#902 * Fix smoke tests: --interface-only variant missing using directive for contract types by @Copilot in christianhelle/refitter#933 * Fix SonarCloud Code Quality Issues by @Copilot in christianhelle/refitter#932 * Add debug logging for source generator when searching for .refitter files by @codymullins in christianhelle/refitter#743 * Fix: Base type not generated for types using oneOf with discriminator by @Copilot in christianhelle/refitter#906 * Add option for Method Level Authorization header attribute by @Roflincopter in christianhelle/refitter#897 * Fix PR #897 review feedback and add comprehensive bearer auth tests by @christianhelle in christianhelle/refitter#936 * Fix numeric suffix added to interface method names in ByTag mode by @Copilot in christianhelle/refitter#914 * Improve OpenAPI parse + codegen throughput by removing avoidable allocations and repeated regex work by @Copilot in christianhelle/refitter#937 * Move [JsonConverter] from enum properties to enum types by @christianhelle in christianhelle/refitter#938 * Fix broken CLI tool help text by @christianhelle in christianhelle/refitter#940 * Improve code coverage to >90% by @christianhelle in christianhelle/refitter#941 * Microsoft.OpenApi v3.4 by @christianhelle in christianhelle/refitter#945 * Add Unicode support for XML doc comment generation by @christianhelle in christianhelle/refitter#948 * Add PropertyNamingPolicy support for JSON property naming by @christianhelle in christianhelle/refitter#969 christianhelle/refitter#966 * Fix recursive schema stack overflows by @christianhelle in christianhelle/refitter#971 * Made Header Parameters for Security Schemes safe to use as C# variable name by @smoerijf in christianhelle/refitter#977 * Enhance schema alias handling and property name generation by @christianhelle in christianhelle/refitter#996 * Verify alias handling and sanitize PascalCase properties by @christianhelle in christianhelle/refitter#997 * Harden .refitter settings deserialization and output path handling by @christianhelle in christianhelle/refitter#1000 * Special-case the default .refitter filename before deriving OutputFilename by @coderabbitai[bot] in christianhelle/refitter#1002 * [v2.0 audit] Fix pre-release regressions from #1057 by @christianhelle in christianhelle/refitter#1064 * Resolve high-severity audit findings from #1057 by @christianhelle in christianhelle/refitter#1067 * [v2.0 audit] Close remaining verified #1057 regressions by @christianhelle in christianhelle/refitter#1070 * Harden generation flows by @christianhelle in christianhelle/refitter#1071 * Breaking changes and Migration Guide for v2.0.0 by @christianhelle in christianhelle/refitter#1009 * Handle equivalent duplicate schemas in multi-spec merge by @christianhelle in christianhelle/refitter#1076 * Tighten warning handling across Refitter builds by @christianhelle in christianhelle/refitter#1079 * Fix default solution path and update .NET version in VS Code config by @christianhelle in christianhelle/refitter#1082 * Fix docker smoke tests by @christianhelle in christianhelle/refitter#1081 * Sanitize malformed schema type names without renaming clean schemas by @christianhelle in christianhelle/refitter#1085 ... (truncated) ## 1.7.3 ## What's Changed * Add support for systems running only .NET 10.0 (without .NET 8.0 or 9.0) in Refitter.MSBuild by @christianhelle in christianhelle/refitter#882 * Update to return HttpResponseMessage for file downloads by @frogcrush in christianhelle/refitter#877 ## New Contributors * @frogcrush made their first contribution in christianhelle/refitter#877 **Full Changelog**: christianhelle/refitter@1.7.2...1.7.3 ## 1.7.2 **Implemented enhancements:** - Improve Immutable Records ergonomics [\#844](christianhelle/refitter#844) - Omit certain operation headers and include all others [\#840](christianhelle/refitter#840) - Create .refitter settings file as part of output [\#859](christianhelle/refitter#859) by @[christianhelle - Fix integerType enum deserialization issue [\#855](christianhelle/refitter#855) ([christianhelle](https://github.com/christianhelle)) - support custom nswag template directory \#844 [\#854](christianhelle/refitter#854) by @kmc059000 - Fix missing method parameter XML code-documentation [\#850](christianhelle/refitter#850) ([christianhelle](https://github.com/christianhelle)) **Fixed bugs:** - integerType parsing in settings file fails [\#851](christianhelle/refitter#851) - CS1573 : Method parameter has no matching XML comment [\#846](christianhelle/refitter#846) **Merged pull requests:** - docs: add frogcrush as a contributor for code [\#878](christianhelle/refitter#878) ([allcontributors[bot]](https://github.com/apps/allcontributors)) - Migrate solution files from .sln to .slnx format [\#876](christianhelle/refitter#876) ([Copilot](https://github.com/apps/copilot-swe-agent)) - Fix issue with randomly failing tests to due parallel execution [\#872](christianhelle/refitter#872) ([christianhelle](https://github.com/christianhelle)) - chore\(deps\): update dependency tunit to 1.9.2 [\#863](christianhelle/refitter#863) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency tunit to 1.7.7 [\#862](christianhelle/refitter#862) ([renovate[bot]](https://github.com/apps/renovate)) - Add unit tests for WriteRefitterSettingsFile functionality [\#860](christianhelle/refitter#860) ([Copilot](https://github.com/apps/copilot-swe-agent)) - chore\(deps\): update dependency ruby to v4 [\#858](christianhelle/refitter#858) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency tunit to 1.6.28 [\#857](christianhelle/refitter#857) ([renovate[bot]](https://github.com/apps/renovate)) - docs: add 0x2badc0de as a contributor for bug [\#856](christianhelle/refitter#856) ([allcontributors[bot]](https://github.com/apps/allcontributors)) - chore\(deps\): update dependency swashbuckle.aspnetcore to 10.1.0 [\#853](christianhelle/refitter#853) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency tunit to 1.6.0 [\#852](christianhelle/refitter#852) ([renovate[bot]](https://github.com/apps/renovate)) - docs: add lilinus as a contributor for code [\#849](christianhelle/refitter#849) ([allcontributors[bot]](https://github.com/apps/allcontributors)) - chore\(deps\): update dependency ruby to v3.4.8 [\#845](christianhelle/refitter#845) ([renovate[bot]](https://github.com/apps/renovate)) - chore\(deps\): update dependency tunit to 1.5.70 [\#837](christianhelle/refitter#837) ([renovate[bot]](https://github.com/apps/renovate)) **Full Changelog**: christianhelle/refitter@1.7.1...1.7.2 Commits viewable in [compare view](christianhelle/refitter@1.7.1...2.0.0). </details> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Updated [Refitter.MSBuild](https://github.com/christianhelle/refitter) from 1.7.3 to 2.0.0. <details> <summary>Release notes</summary> _Sourced from [Refitter.MSBuild's releases](https://github.com/christianhelle/refitter/releases)._ ## 2.0.0 ## What's Changed * Fix numeric format with pattern quirk - infer type from format for all numeric types by @Copilot in christianhelle/refitter#869 * Read group documentation from document tags. by @DJ4ddi in christianhelle/refitter#887 * Fix null reference and XML escaping in XmlDocumentationGenerator by @Copilot in christianhelle/refitter#890 * Fix build workflow: add dotnet restore before dotnet msbuild in Prepare step by @Copilot in christianhelle/refitter#892 christianhelle/refitter#895 * Fix MSBuild workflow by @christianhelle in christianhelle/refitter#898 * Add support for generating a single client from multiple OpenAPI specifications by @Copilot in christianhelle/refitter#904 * Migrate from Microsoft.OpenApi.Readers 1.x to Microsoft.OpenApi 3.x by @vgmello in christianhelle/refitter#907 * Improve Smoke Tests execution time by @christianhelle in christianhelle/refitter#915 * Fix #580: Nullable strings marked correctly by @christianhelle in christianhelle/refitter#921 * Fix #672: MultipleInterfaces ByTag method naming scoped per-interface by @christianhelle in christianhelle/refitter#922 * Fix #635: Refactor source generator to use context.AddSource() by @christianhelle in christianhelle/refitter#923 * Add custom format mappings configuration by @christianhelle in christianhelle/refitter#927 * Fix multipart form-data parameter extraction by @christianhelle in christianhelle/refitter#928 christianhelle/refitter#911 christianhelle/refitter#902 * Fix smoke tests: --interface-only variant missing using directive for contract types by @Copilot in christianhelle/refitter#933 * Fix SonarCloud Code Quality Issues by @Copilot in christianhelle/refitter#932 * Add debug logging for source generator when searching for .refitter files by @codymullins in christianhelle/refitter#743 * Fix: Base type not generated for types using oneOf with discriminator by @Copilot in christianhelle/refitter#906 * Add option for Method Level Authorization header attribute by @Roflincopter in christianhelle/refitter#897 * Fix PR #897 review feedback and add comprehensive bearer auth tests by @christianhelle in christianhelle/refitter#936 * Fix numeric suffix added to interface method names in ByTag mode by @Copilot in christianhelle/refitter#914 * Improve OpenAPI parse + codegen throughput by removing avoidable allocations and repeated regex work by @Copilot in christianhelle/refitter#937 * Move [JsonConverter] from enum properties to enum types by @christianhelle in christianhelle/refitter#938 * Fix broken CLI tool help text by @christianhelle in christianhelle/refitter#940 * Improve code coverage to >90% by @christianhelle in christianhelle/refitter#941 * Microsoft.OpenApi v3.4 by @christianhelle in christianhelle/refitter#945 * Add Unicode support for XML doc comment generation by @christianhelle in christianhelle/refitter#948 * Add PropertyNamingPolicy support for JSON property naming by @christianhelle in christianhelle/refitter#969 christianhelle/refitter#966 * Fix recursive schema stack overflows by @christianhelle in christianhelle/refitter#971 * Made Header Parameters for Security Schemes safe to use as C# variable name by @smoerijf in christianhelle/refitter#977 * Enhance schema alias handling and property name generation by @christianhelle in christianhelle/refitter#996 * Verify alias handling and sanitize PascalCase properties by @christianhelle in christianhelle/refitter#997 * Harden .refitter settings deserialization and output path handling by @christianhelle in christianhelle/refitter#1000 * Special-case the default .refitter filename before deriving OutputFilename by @coderabbitai[bot] in christianhelle/refitter#1002 * [v2.0 audit] Fix pre-release regressions from #1057 by @christianhelle in christianhelle/refitter#1064 * Resolve high-severity audit findings from #1057 by @christianhelle in christianhelle/refitter#1067 * [v2.0 audit] Close remaining verified #1057 regressions by @christianhelle in christianhelle/refitter#1070 * Harden generation flows by @christianhelle in christianhelle/refitter#1071 * Breaking changes and Migration Guide for v2.0.0 by @christianhelle in christianhelle/refitter#1009 * Handle equivalent duplicate schemas in multi-spec merge by @christianhelle in christianhelle/refitter#1076 * Tighten warning handling across Refitter builds by @christianhelle in christianhelle/refitter#1079 * Fix default solution path and update .NET version in VS Code config by @christianhelle in christianhelle/refitter#1082 * Fix docker smoke tests by @christianhelle in christianhelle/refitter#1081 * Sanitize malformed schema type names without renaming clean schemas by @christianhelle in christianhelle/refitter#1085 ... (truncated) Commits viewable in [compare view](christianhelle/refitter@1.7.3...2.0.0). </details> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>



This fixes #998
Summary by CodeRabbit
New Features
Tests
Chores