internal static TemplateOptionResult?FromParseResult(TemplateOption option, ParseResult parseResult) { OptionResult?optionResult = parseResult.FindResultFor(option.Option); if (optionResult == null) { //option is not specified return(null); } return(new TemplateOptionResult( option, optionResult.Token?.Value ?? string.Empty, optionResult.GetValueOrDefault <string>())); }
internal static new InvalidTemplateOptionResult FromParseResult(TemplateOption option, ParseResult parseResult) { if (!parseResult.HasErrorFor(option.Option)) { throw new ArgumentException($"{nameof(option)} does not have an error in {nameof(parseResult)}"); } OptionResult?optionResult = parseResult.FindResultFor(option.Option); if (optionResult == null) { //option is not specified throw new ArgumentException($"{nameof(option)} is not used in {nameof(parseResult)}"); } string?optionValue = null; if (optionResult.Tokens.Any()) { optionValue = string.Join(", ", optionResult.Tokens.Select(t => t.Value)); } string?errorMessage = null; if (!string.IsNullOrWhiteSpace(optionResult.ErrorMessage)) { errorMessage = optionResult.ErrorMessage; } else { foreach (var result in optionResult.Children) { if (string.IsNullOrWhiteSpace(result.ErrorMessage)) { continue; } errorMessage = result.ErrorMessage; break; } } return(new InvalidTemplateOptionResult( option, Kind.InvalidValue, optionResult.Token?.Value ?? string.Empty, optionValue, errorMessage)); }
private void AddTemplateOptionsToCommand(CliTemplateInfo templateInfo) { HashSet <string> initiallyTakenAliases = GetReservedAliases(); var parametersWithAliasAssignments = AliasAssignmentCoordinator.AssignAliasesForParameter(templateInfo.CliParameters.Values, initiallyTakenAliases); if (parametersWithAliasAssignments.Any(p => p.Errors.Any())) { IReadOnlyDictionary <CliTemplateParameter, IReadOnlyList <string> > errors = parametersWithAliasAssignments .Where(p => p.Errors.Any()) .ToDictionary(p => p.Parameter, p => p.Errors); throw new InvalidTemplateParametersException(templateInfo, errors); } foreach ((CliTemplateParameter parameter, IReadOnlyList <string> aliases, IReadOnlyList <string> _) in parametersWithAliasAssignments) { TemplateOption option = new TemplateOption(parameter, aliases); this.AddOption(option.Option); _templateSpecificOptions[parameter.Name] = option; } }