Skip to content
Merged
Show file tree
Hide file tree
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
3 changes: 2 additions & 1 deletion src/Cli/dotnet/Parser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public static class Parser
PackageCommandParser.GetCommand(),
ParseCommandParser.GetCommand(),
PublishCommandParser.GetCommand(),
ReferenceCommandParser.GetCommand(),
RemoveCommandParser.GetCommand(),
RestoreCommandParser.GetCommand(),
RunCommandParser.GetCommand(),
Expand Down Expand Up @@ -335,7 +336,7 @@ public override void Write(HelpContext context)
else if (command.Name.Equals(AddPackageParser.GetCommand().Name) || command.Name.Equals(AddCommandParser.GetCommand().Name))
{
// Don't show package completions in help
AddPackageParser.CmdPackageArgument.CompletionSources.Clear();
PackageAddCommandParser.CmdPackageArgument.CompletionSources.Clear();
}

base.Write(context);
Expand Down
6 changes: 5 additions & 1 deletion src/Cli/dotnet/commands/dotnet-add/AddCommandParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.

using System.CommandLine;
using System.Diagnostics;
using Microsoft.DotNet.Tools;
using LocalizableStrings = Microsoft.DotNet.Tools.Add.LocalizableStrings;

Expand All @@ -25,7 +26,10 @@ public static CliCommand GetCommand()

