diff --git a/src/Confix.Tool/src/Confix.Library/Common/Pipelines/PipelineExecutor.cs b/src/Confix.Tool/src/Confix.Library/Common/Pipelines/PipelineExecutor.cs index d4dda8f6..b1d7fa69 100644 --- a/src/Confix.Tool/src/Confix.Library/Common/Pipelines/PipelineExecutor.cs +++ b/src/Confix.Tool/src/Confix.Library/Common/Pipelines/PipelineExecutor.cs @@ -90,9 +90,14 @@ public async Task ExecuteAsync(CancellationToken cancellationToken) Services = _services }; - await _pipeline(context); - - await status.StopAsync(); + try + { + await _pipeline(context); + } + finally + { + await status.StopAsync(); + } return context.ExitCode; } @@ -104,9 +109,10 @@ public async Task ExecuteAsync(CancellationToken cancellationToken) public ValueTask PauseAsync(CancellationToken cancellationToken) => ValueTask.FromResult(this); + public ValueTask StopAsync() => ValueTask.CompletedTask; /// public ValueTask DisposeAsync() => ValueTask.CompletedTask; -} \ No newline at end of file +} diff --git a/src/Confix.Tool/src/Confix.Library/ConfigurationAdapter/ConfigurationAdapterMiddleware.cs b/src/Confix.Tool/src/Confix.Library/ConfigurationAdapter/ConfigurationAdapterMiddleware.cs index ddf5d14d..498a5dfd 100644 --- a/src/Confix.Tool/src/Confix.Library/ConfigurationAdapter/ConfigurationAdapterMiddleware.cs +++ b/src/Confix.Tool/src/Confix.Library/ConfigurationAdapter/ConfigurationAdapterMiddleware.cs @@ -22,8 +22,8 @@ public async Task InvokeAsync(IMiddlewareContext context, MiddlewareDelegate nex var configuration = context.Features.Get(); if (!configuration.TryGetSolution(out var solutionFile)) { - context.Logger.NoSolutionFileFound(); - throw new ExitException(); + throw new ExitException( + "No solution file found, could not load VSCode Settings. Please make sure that the current directory is a Confix solution."); } await next(context); @@ -45,15 +45,6 @@ public async Task InvokeAsync(IMiddlewareContext context, MiddlewareDelegate nex } } -file static class Logs -{ - public static void NoSolutionFileFound(this IConsoleLogger logger) - { - logger.Error( - "No solution file found, could not load VSCode Settings. Please make sure that the current directory is a Confix solution."); - } -} - file static class Extensions { public static bool TryGetSolution( diff --git a/src/Confix.Tool/src/Confix.Library/ConfigurationFile/AppSettings/DotnetConfigurationFileProvider.cs b/src/Confix.Tool/src/Confix.Library/ConfigurationFile/AppSettings/DotnetConfigurationFileProvider.cs index 7adfd8af..9d12b253 100644 --- a/src/Confix.Tool/src/Confix.Library/ConfigurationFile/AppSettings/DotnetConfigurationFileProvider.cs +++ b/src/Confix.Tool/src/Confix.Library/ConfigurationFile/AppSettings/DotnetConfigurationFileProvider.cs @@ -20,9 +20,7 @@ public IReadOnlyList GetConfigurationFiles(IConfigurationFile var configuration = AppSettingsConfigurationFileProviderConfiguration.Parse(context.Definition.Value); - var input = context.Project.Directory!.FindInPath(FileNames.AppSettings, false); - - if (input is null) + if (context.Project.Directory?.FindInPath(FileNames.AppSettings, false) is not { } input) { return Array.Empty(); } diff --git a/src/Confix.Tool/src/Confix.Library/ConfigurationFile/Inline/InlineConfigurationFileProvider.cs b/src/Confix.Tool/src/Confix.Library/ConfigurationFile/Inline/InlineConfigurationFileProvider.cs index 21716a72..28241c2b 100644 --- a/src/Confix.Tool/src/Confix.Library/ConfigurationFile/Inline/InlineConfigurationFileProvider.cs +++ b/src/Confix.Tool/src/Confix.Library/ConfigurationFile/Inline/InlineConfigurationFileProvider.cs @@ -10,11 +10,16 @@ public sealed class InlineConfigurationFileProvider : IConfigurationFileProvider public IReadOnlyList GetConfigurationFiles(IConfigurationFileContext context) { - var files = new List(); - var path = context.Definition.Value.ExpectValue(); - foreach (var file in context.Project.Directory!.FindAllInPath(path, false)) + if (context.Project.Directory is not { } directory) + { + return Array.Empty(); + } + + var files = new List(); + + foreach (var file in directory.FindAllInPath(path, false)) { context.Logger.FoundAInlineConfigurationFile(file); diff --git a/src/Confix.Tool/src/Confix.Library/Entities/Component/Providers/DotNet/DotnetPackageComponentProvider.cs b/src/Confix.Tool/src/Confix.Library/Entities/Component/Providers/DotNet/DotnetPackageComponentProvider.cs index 0296554d..fdc24c46 100644 --- a/src/Confix.Tool/src/Confix.Library/Entities/Component/Providers/DotNet/DotnetPackageComponentProvider.cs +++ b/src/Confix.Tool/src/Confix.Library/Entities/Component/Providers/DotNet/DotnetPackageComponentProvider.cs @@ -35,8 +35,8 @@ public async Task ExecuteAsync(IComponentProviderContext context) var buildResult = await DotnetHelpers.BuildProjectAsync(csproj, context.CancellationToken); if (!buildResult.Succeeded) { - context.Logger.DotnetProjectBuildFailed(buildResult.Output); - throw new ExitException(); + var output = buildResult.Output.EscapeMarkup(); + throw new ExitException($"Failed to build project:\n{output}"); } var projectAssembly = DotnetHelpers.GetAssemblyFileFromCsproj(csproj); @@ -277,9 +277,4 @@ public static void ParsingComponent( logger.Debug( $"Parsing component from resource '{resourceName}' in assembly '{assembly.FullName}'"); } - - public static void DotnetProjectBuildFailed(this IConsoleLogger logger, string output) - { - logger.Error($"Failed to build project:\n{output.EscapeMarkup()}"); - } } diff --git a/src/Confix.Tool/src/Confix.Library/Pipelines/Component/ComponentInitPipeline.cs b/src/Confix.Tool/src/Confix.Library/Pipelines/Component/ComponentInitPipeline.cs index 473c3b65..878a61ca 100644 --- a/src/Confix.Tool/src/Confix.Library/Pipelines/Component/ComponentInitPipeline.cs +++ b/src/Confix.Tool/src/Confix.Library/Pipelines/Component/ComponentInitPipeline.cs @@ -35,8 +35,9 @@ private static async Task InvokeAsync(IMiddlewareContext context) if (componentFile.Exists) { - context.Logger.LogComponentAlreadyExists(componentFile); - throw new ExitException(); + var link = componentFile.Directory?.Name.ToLink(componentFile); + throw new ExitException( + $"Component already exists:{link} [dim]{componentFile.FullName}[/]"); } await File @@ -47,14 +48,6 @@ await File file static class Log { - public static void LogComponentAlreadyExists( - this IConsoleLogger console, - FileInfo info) - { - console.Error( - $"Component already exists:{info.Directory?.Name.ToLink(info)} [dim]{info.FullName}[/]"); - } - public static void LogComponentCreated( this IConsoleLogger console, FileInfo info) @@ -62,4 +55,4 @@ public static void LogComponentCreated( console.Information( $"Component created:{info.Directory?.Name.ToLink(info)} [dim]{info.FullName}[/]"); } -} \ No newline at end of file +} diff --git a/src/Confix.Tool/src/Confix.Library/Pipelines/ComponentBuildPipeline.cs b/src/Confix.Tool/src/Confix.Library/Pipelines/ComponentBuildPipeline.cs index b021a0d0..8461a8f4 100644 --- a/src/Confix.Tool/src/Confix.Library/Pipelines/ComponentBuildPipeline.cs +++ b/src/Confix.Tool/src/Confix.Library/Pipelines/ComponentBuildPipeline.cs @@ -28,9 +28,9 @@ private static async Task InvokeAsync(IMiddlewareContext context) switch (configuration.Scope) { case ConfigurationScope.None: - context.Logger - .LogNoConfixContextWasFound(context.Execution.CurrentDirectory.FullName); - throw new ExitException(); + var directory = context.Execution.CurrentDirectory.FullName; + throw new ExitException( + $"No confix context was found in the executing directory: [yellow]{directory}[/]"); case ConfigurationScope.Component: { @@ -70,14 +70,3 @@ private static async Task InvokeAsync(IMiddlewareContext context) } } } - -file static class Log -{ - public static void LogNoConfixContextWasFound( - this IConsoleLogger console, - string directory) - { - console.Error( - $"No confix context was found in the executing directory: [yellow]{directory}[/]"); - } -} diff --git a/src/Confix.Tool/src/Confix.Library/Pipelines/ReloadCommandPipeline.cs b/src/Confix.Tool/src/Confix.Library/Pipelines/ReloadCommandPipeline.cs index 1e8162af..5cfa599a 100644 --- a/src/Confix.Tool/src/Confix.Library/Pipelines/ReloadCommandPipeline.cs +++ b/src/Confix.Tool/src/Confix.Library/Pipelines/ReloadCommandPipeline.cs @@ -26,13 +26,13 @@ private static async Task InvokeAsync(IMiddlewareContext context) switch (configuration.Scope) { case ConfigurationScope.None: - context.Logger - .LogNoConfixContextWasFound(context.Execution.CurrentDirectory.FullName); - throw new ExitException(); + var directory = context.Execution.CurrentDirectory.FullName; + throw new ExitException( + $"No confix context was found in the executing directory: [yellow]{directory}[/]"); case ConfigurationScope.Component: - App.Log.ComponentsDoNotSupportReload(); - throw new ExitException(); + throw new ExitException( + "Components do not support reload. `reload` only works for projects and solutions."); case ConfigurationScope.Project: { @@ -63,20 +63,3 @@ private static async Task InvokeAsync(IMiddlewareContext context) } } } - -file static class Log -{ - public static void LogNoConfixContextWasFound( - this IConsoleLogger console, - string directory) - { - console.Error( - $"No confix context was found in the executing directory: [yellow]{directory}[/]"); - } - - public static void ComponentsDoNotSupportReload(this IConsoleLogger console) - { - console.Error( - "Components do not support reload. `reload` only works for projects and solutions."); - } -} diff --git a/src/Confix.Tool/src/Confix.Library/Pipelines/Solution/SolutionInitPipeline.cs b/src/Confix.Tool/src/Confix.Library/Pipelines/Solution/SolutionInitPipeline.cs index f5c81cff..700ebc64 100644 --- a/src/Confix.Tool/src/Confix.Library/Pipelines/Solution/SolutionInitPipeline.cs +++ b/src/Confix.Tool/src/Confix.Library/Pipelines/Solution/SolutionInitPipeline.cs @@ -22,8 +22,9 @@ private static async Task InvokeAsync(IMiddlewareContext context) if (solutionFile.Exists) { - context.Logger.LogSolutionAlreadyExists(solutionFile); - throw new ExitException(); + var info = solutionFile.Directory?.Name.ToLink(solutionFile); + throw new ExitException( + $"Solution already exists: {info} [dim]{solutionFile.FullName}[/]"); } await File.WriteAllTextAsync(solutionFile.FullName, "{}"); @@ -33,14 +34,6 @@ private static async Task InvokeAsync(IMiddlewareContext context) file static class Log { - public static void LogSolutionAlreadyExists( - this IConsoleLogger console, - FileInfo info) - { - console.Error( - $"Solution already exists: {info.Directory?.Name.ToLink(info)} [dim]{info.FullName}[/]"); - } - public static void LogSolutionCreated( this IConsoleLogger console, FileInfo info) diff --git a/src/Confix.Tool/src/Confix.Library/Pipelines/ValidateCommandPipeline.cs b/src/Confix.Tool/src/Confix.Library/Pipelines/ValidateCommandPipeline.cs index 087d58fc..11760851 100644 --- a/src/Confix.Tool/src/Confix.Library/Pipelines/ValidateCommandPipeline.cs +++ b/src/Confix.Tool/src/Confix.Library/Pipelines/ValidateCommandPipeline.cs @@ -26,13 +26,13 @@ private static async Task InvokeAsync(IMiddlewareContext context) switch (configuration.Scope) { case ConfigurationScope.None: - context.Logger - .LogNoConfixContextWasFound(context.Execution.CurrentDirectory.FullName); - throw new ExitException(); + var directory = context.Execution.CurrentDirectory.FullName; + throw new ExitException( + $"No confix context was found in the executing directory: [yellow]{directory}[/]"); case ConfigurationScope.Component: - App.Log.ComponentsDoNotSupportValidate(); - throw new ExitException(); + throw new ExitException( + "Components do not support reload. `reload` only works for projects and solutions."); case ConfigurationScope.Project: { @@ -63,20 +63,3 @@ private static async Task InvokeAsync(IMiddlewareContext context) } } } - -file static class Log -{ - public static void LogNoConfixContextWasFound( - this IConsoleLogger console, - string directory) - { - console.Error( - $"No confix context was found in the executing directory: [yellow]{directory}[/]"); - } - - public static void ComponentsDoNotSupportValidate(this IConsoleLogger console) - { - console.Error( - "Components do not support reload. `reload` only works for projects and solutions."); - } -} diff --git a/src/Confix.Tool/src/Confix.Library/Utilities/Console/ExitException.cs b/src/Confix.Tool/src/Confix.Library/Utilities/Console/ExitException.cs index bf30699f..78bfcbf1 100644 --- a/src/Confix.Tool/src/Confix.Library/Utilities/Console/ExitException.cs +++ b/src/Confix.Tool/src/Confix.Library/Utilities/Console/ExitException.cs @@ -2,10 +2,6 @@ namespace Confix.Tool; internal sealed class ExitException : Exception { - public ExitException() - { - } - public ExitException(string message) : base(message) { diff --git a/src/Confix.Tool/src/Confix.Library/Utilities/FileSystem/DirectoryExtensions.cs b/src/Confix.Tool/src/Confix.Library/Utilities/FileSystem/DirectoryExtensions.cs index 5c343a0c..a9dae901 100644 --- a/src/Confix.Tool/src/Confix.Library/Utilities/FileSystem/DirectoryExtensions.cs +++ b/src/Confix.Tool/src/Confix.Library/Utilities/FileSystem/DirectoryExtensions.cs @@ -3,30 +3,39 @@ namespace Confix.Tool.Commands.Temp; public static class DirectoryExtensions { public static FileInfo? FindInPath( - this DirectoryInfo directory, + this DirectoryInfo? directory, string fileName, bool recursive = true) - => Directory - .EnumerateFiles( - directory.FullName, - fileName, - recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly) - .Select(x => new FileInfo(x)) - .FirstOrDefault(); + => directory is not null + ? Directory + .EnumerateFiles( + directory.FullName, + fileName, + recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly) + .Select(x => new FileInfo(x)) + .FirstOrDefault() + : null; public static IEnumerable FindAllInPath( - this DirectoryInfo directory, + this DirectoryInfo? directory, string pattern, bool recursive = true) - => Directory - .EnumerateFiles( - directory.FullName, - pattern, - recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly) - .Select(x => new FileInfo(x)); + => directory is not null + ? Directory + .EnumerateFiles( + directory.FullName, + pattern, + recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly) + .Select(x => new FileInfo(x)) + : Array.Empty(); - public static string? FindInTree(this DirectoryInfo directory, string fileName) + public static string? FindInTree(this DirectoryInfo? directory, string fileName) { + if (directory is null) + { + return null; + } + if (!directory.Exists) { throw new DirectoryNotFoundException($"The directory '{directory}' was not found.");