< Summary

Information
Class: DotNetApiDiff.Models.Configuration.ExclusionConfiguration
Assembly: DotNetApiDiff
File(s): /home/runner/work/dotnet-api-diff/dotnet-api-diff/src/DotNetApiDiff/Models/Configuration/ExclusionConfiguration.cs
Line coverage
90%
Covered lines: 37
Uncovered lines: 4
Coverable lines: 41
Total lines: 110
Line coverage: 90.2%
Branch coverage
100%
Covered branches: 10
Total branches: 10
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_ExcludedTypes()100%11100%
get_ExcludedMembers()100%11100%
get_ExcludedTypePatterns()100%11100%
get_ExcludedMemberPatterns()100%11100%
get_ExcludeCompilerGenerated()100%11100%
get_ExcludeObsolete()100%11100%
CreateDefault()100%11100%
IsValid()100%111078.94%
WildcardToRegex(...)100%11100%

File(s)

/home/runner/work/dotnet-api-diff/dotnet-api-diff/src/DotNetApiDiff/Models/Configuration/ExclusionConfiguration.cs

#LineLine coverage
 1// Copyright DotNet API Diff Project Contributors - SPDX Identifier: MIT
 2using System.Text.Json.Serialization;
 3using System.Text.RegularExpressions;
 4
 5namespace DotNetApiDiff.Models.Configuration;
 6
 7/// <summary>
 8/// Configuration for excluding types and members from API comparison
 9/// </summary>
 10public class ExclusionConfiguration
 11{
 12    /// <summary>
 13    /// List of fully qualified type names to exclude
 14    /// </summary>
 15    [JsonPropertyName("excludedTypes")]
 40516    public List<string> ExcludedTypes { get; set; } = new List<string>();
 17
 18    /// <summary>
 19    /// List of fully qualified member names to exclude
 20    /// </summary>
 21    [JsonPropertyName("excludedMembers")]
 39422    public List<string> ExcludedMembers { get; set; } = new List<string>();
 23
 24    /// <summary>
 25    /// List of type name patterns to exclude (supports wildcards * and ?)
 26    /// </summary>
 27    [JsonPropertyName("excludedTypePatterns")]
 43728    public List<string> ExcludedTypePatterns { get; set; } = new List<string>();
 29
 30    /// <summary>
 31    /// List of member name patterns to exclude (supports wildcards * and ?)
 32    /// </summary>
 33    [JsonPropertyName("excludedMemberPatterns")]
 43234    public List<string> ExcludedMemberPatterns { get; set; } = new List<string>();
 35
 36    /// <summary>
 37    /// Whether to exclude compiler-generated types and members
 38    /// </summary>
 39    [JsonPropertyName("excludeCompilerGenerated")]
 32640    public bool ExcludeCompilerGenerated { get; set; } = true;
 41
 42    /// <summary>
 43    /// Whether to exclude obsolete types and members
 44    /// </summary>
 45    [JsonPropertyName("excludeObsolete")]
 32646    public bool ExcludeObsolete { get; set; } = false;
 47
 48    /// <summary>
 49    /// Creates a default exclusion configuration
 50    /// </summary>
 51    /// <returns>A default exclusion configuration</returns>
 52    public static ExclusionConfiguration CreateDefault()
 8253    {
 8254        return new ExclusionConfiguration
 8255        {
 8256            ExcludedTypes = new List<string>(),
 8257            ExcludedMembers = new List<string>(),
 8258            ExcludedTypePatterns = new List<string>(),
 8259            ExcludedMemberPatterns = new List<string>(),
 8260            ExcludeCompilerGenerated = true,
 8261            ExcludeObsolete = false
 8262        };
 8263    }
 64
 65    /// <summary>
 66    /// Validates the exclusion configuration
 67    /// </summary>
 68    /// <returns>True if valid, false otherwise</returns>
 69    public bool IsValid()
 4170    {
 71        // Check for empty entries
 4172        if (ExcludedTypes.Any(string.IsNullOrWhiteSpace) ||
 4173            ExcludedMembers.Any(string.IsNullOrWhiteSpace) ||
 4174            ExcludedTypePatterns.Any(string.IsNullOrWhiteSpace) ||
 4175            ExcludedMemberPatterns.Any(string.IsNullOrWhiteSpace))
 1276        {
 1277            return false;
 78        }
 79
 80        // Validate patterns (should be valid wildcards)
 81        try
 2982        {
 19183            foreach (var pattern in ExcludedTypePatterns.Concat(ExcludedMemberPatterns))
 5284            {
 85                // Convert wildcard pattern to regex for validation
 5286                WildcardToRegex(pattern);
 5287            }
 2988        }
 089        catch (Exception ex)
 090        {
 91            // Log the exception details for debugging purposes
 092            Console.WriteLine($"Validation failed due to an exception: {ex.Message}");
 093            return false;
 94        }
 95
 2996        return true;
 4197    }
 98
 99    /// <summary>
 100    /// Converts a wildcard pattern to a regular expression
 101    /// </summary>
 102    /// <param name="pattern">The wildcard pattern</param>
 103    /// <returns>A regular expression pattern</returns>
 104    private static string WildcardToRegex(string pattern)
 52105    {
 52106        return "^" + Regex.Escape(pattern)
 52107                          .Replace("\\*", ".*")
 52108                          .Replace("\\?", ".") + "$";
 52109    }
 110}