コード例 #1
0
 public static ArgumentsRule ExistingFilesOnly(
     this ArgumentsRule rule) =>
 rule.And(new ArgumentsRule(o => o.Arguments
                            .Where(filePath => !File.Exists(filePath) &&
                                   !Directory.Exists(filePath))
                            .Select(FileDoesNotExist)
                            .FirstOrDefault()));
コード例 #2
0
ファイル: Option.cs プロジェクト: wli3/CliCommandLineParser
        protected internal Option(
            string[] aliases,
            string help,
            ArgumentsRule arguments = null,
            Option[] options        = null)
        {
            if (aliases == null)
            {
                throw new ArgumentNullException(nameof(aliases));
            }

            if (!aliases.Any())
            {
                throw new ArgumentException("An option must have at least one alias.");
            }

            if (aliases.Any(string.IsNullOrWhiteSpace))
            {
                throw new ArgumentException("An option alias cannot be null, empty, or consist entirely of whitespace.");
            }

            RawAliases = aliases;

            foreach (var alias in aliases)
            {
                this.aliases.Add(alias.RemovePrefix());
            }

            HelpText = help;

            Name = aliases
                   .Select(a => a.RemovePrefix())
                   .OrderBy(a => a.Length)
                   .Last();

            if (options != null && options.Any())
            {
                foreach (var option in options)
                {
                    option.Parent = this;
                    DefinedOptions.Add(option);
                }
            }

            ArgumentsRule = arguments ?? Accept.NoArguments();

            if (options != null)
            {
                ArgumentsRule = ArgumentsRule.And(Accept.ZeroOrMoreOf(options));
            }

            AllowedValues = ArgumentsRule.AllowedValues;

            suggest = ArgumentsRule.Suggest;
        }
コード例 #3
0
        public static ArgumentsRule ExistingFilesOnly(
            this ArgumentsRule rule) =>
        rule.And(new ArgumentsRule(o =>
        {
            foreach (var filePath in o.Arguments)
            {
                if (!File.Exists(filePath) &&
                    !Directory.Exists(filePath))
                {
                    return($"File does not exist: {filePath}");
                }
            }

            return(null);
        }));
コード例 #4
0
        public static ArgumentsRule LegalFilePathsOnly(
            this ArgumentsRule rule) =>
        rule.And(new ArgumentsRule(o =>
        {
            foreach (var arg in o.Arguments)
            {
                try
                {
                    var fileInfo = new FileInfo(arg);
                }
                catch (NotSupportedException ex)
                {
                    return(ex.Message);
                }
                catch (ArgumentException ex)
                {
                    return(ex.Message);
                }
            }

            return(null);
        }));
コード例 #5
0
 public static ArgumentsRule WithSuggestionsFrom(
     this ArgumentsRule rule,
     Func <string, IEnumerable <string> > suggest) =>
 rule.And(WithSuggestionsFrom(suggest));
コード例 #6
0
 public static ArgumentsRule And(
     this ArgumentsRule rule,
     Func <AppliedOption, string> error)
 {
     return(rule.And(new ArgumentsRule(error)));
 }
コード例 #7
0
 public static ArgumentsRule WithSuggestionsFrom(
     this ArgumentsRule rule,
     params string[] values) =>
 rule.And(WithSuggestionsFrom(values));