< Summary

Information
Class: NexusLabs.Needlr.Generators.CodeGen.RegistrationManifestCodeGenerator
Assembly: NexusLabs.Needlr.Generators
File(s): /home/runner/work/needlr/needlr/src/NexusLabs.Needlr.Generators/CodeGen/RegistrationManifestCodeGenerator.cs
Line coverage
100%
Covered lines: 27
Uncovered lines: 0
Coverable lines: 27
Total lines: 61
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
GenerateSource(...)100%11100%
AppendManifestLiteral(...)100%44100%

File(s)

/home/runner/work/needlr/needlr/src/NexusLabs.Needlr.Generators/CodeGen/RegistrationManifestCodeGenerator.cs

#LineLine coverage
 1using System;
 2using System.Text;
 3
 4using NexusLabs.Needlr.Generators.Export;
 5using NexusLabs.Needlr.Generators.Models;
 6
 7namespace NexusLabs.Needlr.Generators.CodeGen;
 8
 9/// <summary>
 10/// Emits the analyzer-readable source-generated registration manifest.
 11/// </summary>
 12internal static class RegistrationManifestCodeGenerator
 13{
 14    private const int ManifestLiteralChunkLength = 2048;
 15
 16    internal const string AssemblyMetadataKey =
 17        "NexusLabs.Needlr.RegistrationManifest";
 18
 19    internal static string GenerateSource(
 20        GeneratedRegistrationPlan plan,
 21        BreadcrumbWriter breadcrumbs)
 22    {
 1023        var builder = new StringBuilder();
 1024        var json = RegistrationManifestSerializer.Serialize(plan);
 25
 1026        breadcrumbs.WriteFileHeader(
 1027            builder,
 1028            plan.AssemblyName,
 1029            "Needlr Analyzer-Readable Registration Manifest");
 1030        builder.AppendLine("#nullable enable");
 1031        builder.AppendLine();
 1032        builder.AppendLine(
 1033            "[assembly: global::System.Reflection.AssemblyMetadataAttribute(");
 1034        builder.AppendLine(
 1035            $"    \"{AssemblyMetadataKey}\",");
 1036        AppendManifestLiteral(builder, json);
 37
 1038        return builder.ToString();
 39    }
 40
 41    private static void AppendManifestLiteral(
 42        StringBuilder builder,
 43        string json)
 44    {
 4445        for (var offset = 0; offset < json.Length; offset += ManifestLiteralChunkLength)
 46        {
 1247            var length = Math.Min(
 1248                ManifestLiteralChunkLength,
 1249                json.Length - offset);
 1250            var chunk = json.Substring(offset, length);
 51
 1252            builder.Append("    \"");
 1253            builder.Append(GeneratorHelpers.EscapeStringLiteral(chunk));
 1254            builder.Append('"');
 1255            builder.AppendLine(
 1256                offset + length == json.Length
 1257                    ? ")]"
 1258                    : " +");
 59        }
 1060    }
 61}