public ListProjectToProjectReferencesCommand( AppliedOption appliedCommand, ParseResult parseResult) : base() { if (appliedCommand == null) { throw new ArgumentNullException(nameof(appliedCommand)); } if (parseResult == null) { throw new ArgumentNullException(nameof(parseResult)); } // If showing help, replace the parent's argument rule so that this command's argument // only shows `PROJECT` instead of `PROJECT | SOLUTION`. if (parseResult.AppliedCommand().IsHelpRequested() && (parseResult.Command().Parent is ListCommandParser.ListCommand parent)) { parent.SetArgumentsRule( Accept.ZeroOrOneArgument() .With( name: CommonLocalizableStrings.ProjectArgumentName, description: CommonLocalizableStrings.ProjectArgumentDescription) .DefaultToCurrentDirectory() ); } ShowHelpOrErrorIfAppropriate(parseResult); _fileOrDirectory = appliedCommand.Arguments.Single(); }
public static Command ListPackageReferences() => Create.Command( "package", LocalizableStrings.AppFullName, Accept.ZeroOrOneArgument(), CommonOptions.HelpOption(), Create.Option("--outdated", LocalizableStrings.CmdOutdatedDescription), Create.Option("--framework", LocalizableStrings.CmdFrameworkDescription, Accept.OneOrMoreArguments() .With(name: LocalizableStrings.CmdFramework) .ForwardAsSingle(o => $"--framework {string.Join("%3B", o.Arguments)}")), Create.Option("--include-transitive", LocalizableStrings.CmdTransitiveDescription), Create.Option("--include-prerelease", LocalizableStrings.CmdPrereleaseDescription), Create.Option("--highest-patch", LocalizableStrings.CmdHighestPatchDescription), Create.Option("--highest-minor", LocalizableStrings.CmdHighestMinorDescription), Create.Option("--config", LocalizableStrings.CmdConfigDescription, Accept.ExactlyOneArgument() .With(name: LocalizableStrings.CmdConfig) .ForwardAsSingle(o => $"--config {o.Arguments.Single()}")), Create.Option("--source", LocalizableStrings.CmdSourceDescription, Accept.OneOrMoreArguments() .With(name: LocalizableStrings.CmdSource) .ForwardAsSingle(o => $"--source {string.Join("%3B", o.Arguments)}")));
public static Command Migrate() => Create.Command( "migrate", ".NET Migrate Command", Accept.ZeroOrOneArgument() .MaterializeAs(o => new MigrateCommand( o.ValueOrDefault <string>("--template-file"), o.Arguments.FirstOrDefault(), o.ValueOrDefault <string>("--sdk-package-version"), o.ValueOrDefault <string>("--xproj-file"), o.ValueOrDefault <string>("--report-file"), o.ValueOrDefault <bool>("--skip-project-references"), o.ValueOrDefault <bool>("--format-report-file-json"), o.ValueOrDefault <bool>("--skip-backup"))) .With(name: LocalizableStrings.CmdProjectArgument, description: LocalizableStrings.CmdProjectArgumentDescription), CommonOptions.HelpOption(), Create.Option("-t|--template-file", LocalizableStrings.CmdTemplateDescription), Create.Option("-v|--sdk-package-version", LocalizableStrings.CmdVersionDescription), Create.Option("-x|--xproj-file", LocalizableStrings.CmdXprojFileDescription), Create.Option("-s|--skip-project-references", LocalizableStrings.CmdSkipProjectReferencesDescription), Create.Option("-r|--report-file", LocalizableStrings.CmdReportFileDescription), Create.Option("--format-report-file-json", LocalizableStrings.CmdReportOutputDescription), Create.Option("--skip-backup", LocalizableStrings.CmdSkipBackupDescription));
public static Command ToolRestore() { return(Create.Command( "restore", LocalizableStrings.CommandDescription, Accept.NoArguments(), Create.Option( "--configfile", LocalizableStrings.ConfigFileOptionDescription, Accept.ExactlyOneArgument() .With(name: LocalizableStrings.ConfigFileOptionName)), Create.Option( "--add-source", LocalizableStrings.AddSourceOptionDescription, Accept.OneOrMoreArguments() .With(name: LocalizableStrings.AddSourceOptionName)), Create.Option( "--tool-manifest", LocalizableStrings.ManifestPathOptionDescription, Accept.ZeroOrOneArgument() .With(name: LocalizableStrings.ManifestPathOptionName)), ToolCommandRestorePassThroughOptions.DisableParallelOption(), ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption(), ToolCommandRestorePassThroughOptions.NoCacheOption(), ToolCommandRestorePassThroughOptions.InteractiveRestoreOption(), CommonOptions.HelpOption(), CommonOptions.VerbosityOption())); }
public static Command Migrate() => Create.Command( "migrate", ".NET Migrate Command", Accept.ZeroOrOneArgument() .With(name: LocalizableStrings.CmdProjectArgument, description: LocalizableStrings.CmdProjectArgumentDescription), CommonOptions.HelpOption(), Create.Option("-t|--template-file", LocalizableStrings.CmdTemplateDescription, Accept.ExactlyOneArgument()), Create.Option("-v|--sdk-package-version", LocalizableStrings.CmdVersionDescription, Accept.ExactlyOneArgument()), Create.Option("-x|--xproj-file", LocalizableStrings.CmdXprojFileDescription, Accept.ExactlyOneArgument()), Create.Option("-s|--skip-project-references", LocalizableStrings.CmdSkipProjectReferencesDescription), Create.Option("-r|--report-file", LocalizableStrings.CmdReportFileDescription, Accept.ExactlyOneArgument()), Create.Option("--format-report-file-json", LocalizableStrings.CmdReportOutputDescription), Create.Option("--skip-backup", LocalizableStrings.CmdSkipBackupDescription));
// Creates a command setup with the args for "new", plus args for the input template parameters. public static Command CreateNewCommandWithArgsForTemplate(string commandName, string templateName, IReadOnlyList <ITemplateParameter> parameterDefinitions, IDictionary <string, string> longNameOverrides, IDictionary <string, string> shortNameOverrides, out IReadOnlyDictionary <string, IReadOnlyList <string> > templateParamMap) { IList <Option> paramOptionList = new List <Option>(); HashSet <string> initiallyTakenAliases = ArgsForBuiltInCommands; Dictionary <string, IReadOnlyList <string> > canonicalToVariantMap = new Dictionary <string, IReadOnlyList <string> >(); AliasAssignmentCoordinator assignmentCoordinator = new AliasAssignmentCoordinator(parameterDefinitions, longNameOverrides, shortNameOverrides, initiallyTakenAliases); if (assignmentCoordinator.InvalidParams.Count > 0) { string unusableDisplayList = string.Join(", ", assignmentCoordinator.InvalidParams); throw new Exception($"Template is malformed. The following parameter names are invalid: {unusableDisplayList}"); } foreach (ITemplateParameter parameter in parameterDefinitions.Where(x => x.Priority != TemplateParameterPriority.Implicit)) { Option option; IList <string> aliasesForParam = new List <string>(); if (assignmentCoordinator.LongNameAssignments.TryGetValue(parameter.Name, out string longVersion)) { aliasesForParam.Add(longVersion); } if (assignmentCoordinator.ShortNameAssignments.TryGetValue(parameter.Name, out string shortVersion)) { aliasesForParam.Add(shortVersion); } if (string.Equals(parameter.DataType, "choice", StringComparison.OrdinalIgnoreCase)) { option = Create.Option(string.Join("|", aliasesForParam), parameter.Documentation, Accept.ExactlyOneArgument()); //.WithSuggestionsFrom(parameter.Choices.Keys.ToArray()) // Don't give this a default value, otherwise the switch without a value is valid (gets set to the default) // User should have to give a value, or not specify the switch - which causes the default to be applied. } else if (string.Equals(parameter.DataType, "bool", StringComparison.OrdinalIgnoreCase)) { option = Create.Option(string.Join("|", aliasesForParam), parameter.Documentation, Accept.ZeroOrOneArgument() .WithSuggestionsFrom(new[] { "true", "false" })); } else { option = Create.Option(string.Join("|", aliasesForParam), parameter.Documentation, Accept.ExactlyOneArgument()); } paramOptionList.Add(option); // add the option canonicalToVariantMap.Add(parameter.Name, aliasesForParam.ToList()); // map the template canonical name to its aliases. } templateParamMap = canonicalToVariantMap; return(GetNewCommandForTemplate(commandName, templateName, NewCommandVisibleArgs, NewCommandHiddenArgs, DebuggingCommandArgs, paramOptionList.ToArray())); }
public static Command ToolUninstall() { return(Create.Command("uninstall", LocalizableStrings.CommandDescription, Accept.ExactlyOneArgument(errorMessage: o => LocalizableStrings.SpecifyExactlyOnePackageId) .With(name: LocalizableStrings.PackageIdArgumentName, description: LocalizableStrings.PackageIdArgumentDescription), Create.Option( $"-g|--{ToolAppliedOption.GlobalOption}", LocalizableStrings.GlobalOptionDescription, Accept.NoArguments()), Create.Option( $"--{ToolAppliedOption.LocalOption}", LocalizableStrings.LocalOptionDescription, Accept.NoArguments()), Create.Option( $"--{ToolAppliedOption.ToolPathOption}", LocalizableStrings.ToolPathOptionDescription, Accept.ExactlyOneArgument() .With(name: LocalizableStrings.ToolPathOptionName)), Create.Option( $"--{ToolAppliedOption.ToolManifest}", LocalizableStrings.ManifestPathOptionDescription, Accept.ZeroOrOneArgument() .With(name: LocalizableStrings.ManifestPathOptionName)), CommonOptions.HelpOption())); }
public static Command Publish() => CreateWithRestoreOptions.Command( "publish", LocalizableStrings.AppDescription, Accept.ZeroOrMoreArguments(), CommonOptions.HelpOption(), Create.Option( "-o|--output", LocalizableStrings.OutputOptionDescription, Accept.ExactlyOneArgument() .With(name: LocalizableStrings.OutputOption) .ForwardAsSingle(o => $"/p:PublishDir={o.Arguments.Single()}")), CommonOptions.FrameworkOption(), CommonOptions.RuntimeOption(), CommonOptions.ConfigurationOption(), CommonOptions.VersionSuffixOption(), Create.Option( "--manifest", LocalizableStrings.ManifestOptionDescription, Accept.OneOrMoreArguments() .With(name: LocalizableStrings.ManifestOption) .ForwardAsSingle(o => $"/p:TargetManifestFiles={string.Join("%3B", o.Arguments)}")), Create.Option( "--self-contained", LocalizableStrings.SelfContainedOptionDescription, Accept.ZeroOrOneArgument() .WithSuggestionsFrom("true", "false") .ForwardAsSingle(o => { string value = o.Arguments.Any() ? o.Arguments.Single() : "true"; return($"/p:SelfContained={value}"); })), CommonOptions.NoRestoreOption(), CommonOptions.VerbosityOption());
public static Command ListProjectToProjectReferences() { return(Create.Command( "reference", LocalizableStrings.AppFullName, Accept.ZeroOrOneArgument(), CommonOptions.HelpOption())); }
public static Command List() => Create.Command( "list", LocalizableStrings.NetListCommand, Accept.ZeroOrOneArgument() .With( name: CommonLocalizableStrings.ProjectArgumentName, description: CommonLocalizableStrings.ProjectArgumentDescription) .DefaultToCurrentDirectory(), CommonOptions.HelpOption(), ListProjectToProjectReferencesCommandParser.ListProjectToProjectReferences());
public static Command Help() { return(Create.Command( "help", LocalizableStrings.AppFullName, Accept.ZeroOrOneArgument() .With( LocalizableStrings.CommandArgumentDescription, LocalizableStrings.CommandArgumentName), CommonOptions.HelpOption())); }
public void By_default_an_option_with_zero_or_one_argument_materializes_as_the_argument_string_value_by_default() { var command = Command("the-command", "", Option("-x", "", Accept.ZeroOrOneArgument())); var result = command.Parse("the-command -x the-argument"); result["the-command"]["x"] .Value() .Should() .Be("the-argument"); }
public static Command ToolInstall() { return(Create.Command("install", LocalizableStrings.CommandDescription, Accept.ExactlyOneArgument(errorMessage: o => LocalizableStrings.SpecifyExactlyOnePackageId) .With(name: LocalizableStrings.PackageIdArgumentName, description: LocalizableStrings.PackageIdArgumentDescription), Create.Option( $"-g|--{ToolAppliedOption.GlobalOption}", LocalizableStrings.GlobalOptionDescription, Accept.NoArguments()), Create.Option( $"--{ToolAppliedOption.LocalOption}", LocalizableStrings.LocalOptionDescription, Accept.NoArguments()), Create.Option( $"--{ToolAppliedOption.ToolPathOption}", LocalizableStrings.ToolPathOptionDescription, Accept.ExactlyOneArgument() .With(name: LocalizableStrings.ToolPathOptionName)), Create.Option( "--version", LocalizableStrings.VersionOptionDescription, Accept.ExactlyOneArgument() .With(name: LocalizableStrings.VersionOptionName)), Create.Option( "--configfile", LocalizableStrings.ConfigFileOptionDescription, Accept.ExactlyOneArgument() .With(name: LocalizableStrings.ConfigFileOptionName)), Create.Option( $"--{ToolAppliedOption.ToolManifest}", LocalizableStrings.ManifestPathOptionDescription, Accept.ZeroOrOneArgument() .With(name: LocalizableStrings.ManifestPathOptionName)), Create.Option( "--add-source", LocalizableStrings.AddSourceOptionDescription, Accept.OneOrMoreArguments() .With(name: LocalizableStrings.AddSourceOptionName)), Create.Option( "--framework", LocalizableStrings.FrameworkOptionDescription, Accept.ExactlyOneArgument() .With(name: LocalizableStrings.FrameworkOptionName)), ToolCommandRestorePassThroughOptions.DisableParallelOption(), ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption(), ToolCommandRestorePassThroughOptions.NoCacheOption(), ToolCommandRestorePassThroughOptions.InteractiveRestoreOption(), CommonOptions.HelpOption(), CommonOptions.VerbosityOption())); }
public static Command List() => Create.Command("list", LocalizableStrings.NetListCommand, Accept.ZeroOrOneArgument() .With(name: CommonLocalizableStrings.CmdProjectFile, description: CommonLocalizableStrings.ArgumentsProjectDescription) .DefaultToCurrentDirectory(), CommonOptions.HelpOption(), Create.Command("reference", Tools.List.ProjectToProjectReferences.LocalizableStrings.AppFullName, Accept.ZeroOrOneArgument(), CommonOptions.HelpOption()));
public static Command Publish() => CreateWithRestoreOptions.Command( "publish", LocalizableStrings.AppDescription, Accept.ZeroOrMoreArguments() .With(name: CommonLocalizableStrings.SolutionOrProjectArgumentName, description: CommonLocalizableStrings.SolutionOrProjectArgumentDescription), CommonOptions.HelpOption(), Create.Option( "-o|--output", LocalizableStrings.OutputOptionDescription, Accept.ExactlyOneArgument() .With(name: LocalizableStrings.OutputOption) .ForwardAsSingle(o => $"-property:PublishDir={CommandDirectoryContext.GetFullPath(o.Arguments.Single())}")), CommonOptions.FrameworkOption(LocalizableStrings.FrameworkOptionDescription), CommonOptions.RuntimeOption(LocalizableStrings.RuntimeOptionDescription), CommonOptions.ConfigurationOption(LocalizableStrings.ConfigurationOptionDescription), CommonOptions.VersionSuffixOption(), Create.Option( "--manifest", LocalizableStrings.ManifestOptionDescription, Accept.OneOrMoreArguments() .With(name: LocalizableStrings.ManifestOption) .ForwardAsSingle(o => $"-property:TargetManifestFiles={string.Join("%3B", o.Arguments.Select(CommandDirectoryContext.GetFullPath))}")), Create.Option( "--no-build", LocalizableStrings.NoBuildOptionDescription, Accept.NoArguments().ForwardAs("-property:NoBuild=true")), Create.Option( "--self-contained", LocalizableStrings.SelfContainedOptionDescription, Accept.ZeroOrOneArgument() .WithSuggestionsFrom("true", "false") .ForwardAsSingle(o => { string value = o.Arguments.Any() ? o.Arguments.Single() : "true"; return($"-property:SelfContained={value}"); })), Create.Option( "--no-self-contained", LocalizableStrings.NoSelfContainedOptionDescription, Accept.NoArguments().ForwardAs("-property:SelfContained=false")), Create.Option( "--nologo", LocalizableStrings.CmdNoLogo, Accept.NoArguments() .ForwardAs("-nologo")), CommonOptions.InteractiveMsBuildForwardOption(), CommonOptions.NoRestoreOption(), CommonOptions.VerbosityOption());
public ListCommand() : base( name: "list", help: LocalizableStrings.NetListCommand, options: new Option[] { CommonOptions.HelpOption(), ListPackageReferencesCommandParser.ListPackageReferences(), ListProjectToProjectReferencesCommandParser.ListProjectToProjectReferences(), }, arguments: Accept.ZeroOrOneArgument() .With( name: CommonLocalizableStrings.SolutionOrProjectArgumentName, description: CommonLocalizableStrings.SolutionOrProjectArgumentDescription) .DefaultToCurrentDirectory()) { }
// Creates a command setup with the args for "new", plus args for the input template parameters. public static Command CreateNewCommandWithArgsForTemplate(string commandName, string templateName, IReadOnlyList <ITemplateParameter> parameterDefinitions, IDictionary <string, string> longNameOverrides, IDictionary <string, string> shortNameOverrides, out IReadOnlyDictionary <string, IReadOnlyList <string> > templateParamMap) { IList <Option> paramOptionList = new List <Option>(); HashSet <string> initiallyTakenAliases = ArgsForBuiltInCommands; Dictionary <string, IReadOnlyList <string> > canonicalToVariantMap = new Dictionary <string, IReadOnlyList <string> >(); AliasAssignmentCoordinator assignmentCoordinator = new AliasAssignmentCoordinator(parameterDefinitions, longNameOverrides, shortNameOverrides, initiallyTakenAliases); if (assignmentCoordinator.InvalidParams.Count > 0) { string unusableDisplayList = string.Join(", ", assignmentCoordinator.InvalidParams); throw new Exception($"Template is malformed. The following parameter names are invalid: {unusableDisplayList}"); } foreach (ITemplateParameter parameter in parameterDefinitions.Where(x => x.Priority != TemplateParameterPriority.Implicit)) { Option option; IList <string> aliasesForParam = new List <string>(); if (assignmentCoordinator.LongNameAssignments.TryGetValue(parameter.Name, out string longVersion)) { aliasesForParam.Add(longVersion); } if (assignmentCoordinator.ShortNameAssignments.TryGetValue(parameter.Name, out string shortVersion)) { aliasesForParam.Add(shortVersion); } if (parameter is IAllowDefaultIfOptionWithoutValue parameterWithNoValueDefault && !string.IsNullOrEmpty(parameterWithNoValueDefault.DefaultIfOptionWithoutValue)) { // This switch can be provided with or without a value. // If the user doesn't specify a value, it gets the value of DefaultIfOptionWithoutValue option = Create.Option(string.Join("|", aliasesForParam), parameter.Documentation, Accept.ZeroOrOneArgument()); }
public Cli.CommandLine.Command Migrate() => Create.Command( "migrate", ".NET Migrate Command", Accept.ZeroOrOneArgument() .MaterializeAs(o => new MigrateCommand.MigrateCommand( new CallStage0DotnetSlnToManipulateSolutionFile(), new CallStage0DotnetNewToAddTemplate(), o.ValueOrDefault <string>("--template-file"), o.Arguments.FirstOrDefault(), o.ValueOrDefault <string>("--sdk-package-version"), o.ValueOrDefault <string>("--xproj-file"), o.ValueOrDefault <string>("--report-file"), o.ValueOrDefault <bool>("--skip-project-references"), o.ValueOrDefault <bool>("--format-report-file-json"), o.ValueOrDefault <bool>("--skip-backup"), (l) => _stdOut.Append(l))) .With(name: "", description: ""), Create.Option("-t|--template-file", "", Accept.ExactlyOneArgument()), Create.Option("-v|--sdk-package-version", "", Accept.ExactlyOneArgument()), Create.Option("-x|--xproj-file", "", Accept.ExactlyOneArgument()), Create.Option("-s|--skip-project-references", ""), Create.Option("-r|--report-file", "", Accept.ExactlyOneArgument()), Create.Option("--format-report-file-json", ""), Create.Option("--skip-backup", ""));
// Creates a command setup with the args for "new", plus args for the input template parameters. public static Command CreateNewCommandWithArgsForTemplate(string commandName, string templateName, IReadOnlyList <ITemplateParameter> parameterDefinitions, IDictionary <string, string> longNameOverrides, IDictionary <string, string> shortNameOverrides, out IReadOnlyDictionary <string, IReadOnlyList <string> > templateParamMap) { IList <Option> paramOptionList = new List <Option>(); Option[] allBuiltInArgs = ArrayExtensions.CombineArrays(NewCommandVisibleArgs, NewCommandHiddenArgs, NewCommandReservedArgs, DebuggingCommandArgs); HashSet <string> takenAliases = VariantsForOptions(allBuiltInArgs); HashSet <string> invalidParams = new HashSet <string>(); Dictionary <string, IReadOnlyList <string> > canonicalToVariantMap = new Dictionary <string, IReadOnlyList <string> >(); foreach (ITemplateParameter parameter in parameterDefinitions.Where(x => x.Priority != TemplateParameterPriority.Implicit)) { string canonical = parameter.Name; longNameOverrides.TryGetValue(canonical, out string longOverride); shortNameOverrides.TryGetValue(canonical, out string shortOverride); if (CommandAliasAssigner.TryAssignAliasesForParameter((x) => takenAliases.Contains(x), canonical, longOverride, shortOverride, out IReadOnlyList <string> assignedAliases)) { Option option; if (string.Equals(parameter.DataType, "choice", StringComparison.OrdinalIgnoreCase)) { IList <string> choices = parameter.Choices.Keys.ToList(); option = Create.Option(string.Join("|", assignedAliases), parameter.Documentation, Accept.ExactlyOneArgument() //.WithSuggestionsFrom(parameter.Choices.Keys.ToArray()) .With(defaultValue: () => parameter.DefaultValue)); } else if (string.Equals(parameter.DataType, "bool", StringComparison.OrdinalIgnoreCase)) { option = Create.Option(string.Join("|", assignedAliases), parameter.Documentation, Accept.ZeroOrOneArgument() .WithSuggestionsFrom(new[] { "true", "false" })); } else { option = Create.Option(string.Join("|", assignedAliases), parameter.Documentation, Accept.ExactlyOneArgument()); } paramOptionList.Add(option); // add the option canonicalToVariantMap.Add(canonical, assignedAliases.ToList()); // map the template canonical name to its aliases. takenAliases.UnionWith(assignedAliases); // add the aliases to the taken aliases } else { invalidParams.Add(canonical); } } if (invalidParams.Count > 0) { string unusableDisplayList = string.Join(", ", invalidParams); throw new Exception($"Template is malformed. The following parameter names are invalid: {unusableDisplayList}"); } templateParamMap = canonicalToVariantMap; return(GetNewCommandForTemplate(commandName, templateName, NewCommandVisibleArgs, NewCommandHiddenArgs, DebuggingCommandArgs, paramOptionList.ToArray())); }