| File: Common\CommonArguments.cs | Web Access |
| Project: src\sdk\src\Cli\Microsoft.DotNet.Cli.Definitions\Microsoft.DotNet.Cli.Definitions.csproj (Microsoft.DotNet.Cli.Definitions) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.CommandLine; using System.CommandLine.StaticCompletions; using System.Diagnostics.CodeAnalysis; using Microsoft.DotNet.Cli.Utils; using NuGet.Versioning; namespace Microsoft.DotNet.Cli { internal static class CommonArguments { public const string PackageIdArgumentName = "packageId"; public static Argument<PackageIdentityWithRange?> CreateOptionalPackageIdentityArgument(string examplePackage = "Newtonsoft.Json", string exampleVersion = "13.0.3") => new(PackageIdArgumentName) { Description = string.Format(CommandDefinitionStrings.PackageIdentityArgumentDescription, examplePackage, exampleVersion), CustomParser = argumentResult => ParsePackageIdentityWithVersionSeparator(argumentResult.Tokens[0]?.Value), Arity = ArgumentArity.ZeroOrOne, IsDynamic = true }; public static Argument<PackageIdentityWithRange> CreateRequiredPackageIdentityArgument(string examplePackage = "Newtonsoft.Json", string exampleVersion = "13.0.3") => new(PackageIdArgumentName) { Description = string.Format(CommandDefinitionStrings.PackageIdentityArgumentDescription, examplePackage, exampleVersion), CustomParser = argumentResult => ParsePackageIdentityWithVersionSeparator(argumentResult.Tokens[0]?.Value)!.Value, Arity = ArgumentArity.ExactlyOne, IsDynamic = true }; private static PackageIdentityWithRange? ParsePackageIdentityWithVersionSeparator(string? packageIdentity, char versionSeparator = '@') { if (string.IsNullOrEmpty(packageIdentity)) { return null; } string[] splitPackageIdentity = packageIdentity.Split(versionSeparator); var (packageId, versionString) = (splitPackageIdentity.ElementAtOrDefault(0), splitPackageIdentity.ElementAtOrDefault(1)); if (string.IsNullOrEmpty(packageId)) { throw new GracefulException(CommandDefinitionStrings.PackageIdentityArgumentIdOrVersionIsNull); } if (string.IsNullOrEmpty(versionString)) { return new PackageIdentityWithRange(packageId, null); } if (!VersionRange.TryParse(versionString, out var versionRange)) { throw new GracefulException(string.Format(CommandDefinitionStrings.InvalidVersion, versionString)); } return new PackageIdentityWithRange(packageId, versionRange); } } public readonly record struct PackageIdentityWithRange(string Id, VersionRange? VersionRange) { [MemberNotNullWhen(returnValue: true, nameof(VersionRange))] public bool HasVersion => VersionRange != null; } }