// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
#nullable disable
using System.Linq;
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests;
internal static class CSharpServiceTestExtensions
{
/// <summary>
/// DFS search to find the first node of a given type.
/// </summary>
internal static T FindFirstNodeOfType<T>(this SyntaxNode node)
where T : SyntaxNode
{
if (node is T)
{
return node as T;
}
foreach (var child in node.ChildNodes())
{
var foundNode = child.FindFirstNodeOfType<T>();
if (foundNode != null)
{
return foundNode;
}
}
return null;
}
internal static T DigToFirstNodeOfType<T>(this SyntaxNode node)
where T : SyntaxNode
{
return node.ChildNodes().OfType<T>().First();
}
internal static T DigToFirstNodeOfType<T>(this SyntaxTree syntaxTree)
where T : SyntaxNode
{
return syntaxTree.GetRoot().DigToFirstNodeOfType<T>();
}
internal static TypeDeclarationSyntax DigToFirstTypeDeclaration(this SyntaxTree syntaxTree)
=> (syntaxTree.GetRoot() as CompilationUnitSyntax).Members.OfType<TypeDeclarationSyntax>().First();
}
|