106 lines
3.3 KiB
C#
106 lines
3.3 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using Microsoft.CodeAnalysis.CSharp;
|
|
|
|
namespace Microsoft.CodeAnalysis;
|
|
|
|
public static class CSharpExtensions
|
|
{
|
|
public static bool IsKind(this SyntaxToken token, SyntaxKind kind)
|
|
{
|
|
return ((SyntaxToken)(ref token)).RawKind == (int)kind;
|
|
}
|
|
|
|
public static bool IsKind(this SyntaxTrivia trivia, SyntaxKind kind)
|
|
{
|
|
return ((SyntaxTrivia)(ref trivia)).RawKind == (int)kind;
|
|
}
|
|
|
|
public static bool IsKind([NotNullWhen(true)] this SyntaxNode? node, SyntaxKind kind)
|
|
{
|
|
return ((node != null) ? new int?(node.RawKind) : ((int?)null)) == (int?)kind;
|
|
}
|
|
|
|
public static bool IsKind(this SyntaxNodeOrToken nodeOrToken, SyntaxKind kind)
|
|
{
|
|
return ((SyntaxNodeOrToken)(ref nodeOrToken)).RawKind == (int)kind;
|
|
}
|
|
|
|
public static bool ContainsDirective(this SyntaxNode node, SyntaxKind kind)
|
|
{
|
|
return node.ContainsDirective((int)kind);
|
|
}
|
|
|
|
internal static SyntaxKind ContextualKind(this SyntaxToken token)
|
|
{
|
|
if ((object)((SyntaxToken)(ref token)).Language != "C#")
|
|
{
|
|
return SyntaxKind.None;
|
|
}
|
|
return (SyntaxKind)((SyntaxToken)(ref token)).RawContextualKind;
|
|
}
|
|
|
|
internal static bool IsUnderscoreToken(this SyntaxToken identifier)
|
|
{
|
|
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
|
|
return identifier.ContextualKind() == SyntaxKind.UnderscoreToken;
|
|
}
|
|
|
|
public static int IndexOf<TNode>(this SyntaxList<TNode> list, SyntaxKind kind) where TNode : SyntaxNode
|
|
{
|
|
return list.IndexOf((int)kind);
|
|
}
|
|
|
|
public static bool Any<TNode>(this SyntaxList<TNode> list, SyntaxKind kind) where TNode : SyntaxNode
|
|
{
|
|
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
|
|
return list.IndexOf<TNode>(kind) >= 0;
|
|
}
|
|
|
|
public static int IndexOf<TNode>(this SeparatedSyntaxList<TNode> list, SyntaxKind kind) where TNode : SyntaxNode
|
|
{
|
|
return list.IndexOf((int)kind);
|
|
}
|
|
|
|
public static bool Any<TNode>(this SeparatedSyntaxList<TNode> list, SyntaxKind kind) where TNode : SyntaxNode
|
|
{
|
|
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
|
|
return list.IndexOf<TNode>(kind) >= 0;
|
|
}
|
|
|
|
public static int IndexOf(this SyntaxTriviaList list, SyntaxKind kind)
|
|
{
|
|
return ((SyntaxTriviaList)(ref list)).IndexOf((int)kind);
|
|
}
|
|
|
|
public static bool Any(this SyntaxTriviaList list, SyntaxKind kind)
|
|
{
|
|
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
|
|
return list.IndexOf(kind) >= 0;
|
|
}
|
|
|
|
public static int IndexOf(this SyntaxTokenList list, SyntaxKind kind)
|
|
{
|
|
return ((SyntaxTokenList)(ref list)).IndexOf((int)kind);
|
|
}
|
|
|
|
public static bool Any(this SyntaxTokenList list, SyntaxKind kind)
|
|
{
|
|
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
|
|
return list.IndexOf(kind) >= 0;
|
|
}
|
|
|
|
internal static SyntaxToken FirstOrDefault(this SyntaxTokenList list, SyntaxKind kind)
|
|
{
|
|
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
|
|
int num = list.IndexOf(kind);
|
|
if (num < 0)
|
|
{
|
|
return default(SyntaxToken);
|
|
}
|
|
return ((SyntaxTokenList)(ref list))[num];
|
|
}
|
|
}
|