Skip to content

Fix repeatable attribute matching in ApiCompat#55448

Open
JoshLove-msft wants to merge 1 commit into
dotnet:mainfrom
JoshLove-msft:josh/fix-apicompat-repeatable-attribute-additions
Open

Fix repeatable attribute matching in ApiCompat#55448
JoshLove-msft wants to merge 1 commit into
dotnet:mainfrom
JoshLove-msft:josh/fix-apicompat-repeatable-attribute-additions

Conversation

@JoshLove-msft

Copy link
Copy Markdown

Summary

Match repeated attributes as multisets in AttributesMustMatch.

  • match identical attribute instances one-to-one
  • report unmatched pairs as changed arguments
  • report remaining left instances as removed
  • report remaining right instances as added (and suppress them outside strict mode as before)

This prevents an added repeatable attribute instance from being reported as a change to an existing instance, and prevents duplicate left instances from reusing the same right-side match.

Fixes part of #35542.

Tests

  • Microsoft.DotNet.ApiCompatibility.Tests (250 passed)

Match repeatable attributes as multisets so added instances are not reported as changed and duplicate instances cannot reuse the same match.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 432bd163-3c37-4310-8e2d-026ac6e48f95
Copilot AI review requested due to automatic review settings July 24, 2026 01:04
@JoshLove-msft
JoshLove-msft requested a review from a team as a code owner July 24, 2026 01:04
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).
2 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

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

Improves ApiCompat’s AttributesMustMatch rule to correctly compare repeatable attributes by matching attribute instances as a multiset, avoiding erroneous “changed” reports when instances are actually added/removed and preventing reusing the same right-side instance for multiple matches.

Changes:

  • Update AttributesMustMatch to first match identical attribute instances one-to-one, then classify remaining instances as changed/removed/added.
  • Preserve existing behavior of suppressing “added attribute” differences when not in strict mode (via the existing early-return in AddDifference).
  • Expand/adjust tests to cover repeatable attribute add/remove/change scenarios and update strict-mode expectations to use CannotAddAttribute for newly-added instances.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
test/Compatibility/ApiCompat/Microsoft.DotNet.ApiCompatibility.Tests/Rules/AttributesMustMatchTests.cs Adds coverage for repeatable attribute multiset behavior and updates strict-mode expectations for added instances.
src/Compatibility/ApiCompat/Microsoft.DotNet.ApiCompatibility/Rules/AttributesMustMatch.cs Implements multiset-style matching for repeated attributes and reports remaining instances as changed/removed/added appropriately.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants