Пример #1
0
        public static string GetShortcut(PropertyInfo info)
        {
            var actionProperty = ArgAction.GetActionProperty(info.DeclaringType);
            if (actionProperty != null && actionProperty.Name == info.Name) return null;

            var attr = info.Attr<ArgShortcut>();

            if (attr == null) return info.GetArgumentName()[0] + "";
            else return attr.Shortcut;
        }
Пример #2
0
        /// <summary>
        /// Validates that the user actually specified a value and optionally prompts them when it is missing.
        /// </summary>
        /// <param name="prop">The property being populated.  This validator doesn't do anything with it.</param>
        /// <param name="arg">The value specified on the command line or null if it wasn't specified</param>
        public override void ValidateAlways(PropertyInfo prop, ref string arg)
        {
            if (arg == null && PromptIfMissing)
            {
                var value = "";
                while (string.IsNullOrWhiteSpace(value))
                {
                    Console.Write("Enter value for " + prop.GetArgumentName() + ": ");
                    value = Console.ReadLine();
                }

                arg = value;
            }
            if (arg == null)
            {
                throw new MissingArgException("The argument '" + prop.GetArgumentName() + "' is required", new ArgumentNullException(prop.GetArgumentName()));
            }
        }
Пример #3
0
        private static string GetShortcutInternal(PropertyInfo info, List<string> knownShortcuts)
        {
            var actionProperty = ArgAction.GetActionProperty(info.DeclaringType);
            if (actionProperty != null && actionProperty.Name == info.Name) return null;

            var attr = info.Attr<ArgShortcut>();

            if (attr == null)
            {
                string shortcutVal = "";
                foreach (char c in info.GetArgumentName())
                {
                    shortcutVal += c;
                    if (knownShortcuts.Contains(shortcutVal) == false) return shortcutVal;
                }
                return shortcutVal;
            }
            else
            {
                if (attr.policy.HasValue && attr.policy.Value == ArgShortcutPolicy.NoShortcut && attr.Shortcut != null)
                {
                    throw new InvalidArgDefinitionException("You cannot specify a shortcut value and an ArgShortcutPolicy of NoShortcut");
                }

                if (attr.Shortcut == null) return null;
                if (attr.Shortcut.StartsWith("-")) attr.Shortcut = attr.Shortcut.Substring(1);
                else if (attr.Shortcut.StartsWith("/")) attr.Shortcut = attr.Shortcut.Substring(1);
                return attr.Shortcut;
            }
        }
Пример #4
0
        private static List<string> FindShortcutsInternal(PropertyInfo info, List<string> knownShortcuts)
        {
            var actionProperty = ArgAction.GetActionProperty(info.DeclaringType);
            if (actionProperty != null && actionProperty.Name == info.Name) return new List<string>();

            var attrs = info.Attrs<ArgShortcut>();

            if (attrs.Count == 0)
            {
                string shortcutVal = "";
                foreach (char c in info.GetArgumentName())
                {
                    shortcutVal += c;
                    if (knownShortcuts.Contains(shortcutVal) == false) return new List<string>{ shortcutVal };
                }
                return new List<string> { shortcutVal };
            }
            else
            {
                List<string> ret = new List<string>();
                bool noShortcut = false;
                foreach (var attr in attrs)
                {
                    if (attr.policy.HasValue && attr.policy.Value == ArgShortcutPolicy.NoShortcut)
                    {
                        noShortcut = true;
                    }

                    if (noShortcut && attr.Shortcut != null)
                    {
                        throw new InvalidArgDefinitionException("You cannot specify a shortcut value and an ArgShortcutPolicy of NoShortcut");
                    }

                    if (attr.Shortcut != null)
                    {
                        if (attr.Shortcut.StartsWith("-")) attr.Shortcut = attr.Shortcut.Substring(1);
                        else if (attr.Shortcut.StartsWith("/")) attr.Shortcut = attr.Shortcut.Substring(1);
                    }

                    if (attr.Shortcut != null)
                    {
                        ret.Add(attr.Shortcut);
                    }
                }

                return ret;
            }
        }
Пример #5
0
        private static List<string> FindShortcutsInternal(PropertyInfo info, List<string> knownShortcuts)
        {
            var actionProperty = ArgAction.GetActionProperty(info.DeclaringType);
            if (actionProperty != null && actionProperty.Name == info.Name) return new List<string>();

            var attrs = info.Attrs<ArgShortcut>();

            bool ignoreCase = true;
            if (info.DeclaringType.HasAttr<ArgIgnoreCase>() && info.DeclaringType.Attr<ArgIgnoreCase>().IgnoreCase == false) ignoreCase = false;

            if (attrs.Count == 0)
            {
                string shortcutVal = "";
                foreach (char c in info.GetArgumentName().Substring(0, info.GetArgumentName().Length-1))
                {
                    shortcutVal += c;
                    if (knownShortcuts.Contains(shortcutVal) == false) return new List<string>{ ignoreCase ? shortcutVal.ToLower() : shortcutVal };
                }
                return new List<string>();
            }
            else
            {
                List<string> ret = new List<string>();
                foreach (var attr in attrs.OrderBy(a => a.Shortcut == null ? 0 : a.Shortcut.Length))
                {
                    bool noShortcut = false;
                    if (attr.Policy == ArgShortcutPolicy.NoShortcut)
                    {
                        noShortcut = true;
                    }

                    if (noShortcut && attr.Shortcut != null)
                    {
                        throw new InvalidArgDefinitionException("You cannot specify a shortcut value and an ArgShortcutPolicy of NoShortcut");
                    }

                    if (attr.Shortcut != null)
                    {
                        if (attr.Shortcut.StartsWith("-")) attr.Shortcut = attr.Shortcut.Substring(1);
                        else if (attr.Shortcut.StartsWith("/")) attr.Shortcut = attr.Shortcut.Substring(1);
                    }

                    if (attr.Shortcut != null)
                    {
                        ret.Add(ignoreCase ? attr.Shortcut.ToLower() : attr.Shortcut);
                    }
                }

                return ret;
            }
        }
        private static string GetShortcutInternal(PropertyInfo info, List<string> knownShortcuts)
        {
            var actionProperty = ArgAction.GetActionProperty(info.DeclaringType);
            if (actionProperty != null && actionProperty.Name == info.Name) return null;

            var attr = info.Attr<ArgShortcut>();

            if (attr == null)
            {
                string shortcutVal = "";
                foreach (char c in info.GetArgumentName())
                {
                    shortcutVal += c;
                    if (knownShortcuts.Contains(shortcutVal) == false) return shortcutVal;
                }
                return shortcutVal;
            }
            else
            {
                if (attr.Shortcut == null) return null;
                if (attr.Shortcut.StartsWith("-")) attr.Shortcut = attr.Shortcut.Substring(1);
                else if (attr.Shortcut.StartsWith("/")) attr.Shortcut = attr.Shortcut.Substring(1);
                return attr.Shortcut;
            }
        }