static void AddRangeFilter <T>(List <string> lines, RangeSyntax <T> range, string name) where T : IComparable <T> { if (range is not null) { lines.Add($"{name} {range}"); } }
public void Visit(RangeSyntax syntax) { int min = (int)((LiteralSyntax)syntax.Children[0]).Token.Character; int max = (int)((LiteralSyntax)syntax.Children[1]).Token.Character; int index = GetRandomNumber(min, max + 1); LiteralSyntax literal = new LiteralSyntax(new LiteralToken((char)index)); literal.Accept(this); }
public void Visit(RangeSyntax syntax) { throw new NotImplementedException(); }
private static void ApplyInteractions(IssueFilter filter, BoundKevValueQuery query, RangeSyntax <int> range) { filter.Interactions = range.Negate(query.IsNegated); }
private static void ApplyComments(IssueFilter filter, BoundKevValueQuery query, RangeSyntax <int> range) { filter.Comments = range.Negate(query.IsNegated); }
private static void ApplyClosed(IssueFilter filter, BoundKevValueQuery query, RangeSyntax <DateTimeOffset> range) { filter.Closed = range.Negate(query.IsNegated); }
private static Dictionary <(string Key, string Value), Func <IssueFilter, BoundKevValueQuery, bool> > CreateKeyValueHandlers() { var result = new Dictionary <(string Key, string Value), Func <IssueFilter, BoundKevValueQuery, bool> >(); var methods = typeof(IssueQuery).GetMethods(BindingFlags.Static | BindingFlags.NonPublic); foreach (var method in methods) { var attribute = method.GetCustomAttributesData() .SingleOrDefault(ca => ca.AttributeType == typeof(KeyValueHandlerAttribute)); if (attribute is null) { continue; } if (attribute.ConstructorArguments.Count != 1) { throw new Exception($"Wrong number of arguments for [{nameof(KeyValueHandlerAttribute)}] on {method}"); } if (attribute.ConstructorArguments[0].ArgumentType != typeof(string[])) { throw new Exception($"Wrong type of arguments for [{nameof(KeyValueHandlerAttribute)}] on {method}"); } var args = (ICollection <CustomAttributeTypedArgument>)attribute.ConstructorArguments[0].Value; if (args.Count == 0) { throw new Exception($"Wrong number of arguments for [{nameof(KeyValueHandlerAttribute)}] on {method}"); } var strings = args.Select(a => (string)a.Value); var pairs = GetKeyValues(strings).ToArray(); var parameters = method.GetParameters(); Func <IssueFilter, BoundKevValueQuery, bool> handler; if (parameters.Length == 1 && parameters[0].ParameterType == typeof(IssueFilter)) { handler = (filter, query) => { method.Invoke(null, new object[] { filter }); return(true); }; } else if (parameters.Length == 2 && parameters[0].ParameterType == typeof(IssueFilter) && parameters[1].ParameterType == typeof(BoundKevValueQuery)) { handler = (filter, query) => { method.Invoke(null, new object[] { filter, query }); return(true); }; } else if (parameters.Length == 3 && parameters[0].ParameterType == typeof(IssueFilter) && parameters[1].ParameterType == typeof(BoundKevValueQuery) && parameters[2].ParameterType == typeof(RangeSyntax <DateTimeOffset>)) { handler = (filter, query) => { if (RangeSyntax.ParseDateTimeOffset(query.Value) is RangeSyntax <DateTimeOffset> r) { method.Invoke(null, new object[] { filter, query, r }); return(true); } return(false); }; } else if (parameters.Length == 3 && parameters[0].ParameterType == typeof(IssueFilter) && parameters[1].ParameterType == typeof(BoundKevValueQuery) && parameters[2].ParameterType == typeof(RangeSyntax <int>)) { handler = (filter, query) => { if (RangeSyntax.ParseInt32(query.Value) is RangeSyntax <int> r) { method.Invoke(null, new object[] { filter, query, r }); return(true); } return(false); }; } else { throw new Exception($"Unexpected signature for {method}"); } foreach (var kv in pairs) { result.Add(kv, handler); } } return(result); }