Skip to content

Commit

Permalink
Formatting & provide additional comment for SymbolAssemblyVisitor
Browse files Browse the repository at this point in the history
  • Loading branch information
bradwilson committed Nov 27, 2023
1 parent 01de256 commit 4eb2279
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 11 deletions.
13 changes: 8 additions & 5 deletions src/xunit.analyzers/Utility/SymbolAssemblyVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,21 @@
namespace Xunit.Analyzers;

/// <summary>
/// Visits every type in every namespace within an assembly
/// Visits every type in every namespace within an assembly. Expressions are provided which indicate
/// whether the item being searched for has been found. Searches stop once at least one of the
/// short circuit expressions returned true.
/// </summary>
public class SymbolAssemblyVisitor : SymbolVisitor
{
private readonly Func<INamedTypeSymbol, bool>[] _shortCircuitExpressions;
public bool ShortCircuitTriggered { get; private set; }
readonly Func<INamedTypeSymbol, bool>[] shortCircuitExpressions;

public SymbolAssemblyVisitor(params Func<INamedTypeSymbol, bool>[] shortCircuitExpressions)
{
_shortCircuitExpressions = shortCircuitExpressions;
this.shortCircuitExpressions = shortCircuitExpressions;
}

public bool ShortCircuitTriggered { get; private set; }

public override void VisitAssembly(IAssemblySymbol symbol)
{
symbol.GlobalNamespace.Accept(this);
Expand All @@ -36,7 +39,7 @@ public override void VisitNamespace(INamespaceSymbol symbol)

public override void VisitNamedType(INamedTypeSymbol symbol)
{
if (_shortCircuitExpressions.Any(e => e(symbol)))
if (shortCircuitExpressions.Any(e => e(symbol)))
{
ShortCircuitTriggered = true;
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,15 @@ public override void AnalyzeCompilation(
return;

var collectionDefinitionAttributeType = xunitContext.Core.CollectionDefinitionAttributeType;
var visitor = new SymbolAssemblyVisitor(symbol => symbol
.GetAttributes()
.Any(a =>
a.AttributeClass.IsAssignableFrom(collectionDefinitionAttributeType) &&
!a.ConstructorArguments.IsDefaultOrEmpty &&
a.ConstructorArguments[0].Value?.ToString() == collectionDefinitionName));
var visitor = new SymbolAssemblyVisitor(symbol =>
symbol
.GetAttributes()
.Any(a =>
a.AttributeClass.IsAssignableFrom(collectionDefinitionAttributeType) &&
!a.ConstructorArguments.IsDefaultOrEmpty &&
a.ConstructorArguments[0].Value?.ToString() == collectionDefinitionName
)
);

var currentAssembly = context.Compilation.Assembly;
visitor.Visit(currentAssembly);
Expand Down

0 comments on commit 4eb2279

Please sign in to comment.