@@ -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