Skip to content

Read group documentation from document tags.#887

Merged
christianhelle merged 6 commits into
christianhelle:mainfrom
DJ4ddi:interface-documentation
Feb 2, 2026
Merged

Read group documentation from document tags.#887
christianhelle merged 6 commits into
christianhelle:mainfrom
DJ4ddi:interface-documentation

Conversation

@DJ4ddi

@DJ4ddi DJ4ddi commented Jan 29, 2026

Copy link
Copy Markdown

The controller XML documentation generated by Refitter currently uses the first operation within that controller to set the summary. This is unintuitive and often unnecessary as tools like Swashbuckle and NSwag are able to extract controller documentation, which is stored in the description of the associated tag.

This pull requests slightly modifiers the documentation generation. It attempts to find a controller tag with a description. If the relevant information is not found, no documentation is generated to avoid writing incorrect or pointless information.

I did not introduce a configuration option for this because I can't imagine anyone preferring the old behavior.

Summary by CodeRabbit

  • New Features

    • Interface documentation now prefers controller tag descriptions for summaries, falls back to endpoint- or document-level summaries, and consistently escapes symbols and preserves multi-line content.
    • Group names are normalized more consistently for generated interfaces.
  • Tests

    • Added a test verifying interface documentation can be generated from controller tag descriptions when available.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitai Bot commented Jan 29, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Interface documentation generation was split into three entry points (by tag, by endpoint, by document title). Refit generators were updated to call the appropriate new methods and tests were added to verify tag-derived interface summaries.

Changes

Cohort / File(s) Summary
Tag-based interface generator
src/Refitter.Core/RefitMultipleInterfaceByTagGenerator.cs
Replaced per-tag interface doc call with AppendInterfaceDocumentationByTag(document, tag, sb) so tag + document context is passed when building interfaces.
Endpoint-multiple interface generator
src/Refitter.Core/RefitMultipleInterfaceGenerator.cs
Replaced operation-level doc call with AppendInterfaceDocumentationByEndpoint(operation, sb); only the documentation call site changed.
Single interface generator
src/Refitter.Core/RefitInterfaceGenerator.cs
Now calls AppendSingleInterfaceDocumentation(document, sb) for single-interface declarations.
Documentation implementation
src/Refitter.Core/XmlDocumentationGenerator.cs
Added AppendInterfaceDocumentationByTag(OpenApiDocument,string,StringBuilder), AppendInterfaceDocumentationByEndpoint(OpenApiOperation,StringBuilder), AppendSingleInterfaceDocumentation(OpenApiDocument,StringBuilder) and SummaryTag constant; replaced literal "summary" usage and ensured symbol escaping.
Identifier utilities
src/Refitter.Core/IdentifierUtils.cs
Added SanitizeControllerTag(this string) extension to sanitize and capitalize tag names used for group naming.
Tests
src/Refitter.Tests/XmlDocumentationGeneratorTests.cs
Updated endpoint-level test calls and added Can_Generate_Interface_Doc_From_Controller_Tag() to assert controller-tag-derived summaries.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

.NET

Poem

🐰 I hop through tags and nibble on a line,

Controller notes become the docs I sign.
Endpoints sing, document titles chime,
I stitch their summaries, one little rhyme.
Hooray — interface docs, neat and fine!

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 46.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Read group documentation from document tags' accurately reflects the main objective of the PR, which is to change how controller/group documentation is sourced from OpenAPI document tags instead of the first operation.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov

codecov Bot commented Jan 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 93.33%. Comparing base (44d46fe) to head (5c2e184).
⚠️ Report is 11 commits behind head on main.

Files with missing lines Patch % Lines
src/Refitter.Core/XmlDocumentationGenerator.cs 92.85% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #887      +/-   ##
==========================================
+ Coverage   93.30%   93.33%   +0.02%     
==========================================
  Files          23       23              
  Lines        1389     1395       +6     
