Skip to content

Commit d5cfca8

Browse files
committed
added uunified exclude option
1 parent 5064b84 commit d5cfca8

1 file changed

Lines changed: 35 additions & 3 deletions

File tree

src/CLI/CLI.cs

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ public sealed class LinecountCommand : RootCommand
4747
ArgumentHelpName = "files"
4848
};
4949

50+
public Option<string[]> excludeOption { get; } = new Option<string[]>("--exclude", "A list of files and directories to exclude.")
51+
{
52+
Arity = ArgumentArity.OneOrMore,
53+
AllowMultipleArgumentsPerToken = true,
54+
ArgumentHelpName = "paths"
55+
};
5056

5157

5258
public Argument<string> pathArgument =
@@ -62,6 +68,7 @@ public LinecountCommand() : base("a tool to count the lines of projects")
6268
AddOption(filterOption);
6369
AddOption(excludeDirectoriesOption);
6470
AddOption(excludeFilesOption);
71+
AddOption(excludeOption);
6572
AddOption(lineFilterOption);
6673
AddOption(exceptFilterOption);
6774
AddOption(exceptLineFilterOption);
@@ -79,16 +86,19 @@ async Task Execute(InvocationContext context)
7986
var exceptLineFilter = context.ParseResult.GetValueForOption(exceptLineFilterOption);
8087
var listFiles = context.ParseResult.GetValueForOption(listFilesOption);
8188
var format = context.ParseResult.GetValueForOption(formatOption);
82-
var excludeDirectories = context.ParseResult.GetValueForOption(excludeDirectoriesOption);
83-
var excludeFiles = context.ParseResult.GetValueForOption(excludeFilesOption);
89+
var excludeDirectoriesExplicit = context.ParseResult.GetValueForOption(excludeDirectoriesOption) ?? [];
90+
var excludeFilesExplicit = context.ParseResult.GetValueForOption(excludeFilesOption) ?? [];
91+
var excluded = context.ParseResult.GetValueForOption(excludeOption) ?? [];
8492
var path = context.ParseResult.GetValueForArgument(pathArgument);
8593

8694
LineCountData data = new LineCountData(filter, lineFilter, exceptFilter, exceptLineFilter)
8795
{
8896
ListFiles = listFiles
8997
};
9098

91-
var result = await LineCount.Run(path, data, excludeDirectories ?? [], excludeFiles ?? [], context.GetCancellationToken());
99+
var (excludeFiles, excludeDirectories) = DetermineExclusions(excluded, excludeFilesExplicit, excludeDirectoriesExplicit);
100+
101+
var result = await LineCount.Run(path, data, excludeDirectories, excludeFiles, context.GetCancellationToken());
92102

93103
if (listFiles)
94104
{
@@ -100,4 +110,26 @@ async Task Execute(InvocationContext context)
100110
error => Logger.LogError(error)
101111
);
102112
}
113+
114+
static (string[] excludeFiles, string[] excludeDirectories) DetermineExclusions(string[] excluded, string[] excludeFilesExplicit, string[] excludeDirectoriesExplicit)
115+
{
116+
List<string> excludedFileList = new List<string>(excluded.Length);
117+
List<string> excludedDirectoryList = new List<string>(excluded.Length);
118+
119+
foreach (string filePath in excluded)
120+
{
121+
if (Path.EndsInDirectorySeparator(filePath))
122+
{
123+
string directoryPath = Path.TrimEndingDirectorySeparator(filePath);
124+
excludedDirectoryList.Add(directoryPath);
125+
continue;
126+
}
127+
128+
excludedFileList.Add(filePath);
129+
}
130+
131+
string[] excludeDirectories = [..excludeDirectoriesExplicit, ..excludedDirectoryList];
132+
string[] excludeFiles = [.. excludeFilesExplicit, .. excludedFileList];
133+
return (excludeFiles, excludeDirectories);
134+
}
103135
}

0 commit comments

Comments
 (0)