forked from maroontress/StyleChecker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathByteOrderMarkConfig.cs
More file actions
73 lines (65 loc) · 2.1 KB
/
ByteOrderMarkConfig.cs
File metadata and controls
73 lines (65 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
namespace StyleChecker.Analyzers.Config;
using System.Collections.Generic;
using System.Linq;
using Maroontress.Oxbind;
using Maroontress.Roastery;
using StyleChecker.Analyzers.Cleaning.ByteOrderMark;
/// <summary>
/// The configuration data of ByteOrderMark analyzer.
/// </summary>
[ForElement(Analyzer.DiagnosticId, Namespace)]
public sealed class ByteOrderMarkConfig(
[ForAttribute("maxDepth")] BindResult<string>? maxDepthEvent,
[Multiple] IEnumerable<ByteOrderMarkConfig.File> files)
: AbstractConfig
{
/// <summary>
/// Initializes a new instance of the <see cref="ByteOrderMarkConfig"/>
/// class.
/// </summary>
[Ignored]
public ByteOrderMarkConfig()
: this(null, [])
{
}
private BindResult<string>? MaxDepthEvent { get; } = maxDepthEvent;
private IEnumerable<File> Files { get; } = files;
/// <summary>
/// Gets the maximum number of directory levels to search.
/// </summary>
/// <returns>
/// The maximum number of directory levels to search.
/// </returns>
public int GetMaxDepth() => ParseKit.ToIntValue(
MaxDepthEvent,
PathFinder.DefaultMaxDepth,
v => v > 0);
/// <summary>
/// Gets all the glob patterns.
/// </summary>
/// <returns>
/// All the glob patterns.
/// </returns>
public IEnumerable<string> GetGlobs()
=> Files.Select(e => e.Glob)
.FilterNonNullReference();
/// <inheritdoc/>
public override IEnumerable<WhereWhy> Validate()
=> ParseKit.ValidateInt(
MaxDepthEvent,
v => v > 0,
"invalid integer value of maxDepth attribute",
"non-positive integer value of maxDepth attribute");
/// <summary>
/// Represents the files that must not start with a BOM.
/// </summary>
[ForElement("files", Namespace)]
public sealed class File([ForAttribute("glob")] string? glob)
{
/// <summary>
/// Gets the glob pattern representing files that are disallowed to
/// start with a BOM.
/// </summary>
public string? Glob { get; } = glob;
}
}