private static void AnalyzeRegionDirective(SyntaxNodeAnalysisContext context)
        {
            var regionDirective = (RegionDirectiveTriviaSyntax)context.Node;

            RegionInfo region = SyntaxInfo.RegionInfo(regionDirective);

            if (!region.Success)
            {
                return;
            }

            if (!region.IsEmpty)
            {
                return;
            }

            DiagnosticHelpers.ReportDiagnostic(
                context,
                DiagnosticDescriptors.RemoveEmptyRegion,
                regionDirective.GetLocation(),
                additionalLocations: ImmutableArray.Create(region.EndDirective.GetLocation()));

            DiagnosticHelpers.ReportDiagnostic(context, DiagnosticDescriptors.RemoveEmptyRegionFadeOut, regionDirective.GetLocation());
            DiagnosticHelpers.ReportDiagnostic(context, DiagnosticDescriptors.RemoveEmptyRegionFadeOut, region.EndDirective.GetLocation());
        }
        public static void ComputeRefactorings(RefactoringContext context, EndRegionDirectiveTriviaSyntax endRegionDirective)
        {
            if (context.IsRefactoringEnabled(RefactoringIdentifiers.RemoveRegion) &&
                context.IsRootCompilationUnit)
            {
                RegionInfo region = SyntaxInfo.RegionInfo(endRegionDirective);

                if (region.Success)
                {
                    context.RegisterRefactoring(
                        "Remove region",
                        cancellationToken => context.Document.RemoveRegionAsync(region, cancellationToken));
                }
            }
        }
        public static void ComputeRefactorings(RefactoringContext context, RegionDirectiveTriviaSyntax regionDirective)
        {
            if (context.IsRefactoringEnabled(RefactoringDescriptors.RemoveRegion) &&
                context.IsRootCompilationUnit)
            {
                RegionInfo region = SyntaxInfo.RegionInfo(regionDirective);

                if (region.Success)
                {
                    context.RegisterRefactoring(
                        "Remove region",
                        ct => context.Document.RemoveRegionAsync(region, ct),
                        RefactoringDescriptors.RemoveRegion);
                }
            }
        }
        public override async Task RegisterCodeFixesAsync(CodeFixContext context)
        {
            SyntaxNode root = await context.GetSyntaxRootAsync().ConfigureAwait(false);

            if (!TryFindFirstAncestorOrSelf(root, context.Span, out RegionDirectiveTriviaSyntax regionDirective, findInsideTrivia: true))
            {
                return;
            }

            CodeAction codeAction = CodeAction.Create(
                "Remove empty region",
                ct => RemoveEmptyRegionRefactoring.RefactorAsync(context.Document, SyntaxInfo.RegionInfo(regionDirective), ct),
                GetEquivalenceKey(DiagnosticIdentifiers.RemoveEmptyRegion));

            context.RegisterCodeFix(codeAction, context.Diagnostics);
        }