mirror of
https://github.com/chylex/.NET-Community-Toolkit.git
synced 2025-04-17 23:15:45 +02:00
51 lines
2.3 KiB
C#
51 lines
2.3 KiB
C#
// Licensed to the .NET Foundation under one or more agreements.
|
|
// The .NET Foundation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
// This file is ported and adapted from ComputeSharp (Sergio0694/ComputeSharp),
|
|
// more info in ThirdPartyNotices.txt in the root of the project.
|
|
|
|
using System.Collections.Immutable;
|
|
using System.Linq;
|
|
using Microsoft.CodeAnalysis;
|
|
|
|
namespace CommunityToolkit.Mvvm.SourceGenerators.Diagnostics;
|
|
|
|
/// <summary>
|
|
/// Extension methods for <see cref="GeneratorExecutionContext"/>, specifically for reporting diagnostics.
|
|
/// </summary>
|
|
internal static class DiagnosticExtensions
|
|
{
|
|
/// <summary>
|
|
/// Adds a new diagnostics to the target builder.
|
|
/// </summary>
|
|
/// <param name="diagnostics">The collection of produced <see cref="Diagnostic"/> instances.</param>
|
|
/// <param name="descriptor">The input <see cref="DiagnosticDescriptor"/> for the diagnostics to create.</param>
|
|
/// <param name="symbol">The source <see cref="ISymbol"/> to attach the diagnostics to.</param>
|
|
/// <param name="args">The optional arguments for the formatted message to include.</param>
|
|
public static void Add(
|
|
this ImmutableArray<Diagnostic>.Builder diagnostics,
|
|
DiagnosticDescriptor descriptor,
|
|
ISymbol symbol,
|
|
params object[] args)
|
|
{
|
|
diagnostics.Add(Diagnostic.Create(descriptor, symbol.Locations.FirstOrDefault(), args));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Registers an output node into an <see cref="IncrementalGeneratorInitializationContext"/> to output diagnostics.
|
|
/// </summary>
|
|
/// <param name="context">The input <see cref="IncrementalGeneratorInitializationContext"/> instance.</param>
|
|
/// <param name="diagnostics">The input <see cref="IncrementalValuesProvider{TValues}"/> sequence of diagnostics.</param>
|
|
public static void ReportDiagnostics(this IncrementalGeneratorInitializationContext context, IncrementalValuesProvider<ImmutableArray<Diagnostic>> diagnostics)
|
|
{
|
|
context.RegisterSourceOutput(diagnostics, static (context, diagnostics) =>
|
|
{
|
|
foreach (Diagnostic diagnostic in diagnostics)
|
|
{
|
|
context.ReportDiagnostic(diagnostic);
|
|
}
|
|
});
|
|
}
|
|
}
|