Skip to content

Refactor analyzers to reduce some duplication - #205

Merged
andrewlock merged 4 commits into
mainfrom
refactoring
Dec 24, 2025
Merged

Refactor analyzers to reduce some duplication#205
andrewlock merged 4 commits into
mainfrom
refactoring

Conversation

@andrewlock

Copy link
Copy Markdown
Owner

No description provided.

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

This PR refactors the diagnostic analyzers and code fix providers to reduce code duplication by organizing analyzers into logical namespaces (UsageAnalyzers and DefinitionAnalyzers) and extracting common code fix logic into a shared base class. The refactoring also improves type resolution by introducing a GetBestTypeByMetadataName helper method.

Key changes:

  • Extracted common code fix provider logic into CodeFixProviderBase.FixAllAsync() method, eliminating duplicated code across four code fix providers
  • Organized analyzers into UsageAnalyzers (ToString, Parse, IsDefined, HasFlag) and DefinitionAnalyzers (EnumInGenericType, DuplicateExtensionClass, DuplicateEnumValue) namespaces
  • Added CompilationExtensions class with GetBestTypeByMetadataName() for improved type resolution

Reviewed changes

Copilot reviewed 25 out of 25 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tests/NetEscapades.EnumGenerators.Tests/ToStringAnalyzerTests.cs Updated using alias to reference analyzer in new UsageAnalyzers namespace
tests/NetEscapades.EnumGenerators.Tests/ParseAnalyzerTests.cs Updated using aliases to reference analyzer in new UsageAnalyzers namespace
tests/NetEscapades.EnumGenerators.Tests/IsDefinedAnalyzerTests.cs Updated using aliases to reference analyzer in new UsageAnalyzers namespace
tests/NetEscapades.EnumGenerators.Tests/HasFlagAnalyzerTests.cs Updated using alias to reference analyzer in new UsageAnalyzers namespace
tests/NetEscapades.EnumGenerators.Tests/EnumInGenericTypeAnalyzerTests.cs Added using directive and updated using alias to reference analyzer in new DefinitionAnalyzers namespace
tests/NetEscapades.EnumGenerators.Tests/DuplicateExtensionClassAnalyzerTests.cs Added using directive and updated using alias to reference analyzer in new DefinitionAnalyzers namespace
tests/NetEscapades.EnumGenerators.Tests/DuplicateEnumValueAnalyzerTests.cs Added using directive and updated using alias to reference analyzer in new DefinitionAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/UsageAnalyzers/ToStringCodeFixProvider.cs Moved to UsageAnalyzers namespace and refactored to use CodeFixProviderBase.FixWithEditor
src/NetEscapades.EnumGenerators/Diagnostics/UsageAnalyzers/ToStringAnalyzer.cs Moved to UsageAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/UsageAnalyzers/ParseCodeFixProvider.cs Moved to UsageAnalyzers namespace and refactored to use CodeFixProviderBase.FixWithEditor
src/NetEscapades.EnumGenerators/Diagnostics/UsageAnalyzers/ParseAnalyzer.cs Moved to UsageAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/UsageAnalyzers/IsDefinedCodeFixProvider.cs Moved to UsageAnalyzers namespace and refactored to use CodeFixProviderBase.FixWithEditor
src/NetEscapades.EnumGenerators/Diagnostics/UsageAnalyzers/IsDefinedAnalyzer.cs Moved to UsageAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/UsageAnalyzers/HasFlagCodeFixProvider.cs Moved to UsageAnalyzers namespace and refactored to use CodeFixProviderBase.FixWithEditor
src/NetEscapades.EnumGenerators/Diagnostics/UsageAnalyzers/HasFlagAnalyzer.cs Moved to UsageAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/ToStringCodeFixProvider.cs Deleted - moved to UsageAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/ParseCodeFixProvider.cs Deleted - moved to UsageAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/IsDefinedCodeFixProvider.cs Deleted - moved to UsageAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/HasFlagCodeFixProvider.cs Deleted - moved to UsageAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/DefinitionAnalyzers/EnumInGenericTypeAnalyzer.cs Moved to DefinitionAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/DefinitionAnalyzers/DuplicateExtensionClassAnalyzer.cs Moved to DefinitionAnalyzers namespace
src/NetEscapades.EnumGenerators/Diagnostics/DefinitionAnalyzers/DuplicateEnumValueAnalyzer.cs Moved to DefinitionAnalyzers namespace and removed unused System.Linq import
src/NetEscapades.EnumGenerators/Diagnostics/CompilationExtensions.cs New file with GetBestTypeByMetadataName helper method copied from Roslyn source
src/NetEscapades.EnumGenerators/Diagnostics/CodeFixProviderBase.cs Added FixAllAsync method with shared logic and changed FixAllAsync from abstract to concrete method calling FixWithEditor
src/NetEscapades.EnumGenerators/Diagnostics/AnalyzerHelpers.cs Updated to use GetBestTypeByMetadataName instead of GetTypeByMetadataName
Comments suppressed due to low confidence (1)

src/NetEscapades.EnumGenerators/Diagnostics/DefinitionAnalyzers/DuplicateEnumValueAnalyzer.cs:1

  • The using System.Linq; directive has been removed, but the code at lines 80 and 94 uses LINQ extension methods (.OfType<IFieldSymbol>() and .FirstOrDefault()). This will cause compilation errors. The using directive should be retained.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/NetEscapades.EnumGenerators/Diagnostics/CompilationExtensions.cs Outdated
Comment thread src/NetEscapades.EnumGenerators/Diagnostics/CodeFixProviderBase.cs Outdated
Comment thread src/NetEscapades.EnumGenerators/Diagnostics/CodeFixProviderBase.cs Outdated
@andrewlock andrewlock changed the title Refactor to reduce some duplication Refactor analyzers to reduce some duplication Dec 24, 2025
@github-actions

Copy link
Copy Markdown

Test Results

    180 files  ±0      180 suites  ±0   2h 37m 1s ⏱️ + 15m 23s
 21 772 tests ±0   21 768 ✅ ±0   4 💤 ±0  0 ❌ ±0 
387 780 runs  ±0  387 708 ✅ ±0  72 💤 ±0  0 ❌ ±0 

Results for commit 84583a9. ± Comparison against base commit f34ea11.

@andrewlock
andrewlock merged commit 4256862 into main Dec 24, 2025
5 checks passed
@andrewlock
andrewlock deleted the refactoring branch December 24, 2025 22:38
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