< Summary

Information
Class: NexusLabs.Needlr.Injection.AssemblyOrdering.AssemblyOrder
Assembly: NexusLabs.Needlr.Injection
File(s): /home/runner/work/needlr/needlr/src/NexusLabs.Needlr.Injection/AssemblyOrdering/AssemblyOrder.cs
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 56
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Create()100%11100%
Create(...)100%11100%
LibTestEntry()100%11100%
TestsLast()100%11100%
Alphabetical()100%11100%

File(s)

/home/runner/work/needlr/needlr/src/NexusLabs.Needlr.Injection/AssemblyOrdering/AssemblyOrder.cs

#LineLine coverage
 1namespace NexusLabs.Needlr.Injection.AssemblyOrdering;
 2
 3/// <summary>
 4/// Factory for creating assembly ordering configurations.
 5/// </summary>
 6public static class AssemblyOrder
 7{
 8    /// <summary>
 9    /// Creates a new assembly order builder.
 10    /// </summary>
 11    /// <returns>A new builder instance.</returns>
 1412    public static AssemblyOrderBuilder Create() => new();
 13
 14    /// <summary>
 15    /// Creates an ordering configuration from a builder action.
 16    /// </summary>
 17    /// <param name="configure">Action to configure the ordering rules.</param>
 18    /// <returns>The configured builder.</returns>
 19    public static AssemblyOrderBuilder Create(Action<AssemblyOrderBuilder> configure)
 20    {
 221        ArgumentNullException.ThrowIfNull(configure);
 122        var builder = new AssemblyOrderBuilder();
 123        configure(builder);
 124        return builder;
 25    }
 26
 27    /// <summary>
 28    /// Creates a preset ordering: libraries first, then executables, tests last.
 29    /// Uses file location to distinguish DLLs from EXEs.
 30    /// </summary>
 31    /// <returns>A builder configured with lib-test-entry ordering.</returns>
 32    public static AssemblyOrderBuilder LibTestEntry() =>
 533        Create()
 534            .By(a => a.Location.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)
 535                     && !a.Name.Contains("Tests", StringComparison.OrdinalIgnoreCase))
 536            .ThenBy(a => a.Location.EndsWith(".exe", StringComparison.OrdinalIgnoreCase))
 537            .ThenBy(a => a.Name.Contains("Tests", StringComparison.OrdinalIgnoreCase));
 38
 39    /// <summary>
 40    /// Creates a preset ordering: non-test assemblies first, tests last.
 41    /// Use this for source-gen scenarios where only assembly names are available.
 42    /// </summary>
 43    /// <returns>A builder configured with tests-last ordering by name.</returns>
 44    public static AssemblyOrderBuilder TestsLast() =>
 645        Create()
 646            .By(a => !a.Name.Contains("Tests", StringComparison.OrdinalIgnoreCase))
 647            .ThenBy(a => a.Name.Contains("Tests", StringComparison.OrdinalIgnoreCase));
 48
 49    /// <summary>
 50    /// Creates a preset ordering: alphabetical by name.
 51    /// </summary>
 52    /// <returns>A builder configured with alphabetical ordering.</returns>
 53    public static AssemblyOrderBuilder Alphabetical() =>
 254        Create()
 255            .By(a => true); // All assemblies match, sorted alphabetically within tier
 56}