diff --git a/README.md b/README.md index 246bb32..ab7118b 100644 --- a/README.md +++ b/README.md @@ -33,19 +33,18 @@ _**NOTE**_: The option `-p:PublishTrimmed=true` may produce some *warnings*. If ```sh USAGE: - scrl [path] [OPTIONS] + scrl [OPTIONS] ARGUMENTS: - [path] Starting directory (Default: .) + Starting directory (Default: .) OPTIONS: - DEFAULT - -h, --help Prints help information - -x, --extensions List of script extensions to search for - -d, --depth 3 Search depth - -e, --elevated Run with elevated privileges - -g, --group Group scripts by folder - -b, --brief Show brief information + -h, --help Prints help information + -x, --extensions Comma separated list of script extensions + -d, --depth Search depth + -e, --elevated Run with elevated privileges + -g, --group Group scripts by folder + -b, --brief Show brief information ``` [CLI]: https://docs.microsoft.com/en-us/dotnet/core/tools/ ".NET CLI Docs" diff --git a/src/Commands.cs b/src/Commands.cs index ed0b950..4be0a59 100644 --- a/src/Commands.cs +++ b/src/Commands.cs @@ -1,5 +1,5 @@ using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; + using Spectre.Console; using Spectre.Console.Cli; @@ -76,30 +76,27 @@ public sealed class RootCommand : AsyncCommand public sealed class RootCommandSettings : CommandSettings { - [Description("List of script extensions to search for")] - [CommandOption("-x|--extensions ")] - [SuppressMessage("Performance", "CA1819:Properties should not return arrays")] - public string[] Extensions { get; init; } = [".ps1", ".*sh", ".bat", ".cmd", ".nu"]; + [Description("Comma separated list of script extensions")] + [CommandOption("-x|--extensions")] + public string? Extensions { get; init; } [Description("Search depth")] [CommandOption("-d|--depth")] - [DefaultValue(3)] - public int Depth { get; init; } + public int Depth { get; init; } = 1; [Description("Run with elevated privileges")] [CommandOption("-e|--elevated")] - public bool Elevated { get; init; } + public bool Elevated { get; init; } = false; [Description("Group scripts by folder")] [CommandOption("-g|--group")] - public bool Group { get; init; } + public bool Group { get; init; } = false; [Description("Show brief information")] [CommandOption("-b|--brief")] - public bool Brief { get; init; } + public bool Brief { get; init; } = false; [Description("Starting directory (Default: .)")] - [CommandArgument(0, "[path]")] - [DefaultValue(".")] - public string Directory { get; init; } = string.Empty; -} + [CommandArgument(0, "")] + public string Directory { get; init; } = "."; +} \ No newline at end of file diff --git a/src/Program.cs b/src/Program.cs index 836c56b..f53f375 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -2,6 +2,5 @@ using ScriptLauncher; using Spectre.Console.Cli; var app = new CommandApp(); -app.Configure(static x => x.SetApplicationName("scrl")); - +app.Configure(x => x.SetApplicationName("scrl")); return app.Run(args); diff --git a/src/ScriptFinder.cs b/src/ScriptFinder.cs index e7040f4..14554bf 100644 --- a/src/ScriptFinder.cs +++ b/src/ScriptFinder.cs @@ -2,15 +2,23 @@ namespace ScriptLauncher; internal readonly struct ScriptFinder { - public IEnumerable Extensions { get; } + private static readonly string[] DefaultExtensions = new[] { ".ps1", ".*sh", ".bat", ".cmd", ".nu" }; + private static readonly char[] DefaultSeparators = new[] { ',', ' ' }; + + public string[] Extensions { get; } public string RootDirectory { get; } - private int Depth { get; } + public int Depth { get; } private readonly EnumerationOptions _options; - public ScriptFinder(IEnumerable extensions, string directory, int depth) + public ScriptFinder(string? extensions, string directory, int depth) { - Extensions = extensions.ToHashSet().Select(static x => $".{x.TrimStart('.')}"); + Extensions = + extensions + ?.Split(DefaultSeparators, StringSplitOptions.RemoveEmptyEntries) + .ToHashSet() + .Select(x => $".{x.TrimStart('.')}") + .ToArray() ?? DefaultExtensions; Depth = depth; RootDirectory = directory; @@ -28,7 +36,7 @@ internal readonly struct ScriptFinder try { var filenames = Directory.GetFiles(RootDirectory, $"*{extension}", _options); - return filenames.Select(static x => new FileInfo(x)); + return filenames.Select(x => new FileInfo(x)); } catch (UnauthorizedAccessException) { @@ -37,13 +45,13 @@ internal readonly struct ScriptFinder } public FileInfo[] GetScripts() => - Extensions.Select(GetScriptFilesWithExtension).SelectMany(static x => x).ToArray(); + Extensions.Select(GetScriptFilesWithExtension).SelectMany(x => x).ToArray(); public IDictionary GetScriptsByDirectory() => Extensions .Select(GetScriptFilesWithExtension) - .SelectMany(static x => x) - .GroupBy(static x => x.DirectoryName!) - .OrderBy(static x => x.Key) - .ToDictionary(static x => new DirectoryInfo(x.Key), static x => x.ToArray()); + .SelectMany(x => x) + .GroupBy(x => x.DirectoryName!) + .OrderBy(x => x.Key) + .ToDictionary(x => new DirectoryInfo(x.Key), x => x.ToArray()); } diff --git a/src/ScriptLauncher.csproj b/src/ScriptLauncher.csproj index 985e1e3..3bb83d8 100644 --- a/src/ScriptLauncher.csproj +++ b/src/ScriptLauncher.csproj @@ -6,7 +6,7 @@ enable enable All - 0.1.7 + 0.1.6 true Tool to find and exec shell scripts README.md @@ -14,8 +14,8 @@ - - + +