public static ArgumentResult ParseArgumentTemplate(string template) { var valueName = default(string); var required = false; foreach (var token in TemplateTokenizer.Tokenize(template)) { if (token.TokenKind == TemplateToken.Kind.ShortName || token.TokenKind == TemplateToken.Kind.LongName) { throw TemplateException.ArgumentCannotContainOptions(template, token); } if (token.TokenKind == TemplateToken.Kind.OptionalValue || token.TokenKind == TemplateToken.Kind.RequiredValue) { if (!string.IsNullOrWhiteSpace(valueName)) { throw TemplateException.MultipleValuesAreNotSupported(template, token); } if (string.IsNullOrWhiteSpace(token.Value)) { throw TemplateException.ValuesMustHaveName(template, token); } valueName = token.Value; required = token.TokenKind == TemplateToken.Kind.RequiredValue; } } if (valueName == null) { throw TemplateException.ArgumentsMustHaveValueName(template); } return(new ArgumentResult(valueName, required)); }