public static bool TryWrite(this IExpression expression, TextWriter writer, Scope scope) { var errors = new List <FluentError>(); if (expression is IInlineExpression inlineExpression) { inlineExpression.Write(writer, scope); } else if (expression is SelectExpression selectExpression) { var selector = selectExpression.Selector.Resolve(scope); if (selector is FluentString or FluentNumber) { foreach (var variant in selectExpression.Variants) { IFluentType key; switch (variant.Type) { case VariantType.NumberLiteral: key = FluentNumber.TryNumber(variant.Key.Span); break; default: key = new FluentString(variant.Key.Span); break; } if (key.Matches(selector, scope)) { variant.Value.Write(writer, scope); return(scope.Errors.Count == 0); } } } for (var i = 0; i < selectExpression.Variants.Count; i++) { var variant = selectExpression.Variants[i]; if (variant.IsDefault) { variant.Value.Write(writer, scope); return(errors.Count == 0); } } errors.Add(ResolverFluentError.MissingDefault()); } return(scope.Errors.Count == 0); }