Skip to content

Upgraded parts of CSharpx from Version 1.6.2-alpha #561

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 8, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions src/CommandLine/CommandLine.csproj
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@
<AssemblyName>CommandLine</AssemblyName>
<OutputType>Library</OutputType>
<TargetFrameworks>netstandard2.0;net40;net45;net461</TargetFrameworks>
<DefineConstants>$(DefineConstants);CSX_EITHER_INTERNAL;CSX_REM_EITHER_BEYOND_2;CSX_ENUM_INTERNAL;ERRH_INTERNAL;ERRH_DISABLE_INLINE_METHODS;CSX_MAYBE_INTERNAL;CSX_REM_EITHER_FUNC</DefineConstants>
<DefineConstants>$(DefineConstants);CSX_EITHER_INTERNAL;CSX_REM_EITHER_BEYOND_2;CSX_ENUM_INTERNAL;ERRH_INTERNAL;ERRH_DISABLE_INLINE_METHODS;CSX_MAYBE_INTERNAL;CSX_REM_EITHER_FUNC;CSX_REM_CRYPTORAND</DefineConstants>
<DefineConstants Condition="'$(BuildTarget)' != 'fsharp'">$(DefineConstants);SKIP_FSHARP</DefineConstants>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<AssemblyOriginatorKeyFile>..\..\CommandLine.snk</AssemblyOriginatorKeyFile>
@@ -47,7 +47,10 @@
<PackageReference Include="FSharp.Core" Version="4.0.0.1" Condition="'$(BuildTarget)' == 'fsharp'" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\License.md" Pack="true" PackagePath="$(PackageLicenseFile)"/>
<None Include="..\..\art\CommandLine20.png" Pack="true" PackagePath="$(PackageIcon)"/>
<None Include="..\..\License.md" Pack="true" PackagePath="$(PackageLicenseFile)" />
<None Include="..\..\art\CommandLine20.png" Pack="true" PackagePath="$(PackageIcon)" />
</ItemGroup>
<ItemGroup>
<Folder Include="Infrastructure\CSharpx\" />
</ItemGroup>
</Project>
20 changes: 10 additions & 10 deletions src/CommandLine/Core/InstanceBuilder.cs
Original file line number Diff line number Diff line change
@@ -28,14 +28,14 @@ public static ParserResult<T> Build<T>(

var specProps = typeInfo.GetSpecifications(pi => SpecificationProperty.Create(
Specification.FromProperty(pi), pi, Maybe.Nothing<object>()))
.Memorize();
.Memoize();

var specs = from pt in specProps select pt.Specification;

var optionSpecs = specs
.ThrowingValidate(SpecificationGuards.Lookup)
.OfType<OptionSpecification>()
.Memorize();
.Memoize();

Func<T> makeDefault = () =>
typeof(T).IsMutable()
@@ -46,19 +46,19 @@ public static ParserResult<T> Build<T>(
Func<IEnumerable<Error>, ParserResult<T>> notParsed =
errs => new NotParsed<T>(makeDefault().GetType().ToTypeInfo(), errs);

var argumentsList = arguments.Memorize();
var argumentsList = arguments.Memoize();
Func<ParserResult<T>> buildUp = () =>
{
var tokenizerResult = tokenizer(argumentsList, optionSpecs);

var tokens = tokenizerResult.SucceededWith().Memorize();
var tokens = tokenizerResult.SucceededWith().Memoize();

var partitions = TokenPartitioner.Partition(
tokens,
name => TypeLookup.FindTypeDescriptorAndSibling(name, optionSpecs, nameComparer));
var optionsPartition = partitions.Item1.Memorize();
var valuesPartition = partitions.Item2.Memorize();
var errorsPartition = partitions.Item3.Memorize();
var optionsPartition = partitions.Item1.Memoize();
var valuesPartition = partitions.Item2.Memoize();
var errorsPartition = partitions.Item3.Memoize();

var optionSpecPropsResult =
OptionMapper.MapValues(
@@ -80,7 +80,7 @@ public static ParserResult<T> Build<T>(
.FromOptionSpecification());

var specPropsWithValue =
optionSpecPropsResult.SucceededWith().Concat(valueSpecPropsResult.SucceededWith()).Memorize();
optionSpecPropsResult.SucceededWith().Concat(valueSpecPropsResult.SucceededWith()).Memoize();

var setPropertyErrors = new List<Error>();

@@ -104,7 +104,7 @@ public static ParserResult<T> Build<T>(
.Concat(valueSpecPropsResult.SuccessfulMessages())
.Concat(validationErrors)
.Concat(setPropertyErrors)
.Memorize();
.Memoize();

var warnings = from e in allErrors where nonFatalErrors.Contains(e.Tag) select e;

@@ -115,7 +115,7 @@ public static ParserResult<T> Build<T>(
argumentsList.Any()
? arguments.Preprocess(PreprocessorGuards.Lookup(nameComparer, autoHelp, autoVersion))
: Enumerable.Empty<Error>()
).Memorize();
).Memoize();

var result = argumentsList.Any()
? preprocessorErrors.Any()
2 changes: 1 addition & 1 deletion src/CommandLine/Core/OptionMapper.cs
Original file line number Diff line number Diff line change
@@ -43,7 +43,7 @@ select Tuple.Create(
((OptionSpecification)pt.Specification).FromOptionSpecification()))))
: Tuple.Create(pt, Maybe.Nothing<Error>());
}
).Memorize();
).Memoize();
return Result.Succeed(
sequencesAndErrors.Select(se => se.Item1),
sequencesAndErrors.Select(se => se.Item2).OfType<Just<Error>>().Select(se => se.Value));
8 changes: 4 additions & 4 deletions src/CommandLine/Core/TokenPartitioner.cs
Original file line number Diff line number Diff line change
@@ -17,16 +17,16 @@ Tuple<IEnumerable<KeyValuePair<string, IEnumerable<string>>>, IEnumerable<string
{
IEqualityComparer<Token> tokenComparer = ReferenceEqualityComparer.Default;

var tokenList = tokens.Memorize();
var tokenList = tokens.Memoize();
var switches = new HashSet<Token>(Switch.Partition(tokenList, typeLookup), tokenComparer);
var scalars = new HashSet<Token>(Scalar.Partition(tokenList, typeLookup), tokenComparer);
var sequences = new HashSet<Token>(Sequence.Partition(tokenList, typeLookup), tokenComparer);
var nonOptions = tokenList
.Where(t => !switches.Contains(t))
.Where(t => !scalars.Contains(t))
.Where(t => !sequences.Contains(t)).Memorize();
var values = nonOptions.Where(v => v.IsValue()).Memorize();
var errors = nonOptions.Except(values, (IEqualityComparer<Token>)ReferenceEqualityComparer.Default).Memorize();
.Where(t => !sequences.Contains(t)).Memoize();
var values = nonOptions.Where(v => v.IsValue()).Memoize();
var errors = nonOptions.Except(values, (IEqualityComparer<Token>)ReferenceEqualityComparer.Default).Memoize();

return Tuple.Create(
KeyValuePairHelper.ForSwitch(switches)
12 changes: 6 additions & 6 deletions src/CommandLine/Core/Tokenizer.cs
Original file line number Diff line number Diff line change
@@ -34,11 +34,11 @@ public static Result<IEnumerable<Token>, Error> Tokenize(
? TokenizeLongName(arg, onError)
: TokenizeShortName(arg, nameLookup)
select token)
.Memorize();
.Memoize();

var normalized = normalize(tokens).Memorize();
var normalized = normalize(tokens).Memoize();

var unkTokens = (from t in normalized where t.IsName() && nameLookup(t.Text) == NameLookupResult.NoOptionFound select t).Memorize();
var unkTokens = (from t in normalized where t.IsName() && nameLookup(t.Text) == NameLookupResult.NoOptionFound select t).Memoize();

return Result.Succeed(normalized.Where(x => !unkTokens.Contains(x)), errors.Concat(from t in unkTokens select new UnknownOptionError(t.Text)));
}
@@ -60,12 +60,12 @@ public static Result<IEnumerable<Token>, Error> ExplodeOptionList(
Result<IEnumerable<Token>, Error> tokenizerResult,
Func<string, Maybe<char>> optionSequenceWithSeparatorLookup)
{
var tokens = tokenizerResult.SucceededWith().Memorize();
var tokens = tokenizerResult.SucceededWith().Memoize();

var replaces = tokens.Select((t, i) =>
optionSequenceWithSeparatorLookup(t.Text)
.MapValueOrDefault(sep => Tuple.Create(i + 1, sep),
Tuple.Create(-1, '\0'))).SkipWhile(x => x.Item1 < 0).Memorize();
Tuple.Create(-1, '\0'))).SkipWhile(x => x.Item1 < 0).Memoize();