==========================================
+ Hits         1296     1302       +6     
- Misses         46       47       +1     
+ Partials       47       46       -1     
Flag Coverage Δ
unittests 93.33% <94.44%> (+0.02%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@src/Refitter.Core/XmlDocumentationGenerator.cs`:
- Around line 45-50: The code risks a NullReferenceException when accessing
document.Tags or group.Tags; update the lookup that creates controllerTag in
XmlDocumentationGenerator (where controllerTag, document.Tags, group.Tags, and
group.Summary are used) to use null-conditional checks: ensure you only call
.FirstOrDefault when document.Tags is not null and use group.Tags?.Contains(...)
or guard when group.Tags is null, and then safely fall back to group.Summary (or
group.Summary ?? string.Empty) so the code never dereferences a null Tags
collection.
- Around line 46-52: The summary text (computed from controllerTag?.Description
or group.Summary) must be XML-escaped before emitting to AppendXmlCommentBlock
to avoid invalid XML when the text includes '<', '>' or '&'; modify
XmlDocumentationGenerator.cs so that after computing content (the variable used
in the call to AppendXmlCommentBlock) you pass it through an XML-escape function
(e.g., System.Security.SecurityElement.Escape or another XML-encoding helper)
and then call AppendXmlCommentBlock("summary", escapedContent ?? "No summary
available", code, indent: Separator).
🧹 Nitpick comments (1)
src/Refitter.Core/XmlDocumentationGenerator.cs (1)

31-38: Consider keeping the previous overload for backward compatibility.

This signature change is a breaking public API change for downstream consumers. Consider adding the old overload (or marking it [Obsolete]) that preserves the previous behavior when a document isn’t available.

Comment thread src/Refitter.Core/XmlDocumentationGenerator.cs Outdated
Comment thread src/Refitter.Core/XmlDocumentationGenerator.cs Outdated
@christianhelle christianhelle self-assigned this Jan 29, 2026
@christianhelle christianhelle added the enhancement New feature, bug fix, or request label Jan 29, 2026
@christianhelle

Copy link
Copy Markdown
Owner

@DJ4ddi thanks for taking the time to implement this.

I'm looking into this now

@DJ4ddi

DJ4ddi commented Jan 29, 2026

Copy link
Copy Markdown
Author

I'm realizing this behavior also applies to generating multiple interfaces by endpoint, in which case it may not produce the best result. It might make sense to restrict the new behavior to the RefitMultipleInterfaceByTagGenerator implementation.

@christianhelle christianhelle left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@DJ4ddi The changes look good but its lacking support for generating multiple interfaces by endpoint. Do you mind implementing that?

Comment thread src/Refitter.Core/XmlDocumentationGenerator.cs Outdated
Comment thread src/Refitter.Tests/XmlDocumentationGeneratorTests.cs
@christianhelle

Copy link
Copy Markdown
Owner

I'm realizing this behavior also applies to generating multiple interfaces by endpoint, in which case it may not produce the best result. It might make sense to restrict the new behavior to the RefitMultipleInterfaceByTagGenerator implementation.

@DJ4ddi Sorry, I was deep in reviewing when you wrote this. We noticed the same thing 😄

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/Refitter.Core/RefitMultipleInterfaceByTagGenerator.cs (1)

48-53: ⚠️ Potential issue | 🟠 Major

Use raw tag names for lookup and preserve fallback when no tag description exists.

kv.Key is sanitized for identifier purposes, so AppendInterfaceDocumentationByTag(document, kv.Key, ...) can miss matching document.Tags entries (e.g., spaces/hyphens). Also, when no tag description exists, the summary now disappears; per the PR objective, it should fall back to the first operation summary. A small guard based on StringBuilder length preserves that behavior.

🔧 Suggested fix (raw tag + fallback to endpoint summary)
-                    interfacesByGroup[kv.Key] = sb = new StringBuilder();
-                    this.docGenerator.AppendInterfaceDocumentationByTag(document, kv.Key, sb);
+                    interfacesByGroup[kv.Key] = sb = new StringBuilder();
+
+                    var rawTag = operation.Tags.FirstOrDefault();
+                    var tagForDocs = !string.IsNullOrWhiteSpace(rawTag) ? rawTag : kv.Key;
+                    var initialLength = sb.Length;
+                    this.docGenerator.AppendInterfaceDocumentationByTag(document, tagForDocs, sb);
+                    if (sb.Length == initialLength)
+                    {
+                        this.docGenerator.AppendInterfaceDocumentationByEndpoint(operation, sb);
+                    }

Based on learnings: In the Refitter codebase using NSwag, the OpenApiDocument.Tags and OpenApiOperation.Tags collections are not nullable and will be empty collections when the model has no tags, so null-conditional checks are not required.

Apply the same sanitization in documentation generator for comparison.
@sonarqubecloud

Copy link
Copy Markdown

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request improves the XML documentation generation for Refit interfaces by using OpenAPI controller tag descriptions instead of the first operation's summary. The change makes generated documentation more accurate and intuitive, aligning with how tools like Swashbuckle and NSwag handle controller documentation.

Changes:

  • Interface documentation now uses controller tag descriptions when available, with graceful fallback to endpoint or document-level summaries
  • Refactored documentation methods with clearer names to distinguish between tag-based, endpoint-based, and document-based documentation generation
  • Added consistent symbol escaping and eliminated generic placeholder documentation when meaningful descriptions are unavailable

Reviewed changes

Copilot reviewed 6 out of 10 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/Refitter.Core/XmlDocumentationGenerator.cs Added new AppendInterfaceDocumentationByTag method, renamed existing methods for clarity, added consistent XML symbol escaping, and eliminated meaningless placeholder documentation
src/Refitter.Core/IdentifierUtils.cs Added SanitizeControllerTag helper method to centralize tag sanitization logic
src/Refitter.Core/RefitMultipleInterfaceByTagGenerator.cs Updated to use new tag-based documentation method and centralized sanitization
src/Refitter.Core/RefitMultipleInterfaceGenerator.cs Updated to use renamed endpoint-based documentation method
src/Refitter.Core/RefitInterfaceGenerator.cs Updated to use renamed single-interface documentation method
src/Refitter.Tests/XmlDocumentationGeneratorTests.cs Added test for tag-based documentation and updated existing tests to use renamed methods
src/Refitter.SourceGenerator.Tests/AdditionalFiles/Generated/*.g.cs Updated snapshot files showing improved documentation from tag descriptions and removal of uninformative generic summaries

Comment on lines +40 to +50
[Test]
public void Can_Generate_Interface_Doc_From_Controller_Tag()
{
var docs = new StringBuilder();
var controllerTag = new OpenApiTag { Name = "TestController", Description = "TestControllerDescription" };
var document = new OpenApiDocument { Tags = [controllerTag] };

this._generator.AppendInterfaceDocumentationByTag(document, "TestController", docs);

docs.ToString().Trim().Should().Be("/// <summary>TestControllerDescription</summary>");
}

Copilot AI Feb 2, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider adding test cases for edge scenarios such as: tags with null or empty descriptions, tags that don't exist in the document, and tag descriptions containing XML special characters (e.g., "<", ">", "&") to verify the EscapeSymbols functionality works correctly in this context.

Copilot uses AI. Check for mistakes.

@christianhelle christianhelle left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@DJ4ddi this looks much better. Let's get this in.

I'll consider the AI suggestions at a later point

@christianhelle
christianhelle merged commit f049330 into christianhelle:main Feb 2, 2026
15 checks passed
hwinther pushed a commit to hwinther/test that referenced this pull request May 6, 2026
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>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=refitter&package-manager=nuget&previous-version=1.7.1&new-version=2.0.0)](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>
vgmello pushed a commit to vgmello/momentum that referenced this pull request May 10, 2026
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>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Refitter.MSBuild&package-manager=nuget&previous-version=1.7.3&new-version=2.0.0)](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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature, bug fix, or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants