diff --git a/Fluid/Accessors/AsyncDelegateAccessor.cs b/Fluid/Accessors/AsyncDelegateAccessor.cs index 8270e53d..1ccffd94 100644 --- a/Fluid/Accessors/AsyncDelegateAccessor.cs +++ b/Fluid/Accessors/AsyncDelegateAccessor.cs @@ -5,7 +5,7 @@ namespace Fluid.Accessors { public class AsyncDelegateAccessor : AsyncDelegateAccessor { - public AsyncDelegateAccessor(Func> getter) : base((obj, name, ctx) => getter(obj, name)) + public AsyncDelegateAccessor(Func> getter) : base((obj, name, _) => getter(obj, name)) { } } diff --git a/Fluid/Accessors/DelegateAccessor.cs b/Fluid/Accessors/DelegateAccessor.cs index e836aabf..c88b03b4 100644 --- a/Fluid/Accessors/DelegateAccessor.cs +++ b/Fluid/Accessors/DelegateAccessor.cs @@ -4,7 +4,7 @@ namespace Fluid.Accessors { public class DelegateAccessor : DelegateAccessor { - public DelegateAccessor(Func getter) : base((obj, name, ctx) => getter(obj, name)) + public DelegateAccessor(Func getter) : base((obj, name, _) => getter(obj, name)) { } } diff --git a/Fluid/Ast/BinaryExpressions/SubstractBinaryExpression.cs b/Fluid/Ast/BinaryExpressions/SubtractBinaryExpression.cs similarity index 72% rename from Fluid/Ast/BinaryExpressions/SubstractBinaryExpression.cs rename to Fluid/Ast/BinaryExpressions/SubtractBinaryExpression.cs index f7779c7f..4f76edb3 100644 --- a/Fluid/Ast/BinaryExpressions/SubstractBinaryExpression.cs +++ b/Fluid/Ast/BinaryExpressions/SubtractBinaryExpression.cs @@ -2,9 +2,9 @@ namespace Fluid.Ast.BinaryExpressions { - public class SubstractBinaryExpression : BinaryExpression + public class SubtractBinaryExpression : BinaryExpression { - public SubstractBinaryExpression(Expression left, Expression right) : base(left, right) + public SubtractBinaryExpression(Expression left, Expression right) : base(left, right) { } diff --git a/Fluid/Ast/NamedExpressionList.cs b/Fluid/Ast/NamedExpressionList.cs index 90b44611..95a4a090 100644 --- a/Fluid/Ast/NamedExpressionList.cs +++ b/Fluid/Ast/NamedExpressionList.cs @@ -4,7 +4,7 @@ namespace Fluid.Ast { public class NamedExpressionList { - public static readonly NamedExpressionList Empty = new NamedExpressionList(); + public static readonly NamedExpressionList Empty = new(); private List _positional; private Dictionary _named; @@ -42,13 +42,7 @@ public Expression this[string name] } } - public Expression this[string name, int index] - { - get - { - return this[name] ?? this[index]; - } - } + public Expression this[string name, int index] => this[name] ?? this[index]; public NamedExpressionList() { @@ -71,18 +65,12 @@ public NamedExpressionList Add(string name, Expression value) { if (name != null) { - if (_named == null) - { - _named = new Dictionary(); - } + _named ??= new Dictionary(); _named.Add(name, value); } - if (_positional == null) - { - _positional = new List(); - } + _positional ??= new List(); _positional.Add(value); diff --git a/Fluid/Ast/OutputStatement.cs b/Fluid/Ast/OutputStatement.cs index 4d510da4..ddc39627 100644 --- a/Fluid/Ast/OutputStatement.cs +++ b/Fluid/Ast/OutputStatement.cs @@ -15,7 +15,7 @@ public OutputStatement(Expression expression) public Expression Expression { get; } - public IList Filters { get ; } + public IList Filters { get; } public override ValueTask WriteToAsync(TextWriter writer, TextEncoder encoder, TemplateContext context) { diff --git a/Fluid/Ast/RangeExpression.cs b/Fluid/Ast/RangeExpression.cs index c55b15d8..8e915933 100644 --- a/Fluid/Ast/RangeExpression.cs +++ b/Fluid/Ast/RangeExpression.cs @@ -1,5 +1,4 @@ -using Fluid.Ast.BinaryExpressions; -using Fluid.Values; +using Fluid.Values; using System; using System.Runtime.CompilerServices; using System.Threading.Tasks; diff --git a/Fluid/Ast/RenderStatement.cs b/Fluid/Ast/RenderStatement.cs index 087ab53a..70c13482 100644 --- a/Fluid/Ast/RenderStatement.cs +++ b/Fluid/Ast/RenderStatement.cs @@ -65,7 +65,7 @@ public override async ValueTask WriteToAsync(TextWriter writer, Text var content = ""; - using (var stream = fileInfo.CreateReadStream()) + await using (var stream = fileInfo.CreateReadStream()) using (var streamReader = new StreamReader(stream)) { content = await streamReader.ReadToEndAsync(); @@ -175,7 +175,7 @@ public override async ValueTask WriteToAsync(TextWriter writer, Text return Completion.Normal; } - private record class CachedTemplate (IFluidTemplate Template, string Name); + private record CachedTemplate (IFluidTemplate Template, string Name); } } diff --git a/Fluid/Ast/TextSpanStatement.cs b/Fluid/Ast/TextSpanStatement.cs index fe96bb31..5f7ac82c 100644 --- a/Fluid/Ast/TextSpanStatement.cs +++ b/Fluid/Ast/TextSpanStatement.cs @@ -38,7 +38,7 @@ public override ValueTask WriteToAsync(TextWriter writer, TextEncode { if (!_isStripped) { - // Prevent two threads from strsipping the same statement in case WriteToAsync is called concurrently + // Prevent two threads from stripping the same statement in case WriteToAsync is called concurrently // lock (_synLock) { diff --git a/Fluid/Ast/UnlessStatement.cs b/Fluid/Ast/UnlessStatement.cs index 84ee24da..45b464ac 100644 --- a/Fluid/Ast/UnlessStatement.cs +++ b/Fluid/Ast/UnlessStatement.cs @@ -25,9 +25,8 @@ public override async ValueTask WriteToAsync(TextWriter writer, Text if (!result) { - for (var i = 0; i < _statements.Count; i++) + foreach (var statement in _statements) { - var statement = _statements[i]; var completion = await statement.WriteToAsync(writer, encoder, context); if (completion != Completion.Normal) diff --git a/Fluid/Ast/WhenStatement.cs b/Fluid/Ast/WhenStatement.cs index 0b51b70d..4ac70c3f 100644 --- a/Fluid/Ast/WhenStatement.cs +++ b/Fluid/Ast/WhenStatement.cs @@ -20,9 +20,9 @@ public WhenStatement(IReadOnlyList options, List statemen public override async ValueTask WriteToAsync(TextWriter writer, TextEncoder encoder, TemplateContext context) { // Process statements until next block or end of statements - for (var index = 0; index < _statements.Count; index++) + foreach (var statement in _statements) { - var completion = await _statements[index].WriteToAsync(writer, encoder, context); + var completion = await statement.WriteToAsync(writer, encoder, context); if (completion != Completion.Normal) { diff --git a/Fluid/FilterArguments.cs b/Fluid/FilterArguments.cs index 03560835..03cfb07c 100644 --- a/Fluid/FilterArguments.cs +++ b/Fluid/FilterArguments.cs @@ -64,18 +64,12 @@ public FilterArguments Add(string name, FluidValue value) { if (name != null) { - if (_named == null) - { - _named = new Dictionary(); - } + _named ??= new Dictionary(); _named.Add(name, value); } - if (_positional == null) - { - _positional = new List(); - } + _positional ??= new List(); _positional.Add(value); diff --git a/Fluid/Filters/MiscFilters.cs b/Fluid/Filters/MiscFilters.cs index 03d84702..4bfb50d1 100644 --- a/Fluid/Filters/MiscFilters.cs +++ b/Fluid/Filters/MiscFilters.cs @@ -362,7 +362,6 @@ void ForStrf(DateTimeOffset value, string format, StringBuilder result) case '-': removeLeadingZerosFlag = true; continue; case '_': useSpaceForPaddingFlag = true; continue; case ':': useColonsForZeeDirectiveFlag = true; continue; - default: break; } // An optional width specifier (an integer). @@ -622,7 +621,7 @@ public static ValueTask FormatDate(FluidValue input, FilterArguments if (!arguments.At(1).IsNil()) { - culture = CultureInfo.CreateSpecificCulture(arguments.At(1).ToStringValue()) ?? context.CultureInfo; + culture = CultureInfo.CreateSpecificCulture(arguments.At(1).ToStringValue()); } return new StringValue(value.ToString(format, culture)); @@ -774,7 +773,7 @@ public static ValueTask FormatNumber(FluidValue input, FilterArgumen if (!arguments.At(1).IsNil()) { - culture = CultureInfo.CreateSpecificCulture(arguments.At(1).ToStringValue()) ?? context.CultureInfo; + culture = CultureInfo.CreateSpecificCulture(arguments.At(1).ToStringValue()); } return new StringValue(input.ToNumberValue().ToString(format, culture)); @@ -793,7 +792,7 @@ public static ValueTask FormatString(FluidValue input, FilterArgumen if (arguments.HasNamed("culture")) { - culture = CultureInfo.CreateSpecificCulture(arguments["culture"].ToStringValue()) ?? context.CultureInfo; + culture = CultureInfo.CreateSpecificCulture(arguments["culture"].ToStringValue()); } var parameters = arguments.ValuesToObjectArray(); diff --git a/Fluid/FluidParser.cs b/Fluid/FluidParser.cs index 11f57ea5..6c504da2 100644 --- a/Fluid/FluidParser.cs +++ b/Fluid/FluidParser.cs @@ -33,7 +33,7 @@ public class FluidParser protected static readonly Parser Dot = Literals.Char('.'); protected static readonly Parser Pipe = Terms.Char('|'); - protected static readonly Parser String = Terms.String(StringLiteralQuotes.SingleOrDouble); + protected static readonly Parser String = Terms.String(); protected static readonly Parser Number = Terms.Decimal(NumberOptions.AllowSign); protected static readonly Parser DoubleEquals = Terms.Text("=="); @@ -170,7 +170,7 @@ public FluidParser(FluidParserOptions parserOptions) return x.Item1; } - var result = x.Item2[x.Item2.Count - 1].Item2; + var result = x.Item2[^1].Item2; for (var i = x.Item2.Count - 1; i >= 0; i--) { @@ -196,13 +196,13 @@ public FluidParser(FluidParserOptions parserOptions) Primary.Then(static x => new FilterArgument(null, x)) )); - // Primary ( | identifer ( ':' ArgumentsList )! ] )* + // Primary ( | identifier ( ':' ArgumentsList )! ] )* FilterExpression.Parser = LogicalExpression.ElseError(ErrorMessages.LogicalExpressionStartsFilter) .And(ZeroOrMany( Pipe .SkipAnd(Identifier.ElseError(ErrorMessages.IdentifierAfterPipe)) .And(ZeroOrOne(Colon.SkipAnd(ArgumentsList))))) - .Then((ctx, x) => + .Then((_, x) => { // Primary var result = x.Item1; @@ -247,8 +247,8 @@ public FluidParser(FluidParserOptions parserOptions) }); - var BreakTag = TagEnd.Then(x => new BreakStatement()).ElseError("Invalid 'break' tag"); - var ContinueTag = TagEnd.Then(x => new ContinueStatement()).ElseError("Invalid 'continue' tag"); + var BreakTag = TagEnd.Then(_ => new BreakStatement()).ElseError("Invalid 'break' tag"); + var ContinueTag = TagEnd.Then(_ => new ContinueStatement()).ElseError("Invalid 'continue' tag"); var CommentTag = TagEnd .SkipAnd(AnyCharBefore(CreateTag("endcomment"), canBeEmpty: true)) .AndSkip(CreateTag("endcomment").ElseError($"'{{% endcomment %}}' was expected")) @@ -349,7 +349,7 @@ public FluidParser(FluidParserOptions parserOptions) .AndSkip(Terms.Text("in")) .And(Member) .And(ZeroOrMany(OneOf( // Use * since each can appear in any order. Validation is done once it's parsed - Terms.Text("reversed").Then(x => new ForModifier { IsReversed = true }), + Terms.Text("reversed").Then(_ => new ForModifier { IsReversed = true }), Terms.Text("limit").SkipAnd(Colon).SkipAnd(Primary).Then(x => new ForModifier { IsLimit = true, Value = x }), Terms.Text("offset").SkipAnd(Colon).SkipAnd(Primary).Then(x => new ForModifier { IsOffset = true, Value = x }) ))) @@ -373,7 +373,7 @@ public FluidParser(FluidParserOptions parserOptions) .AndSkip(Terms.Text("in")) .And(Range) .And(ZeroOrMany(OneOf( // Use * since each can appear in any order. Validation is done once it's parsed - Terms.Text("reversed").Then(x => new ForModifier { IsReversed = true }), + Terms.Text("reversed").Then(_ => new ForModifier { IsReversed = true }), Terms.Text("limit").SkipAnd(Colon).SkipAnd(Primary).Then(x => new ForModifier { IsLimit = true, Value = x }), Terms.Text("offset").SkipAnd(Colon).SkipAnd(Primary).Then(x => new ForModifier { IsOffset = true, Value = x }) ))) @@ -475,7 +475,7 @@ public FluidParser(FluidParserOptions parserOptions) return ReadFromList(modifiers); } - var AnyTags = TagStart.SkipAnd(Identifier.ElseError(ErrorMessages.IdentifierAfterTagStart).Switch((context, previous) => + var AnyTags = TagStart.SkipAnd(Identifier.ElseError(ErrorMessages.IdentifierAfterTagStart).Switch((_, previous) => { // Because tags like 'else' are not listed, they won't count in TagsList, and will stop being processed // as inner tags in blocks like {% if %} TagsList {% endif $} @@ -552,7 +552,7 @@ public void RegisterParserTag(string tagName, Parser parser, Func> render) { - RegisteredTags[tagName] = TagEnd.Then(x => new EmptyTagStatement(render)).ElseError($"Unexpected arguments in {tagName} tag"); + RegisteredTags[tagName] = TagEnd.Then(_ => new EmptyTagStatement(render)).ElseError($"Unexpected arguments in {tagName} tag"); } public void RegisterEmptyBlock(string tagName, Func, TextWriter, TextEncoder, TemplateContext, ValueTask> render) diff --git a/Fluid/FluidParserExtensions.cs b/Fluid/FluidParserExtensions.cs index 59c44311..782018a5 100644 --- a/Fluid/FluidParserExtensions.cs +++ b/Fluid/FluidParserExtensions.cs @@ -1,6 +1,5 @@ using Fluid.Ast; using Fluid.Parser; -using Parlot.Fluent; using System; using System.Collections.Generic; using System.IO; @@ -29,12 +28,9 @@ public static IFluidTemplate Parse(this FluidParser parser, string template) throw new ParseException($"{parlotError.Message} at {parlotError.Position}\nSource:\n{source}"); } - if (!success) - { - return null; - } - - return new FluidTemplate(statements); + return success + ? new FluidTemplate(statements) + : null; } public static bool TryParse(this FluidParser parser, string template, out IFluidTemplate result, out string error) diff --git a/Fluid/FunctionArguments.cs b/Fluid/FunctionArguments.cs index 184ad24c..1337fbb2 100644 --- a/Fluid/FunctionArguments.cs +++ b/Fluid/FunctionArguments.cs @@ -63,18 +63,12 @@ public FunctionArguments Add(string name, FluidValue value) { if (name != null) { - if (_named == null) - { - _named = new Dictionary(); - } + _named ??= new Dictionary(); _named.Add(name, value); } - if (_positional == null) - { - _positional = new List(); - } + _positional ??= new List(); _positional.Add(value); diff --git a/Fluid/Parser/ErrorMessages.cs b/Fluid/Parser/ErrorMessages.cs index 597f37d9..093d73f4 100644 --- a/Fluid/Parser/ErrorMessages.cs +++ b/Fluid/Parser/ErrorMessages.cs @@ -15,6 +15,6 @@ public static class ErrorMessages public const string FunctionsNotAllowed = "Functions are not allowed"; [Obsolete] public const string IdentifierAfterMacro = "An identifier was expected after the 'macro' tag"; public const string IdentifierAfterTag = "An identifier was expected after the '{0}' tag"; - public const string ParentesesAfterFunctionName = "Start of arguments '(' is expected after a function name"; + public const string ParenthesesAfterFunctionName = "Start of arguments '(' is expected after a function name"; } } diff --git a/Fluid/Parser/IdentifierParser.cs b/Fluid/Parser/IdentifierParser.cs index 1a10ec26..fb78d53e 100644 --- a/Fluid/Parser/IdentifierParser.cs +++ b/Fluid/Parser/IdentifierParser.cs @@ -86,11 +86,6 @@ public override bool Parse(ParseContext context, ref ParseResult resul return true; } - private static bool IsNonDigitStart(char ch) - => - (ch >= 'a' && ch <= 'z') || - (ch >= 'A' && ch <= 'Z') || - (ch == '_') - ; + private static bool IsNonDigitStart(char ch) => ch is >= 'a' and <= 'z' or >= 'A' and <= 'Z' or '_'; } } \ No newline at end of file diff --git a/Fluid/Values/FunctionValue.cs b/Fluid/Values/FunctionValue.cs index a78638a9..d7905fcd 100644 --- a/Fluid/Values/FunctionValue.cs +++ b/Fluid/Values/FunctionValue.cs @@ -66,7 +66,7 @@ public override void WriteTo(TextWriter writer, TextEncoder encoder, CultureInfo public override bool Equals(object other) { - return object.ReferenceEquals(this, other); + return ReferenceEquals(this, other); } public override int GetHashCode() diff --git a/Fluid/Values/NumberValue.cs b/Fluid/Values/NumberValue.cs index e1676192..e1242c5f 100644 --- a/Fluid/Values/NumberValue.cs +++ b/Fluid/Values/NumberValue.cs @@ -139,7 +139,7 @@ public static int GetScale(decimal value) int[] bits = decimal.GetBits(value); - return (int) ((bits[3] >> 16) & 0x7F); + return (bits[3] >> 16) & 0x7F; } } } diff --git a/Fluid/Values/StringValue.cs b/Fluid/Values/StringValue.cs index 0daa508e..55286914 100644 --- a/Fluid/Values/StringValue.cs +++ b/Fluid/Values/StringValue.cs @@ -49,7 +49,7 @@ public StringValue(string value, bool encode) : this(value) internal static StringValue Create(char c) { var temp = CharToString; - if ((uint) c < (uint) temp.Length) + if (c < (uint) temp.Length) { return temp[c]; }