File: Commands\Package\PackageSearchCommandDefinition.cs
Web Access
Project: src\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 Microsoft.DotNet.Cli.CommandLine;

namespace Microsoft.DotNet.Cli.Commands.Package.Search;

internal sealed class PackageSearchCommandDefinition : Command
{
    public new const string Name = "search";

    public readonly Argument<string> SearchTermArgument = new("SearchTerm")
    {
        HelpName = CommandDefinitionStrings.PackageSearchSearchTermArgumentName,
        Description = CommandDefinitionStrings.PackageSearchSearchTermDescription,
        Arity = ArgumentArity.ZeroOrOne
    };

    public readonly Option<IEnumerable<string>> Sources = new Option<IEnumerable<string>>("--source")
    {
        Description = CommandDefinitionStrings.SourceDescription,
        HelpName = CommandDefinitionStrings.SourceArgumentName
    }.ForwardAsManyArgumentsEachPrefixedByOption("--source")
    .AllowSingleArgPerToken();

    public readonly Option<string> Take = new Option<string>("--take")
    {
        Description = CommandDefinitionStrings.PackageSearchTakeDescription,
        HelpName = CommandDefinitionStrings.PackageSearchTakeArgumentName
    }.ForwardAsSingle(o => $"--take:{o}");

    public readonly Option<string> Skip = new Option<string>("--skip")
    {
        Description = CommandDefinitionStrings.PackageSearchSkipDescription,
        HelpName = CommandDefinitionStrings.PackageSearchSkipArgumentName
    }.ForwardAsSingle(o => $"--skip:{o}");

    public readonly Option<bool> ExactMatch = new Option<bool>("--exact-match")
    {
        Description = CommandDefinitionStrings.ExactMatchDescription,
        Arity = ArgumentArity.Zero
    }.ForwardAs("--exact-match");

    public readonly Option<bool> Interactive = CommonOptions.CreateInteractiveOption().ForwardIfEnabled("--interactive");

    public readonly Option<bool> Prerelease = new Option<bool>("--prerelease")
    {
        Description = CommandDefinitionStrings.PackageSearchPrereleaseDescription,
        Arity = ArgumentArity.Zero
    }.ForwardAs("--prerelease");

    public readonly Option<string> ConfigFile = new Option<string>("--configfile")
    {
        Description = CommandDefinitionStrings.ConfigFileDescription,
        HelpName = CommandDefinitionStrings.ConfigFileArgumentName
    }.ForwardAsSingle(o => $"--configfile:{o}");

    public readonly Option<string> Format = new Option<string>("--format")
    {
        Description = CommandDefinitionStrings.FormatDescription,
        HelpName = CommandDefinitionStrings.FormatArgumentName
    }.ForwardAsSingle(o => $"--format:{o}");

    public readonly Option<string> Verbosity = new Option<string>("--verbosity")
    {
        Description = CommandDefinitionStrings.VerbosityDescription,
        HelpName = CommandDefinitionStrings.VerbosityArgumentName
    }.ForwardAsSingle(o => $"--verbosity:{o}");

    public PackageSearchCommandDefinition()
        : base(Name, CommandDefinitionStrings.PackageSearchCommandDescription)
    {
        Arguments.Add(SearchTermArgument);
        Options.Add(Sources);
        Options.Add(Take);
        Options.Add(Skip);
        Options.Add(ExactMatch);
        Options.Add(Interactive);
        Options.Add(Prerelease);
        Options.Add(ConfigFile);
        Options.Add(Format);
        Options.Add(Verbosity);
    }
}