Skip to content

Adjust MA0007 trailing comma behavior for collection expressions#1127

Merged
meziantou merged 1 commit intomainfrom
meziantou/ma0007-comma-option
May 5, 2026
Merged

Adjust MA0007 trailing comma behavior for collection expressions#1127
meziantou merged 1 commit intomainfrom
meziantou/ma0007-comma-option

Conversation

@meziantou
Copy link
Copy Markdown
Owner

@meziantou meziantou commented May 5, 2026

MA0007 currently reports on multiline collection expressions even when the last element is directly followed by the closing bracket on the same line. This produces noise for common spread-element formatting.

This change updates MA0007 so collection expressions only require a trailing comma when the closing ] is on a later line than the last element. If the last element and ] are on the same line, no diagnostic is reported.

It also adds focused C# 12 tests for:

  • same-line closing bracket cases (with and without preceding values)
  • next-line closing bracket cases
  • a trailing comment before the closing bracket on the next line

Finally, the MA0007 rule documentation is updated to describe the new default behavior for collection expressions.

Fix #1126

Allow omitting the trailing comma in collection expressions when the last element is directly followed by ] on the same line, while still requiring a comma when ] is on a following line. Update MA0007 documentation and extend CommaAnalyzerTests with same-line and next-line closing bracket scenarios, including trailing comment coverage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@meziantou meziantou merged commit 0922cbf into main May 5, 2026
13 checks passed
@meziantou meziantou deleted the meziantou/ma0007-comma-option branch May 5, 2026 17:18
This was referenced May 5, 2026
IhateTrains added a commit to ParadoxGameConverters/ImperatorToCK3 that referenced this pull request May 6, 2026
Updated
[Meziantou.Analyzer](https://github.com/meziantou/Meziantou.Analyzer)
from 3.0.61 to 3.0.70.

<details>
<summary>Release notes</summary>

_Sourced from [Meziantou.Analyzer's
releases](https://github.com/meziantou/Meziantou.Analyzer/releases)._

## 3.0.70

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/3.0.70>

## What's Changed
* Update diagnostic helpers and tests for flexibility and clarity by
@​meziantou in meziantou/Meziantou.Analyzer#1131


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.69...3.0.70

## 3.0.69

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/3.0.69>

## What's Changed
* Broaden MA0042/MA0045 SQLite special-case exclusions by @​meziantou in
meziantou/Meziantou.Analyzer#1130


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.68...3.0.69

## 3.0.68

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/3.0.68>

## What's Changed
* Skip SqliteConnection.Open in MA0042 and MA0045 by @​meziantou in
meziantou/Meziantou.Analyzer#1129


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.67...3.0.68

## 3.0.67

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/3.0.67>

## What's Changed
* Add configurable SQLite special cases for MA0042 and MA0045 by
@​meziantou in meziantou/Meziantou.Analyzer#1128


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.66...3.0.67

## 3.0.66

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/3.0.66>

## What's Changed
* Adjust MA0007 trailing comma behavior for collection expressions by
@​meziantou in meziantou/Meziantou.Analyzer#1127


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.65...3.0.66

## 3.0.65

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/3.0.65>

## What's Changed
* Fix MA0004 code fix crash in nested await using declarations by
@​meziantou in meziantou/Meziantou.Analyzer#1125


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.64...3.0.65

## 3.0.64

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/3.0.64>

## What's Changed
* MA0109: Skip diagnostic for program entry point `Main(string[] args)`
by @​Copilot in
meziantou/Meziantou.Analyzer#1123
* MA0042: add DbCommand await-using parity with DbConnection by
@​meziantou in meziantou/Meziantou.Analyzer#1124


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.63...3.0.64

## 3.0.63

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/3.0.63>

## What's Changed
* MA0042: check if DisposeAsync is declared directly when runtime type
is known by @​meziantou in
meziantou/Meziantou.Analyzer#1118


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.62...3.0.63

## 3.0.62

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/3.0.62>

## What's Changed
* Fix MA0042 comment placement for await using by @​meziantou in
meziantou/Meziantou.Analyzer#1120


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.61...3.0.62

Commits viewable in [compare
view](meziantou/Meziantou.Analyzer@3.0.61...3.0.70).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Meziantou.Analyzer&package-manager=nuget&previous-version=3.0.61&new-version=3.0.70)](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>
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.

MA0007 shouldn't trigger on spread element over Linq operation when last value is followed by a comma

1 participant