< Summary

Information
Class: NexusLabs.Needlr.Generators.RecordConstructorOverloadGenerator
Assembly: NexusLabs.Needlr.Generators
File(s): /_work/nick-alienware-needlr-1-1784953859-3e8997/needlr/needlr/src/NexusLabs.Needlr.Generators/RecordConstructorOverloadGenerator.cs
Line coverage
100%
Covered lines: 50
Uncovered lines: 0
Coverable lines: 50
Total lines: 76
Line coverage: 100%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Initialize(...)50%22100%

File(s)

/_work/nick-alienware-needlr-1-1784953859-3e8997/needlr/needlr/src/NexusLabs.Needlr.Generators/RecordConstructorOverloadGenerator.cs

#LineLine coverage
 1using System.Text;
 2
 3using Microsoft.CodeAnalysis;
 4using Microsoft.CodeAnalysis.Text;
 5
 6using NexusLabs.Needlr.Generators.CodeGen;
 7using NexusLabs.Needlr.Generators.Models;
 8
 9namespace NexusLabs.Needlr.Generators;
 10
 11/// <summary>
 12/// Incremental source generator that emits one additional public forwarding
 13/// constructor for each eligible positional record.
 14/// </summary>
 15[Generator(LanguageNames.CSharp)]
 16public sealed class RecordConstructorOverloadGenerator : IIncrementalGenerator
 17{
 18    public void Initialize(IncrementalGeneratorInitializationContext context)
 19    {
 1720        var candidateModels = context.SyntaxProvider.CreateSyntaxProvider(
 1721                predicate: static (node, _) =>
 70122                    RecordConstructorOverloadDiscoveryHelper
 70123                        .IsCandidateRecordDeclaration(node),
 1724                transform: static (generatorContext, _) =>
 2325                    RecordConstructorOverloadDiscoveryHelper
 2326                        .TryCreateCanonicalModel(generatorContext))
 1727            .WithTrackingName(
 1728                RecordConstructorOverloadTrackingNames.Candidates);
 29
 1730        var models = candidateModels
 2131            .Where(static model => model is not null)
 1632            .Select(static (model, _) => model!.Value)
 1733            .WithTrackingName(RecordConstructorOverloadTrackingNames.Models);
 34
 1735        var assemblyName = context.CompilationProvider
 1736            .Select(static (compilation, _) =>
 1937                compilation.AssemblyName ?? "Generated")
 1738            .WithTrackingName(
 1739                RecordConstructorOverloadTrackingNames.AssemblyName);
 40
 1741        var breadcrumbLevel = context.AnalyzerConfigOptionsProvider
 1742            .Select(static (options, _) =>
 1743                TypeRegistryGenerator.GetBreadcrumbLevel(options))
 1744            .WithTrackingName(
 1745                RecordConstructorOverloadTrackingNames.BreadcrumbLevel);
 46
 1747        var emitContext = assemblyName
 1748            .Combine(breadcrumbLevel)
 1749            .Select(static (pair, _) =>
 1750                new RecordConstructorOverloadEmitContext(
 1751                    pair.Left,
 1752                    pair.Right))
 1753            .WithTrackingName(
 1754                RecordConstructorOverloadTrackingNames.EmitContext);
 55
 1756        var output = models
 1757            .Combine(emitContext)
 1758            .WithTrackingName(
 1759                RecordConstructorOverloadTrackingNames.Output);
 60
 1761        context.RegisterSourceOutput(output, static (sourceContext, source) =>
 1762        {
 1663            var (model, modelContext) = source;
 1664            var breadcrumbs =
 1665                new BreadcrumbWriter(modelContext.BreadcrumbLevel);
 1666            var generatedSource =
 1667                RecordConstructorOverloadCodeGenerator.GenerateSource(
 1668                    model,
 1669                    modelContext.AssemblyName,
 1670                    breadcrumbs);
 1671            sourceContext.AddSource(
 1672                RecordConstructorOverloadCodeGenerator.BuildHintName(model),
 1673                SourceText.From(generatedSource, Encoding.UTF8));
 3374        });
 1775    }
 76}