public T GetOptionValue <T>(string optionName, DiagnosticDescriptor rule, TryParseValue <T> tryParseValue, T defaultValue) { if (ReferenceEquals(this, Empty)) { return(defaultValue); } return((T)_computedOptionValuesMap.GetOrAdd($"{rule.Id}.{optionName}", _ => ComputeOptionValue(optionName, rule, tryParseValue, defaultValue)) !); }
/// <summary> /// Creates an argument parser for a many-valued argument using a parser that operates on each string value. /// </summary> /// <typeparam name="T">The type of the parsed value.</typeparam> /// <param name="parse">The string parser.</param> /// <returns>The argument parser.</returns> internal static ParseArgument <IEnumerable <T> > ParseArgumentsWith <T>(TryParseValue <T> parse) => argument => { var optionName = ((OptionResult)argument.Parent).Token.Value; var validation = argument.Tokens.Select(token => parse(token.Value, optionName)).Sequence(); if (validation.IsFailure) { argument.ErrorMessage = validation.ErrorMessage; } return(validation.ValueOrDefault); };
public static bool TryParse(string text, TryParseValue valueParser, out Range <T> range) { const string pattern = @"(\[|\()([^,]*)\s*,\s*([^\)\]]*)(\)|\])"; var match = Regex.Match(text, pattern); if (match.Success) { string leftBracket = match.Groups[1].Value; string fromStr = match.Groups[2].Value; string toStr = match.Groups[3].Value; string rightBracket = match.Groups[4].Value; bool isFromInclusive = leftBracket.Equals("["); bool isToInclusive = rightBracket.Equals("]"); T from; T to; if (valueParser(fromStr, out from) && valueParser(toStr, out to) && from.CompareTo(to) <= 0) { range = new Range <T>(from, to, isFromInclusive, isToInclusive); return(true); } } else { T value; bool isSuccessful = valueParser(text, out value); if (isSuccessful) { range = new Range <T>(value, value); return(true); } } range = new Range <T>(default(T), default(T)); return(false); }
/// <summary> /// Creates an argument parser for a single-valued argument using a parser that operates on the string value. /// </summary> /// <typeparam name="T">The type of the parsed value.</typeparam> /// <param name="parse">The string parser.</param> /// <returns>The argument parser.</returns> internal static ParseArgument <T> ParseArgumentWith <T>(TryParseValue <T> parse) => argument => { var values = ParseArgumentsWith(parse)(argument); return(values == null ? default : values.Single()); };
private T ComputeOptionValue <T>(string optionName, DiagnosticDescriptor rule, TryParseValue <T> tryParseValue, T defaultValue) { if (TryGetSpecificOptionValue(rule.Id, out var optionValue) || TryGetSpecificOptionValue(rule.Category, out optionValue) || TryGetAnySpecificOptionValue(rule.CustomTags, out optionValue) || TryGetGeneralOptionValue(out optionValue)) { return(optionValue); } return(defaultValue); // Local functions. bool TryGetSpecificOptionValue(string specificOptionKey, out T specificOptionValue) { if (SpecificOptions.TryGetValue(specificOptionKey, out var specificRuleOptions) && specificRuleOptions.TryGetValue(optionName, out var valueString)) { return(tryParseValue(valueString, out specificOptionValue)); } specificOptionValue = defaultValue; return(false); } bool TryGetAnySpecificOptionValue(IEnumerable <string> specificOptionKeys, out T specificOptionValue) { foreach (var specificOptionKey in specificOptionKeys) { if (TryGetSpecificOptionValue(specificOptionKey, out specificOptionValue)) { return(true); } } specificOptionValue = defaultValue; return(false); } bool TryGetGeneralOptionValue(out T generalOptionValue) { if (GeneralOptions.TryGetValue(optionName, out var valueString)) { return(tryParseValue(valueString, out generalOptionValue)); } generalOptionValue = defaultValue; return(false); } }
private T ComputeOptionValue <T>(string optionName, DiagnosticDescriptor rule, TryParseValue <T> tryParseValue, T defaultValue) { if (TryGetSpecificOptionValue(rule.Id, out var optionValue) || TryGetSpecificOptionValue(rule.Category, out optionValue) || TryGetGeneralOptionValue(out optionValue)) { return(optionValue); } return(defaultValue); // Local functions. #pragma warning disable IDE0060 // Remove unused parameter - https://github.com/dotnet/roslyn/issues/32973 bool TryGetSpecificOptionValue(string specificOptionKey, out T specificOptionValue) #pragma warning restore IDE0060 // Remove unused parameter { if (SpecificOptions.TryGetValue(specificOptionKey, out var specificRuleOptions) && specificRuleOptions.TryGetValue(optionName, out var valueString)) { return(tryParseValue(valueString, out specificOptionValue)); } specificOptionValue = defaultValue; return(false); } #pragma warning disable IDE0060 // Remove unused parameter - https://github.com/dotnet/roslyn/issues/32973 bool TryGetGeneralOptionValue(out T generalOptionValue) #pragma warning restore IDE0060 // Remove unused parameter { if (GeneralOptions.TryGetValue(optionName, out var valueString)) { return(tryParseValue(valueString, out generalOptionValue)); } generalOptionValue = defaultValue; return(false); } }