Skip to content

Commit 3c89baa

Browse files
committed
Merge pull request #1 from sharwell/pr-1961
Eliminate boxing in SyntaxTriviaList.LastOrDefault
2 parents a3240ee + 556fd8e commit 3c89baa

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers.CodeFixes/ReadabilityRules/SA1127CodeFixProvider.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,7 @@ private static string GetParentIndentation(SyntaxToken token)
9292
var parentTrivia = token.Parent.Parent.GetLeadingTrivia();
9393

9494
return parentTrivia
95-
.Where(t => t.IsKind(SyntaxKind.WhitespaceTrivia))
96-
.LastOrDefault()
95+
.LastOrDefault(SyntaxKind.WhitespaceTrivia)
9796
.ToString();
9897
}
9998

StyleCop.Analyzers/StyleCop.Analyzers/LinqHelpers/SyntaxTriviaListEnumerable.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ namespace System.Linq
55
{
66
using Collections.Generic;
77
using Microsoft.CodeAnalysis;
8+
using Microsoft.CodeAnalysis.CSharp;
89

910
/// <summary>
1011
/// This class supports a subset of LINQ operations on <see cref="SyntaxTriviaList"/> without requiring boxing of
@@ -93,5 +94,26 @@ internal static bool All(this SyntaxTriviaList list, Func<SyntaxTrivia, bool> pr
9394

9495
return true;
9596
}
97+
98+
/// <summary>
99+
/// Returns the last trivia of a specified kind in a trivia list.
100+
/// </summary>
101+
/// <param name="list">The trivia list.</param>
102+
/// <param name="kind">The syntax kind.</param>
103+
/// <returns>The last <see cref="SyntaxTrivia"/> in <paramref name="list"/> with the specified
104+
/// <paramref name="kind"/>; otherwise, a default <see cref="SyntaxTrivia"/> instance if no matching trivia was
105+
/// found.</returns>
106+
internal static SyntaxTrivia LastOrDefault(this SyntaxTriviaList list, SyntaxKind kind)
107+
{
108+
foreach (var trivia in list.Reverse())
109+
{
110+
if (trivia.IsKind(kind))
111+
{
112+
return trivia;
113+
}
114+
}
115+
116+
return default(SyntaxTrivia);
117+
}
96118
}
97119
}

0 commit comments

Comments
 (0)