refactor: Replace string comparison with SymbolEqualityComparer in analyzers#1684
Conversation
…alyzers - Update IsDependsOnAttributeFor to use proper symbol comparison via Compilation.GetTypeByMetadataName instead of string.StartsWith - Add IsDependsOnAttribute helper method using SymbolEqualityComparer - Fix ConflictingDependsOnAttributeAnalyzer.IsDependsOn to use symbol comparison - Simplify LoggerInConstructorAnalyzer by: - Replacing complex nested conditionals with single TryGetProhibitedLoggerType method - Using IsAnyType extension method instead of string.StartsWith - Declaring logging types as static ImmutableArray for better maintainability - Add ReadOnlySpan<string> overload to IsAnyType for efficient iteration Fixes #1599, #1606 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
SummaryRefactors analyzer code to use proper Roslyn symbol comparison (SymbolEqualityComparer) instead of string-based comparison, improving correctness and maintainability. Critical IssuesNone found ✅ SuggestionsCode Quality ImprovementsSymbolExtensions.cs:15 - Consider caching GetTypeByMetadataName results
ConflictingDependsOnAttributeAnalyzer.cs:103 and SymbolExtensions.cs:184 - Code duplication
LoggerInConstructorAnalyzer.cs:26 - Consider using ImmutableHashSet SymbolExtensions.cs:46 - Minor: Early exit opportunity Previous Review StatusNo previous comments found. Verdict✅ APPROVE - No critical issues This is a solid refactoring that improves code quality by using proper Roslyn symbol comparison semantics. The suggested improvements are minor and optional. |
Summary
SymbolExtensions.InheritsFromfrom string-based comparison to proper Roslyn symbol comparison usingSymbolEqualityComparerLoggerInConstructorAnalyzerwith early returns and helper methodsFixes #1606, #1599
Test plan
🤖 Generated with Claude Code