public static AnalyzerActions CreateSpyActions(SpyAnalyzer spy) =>
 new AnalyzerActions
 {
     CodeBlockAction           = context => spy.CodeBlockActionHistory.Add(context.CodeBlock),
     CodeBlockStartAction      = context => spy.CodeBlockStartActionHistory.Add(context.CodeBlock),
     CompilationAction         = context => spy.CompilationActionHistory.Add(context.Compilation),
     CompilationStartAction    = context => spy.CompilationStartActionHistory.Add(context.Compilation),
     OperationAction           = context => spy.OperationActionHistory.Add(context.Operation),
     OperationBlockAction      = context => spy.OperationBlockActionHistory.Add(context.OperationBlocks),
     OperationBlockStartAction =
         context => spy.OperationBlockStartActionHistory.Add(context.OperationBlocks),
     SemanticModelAction = context => spy.SemanticModelActionHistory.Add(context.SemanticModel),
     SymbolAction        = context => spy.SymbolActionHistory.Add(context.Symbol),
     SymbolStartAction   = context => spy.SymbolStartActionHistory.Add(context.Symbol),
     SyntaxNodeAction    = context => spy.SyntaxNodeActionHistory.Add(context.Node),
     SyntaxTreeAction    = context => spy.SyntaxTreeActionHistory.Add(context.Tree)
 };
        public async Task WhenGivenAnyCodes_RecordAllActionHistory()
        {
            var spy     = new SpyAnalyzer();
            var builder = new StringBuilder();
            var failed  = false;

            await DiagnosticAnalyzerRunner.Run(spy, ExampleCode.DiagnosticsFreeClassLibrary);

            if (0 == spy.CodeBlockActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.CodeBlockActionHistory));
            }

            if (0 == spy.CodeBlockStartActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.CodeBlockStartActionHistory));
            }

            if (0 == spy.CompilationActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.CompilationActionHistory));
            }

            if (0 == spy.CompilationStartActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.CompilationStartActionHistory));
            }

            if (0 == spy.OperationActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.OperationActionHistory));
            }

            if (0 == spy.OperationBlockActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.OperationBlockActionHistory));
            }

            if (0 == spy.OperationBlockStartActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.OperationBlockStartActionHistory));
            }

            if (0 == spy.SemanticModelActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.SemanticModelActionHistory));
            }

            if (0 == spy.SymbolActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.SymbolActionHistory));
            }

            if (0 == spy.SymbolStartActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.SymbolStartActionHistory));
            }

            if (0 == spy.SyntaxNodeActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.SyntaxNodeActionHistory));
            }

            if (0 == spy.SyntaxTreeActionHistory.Count)
            {
                failed = true;
                builder.AppendLine(nameof(spy.SyntaxTreeActionHistory));
            }

            Assert.IsFalse(failed, builder.ToString());
        }