moq.analyzers
moq.analyzers copied to clipboard
Gap Analysis: Complete Sequence Patterns Analyzer Implementation (InSequence/MockSequence)
Background
This issue provides a gap analysis for completing the sequence patterns analyzer implementation as originally requested in issue #576. PR #581 successfully implemented the foundational SetupSequence validation (Moq1207), but significant functionality remains for full sequence pattern support.
What Was Completed in PR #581
✅ SetupSequence Basic Validation (Moq1207)
- Validates SetupSequence calls are only used on overridable members
- Comprehensive test coverage with 40+ test cases
- Supports Moq versions 4.8.2 and 4.18.4+
- Complete documentation and error messaging
Gap Analysis: Remaining Work
Based on the original acceptance criteria from #576, the following functionality still needs implementation:
🔄 Epic 1: InSequence/MockSequence Coordination Validation
User Story: As a developer using MockSequence with InSequence, I want analyzer validation to ensure proper sequence coordination, so that my sequential mock setups behave predictably.
INVEST Analysis:
- Independent: Can be developed separately from other sequence validations
- Negotiable: Implementation approach (cross-statement vs single-call analysis) is flexible
- Valuable: Prevents common MockSequence misuse patterns that cause test failures
- Estimable: Moderate complexity - requires cross-statement analysis infrastructure
- Small: Can be broken into sub-tasks (detection, validation, diagnostics)
- Testable: Clear success criteria with concrete code examples
Acceptance Criteria:
- [ ] Analyzer detects MockSequence instantiation patterns
- [ ] Validates that InSequence() calls reference the same MockSequence instance
- [ ] Ensures proper ordering constraints are maintained
- [ ] Provides clear diagnostic messages for sequence coordination errors
- [ ] Handles both valid sequence patterns and common anti-patterns
Technical Requirements:
🔄 Epic 2: Incomplete Sequence Configuration Detection
User Story: As a developer setting up mock sequences, I want analyzer warnings for incomplete configurations, so that I avoid runtime surprises from unconfigured sequence steps.
INVEST Analysis:
- Independent: Standalone validation separate from coordination logic
- Negotiable: Warning vs error severity is configurable
- Valuable: Prevents subtle test failures from incomplete sequence setups
- Estimable: Medium complexity - requires tracking sequence call chains
- Small: Focused on single sequence completion validation
- Testable: Can verify detection of various incomplete patterns
Acceptance Criteria:
- [ ] Detects SetupSequence calls without subsequent Returns/Throws configuration
- [ ] Identifies partially configured sequence chains
- [ ] Provides actionable diagnostic messages with completion suggestions
- [ ] Handles edge cases (async sequences, complex return types)
Technical Requirements:
🔄 Epic 3: Mixed Returns/Throws Sequence Validation
User Story: As a developer configuring complex sequences, I want validation of mixed Returns/Throws patterns, so that I can ensure my sequence configurations are semantically correct.
INVEST Analysis:
- Independent: Can be implemented without dependencies on other epics
- Negotiable: Validation rules can be adjusted based on Moq version capabilities
- Valuable: Prevents invalid sequence configurations that fail at runtime
- Estimable: Low-medium complexity - builds on existing SetupSequence infrastructure
- Small: Focused validation of method call patterns
- Testable: Clear examples of valid/invalid mixed patterns
Acceptance Criteria:
- [ ] Validates Returns/Throws method chaining patterns
- [ ] Ensures type compatibility in sequence return chains
- [ ] Handles async method sequence patterns (Task/ValueTask)
- [ ] Provides specific guidance for fixing sequence type mismatches
Implementation Strategy
Phase 1: Infrastructure (Epic 1 Foundation)
- Extend MoqKnownSymbols for MockSequence and InSequence symbols
- Develop cross-statement analysis capabilities
- Create sequence relationship tracking utilities
Phase 2: Core Validations (Epics 1-3)
- Implement coordination validation analyzer
- Add incomplete configuration detection
- Extend mixed pattern validation
Phase 3: Integration & Polish
- Comprehensive test coverage across all Moq versions
- Documentation updates for new analyzer rules
- Performance optimization for cross-statement analysis
Technical Considerations
- Cross-statement Analysis: Unlike the current SetupSequence validation, InSequence coordination requires analyzing relationships between multiple statements
- Symbol Tracking: Need to track MockSequence instance references across method calls
- Performance: Cross-statement analysis must be optimized to avoid significant compilation slowdown
- Moq Version Compatibility: Ensure support for both older (4.8.2) and newer (4.18.4+) Moq versions
Success Metrics
- [ ] All acceptance criteria from original issue #576 completed
- [ ] Zero regressions in existing analyzer functionality
- [ ] Comprehensive test coverage (>95%) for new analyzers
- [ ] Performance impact <5% increase in analysis time
- [ ] Clear diagnostic messages with actionable guidance
References
- Original Issue: #576 - Implement Sequence Patterns Analyzer (SetupSequence/InSequence/MockSequence)
- Foundational PR: #581 - feat: Implement SetupSequence validation analyzer (Moq1207)
- Related: #434 - Parent issue for Moq sequence patterns analysis
Estimated Effort: 3-4 weeks for experienced analyzer developer Priority: Medium - builds on solid foundation from PR #581 Assignee: @rjmurillo