Skip to content

MA0007: Support multiline pattern-matching expressions#997

Merged
meziantou merged 3 commits intomainfrom
copilot/fix-ma0007-multiline-pattern
Feb 4, 2026
Merged

MA0007: Support multiline pattern-matching expressions#997
meziantou merged 3 commits intomainfrom
copilot/fix-ma0007-multiline-pattern

Conversation

Copy link
Contributor

Copilot AI commented Feb 4, 2026

MA0007 was not detecting missing trailing commas in multiline is { } pattern-matching expressions.

var res = contract is
{
    One: false,
    Two: false  // Missing comma not detected
};

Changes

  • Added HandleRecursivePattern handler for SyntaxKind.RecursivePattern nodes
  • Extracts PropertyPatternClause.Subpatterns and passes to existing HandleSeparatedList logic
  • Added tests covering multiline with/without trailing comma and single-line patterns

The fix reuses the existing separated list handling, treating property pattern clauses like other multiline constructs (object initializers, switch expressions, etc.).

Original prompt

This section details on the original issue you should resolve

<issue_title>MA0007 is not triggered in multiline pattern-matching expressions</issue_title>
<issue_description>### Version of the Meziantou.Analyzer NuGet package

2.0.286

Rule Identifier

MA0007

Target Framework

net8.0

C# Language version

C# 12

Description

Resharper's analyzer shows that a comma should be added after the last clause in a multiline is { } expression, but Meziantou Analyzers don't, so it can't be enforced during build.

Reproduction Steps

Minimal code:

var res = contract is
{
    One: false,
    Two: false
};

Other information

No response</issue_description>

Comments on the Issue (you are @copilot in this section)


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 2 commits February 4, 2026 19:07
Co-authored-by: meziantou <509220+meziantou@users.noreply.github.com>
Co-authored-by: meziantou <509220+meziantou@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix MA0007 rule for multiline pattern-matching expressions MA0007: Support multiline pattern-matching expressions Feb 4, 2026
Copilot AI requested a review from meziantou February 4, 2026 19:11
@meziantou meziantou marked this pull request as ready for review February 4, 2026 19:13
@meziantou meziantou merged commit 5c201ad into main Feb 4, 2026
13 checks passed
@meziantou meziantou deleted the copilot/fix-ma0007-multiline-pattern branch February 4, 2026 19:19
IhateTrains pushed a commit to ParadoxGameConverters/ImperatorToCK3 that referenced this pull request Feb 5, 2026
Updated
[Meziantou.Analyzer](https://github.com/meziantou/Meziantou.Analyzer)
from 2.0.285 to 2.0.297.

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

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

## 2.0.297

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

## What's Changed
* MA0007: Support multiline pattern-matching expressions by @​Copilot in
meziantou/Meziantou.Analyzer#997


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.296...2.0.297

## 2.0.296

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

## What's Changed
* Fix MA0185 false-positive for nullable value types by @​Copilot in
meziantou/Meziantou.Analyzer#995


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.295...2.0.296

## 2.0.295

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

## What's Changed
* Update default TargetFramework and adjust test setups by @​meziantou
in meziantou/Meziantou.Analyzer#993


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.294...2.0.295

## 2.0.294

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

**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.293...2.0.294

## 2.0.293

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

## What's Changed
* Fix MA0183 false-positive with params array arguments in string.Format
by @​Copilot in meziantou/Meziantou.Analyzer#991


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.292...2.0.293

## 2.0.292

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

## What's Changed
* Enable MA0184 by default with silent severity by @​Copilot in
meziantou/Meziantou.Analyzer#988


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.291...2.0.292

## 2.0.291

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

## What's Changed
* MA0185: Add tests and docs for literal-only interpolated strings by
@​Copilot in meziantou/Meziantou.Analyzer#987


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.290...2.0.291

## 2.0.290

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

## What's Changed
* Add MA0185: Simplify string.Create with culture-invariant parameters
by @​Copilot in meziantou/Meziantou.Analyzer#986


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.289...2.0.290

## 2.0.289

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

## What's Changed
* Add MA0184: Report interpolated strings without parameters by
@​Copilot in meziantou/Meziantou.Analyzer#984


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.288...2.0.289

## 2.0.288

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

## What's Changed
* Disable MA0042 async overload suggestions for TemporaryDirectory in
test projects by @​Copilot in
meziantou/Meziantou.Analyzer#980


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.287...2.0.288

## 2.0.287

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

## What's Changed
* Add MA0183: Detect string.Format without placeholders or formatting
arguments by @​Copilot in
meziantou/Meziantou.Analyzer#979


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.286...2.0.287

## 2.0.286

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

**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.285...2.0.286

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

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Meziantou.Analyzer&package-manager=nuget&previous-version=2.0.285&new-version=2.0.297)](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>
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 is not triggered in multiline pattern-matching expressions

2 participants