var exploded = tokens.Select((t, i) =>
replaces.FirstOrDefault(x => x.Item1 == i).ToMaybe()
@@ -205,4 +205,4 @@ private static IEnumerable<Token> TokenizeLongName(
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
//Use project level define(s) when referencing with Paket.
//#define CSX_EITHER_INTERNAL // Uncomment this to set visibility to internal.
//#define CSX_REM_MAYBE_FUNC // Uncomment this to remove dependency to Maybe.cs.
//#define CSX_EITHER_INTERNAL // Uncomment or define at build time to set accessibility to internal.
//#define CSX_REM_MAYBE_FUNC // Uncomment or define at build time to remove dependency to Maybe.cs.

using System;

@@ -133,8 +132,7 @@ public static Either<string, TRight> Fail<TRight>(string message)
public static Either<TLeft, TResult> Bind<TLeft, TRight, TResult>(Either<TLeft, TRight> either, Func<TRight, Either<TLeft, TResult>> func)
{
TRight right;
if (either.MatchRight(out right))
{
if (either.MatchRight(out right)) {
return func(right);
}
return Either.Left<TLeft, TResult>(either.GetLeft());
@@ -148,8 +146,7 @@ public static Either<TLeft, TResult> Bind<TLeft, TRight, TResult>(Either<TLeft,
public static Either<TLeft, TResult> Map<TLeft, TRight, TResult>(Either<TLeft, TRight> either, Func<TRight, TResult> func)
{
TRight right;
if (either.MatchRight(out right))
{
if (either.MatchRight(out right)) {
return Either.Right<TLeft, TResult>(func(right));
}
return Either.Left<TLeft, TResult>(either.GetLeft());
@@ -164,8 +161,7 @@ public static Either<TLeft, TResult> Map<TLeft, TRight, TResult>(Either<TLeft, T
public static Either<TLeft1, TRight1> Bimap<TLeft, TRight, TLeft1, TRight1>(Either<TLeft, TRight> either, Func<TLeft, TLeft1> mapLeft, Func<TRight, TRight1> mapRight)
{
TRight right;
if (either.MatchRight(out right))
{
if (either.MatchRight(out right)) {
return Either.Right<TLeft1, TRight1>(mapRight(right));
}
return Either.Left<TLeft1, TRight1>(mapLeft(either.GetLeft()));
@@ -196,9 +192,10 @@ public static Either<TLeft, TResult> SelectMany<TLeft, TRight, TResult>(this Eit
public static TRight GetOrFail<TLeft, TRight>(Either<TLeft, TRight> either)
{
TRight value;
if (either.MatchRight(out value))
if (either.MatchRight(out value)) {
return value;
throw new ArgumentException("either", string.Format("The either value was Left {0}", either));
}
throw new ArgumentException(nameof(either), string.Format("The either value was Left {0}", either));
}

/// <summary>
@@ -224,12 +221,10 @@ public static TRight GetRightOrDefault<TLeft, TRight>(Either<TLeft, TRight> eith
/// </summary>
public static Either<Exception, TRight> Try<TRight>(Func<TRight> func)
{
try
{
try {
return new Right<Exception, TRight>(func());
}
catch (Exception ex)
{
catch (Exception ex) {
return new Left<Exception, TRight>(ex);
}
}
@@ -244,10 +239,9 @@ public static Either<Exception, TRight> Cast<TRight>(object obj)
}

#if !CSX_REM_MAYBE_FUNC
public static Either<TLeft, TRight> OfMaybe<TLeft, TRight>(Maybe<TRight> maybe, TLeft left)
public static Either<TLeft, TRight> FromMaybe<TLeft, TRight>(Maybe<TRight> maybe, TLeft left)
{
if (maybe.Tag == MaybeType.Just)
{
if (maybe.Tag == MaybeType.Just) {
return Either.Right<TLeft, TRight>(((Just<TRight>)maybe).Value);
}
return Either.Left<TLeft, TRight>(left);
@@ -269,8 +263,7 @@ static class EitherExtensions
public static void Match<TLeft, TRight>(this Either<TLeft, TRight> either, Action<TLeft> ifLeft, Action<TRight> ifRight)
{
TLeft left;
if (either.MatchLeft(out left))
{
if (either.MatchLeft(out left)) {
ifLeft(left);
return;
}
@@ -279,7 +272,7 @@ public static void Match<TLeft, TRight>(this Either<TLeft, TRight> either, Actio
#endregion

/// <summary>
/// Equivalent to monadic <see cref="CSharpx.Either.Return{TRight}"/> operation.
/// Equivalent to monadic <see cref="CSharpx.Either.Return{TLeft, TRight}"/> operation.
/// Builds a <see cref="CSharpx.Right{TLeft, TRight}"/> value in case <paramref name="value"/> by default.
/// </summary>
public static Either<string, TRight> ToEither<TRight>(this TRight value)
Loading