Skip to content

Comments

docs(MA0042): Document false positive when calling sync method from its own async counterpart#1038

Merged
meziantou merged 2 commits intomainfrom
copilot/fix-ma0042-reporting-issue
Feb 22, 2026
Merged

docs(MA0042): Document false positive when calling sync method from its own async counterpart#1038
meziantou merged 2 commits intomainfrom
copilot/fix-ma0042-reporting-issue

Conversation

Copy link
Contributor

Copilot AI commented Feb 22, 2026

MA0042 incorrectly fires when a sync method is called from within the async method it would suggest as a replacement. Applying the fix in this case causes infinite recursion.

Changes

  • docs/Rules/MA0042.md: Added a "Known limitations" section documenting the false positive scenario with a code example and instructions to suppress the diagnostic manually (#pragma warning disable MA0042 or [SuppressMessage]).
public sealed class Sample
{
    public void Run() { }

    public async Task RunAsync()
    {
        // MA0042 fires here suggesting RunAsync — but that would be infinite recursion.
        // Suppress manually: #pragma warning disable MA0042
        Run();
    }
}

The analyzer cannot detect this case automatically, so manual suppression is required.

Original prompt

This section details on the original issue you should resolve

<issue_title>MA0042 is reported when the async method it proposed to use is the method from within the invocation is done</issue_title>
<issue_description>### Version of the Meziantou.Analyzer NuGet package

3.0.11

Rule Identifier

MA0042

Target Framework

.NET 10.0

C# Language version

C# 14

Description

MA0042 is currently "wrongfully" reported for a non-async method call when that call is done from within the async method it proposed to use. Applying the "suggestion" would lead to a stackoverflow.

I came across this in legacy code.

Reproduction Steps

Minimal code:

public sealed class B
{
    public void Run()
    {
    }

    public async Task RunAsync()
    {
        Run(); // MA0042: Use 'RunAsync' instead of 'Run' | NOK, should not be reported
    }

    public async Task Work()
    {
    }

    public async Task WorkAsync()
    {
        Run(); // MA0042: Use 'RunAsync' instead of 'Run' | OK
    }
}

Other information

No response</issue_description>

<agent_instructions>Can you update the rule documentation to indicate that the rule must be disabled manually for specific cases</agent_instructions>

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

@meziantou Duplicate of #788. Will improve the documentation

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

…ing sync method from its async counterpart

Co-authored-by: meziantou <509220+meziantou@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix MA0042 reporting issue in async method calls docs(MA0042): Document false positive when calling sync method from its own async counterpart Feb 22, 2026
Copilot AI requested a review from meziantou February 22, 2026 15:31
@meziantou meziantou marked this pull request as ready for review February 22, 2026 15:33
@meziantou meziantou enabled auto-merge (squash) February 22, 2026 15:33
@meziantou meziantou merged commit d2bce00 into main Feb 22, 2026
12 checks passed
@meziantou meziantou deleted the copilot/fix-ma0042-reporting-issue branch February 22, 2026 15:38
This was referenced Feb 22, 2026
IhateTrains pushed a commit to ParadoxGameConverters/ImperatorToCK3 that referenced this pull request Feb 23, 2026
Updated
[Meziantou.Analyzer](https://github.com/meziantou/Meziantou.Analyzer)
from 2.0.302 to 3.0.15.

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

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

## 3.0.15

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

## What's Changed
* MA0183: Extend detection to Console.Write, Console.WriteLine, and
StringBuilder.AppendFormat by @​Copilot in
meziantou/Meziantou.Analyzer#1042


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.14...3.0.15

## 3.0.14

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

## What's Changed
* docs(MA0028): Remove incorrect AppendFormat optimization example by
@​Copilot in meziantou/Meziantou.Analyzer#1039
* docs: Document MA0158 as similar to IDE0330 by @​Copilot in
meziantou/Meziantou.Analyzer#1040
* MA0028: Detect StringBuilder.AppendFormat with no-placeholder format
strings by @​Copilot in
meziantou/Meziantou.Analyzer#1041


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.13...3.0.14

## 3.0.13

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

## What's Changed
* Fix incorrect CA1065 → MA0072 equivalence mapping by @​Copilot in
meziantou/Meziantou.Analyzer#1028
* Fix IDE0330 comparison incorrectly referencing MA0153 instead of
MA0158 by @​Copilot in
meziantou/Meziantou.Analyzer#1036
* docs(MA0042): Document false positive when calling sync method from
its own async counterpart by @​Copilot in
meziantou/Meziantou.Analyzer#1038
* Fix MA0158 not reported when lock field is initialized in constructor
by @​Copilot in
meziantou/Meziantou.Analyzer#1037


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.12...3.0.13

## 3.0.12

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

## What's Changed
* MA0056: Reclassify as "similar to" CA2214 and document differences by
@​Copilot in meziantou/Meziantou.Analyzer#1024
* Fix MA0027 not firing for derived exception types by @​Copilot in
meziantou/Meziantou.Analyzer#1026


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.11...3.0.12

## 3.0.11

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

## What's Changed
* Reduce test fakiness with source generators by @​meziantou in
meziantou/Meziantou.Analyzer#1022


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.10...3.0.11

## 3.0.10

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

## What's Changed
* Add test for implicit params array in AppendLine with AppendFormat by
@​meziantou in meziantou/Meziantou.Analyzer#1021


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.9...3.0.10

## 3.0.9

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

## What's Changed
* MA0029: Suppress all Where().X() diagnostics on IQueryable by
@​Copilot in meziantou/Meziantou.Analyzer#1017


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.8...3.0.9

## 3.0.8

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

## What's Changed
* Remove exception handling from WithSourceGeneratorsFromNuGet and
document Roslyn version testing by @​Copilot in
meziantou/Meziantou.Analyzer#1015


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.7...3.0.8

## 3.0.7

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

## What's Changed
* Fix MA0110 to handle property initializers by @​Copilot in
meziantou/Meziantou.Analyzer#1014


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.6...3.0.7

## 3.0.6

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

## What's Changed
* MA0110: Suggest partial property before partial method by @​Copilot in
meziantou/Meziantou.Analyzer#1013


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.5...3.0.6

## 3.0.5

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

## What's Changed
* MA0110: Support top-level statements by @​Copilot in
meziantou/Meziantou.Analyzer#1012


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.4...3.0.5

## 3.0.4

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

## What's Changed
* MA0110: Remove field/variable when generating partial property code
fix by @​Copilot in
meziantou/Meziantou.Analyzer#1011


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.3...3.0.4

## 3.0.3

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

## What's Changed
* MA0110: Derive generated regex names from field/variable context by
@​Copilot in meziantou/Meziantou.Analyzer#1010


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.2...3.0.3

## 3.0.2

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

## What's Changed
* Add partial property support for MA0110 Regex Source Generator by
@​Copilot in meziantou/Meziantou.Analyzer#1009


**Full Changelog**:
meziantou/Meziantou.Analyzer@3.0.1...3.0.2

## 3.0.1

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

## What's Changed
* Remove Roslyn 3.x support by @​Copilot in
meziantou/Meziantou.Analyzer#1007


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.302...3.0.1

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

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Meziantou.Analyzer&package-manager=nuget&previous-version=2.0.302&new-version=3.0.15)](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>
This was referenced Feb 23, 2026
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.

MA0042 is reported when the async method it proposed to use is the method from within the invocation is done

2 participants