Пример #1
0
        private static void VerifyNoExplicitConflicts(
            Dictionary <string, object> result,
            CommandlineArgument[] options,
            ParserOptions parserOptions)
        {
            var canConflict = options
                              .Where(o => !o.IsImplicit && o.ConflictsWithKeys.Any())
                              .Select(o => new { o.Key, ConflictsWith = o.ConflictsWithKeys })
                              .ToArray();

            if (!canConflict.Any())
            {
                return;
            }

            var errored  = false;
            var reported = new HashSet <StringPair>();

            canConflict.ForEach(o =>
            {
                o.ConflictsWith.ForEach(conflict =>
                {
                    if (result.ContainsKey(o.Key) && result.ContainsKey(conflict))
                    {
                        errored     = true;
                        var ordered = new[]
                        {
                            o.Key,
                            conflict
                        }.Select(n => options.FirstOrDefault(o => o.Key == n))
                        .OrderBy(o => o.LongName)
                        .ToArray();
                        var left            = ordered[0].LongName;
                        var right           = ordered[1].LongName;
                        var thisConflict    = new StringPair(left, right);
                        var alreadyReported = reported.Contains(thisConflict);
                        if (alreadyReported)
                        {
                            return;
                        }

                        reported.Add(thisConflict);
                        parserOptions.ReportConflict($"--{left}", $"--{right}");
                    }
                });
            });
            if (errored)
            {
                parserOptions.ExitIfRequired(ExitCodes.ARGUMENT_ERROR);
            }
        }
Пример #2
0
 protected bool Equals(StringPair other)
 {
     return(Left == other.Left && Right == other.Right);
 }