Skip to content

Conversation

@Meir017
Copy link
Contributor

@Meir017 Meir017 commented Sep 14, 2025

This PR enhances the MA0048 analyzer to provide more informative diagnostic messages that include the type kind and name.

Changes

  • Enhanced Message Format: Updated diagnostic messages from "File name must match type name" to "File name must match type name ({type-kind} {type-name})"
  • Type Detection: Added GetTypeKindDisplayString() method that identifies different type kinds:
    • class - for regular classes
    • struct - for value types
    • enum - for enumerations
    • interface - for interfaces
    • record - for record classes
    • record struct - for record structs
    • delegate - for delegate types
  • Comprehensive Testing: Added test cases covering all supported type kinds with message validation
  • Updated Documentation: Enhanced MA0048.md with examples of the new message format

Examples

Before:

File name must match type name

After:

File name must match type name (class MyClass)
File name must match type name (enum MyEnum)
File name must match type name (interface IMyInterface)

Testing

All 42 existing tests continue to pass, plus 6 new tests specifically validate the enhanced message format for each type kind.

Closes #872

- Update diagnostic message format to include type kind and name
- Add GetTypeKindDisplayString method to detect and display appropriate type kinds
- Support class, struct, enum, interface, record, record struct, and delegate types
- Add comprehensive test cases for all supported type kinds
- Update documentation with examples of new message format

Closes meziantou#872
@Meir017 Meir017 requested a review from meziantou as a code owner September 14, 2025 19:17
@Meir017
Copy link
Contributor Author

Meir017 commented Sep 14, 2025

created this using two github-copilot prompts
image

and for the PR
image

used the github remote MCP server

Add conditional compilation directives (#if ROSLYN_4_2_OR_GREATER) around
IsRecord property usage in GetTypeKindDisplayString method to support
older Roslyn versions that don't have this property.

Fixes compilation errors in CI pipeline for Roslyn 3.8 target.
@meziantou meziantou merged commit f00f0ae into meziantou:main Sep 19, 2025
11 of 12 checks passed
@Meir017 Meir017 deleted the docs/issue-872-analyzer-MA0048 branch September 19, 2025 03:42
IhateTrains pushed a commit to ParadoxGameConverters/ImperatorToCK3 that referenced this pull request Sep 19, 2025
Updated
[Meziantou.Analyzer](https://github.com/meziantou/Meziantou.Analyzer)
from 2.0.219 to 2.0.220.

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

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

## 2.0.220

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

## What's Changed
* docs: Add multiple CA/MA analyzer rule mappings by @​Meir017 in
meziantou/Meziantou.Analyzer#871
* Enhance MA0048 diagnostic messages with type information by @​Meir017
in meziantou/Meziantou.Analyzer#873


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.219...2.0.220

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

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Meziantou.Analyzer&package-manager=nuget&previous-version=2.0.219&new-version=2.0.220)](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 merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@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] <[email protected]>
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.

feature: enhance MA0048 - improve diagnostic message to report the type name

2 participants