feat(primitives): add multi-source CombineLatest support#62
Merged
Conversation
d65d6b1 to
6b8bfe3
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #62 +/- ##
==========================================
+ Coverage 93.12% 93.35% +0.22%
==========================================
Files 459 462 +3
Lines 16387 17208 +821
Branches 2043 2052 +9
==========================================
+ Hits 15261 16065 +804
- Misses 884 899 +15
- Partials 242 244 +2 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
6b8bfe3 to
128c55e
Compare
| "Major Code Smell", | ||
| "S107:Methods should not have too many parameters", | ||
| Justification = "Has more than 7 parameters - expected for arity-N CombineLatest factory surface.")] | ||
| internal static CombineLatestSignal<TResult> Create<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>( |
Contributor
There was a problem hiding this comment.
Get these documented. so No SST1600 suppression at all in the code base
Implementation: - Add a shared multi-source CombineLatest coordinator for arities 3 through 16 with SyncLatest latest-value semantics. - Add Primitives SyncLatest overloads for multi-source combinations and Rx CombineLatest parity overloads that delegate to SyncLatest. - Preserve Rx Do overloads and null validation for parity helpers. Public API: - Regenerate shipped API baselines for ReactiveUI.Primitives and ReactiveUI.Primitives.Reactive across target frameworks. Tests: - Cover three-source latest-value behavior, delayed initial emission, completion behavior, all generated arities from 4 through 15, source-error forwarding, and widest overload source ordering with TUnit tests. Documentation: - Document generated CombineLatest factory methods with full XML docs so SST1600 and related XML documentation analyzer rules are fixed directly rather than suppressed. CI: - Extend Sonar CPD exclusions to the generated-style multi-source arity files so duplication gates ignore mechanical overload surface while coverage still tracks the executable lines.
128c55e to
517f587
Compare
glennawatson
approved these changes
Jun 20, 2026
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



What kind of change does this PR introduce?
Feature update for ReactiveUI.Primitives observable operator parity.
What is the new behavior?
CombineLatestnow supports 3 through 16 observable sources via the Rx naming extensions, backed by shared latest-value coordination with the same semantics asSyncLatest.The Primitives naming surface also includes
SyncLatestoverloads for 3 through 16 observable sources, and shipped PublicAPI baselines are updated forReactiveUI.PrimitivesandReactiveUI.Primitives.Reactive.Generated CombineLatest factory helpers are fully XML documented; the previous SST1600 documentation suppressions have been removed and fixed directly.
What is the current behavior?
Only the two-source CombineLatest/SyncLatest path had underlying support, so higher-arity Rx-named extensions did not have the required implementation.
Checklist
Additional information
Local verification:
dotnet build tests\ReactiveUI.Primitives.Tests\ReactiveUI.Primitives.Tests.csproj -c Debug -f net8.0 -v minimal -p:AndroidPrimitivesTargetFrameworks= -p:ApplePrimitivesTargetFrameworks= -p:TestTargetFrameworks=net8.0dotnet build ReactiveUI.Primitives.Reactive\ReactiveUI.Primitives.Reactive.csproj -c Debug -f net8.0 -v minimal -p:AndroidPrimitivesTargetFrameworks= -p:ApplePrimitivesTargetFrameworks=dotnet test tests\ReactiveUI.Primitives.Tests\ReactiveUI.Primitives.Tests.csproj -c Debug -f net8.0 -v minimal -p:AndroidPrimitivesTargetFrameworks= -p:ApplePrimitivesTargetFrameworks= -p:TestTargetFrameworks=net8.0 -- --coverage --coverage-output-format cobertura --coverage-output "..\..\..\..\.tmp\coverage-pr62-net8-sst1600.cobertura.xml" --no-ansi --no-progressgit diff --checkCoverage verification:
SignalOperatorMixins.CombineLatest.cs: generated CombineLatest factories covered by the fresh net8 primitives test report; remaining missed lines are existing coordinator error/completion branches.SignalOperatorMixins.SyncLatest.MultiSource.cs: 100% line coverage in the fresh net8 primitives test report.SignalOperatorParityMixins.RxNames.CombineLatest.cs: 100% line coverage in the fresh net8 primitives test report.