private static CliCommand ConstructCommand()
{
var command = new DocumentedCommand("add", DocsLink, LocalizableStrings.NetAddCommand);
var command = new DocumentedCommand("add", DocsLink, LocalizableStrings.NetAddCommand)
{
Hidden = true
};

command.Arguments.Add(ProjectArgument);
command.Subcommands.Add(AddPackageParser.GetCommand());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,83 +2,13 @@
// The .NET Foundation licenses this file to you under the MIT license.

using System.CommandLine;
using System.CommandLine.Completions;
using System.Text.Json;
using Microsoft.DotNet.Tools;
using Microsoft.DotNet.Tools.Add.PackageReference;
using Microsoft.Extensions.EnvironmentAbstractions;
using NuGet.Versioning;
using LocalizableStrings = Microsoft.DotNet.Tools.Add.PackageReference.LocalizableStrings;
using Microsoft.DotNet.Tools.Package.Add;
using LocalizableStrings = Microsoft.DotNet.Tools.Package.Add.LocalizableStrings;

namespace Microsoft.DotNet.Cli
{
internal static class AddPackageParser
{
public static readonly CliArgument<string> CmdPackageArgument = new CliArgument<string>(LocalizableStrings.CmdPackage)
{
Description = LocalizableStrings.CmdPackageDescription
}.AddCompletions((context) =>
{
// we should take --prerelease flags into account for version completion
var allowPrerelease = context.ParseResult.GetValue(PrereleaseOption);
return QueryNuGet(context.WordToComplete, allowPrerelease, CancellationToken.None).Result.Select(packageId => new CompletionItem(packageId));
});

public static readonly CliOption<string> VersionOption = new ForwardedOption<string>("--version", "-v")
{
Description = LocalizableStrings.CmdVersionDescription,
HelpName = LocalizableStrings.CmdVersion
}.ForwardAsSingle(o => $"--version {o}")
.AddCompletions((context) =>
{
// we can only do version completion if we have a package id
if (context.ParseResult.GetValue(CmdPackageArgument) is string packageId)
{
// we should take --prerelease flags into account for version completion
var allowPrerelease = context.ParseResult.GetValue(PrereleaseOption);
return QueryVersionsForPackage(packageId, context.WordToComplete, allowPrerelease, CancellationToken.None)
.Result
.Select(version => new CompletionItem(version.ToNormalizedString()));
}
else
{
return Enumerable.Empty<CompletionItem>();
}
});

public static readonly CliOption<string> FrameworkOption = new ForwardedOption<string>("--framework", "-f")
{
Description = LocalizableStrings.CmdFrameworkDescription,
HelpName = LocalizableStrings.CmdFramework
}.ForwardAsSingle(o => $"--framework {o}");

public static readonly CliOption<bool> NoRestoreOption = new("--no-restore", "-n")
{
Description = LocalizableStrings.CmdNoRestoreDescription
};

public static readonly CliOption<string> SourceOption = new ForwardedOption<string>("--source", "-s")
{
Description = LocalizableStrings.CmdSourceDescription,
HelpName = LocalizableStrings.CmdSource
}.ForwardAsSingle(o => $"--source {o}");

public static readonly CliOption<string> PackageDirOption = new ForwardedOption<string>("--package-directory")
{
Description = LocalizableStrings.CmdPackageDirectoryDescription,
HelpName = LocalizableStrings.CmdPackageDirectory
}.ForwardAsSingle(o => $"--package-directory {o}");

public static readonly CliOption<bool> InteractiveOption = new ForwardedOption<bool>("--interactive")
{
Description = CommonLocalizableStrings.CommandInteractiveOptionDescription,
}.ForwardAs("--interactive");

public static readonly CliOption<bool> PrereleaseOption = new ForwardedOption<bool>("--prerelease")
{
Description = CommonLocalizableStrings.CommandPrereleaseOptionDescription
}.ForwardAs("--prerelease");

private static readonly CliCommand Command = ConstructCommand();

public static CliCommand GetCommand()
Expand All @@ -90,46 +20,19 @@ private static CliCommand ConstructCommand()
{
CliCommand command = new("package", LocalizableStrings.AppFullName);

command.Arguments.Add(CmdPackageArgument);
command.Options.Add(VersionOption);
command.Options.Add(FrameworkOption);
command.Options.Add(NoRestoreOption);
command.Options.Add(SourceOption);
command.Options.Add(PackageDirOption);
command.Options.Add(InteractiveOption);
command.Options.Add(PrereleaseOption);
command.Arguments.Add(PackageAddCommandParser.CmdPackageArgument);
command.Options.Add(PackageAddCommandParser.VersionOption);
command.Options.Add(PackageAddCommandParser.FrameworkOption);
command.Options.Add(PackageAddCommandParser.NoRestoreOption);
command.Options.Add(PackageAddCommandParser.SourceOption);
command.Options.Add(PackageAddCommandParser.PackageDirOption);
command.Options.Add(PackageAddCommandParser.InteractiveOption);
command.Options.Add(PackageAddCommandParser.PrereleaseOption);
command.Options.Add(PackageCommandParser.ProjectOption);

command.SetAction((parseResult) => new AddPackageReferenceCommand(parseResult).Execute());

return command;
}

public static async Task<IEnumerable<string>> QueryNuGet(string packageStem, bool allowPrerelease, CancellationToken cancellationToken)
{
try
{
var downloader = new NuGetPackageDownloader.NuGetPackageDownloader(packageInstallDir: new DirectoryPath());
var versions = await downloader.GetPackageIdsAsync(packageStem, allowPrerelease, cancellationToken: cancellationToken);
return versions;
}
catch (Exception)
{
return Enumerable.Empty<string>();
}
}

internal static async Task<IEnumerable<NuGetVersion>> QueryVersionsForPackage(string packageId, string versionFragment, bool allowPrerelease, CancellationToken cancellationToken)
{
try
{
var downloader = new NuGetPackageDownloader.NuGetPackageDownloader(packageInstallDir: new DirectoryPath());
var versions = await downloader.GetPackageVersionsAsync(new(packageId), versionFragment, allowPrerelease, cancellationToken: cancellationToken);
return versions;
}
catch (Exception)
{
return Enumerable.Empty<NuGetVersion>();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,13 @@
// The .NET Foundation licenses this file to you under the MIT license.

using System.CommandLine;
using Microsoft.DotNet.Tools.Add.ProjectToProjectReference;
using LocalizableStrings = Microsoft.DotNet.Tools.Add.ProjectToProjectReference.LocalizableStrings;
using Microsoft.DotNet.Tools.Reference.Add;
using LocalizableStrings = Microsoft.DotNet.Tools.Reference.Add.LocalizableStrings;

namespace Microsoft.DotNet.Cli
{
internal static class AddProjectToProjectReferenceParser
{
public static readonly CliArgument<IEnumerable<string>> ProjectPathArgument = new(LocalizableStrings.ProjectPathArgumentName)
{
Description = LocalizableStrings.ProjectPathArgumentDescription,
Arity = ArgumentArity.OneOrMore
};

public static readonly CliOption<string> FrameworkOption = new CliOption<string>("--framework", "-f")
{
Description = LocalizableStrings.CmdFrameworkDescription,
HelpName = Tools.Add.PackageReference.LocalizableStrings.CmdFramework

}.AddCompletions(Complete.TargetFrameworksFromProjectFile);

public static readonly CliOption<bool> InteractiveOption = CommonOptions.InteractiveOption;

private static readonly CliCommand Command = ConstructCommand();

public static CliCommand GetCommand()
Expand All @@ -35,9 +20,10 @@ private static CliCommand ConstructCommand()
{
CliCommand command = new("reference", LocalizableStrings.AppFullName);

command.Arguments.Add(ProjectPathArgument);
command.Options.Add(FrameworkOption);
command.Options.Add(InteractiveOption);
command.Arguments.Add(ReferenceAddCommandParser.ProjectPathArgument);
command.Options.Add(ReferenceAddCommandParser.FrameworkOption);
command.Options.Add(ReferenceAddCommandParser.InteractiveOption);
command.Options.Add(ReferenceCommandParser.ProjectOption);

command.SetAction((parseResult) => new AddProjectToProjectReferenceCommand(parseResult).Execute());

Expand Down
5 changes: 2 additions & 3 deletions src/Cli/dotnet/commands/dotnet-help/HelpUsageText.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ internal static class HelpUsageText
--version {LocalizableStrings.SDKVersionCommandDefinition}

{LocalizableStrings.Commands}:
add {LocalizableStrings.AddDefinition}
build {LocalizableStrings.BuildDefinition}
build-server {LocalizableStrings.BuildServerDefinition}
clean {LocalizableStrings.CleanDefinition}
format {LocalizableStrings.FormatDefinition}
help {LocalizableStrings.HelpDefinition}
list {LocalizableStrings.ListDefinition}
msbuild {LocalizableStrings.MsBuildDefinition}
new {LocalizableStrings.NewDefinition}
nuget {LocalizableStrings.NugetDefinition}
pack {LocalizableStrings.PackDefinition}
package {LocalizableStrings.PackageDefinition}
publish {LocalizableStrings.PublishDefinition}
remove {LocalizableStrings.RemoveDefinition}
reference {LocalizableStrings.ReferenceDefinition}
restore {LocalizableStrings.RestoreDefinition}
run {LocalizableStrings.RunDefinition}
sdk {LocalizableStrings.SdkDefinition}
Expand Down
15 changes: 6 additions & 9 deletions src/Cli/dotnet/commands/dotnet-help/LocalizableStrings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,15 @@
<data name="BuildDefinition" xml:space="preserve">
<value>Build a .NET project.</value>
</data>
<data name="PackageDefinition" xml:space="preserve">
<value>Search for, add, remove, or list PackageReferences for a .NET project.</value>
</data>
<data name="PublishDefinition" xml:space="preserve">
<value>Publish a .NET project for deployment.</value>
</data>
<data name="ReferenceDefinition" xml:space="preserve">
<value>Add, remove, or list ProjectReferences for a .NET project.</value>
</data>
<data name="RunDefinition" xml:space="preserve">
<value>Build and run a .NET project output.</value>
</data>
Expand All @@ -186,15 +192,6 @@
<data name="ProjectModificationCommands" xml:space="preserve">
<value>Project modification commands</value>
</data>
<data name="AddDefinition" xml:space="preserve">
<value>Add a package or reference to a .NET project.</value>
</data>
<data name="RemoveDefinition" xml:space="preserve">
<value>Remove a package or reference from a .NET project.</value>
</data>
<data name="ListDefinition" xml:space="preserve">
<value>List packages or references of a .NET project.</value>
</data>
<data name="AdvancedCommands" xml:space="preserve">
<value>Advanced Commands</value>
</data>
Expand Down
25 changes: 10 additions & 15 deletions src/Cli/dotnet/commands/dotnet-help/xlf/LocalizableStrings.cs.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 10 additions & 15 deletions src/Cli/dotnet/commands/dotnet-help/xlf/LocalizableStrings.de.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading