コード例 #1
0
        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>()));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
ファイル: TemplateCommand.cs プロジェクト: dotnet/templating
        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;
            }
        }