diff --git a/CliFx.Generators/Binding/CommandInputSymbol.cs b/CliFx.Generators/Binding/CommandInputSymbol.cs index 0349c5f1..b35279c8 100644 --- a/CliFx.Generators/Binding/CommandInputSymbol.cs +++ b/CliFx.Generators/Binding/CommandInputSymbol.cs @@ -2,6 +2,7 @@ using System.Linq; using CliFx.Generators.Utils.Extensions; using Microsoft.CodeAnalysis; +using PowerKit.Extensions; namespace CliFx.Generators.Binding; diff --git a/CliFx.Generators/Binding/CommandOptionSymbol.cs b/CliFx.Generators/Binding/CommandOptionSymbol.cs index 978ebd0b..4b0e15c9 100644 --- a/CliFx.Generators/Binding/CommandOptionSymbol.cs +++ b/CliFx.Generators/Binding/CommandOptionSymbol.cs @@ -5,6 +5,7 @@ using CliFx.Generators.Utils; using CliFx.Generators.Utils.Extensions; using Microsoft.CodeAnalysis; +using PowerKit.Extensions; namespace CliFx.Generators.Binding; diff --git a/CliFx.Generators/Binding/CommandParameterSymbol.cs b/CliFx.Generators/Binding/CommandParameterSymbol.cs index 47216c11..ccab9f65 100644 --- a/CliFx.Generators/Binding/CommandParameterSymbol.cs +++ b/CliFx.Generators/Binding/CommandParameterSymbol.cs @@ -5,6 +5,7 @@ using CliFx.Generators.Utils; using CliFx.Generators.Utils.Extensions; using Microsoft.CodeAnalysis; +using PowerKit.Extensions; namespace CliFx.Generators.Binding; diff --git a/CliFx.Generators/CliFx.Generators.csproj b/CliFx.Generators/CliFx.Generators.csproj index c6cc4b2c..27b4051b 100644 --- a/CliFx.Generators/CliFx.Generators.csproj +++ b/CliFx.Generators/CliFx.Generators.csproj @@ -15,5 +15,6 @@ + diff --git a/CliFx.Generators/CommandDescriptorGenerator.cs b/CliFx.Generators/CommandDescriptorGenerator.cs index 0c0b910c..eae01069 100644 --- a/CliFx.Generators/CommandDescriptorGenerator.cs +++ b/CliFx.Generators/CommandDescriptorGenerator.cs @@ -9,6 +9,7 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Text; +using PowerKit.Extensions; namespace CliFx.Generators; diff --git a/CliFx.Generators/Emitters/CommandDescriptor.cs b/CliFx.Generators/Emitters/CommandDescriptor.cs index 0cda9ad5..8f14af35 100644 --- a/CliFx.Generators/Emitters/CommandDescriptor.cs +++ b/CliFx.Generators/Emitters/CommandDescriptor.cs @@ -5,6 +5,7 @@ using CliFx.Generators.Utils; using CliFx.Generators.Utils.Extensions; using Microsoft.CodeAnalysis; +using PowerKit.Extensions; namespace CliFx.Generators.Emitters; diff --git a/CliFx.Generators/Emitters/CommandRegistration.cs b/CliFx.Generators/Emitters/CommandRegistration.cs index 34ad8351..6f27180d 100644 --- a/CliFx.Generators/Emitters/CommandRegistration.cs +++ b/CliFx.Generators/Emitters/CommandRegistration.cs @@ -5,6 +5,7 @@ using CliFx.Generators.Utils; using CliFx.Generators.Utils.Extensions; using Microsoft.CodeAnalysis; +using PowerKit.Extensions; namespace CliFx.Generators.Emitters; diff --git a/CliFx.Generators/Utils/Extensions/CollectionExtensions.cs b/CliFx.Generators/Utils/Extensions/CollectionExtensions.cs deleted file mode 100644 index b3a5b39d..00000000 --- a/CliFx.Generators/Utils/Extensions/CollectionExtensions.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections.Generic; - -namespace CliFx.Generators.Utils.Extensions; - -internal static class CollectionExtensions -{ - extension(IEnumerable source) - { - public IEnumerable WhereNotNull() - { - foreach (var item in source) - { - if (item is not null) - yield return item; - } - } - } -} diff --git a/CliFx.Generators/Utils/Extensions/StringExtensions.cs b/CliFx.Generators/Utils/Extensions/StringExtensions.cs deleted file mode 100644 index 698353db..00000000 --- a/CliFx.Generators/Utils/Extensions/StringExtensions.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Text; - -namespace CliFx.Generators.Utils.Extensions; - -internal static class StringExtensions -{ - extension(string str) - { - public string? NullIfWhiteSpace() => !string.IsNullOrWhiteSpace(str) ? str : null; - - public string ToKebabCase() - { - var buffer = new StringBuilder(); - var lastCh = default(char?); - - foreach (var ch in str) - { - if (char.IsUpper(ch)) - { - if (lastCh is not null && !char.IsUpper(lastCh.Value) && lastCh.Value != '-') - buffer.Append('-'); - - buffer.Append(char.ToLowerInvariant(ch)); - } - else - { - buffer.Append(ch); - } - - lastCh = ch; - } - - return buffer.ToString(); - } - } -} diff --git a/CliFx.Tests/CliFx.Tests.csproj b/CliFx.Tests/CliFx.Tests.csproj index ccf71b26..0858bac6 100644 --- a/CliFx.Tests/CliFx.Tests.csproj +++ b/CliFx.Tests/CliFx.Tests.csproj @@ -18,6 +18,7 @@ + diff --git a/CliFx.Tests/Utils/CommandCompiler.cs b/CliFx.Tests/Utils/CommandCompiler.cs index b8c2de3a..3d4560db 100644 --- a/CliFx.Tests/Utils/CommandCompiler.cs +++ b/CliFx.Tests/Utils/CommandCompiler.cs @@ -6,10 +6,10 @@ using Basic.Reference.Assemblies; using CliFx.Binding; using CliFx.Generators; -using CliFx.Tests.Utils.Extensions; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Text; +using PowerKit.Extensions; namespace CliFx.Tests.Utils; diff --git a/CliFx.Tests/Utils/Extensions/CollectionExtensions.cs b/CliFx.Tests/Utils/Extensions/CollectionExtensions.cs deleted file mode 100644 index e1abd06f..00000000 --- a/CliFx.Tests/Utils/Extensions/CollectionExtensions.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections.Generic; - -namespace CliFx.Tests.Utils.Extensions; - -internal static class CollectionExtensions -{ - extension(IEnumerable source) - { - public IEnumerable WhereNotNull() - { - foreach (var item in source) - { - if (item is not null) - yield return item; - } - } - } -} diff --git a/CliFx/Activation/CommandActivator.cs b/CliFx/Activation/CommandActivator.cs index c0d0ca90..5da85b16 100644 --- a/CliFx/Activation/CommandActivator.cs +++ b/CliFx/Activation/CommandActivator.cs @@ -4,7 +4,7 @@ using System.Linq; using CliFx.Binding; using CliFx.Parsing; -using CliFx.Utils.Extensions; +using PowerKit.Extensions; namespace CliFx.Activation; diff --git a/CliFx/Binding/CommandRootDescriptor.cs b/CliFx/Binding/CommandRootDescriptor.cs index 40b04a7a..b687830c 100644 --- a/CliFx/Binding/CommandRootDescriptor.cs +++ b/CliFx/Binding/CommandRootDescriptor.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using CliFx.Utils.Extensions; +using PowerKit.Extensions; namespace CliFx.Binding; diff --git a/CliFx/CliFx.csproj b/CliFx/CliFx.csproj index 47a0d3bb..aa16a981 100644 --- a/CliFx/CliFx.csproj +++ b/CliFx/CliFx.csproj @@ -36,6 +36,7 @@ + environmentVariables // Handle debug mode if ( !string.IsNullOrWhiteSpace(configuration.DebugModeEnvironmentVariable) - && bool.ParseOrDefault( - environmentVariables.GetValueOrDefault(configuration.DebugModeEnvironmentVariable) + && ( + bool.ParseOrNull( + environmentVariables.GetValueOrDefault( + configuration.DebugModeEnvironmentVariable + ) + ) ?? false ) ) { @@ -55,8 +60,12 @@ IReadOnlyDictionary environmentVariables // Handle preview mode if ( !string.IsNullOrWhiteSpace(configuration.PreviewModeEnvironmentVariable) - && bool.ParseOrDefault( - environmentVariables.GetValueOrDefault(configuration.PreviewModeEnvironmentVariable) + && ( + bool.ParseOrNull( + environmentVariables.GetValueOrDefault( + configuration.PreviewModeEnvironmentVariable + ) + ) ?? false ) ) { diff --git a/CliFx/CommandLineApplicationBuilder.cs b/CliFx/CommandLineApplicationBuilder.cs index 0f1c1bf0..99a5a123 100644 --- a/CliFx/CommandLineApplicationBuilder.cs +++ b/CliFx/CommandLineApplicationBuilder.cs @@ -4,7 +4,7 @@ using System.Reflection; using CliFx.Binding; using CliFx.Infrastructure; -using CliFx.Utils.Extensions; +using PowerKit.Extensions; namespace CliFx; diff --git a/CliFx/Infrastructure/ConsoleExtensions.cs b/CliFx/Infrastructure/ConsoleExtensions.cs index 71e385b3..16515332 100644 --- a/CliFx/Infrastructure/ConsoleExtensions.cs +++ b/CliFx/Infrastructure/ConsoleExtensions.cs @@ -1,5 +1,5 @@ using System; -using CliFx.Utils; +using PowerKit; namespace CliFx.Infrastructure; diff --git a/CliFx/Infrastructure/ConsoleWriter.cs b/CliFx/Infrastructure/ConsoleWriter.cs index 6024c136..52231200 100644 --- a/CliFx/Infrastructure/ConsoleWriter.cs +++ b/CliFx/Infrastructure/ConsoleWriter.cs @@ -3,7 +3,7 @@ using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; -using CliFx.Utils.Extensions; +using PowerKit.Extensions; namespace CliFx.Infrastructure; diff --git a/CliFx/Parsing/ParsedCommandLine.cs b/CliFx/Parsing/ParsedCommandLine.cs index 4ac435fa..64804dbf 100644 --- a/CliFx/Parsing/ParsedCommandLine.cs +++ b/CliFx/Parsing/ParsedCommandLine.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using CliFx.Utils.Extensions; namespace CliFx.Parsing; @@ -126,7 +125,7 @@ ref int index if (!string.IsNullOrWhiteSpace(lastOptionIdentifier)) result.Add(new ParsedOption(lastOptionIdentifier, lastOptionValues)); - lastOptionIdentifier = identifier.AsString(); + lastOptionIdentifier = identifier.ToString(); lastOptionValues = []; } } diff --git a/CliFx/Utils/Disposable.cs b/CliFx/Utils/Disposable.cs deleted file mode 100644 index 02484b45..00000000 --- a/CliFx/Utils/Disposable.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace CliFx.Utils; - -internal partial class Disposable(Action dispose) : IDisposable -{ - public void Dispose() => dispose(); -} - -internal partial class Disposable -{ - public static IDisposable Create(Action dispose) => new Disposable(dispose); - - public static IDisposable Merge(params IEnumerable disposables) => - Create(() => - { - foreach (var disposable in disposables) - disposable.Dispose(); - }); -} diff --git a/CliFx/Utils/Extensions/CollectionExtensions.cs b/CliFx/Utils/Extensions/CollectionExtensions.cs deleted file mode 100644 index 64647f8b..00000000 --- a/CliFx/Utils/Extensions/CollectionExtensions.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.Linq; - -namespace CliFx.Utils.Extensions; - -internal static class CollectionExtensions -{ - extension(IEnumerable source) - { - public IEnumerable WhereNotNull() - { - foreach (var item in source) - { - if (item is not null) - yield return item; - } - } - } - - extension(IEnumerable source) - { - public IEnumerable WhereNotNullOrWhiteSpace() - { - foreach (var item in source) - { - if (!string.IsNullOrWhiteSpace(item)) - yield return item; - } - } - } - - extension(ICollection source) - { - public void RemoveRange(IEnumerable items) - { - foreach (var item in items) - source.Remove(item); - } - } - - extension(IDictionary dictionary) - { - public Dictionary ToDictionary(IEqualityComparer comparer) - where TKey : notnull => - dictionary - .Cast() - .ToDictionary(entry => (TKey)entry.Key, entry => (TValue)entry.Value!, comparer); - } -} diff --git a/CliFx/Utils/Extensions/EncodingExtensions.cs b/CliFx/Utils/Extensions/EncodingExtensions.cs deleted file mode 100644 index 622b72a5..00000000 --- a/CliFx/Utils/Extensions/EncodingExtensions.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Text; - -namespace CliFx.Utils.Extensions; - -internal static class EncodingExtensions -{ - extension(Encoding encoding) - { - public Encoding WithoutPreamble() => - encoding.GetPreamble().Length > 0 ? new NoPreambleEncoding(encoding) : encoding; - } -} diff --git a/CliFx/Utils/Extensions/PrimitiveExtensions.cs b/CliFx/Utils/Extensions/PrimitiveExtensions.cs deleted file mode 100644 index 6a9810f0..00000000 --- a/CliFx/Utils/Extensions/PrimitiveExtensions.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; - -namespace CliFx.Utils.Extensions; - -internal static class PrimitiveExtensions -{ - extension(bool) - { - public static bool ParseOrDefault(string? value, bool defaultValue = false) - { - if (string.Equals(value, bool.TrueString, StringComparison.OrdinalIgnoreCase)) - return true; - - if (string.Equals(value, bool.FalseString, StringComparison.OrdinalIgnoreCase)) - return false; - - return defaultValue; - } - } -} diff --git a/CliFx/Utils/Extensions/StringExtensions.cs b/CliFx/Utils/Extensions/StringExtensions.cs deleted file mode 100644 index e1d89700..00000000 --- a/CliFx/Utils/Extensions/StringExtensions.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace CliFx.Utils.Extensions; - -internal static class StringExtensions -{ - extension(string str) - { - public string? NullIfWhiteSpace() => !string.IsNullOrWhiteSpace(str) ? str : null; - } - - extension(char c) - { - public string Repeat(int count) => new(c, count); - - public string AsString() => c.Repeat(1); - } -} diff --git a/CliFx/Utils/Extensions/VersionExtensions.cs b/CliFx/Utils/Extensions/VersionExtensions.cs deleted file mode 100644 index e5483947..00000000 --- a/CliFx/Utils/Extensions/VersionExtensions.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace CliFx.Utils.Extensions; - -internal static class VersionExtensions -{ - extension(Version version) - { - public string ToSemanticString() => - version.Revision <= 0 ? version.ToString(3) : version.ToString(); - } -} diff --git a/CliFx/Utils/NoPreambleEncoding.cs b/CliFx/Utils/NoPreambleEncoding.cs deleted file mode 100644 index 836a00ff..00000000 --- a/CliFx/Utils/NoPreambleEncoding.cs +++ /dev/null @@ -1,143 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using System.Text; - -namespace CliFx.Utils; - -// Adapted from: -// https://github.com/dotnet/runtime/blob/01b7e73cd378145264a7cb7a09365b41ed42b240/src/libraries/Common/src/System/Text/ConsoleEncoding.cs -// Also see: -// https://source.dot.net/#System.Console/ConsoleEncoding.cs,5eedd083a4a4f4a2 -// Majority of overrides are just proxy calls to avoid potentially more expensive base behavior. -// The important part is the GetPreamble() method that has been overridden to return an empty array. -internal class NoPreambleEncoding(Encoding underlyingEncoding) - : Encoding( - underlyingEncoding.CodePage, - underlyingEncoding.EncoderFallback, - underlyingEncoding.DecoderFallback - ) -{ - // This is the only part that's changed - public override byte[] GetPreamble() => []; - - [ExcludeFromCodeCoverage] - public override string EncodingName => underlyingEncoding.EncodingName; - - [ExcludeFromCodeCoverage] - public override string BodyName => underlyingEncoding.BodyName; - - [ExcludeFromCodeCoverage] - public override int CodePage => underlyingEncoding.CodePage; - - [ExcludeFromCodeCoverage] - public override int WindowsCodePage => underlyingEncoding.WindowsCodePage; - - [ExcludeFromCodeCoverage] - public override string HeaderName => underlyingEncoding.HeaderName; - - [ExcludeFromCodeCoverage] - public override string WebName => underlyingEncoding.WebName; - - [ExcludeFromCodeCoverage] - public override bool IsBrowserDisplay => underlyingEncoding.IsBrowserDisplay; - - [ExcludeFromCodeCoverage] - public override bool IsBrowserSave => underlyingEncoding.IsBrowserSave; - - [ExcludeFromCodeCoverage] - public override bool IsSingleByte => underlyingEncoding.IsSingleByte; - - [ExcludeFromCodeCoverage] - public override bool IsMailNewsDisplay => underlyingEncoding.IsMailNewsDisplay; - - [ExcludeFromCodeCoverage] - public override bool IsMailNewsSave => underlyingEncoding.IsMailNewsSave; - - [ExcludeFromCodeCoverage] - public override int GetByteCount(char[] chars, int index, int count) => - underlyingEncoding.GetByteCount(chars, index, count); - - [ExcludeFromCodeCoverage] - public override int GetByteCount(char[] chars) => underlyingEncoding.GetByteCount(chars); - - [ExcludeFromCodeCoverage] - public override int GetByteCount(string s) => underlyingEncoding.GetByteCount(s); - - [ExcludeFromCodeCoverage] - public override int GetBytes( - char[] chars, - int charIndex, - int charCount, - byte[] bytes, - int byteIndex - ) => underlyingEncoding.GetBytes(chars, charIndex, charCount, bytes, byteIndex); - - [ExcludeFromCodeCoverage] - public override byte[] GetBytes(char[] chars, int index, int count) => - underlyingEncoding.GetBytes(chars, index, count); - - [ExcludeFromCodeCoverage] - public override byte[] GetBytes(char[] chars) => underlyingEncoding.GetBytes(chars); - - [ExcludeFromCodeCoverage] - public override int GetBytes( - string s, - int charIndex, - int charCount, - byte[] bytes, - int byteIndex - ) => underlyingEncoding.GetBytes(s, charIndex, charCount, bytes, byteIndex); - - [ExcludeFromCodeCoverage] - public override byte[] GetBytes(string s) => underlyingEncoding.GetBytes(s); - - [ExcludeFromCodeCoverage] - public override int GetCharCount(byte[] bytes, int index, int count) => - underlyingEncoding.GetCharCount(bytes, index, count); - - [ExcludeFromCodeCoverage] - public override int GetCharCount(byte[] bytes) => underlyingEncoding.GetCharCount(bytes); - - [ExcludeFromCodeCoverage] - public override int GetChars( - byte[] bytes, - int byteIndex, - int byteCount, - char[] chars, - int charIndex - ) => underlyingEncoding.GetChars(bytes, byteIndex, byteCount, chars, charIndex); - - [ExcludeFromCodeCoverage] - public override char[] GetChars(byte[] bytes) => underlyingEncoding.GetChars(bytes); - - [ExcludeFromCodeCoverage] - public override char[] GetChars(byte[] bytes, int index, int count) => - underlyingEncoding.GetChars(bytes, index, count); - - [ExcludeFromCodeCoverage] - public override string GetString(byte[] bytes) => underlyingEncoding.GetString(bytes); - - [ExcludeFromCodeCoverage] - public override string GetString(byte[] bytes, int index, int count) => - underlyingEncoding.GetString(bytes, index, count); - - [ExcludeFromCodeCoverage] - public override int GetMaxByteCount(int charCount) => - underlyingEncoding.GetMaxByteCount(charCount); - - [ExcludeFromCodeCoverage] - public override int GetMaxCharCount(int byteCount) => - underlyingEncoding.GetMaxCharCount(byteCount); - - [ExcludeFromCodeCoverage] - public override bool IsAlwaysNormalized(NormalizationForm form) => - underlyingEncoding.IsAlwaysNormalized(form); - - [ExcludeFromCodeCoverage] - public override Encoder GetEncoder() => underlyingEncoding.GetEncoder(); - - [ExcludeFromCodeCoverage] - public override Decoder GetDecoder() => underlyingEncoding.GetDecoder(); - - [ExcludeFromCodeCoverage] - public override object Clone() => new NoPreambleEncoding((Encoding)base.Clone()); -} diff --git a/CliFx/Utils/StackTraces/StackFrame.cs b/CliFx/Utils/StackTraces/StackFrame.cs index ed4481c1..c2e30023 100644 --- a/CliFx/Utils/StackTraces/StackFrame.cs +++ b/CliFx/Utils/StackTraces/StackFrame.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; -using CliFx.Utils.Extensions; +using PowerKit.Extensions; namespace CliFx.Utils.StackTraces; diff --git a/Directory.Packages.props b/Directory.Packages.props index 9ee95bc7..78305fdb 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -19,7 +19,8 @@ - + +