Simple Issue Provider
This tutorial explains how to implement a simple issue provider using the BaseIssueProvider class from the Cake.Issue
addin.
Implementing issue provider¶
A concrete class inheriting from BaseIssueProvider needs to be implemented:
/// <summary>
/// My issue provider.
/// </summary>
/// <param name="log">The Cake log context.</param>
public class MyIssuesProvider(ICakeLog log) : BaseIssueProvider(log)
{
/// <inheritdoc />
public override string ProviderName => "MyIssuesProvider";
/// <inheritdoc />
protected override IEnumerable<IIssue> InternalReadIssues()
{
var result = new List<IIssue>();
// Implement issue provider logic here.
result.Add(
IssueBuilder
.NewIssue("Some message", this)
.WithPriority(IssuePriority.Warning)
.OfRule("My rule")
.Create());
return result;
}
}
Aliases¶
An alias for reading issues with the provider and a property alias for returning the provider type name should be defined:
/// <summary>
/// Contains functionality related to my issue provider.
/// </summary>
[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]
public static class MyIssueAliases
{
/// <summary>
/// Gets an instance of my issues provider using specified settings.
/// </summary>
/// <param name="context">The context.</param>
/// <returns>Instance of my issues provider.</returns>
/// <example>
/// <para>Read issues using my issues provider:</para>
/// <code>
/// <![CDATA[
/// var issues = ReadIssues(MyIssues());
/// ]]>
/// </code>
/// </example>
[CakeMethodAlias]
[CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]
public static IIssueProvider MyIssues(
this ICakeContext context)
{
context.NotNull();
return new MyIssuesProvider(context.Log);
}
/// <summary>
/// Gets the name of my issue provider.
/// This name can be used to identify issues based on the
/// <see cref="IIssue.ProviderType"/> property.
/// </summary>
/// <param name="context">The context.</param>
/// <returns>Name of my issue provider.</returns>
[CakePropertyAlias]
[CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]
public static string MyIssuesProviderTypeName(
this ICakeContext context)
{
context.NotNull();
return typeof(MyIssuesProvider).FullName;
}
}
/// <summary>
/// Contains functionality related to my issue provider.
/// </summary>
[CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)]
public static class MyIssueAliases
{
/// <summary>
/// Gets an instance of my issues provider using specified settings.
/// </summary>
/// <param name="context">The context.</param>
/// <returns>Instance of my issues provider.</returns>
/// <example>
/// <para>Read issues using my issues provider:</para>
/// <code>
/// <![CDATA[
/// var issues = ReadIssues(MyIssues());
/// ]]>
/// </code>
/// </example>
[CakeMethodAlias]
[CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]
public static IIssueProvider MyIssues(
this ICakeContext context)
{
context.NotNull();
return new MyIssuesProvider(context.Log);
}
/// <summary>
/// Gets the name of my issue provider.
/// This name can be used to identify issues based on the
/// <see cref="IIssue.ProviderType"/> property.
/// </summary>
/// <param name="context">The context.</param>
/// <returns>Name of my issue provider.</returns>
[CakePropertyAlias]
[CakeAliasCategory(IssuesAliasConstants.IssueProviderCakeAliasCategory)]
public static string MyIssuesProviderTypeName(
this ICakeContext context)
{
context.NotNull();
return typeof(MyIssuesProvider).FullName;
}
}