3.4.0
What's New 📣
This release notably adds nullable reference type annotations (see #582 and #803), the two experimental operators below and fixes a few bugs:
Merge
(experimental)Batch
overloads using an array pool (experimental)
Breaking Changes ⚠️
While there are no breaking API changes in this release, the following changes will affect users using on .NET versions that have reached end-of-life:
- Use .NET 6 SDK while dropping .NET 5 & Core 2.1 by @atifaziz in #843
- Updated .NET Framework target to 4.6.2 by @atifaziz in #934
See Also ℹ️
- 3.4.0 milestone for changes in this release
- Commit history since 3.3.2
New Contributors 👋🏽
- @TAGC made their first contribution in #772
- @MarcDirven made their first contribution in #796
- @sid-6581 made their first contribution in #808
- @GitHubPang made their first contribution in #828
- @MateoMiller made their first contribution in #846
- @viceroypenguin made their first contribution in #888
- @leotsarev made their first contribution in #907
- @i3arnon made their first contribution in #959
What's Changed 🗒️
OrderedMerge
: add tests by @Orace in #736- Replace explicit type mentions with object pattern by @atifaziz in #751
- Optimize Batch for empty
IReadOnlyCollection<T>
too by @leandromoh in #750 - Update to .NET Core SDK 3.1 by @atifaziz in #754
- Update .NET Core installation script by @atifaziz in #756
Interleave
: Do not callGetEnumerator
eagerly by @Orace in #730- Fix (bash) test script to test against .NET Core 3.1 by @atifaziz in #757
- Update all test dependencies by @atifaziz in #755
- Deploy package only on CI build of "deploy" by @atifaziz in #758
- Fix bug in
LastOrDefault
for extrema sequence by @atifaziz in #761 - Annotate nullability of reference types by @atifaziz in #582 ⭐
- Fix return value docs for
MinBy
/MaxBy
by @atifaziz in #765 - Fix .NET Core version in test script by @atifaziz in #767
- Update to .NET 5.0 SDK by @atifaziz in #766
- Fix duplicate test runs on Windows by @atifaziz in #769
- Fix typo in Partition return value documentation by @TAGC in #772
- Integrate templated code generation into project file by @atifaziz in #776
- Add .NET 5.0 as a test target by @atifaziz in #777
- Disable parallel building due to T4 for simplicity by @atifaziz in #779
- Unify to single CI platform by @atifaziz in #778
- Enable use of C# 9 across all projects by @atifaziz in #780
- Mask
System.Linq
for async streams by @atifaziz in #781 - Fix XML encoding of ">" in project file by @atifaziz in #785
- Simpler extensions generator with namespace & program class by @atifaziz in #787
- Replace using statements with declarations in tests by @atifaziz in #786
- Update test project dependencies to latest versions by @atifaziz in #790
- Fix grep invocation on Windows CI build by @atifaziz in #791
- Use consistent line-folding in CI YAML shell sections by @atifaziz in #792
- Doc update (+ instead of /) by @MarcDirven in #796
- Fix dictionary bug when null key has null value by @atifaziz in #800
- Fix
TrySingle
signature with honest nullable annotations by @atifaziz in #801 - Cleanup ! operator usage in
FallbackIfEmpty
by @sid-6581 in #808 - Fix
Pad*
signatures with more honest nullable annotations by @atifaziz in #804 - Fix
Lag
&Lead
signatures with more honest nullable annotations by @atifaziz in #805 - Fix
ReverseComparer
signature with more honest nullable annotations by @sid-6581 in #807 - Fix
GroupAdjacent
null key handling bug by @atifaziz in #810 - Fix
FullGroupJoin
signature with more honest nullable annotations by @sid-6581 in #806 - Add test to ensure
Batch
does not reuse internal array by @leandromoh in #820 - Update links in
README
by @GitHubPang in #828 - Use .NET 6 SDK while dropping .NET 5 & Core 2.1 by @atifaziz in #843
- Removed unnecessary
null
check inBatch
method by @MateoMiller in #846 - Fix code coverage with new collector by @atifaziz in #845
- Update referenced packages to latest versions by @atifaziz in #844
- Fix
Flatten
signature parts to be null-oblivious by @atifaziz in #847 - Add missing remarks tags on
Batch
overload by @atifaziz in #849 - Constrain key type param in
ToDictionary
tonotnull
by @atifaziz in #852 - Allow use of C# 10 by @atifaziz in #853
- Remove look-up optimizations in
CountBy
/ScanBy
by @atifaziz in #855 - Replace Nullable with PolySharp by @atifaziz in #857
- Fix code coverage using latest coverlet collector by @atifaziz in #858
- Adjust library for .NET 6 target by @atifaziz in #860
- Use end index "[^1]" by @atifaziz in #862
- Use string interpolation by @atifaziz in #863
- Discard unused parameters by @atifaziz in #864
- Rewrite switch statements as expressions by @atifaziz in #865
- Use
+=
to increment by @atifaziz in #869 - Convert using statements to declarations by @atifaziz in #867
- Revise & take advantage of pattern matching by @atifaziz in #866
- Rewrite swap more succinctly (via tuples) by @atifaziz in #868
- Simplify names (IDE0001) by @atifaziz in #861
- Make PolySharp a build-time dependency by @jnyrup in #870
- Update to .NET 7 by @atifaziz in #871
- Fix test scripts to test on .NET 7 runtime by @atifaziz in #873
- Allow use of C# 11 by @atifaziz in #874
- Replace
MayBeNull
with?
inIExtremaEnumerable
members by @atifaziz in #872 - Enable nullable context in
Flatten
tests by @atifaziz in #875 - Update ReportGenerator tool to 5.1.11 by @atifaziz in #876
- Enable nullable context for extensions generator by @atifaziz in #878
- Sync
Lookup
+Grouping
from .NET 7 sources by @atifaziz in #879 Batch
overloads using an array pool by @atifaziz in #856- PartialSort:
#nullable
enable on tests by @viceroypenguin in #888 - Fix nullability annotation in
Subject
by @atifaziz in #891 - Replace null-forgiving operator uses with debug assertions by @atifaziz in #890
- Update
Memoize
documentation by @viceroypenguin in #895 - Add parameter annotations for
Partition
by @viceroypenguin in #897 - Document
Partition
exceptions by @viceroypenguin in #886 - Add null check for
Partition
by @viceroypenguin in #896 - Rewrite switch in
Memoize
as expression by @viceroypenguin in #894 - Cleanup
Partition
Nullability by @viceroypenguin in #881 - Add exceptions section to
Zip*
docs by @viceroypenguin in #887 - Add identity method to reduce JIT-ing by @viceroypenguin in #880
- Use random shared by @leotsarev in #907
- Fix nullability for
ZipLongest
by @viceroypenguin in #900 - Enable nullable context for remaining
*Zip*
tests by @atifaziz in #908 - Add NUnit.Analyzers, addressing warnings by @atifaziz in #910
- Remove unused imports by @atifaziz in #911
- Update all tests to consistently use the NUnit constraint model by @atifaziz in #912
- Fix nullability of
Rank
comparer argument by @atifaziz in #913 - Fix nullability of
ToDataTable
expressions argument by @atifaziz in #914 - Enable nullable context for entire solution by @atifaziz in #915
- Seal private enumerators by @atifaziz in #916
- Replace
!
with debug assertion inPermutations
by @atifaziz in #917 - Fix typos in comments by @atifaziz in #918
- Use
LinkedList
inInterleave
to avoid many null checks by @Orace in #726 - Update packages to latest versions by @atifaziz in #920
- Add more
Interleave
tests by @Orace in #728 - Retire our delegating
Comparer
by @atifaziz in #921 - Mark local function static where possible by @atifaziz in #922
- Address to-do about consolidating testing sequence implementations by @atifaziz in #923
- Use tuples to perform swap in
Permutations
by @atifaziz in #925 - Fix exception thrown by current buffer index implementation by @atifaziz in #927
- Rewrite next permutation while-loop into a for-loop by @atifaziz in #926
- Consolidate error formatting between
AssertCount
andFold
by @atifaziz in #929 - Enable default compile items in test project by @atifaziz in #930
- Enable static analysis by @atifaziz in #924
- Additional tests for
TagFirstLast
by @Orace in #928 - Fix off-by-one index validation bug in
ToArrayByIndex
by @atifaziz in #932 - Decompose
TagFirstLast
implementation for speed by @Orace in #643 - Updated .NET Framework target to 4.6.2 by @atifaziz in #934
- Remove redundant type spec on obvious new expressions by @atifaziz in #935
- Use testing sequence in
Pairwise
test by @atifaziz in #937 - Declare & set modifier preference (IDE0040) severity by @atifaziz in #938
- Fix
Exclude
to not callMoveNext
past end of sequence by @Orace in #692 - Fix home when setting path during CI build by @atifaziz in #941
- Revert integration of T4 code generation into project file by @atifaziz in #940
- Simplify tests for count family of methods by @Arithmomaniac in #507
- Improve list optimisation in
CountDown
by @atifaziz in #942 - Enforce and address code style issues by @atifaziz in #944
- List-like union as struct to save allocation + virtual dispatch by @atifaziz in #472
- Fix collection-optimized paths to be at iteration-time by @atifaziz in #946
- Rename read-only list/collection field of
ListLike
/CollectionLike
by @atifaziz in #948 - Improve and Validate
TestingSequence
assertions by @viceroypenguin in #936 - Consolidate structural differences in
*Like
types by @atifaziz in #949 - Revoke (obsolete) disabling of parallel builds by @atifaziz in #950
- Run T4 templates if targets are out-of-date by @atifaziz in #953
- Discard unused expression value (IDE0058) by @atifaziz in #954
- Remove testing on .NET Core 3.1 that's no longer supported by @atifaziz in #955
- Dynamically discover/build glob for ECLint by @atifaziz in #957
- Separate build pre-/post-validation into relevant CI sections by @atifaziz in #952
- Fix some doc comments by @atifaziz in #958
- Make use of
message
inDebug.Assert
by @i3arnon in #959 - Use compiler-generated delegate caches in
ToDelimitedString
by @atifaziz in #966 - Merge sequence of async streams into single async stream by @atifaziz in #793 ⭐
- Update .NET SDK to 7.0.200 by @atifaziz in #967
- Fix collection-optimized paths for
Batch
by @viceroypenguin in #965 - Simplify
Fold
Implementation by @viceroypenguin in #961 - Fix inconsistencies in
Fold
doc by @atifaziz in #968 - Add read-me document to NuGet package by @atifaziz in #970
- Implement
Fold
entirely in its own terms by @atifaziz in #969 - Remove unused imports (in
ToDelimitedString
) by @atifaziz in #971 - Use compiler-generated delegate cache in
AssertCount
by @atifaziz in #972 - Validate package by @atifaziz in #974
- Produce deterministic CI builds by @atifaziz in #975