public static void Analyze(SyntaxNodeAnalysisContext context, CompilationUnitSyntax compilationUnit) { SyntaxList <MemberDeclarationSyntax> members = compilationUnit.Members; if (!ContainsSingleNamespaceWithSingleNonNamespaceMember(members)) { using (IEnumerator <MemberDeclarationSyntax> en = ExtractTypeDeclarationToNewDocumentRefactoring.GetNonNestedTypeDeclarations(members).GetEnumerator()) { if (en.MoveNext()) { MemberDeclarationSyntax firstMember = en.Current; if (en.MoveNext()) { ReportDiagnostic(context, firstMember); do { ReportDiagnostic(context, en.Current); } while (en.MoveNext()); } } } } }
private static void ReportDiagnostic(SyntaxNodeAnalysisContext context, MemberDeclarationSyntax member) { SyntaxToken token = ExtractTypeDeclarationToNewDocumentRefactoring.GetIdentifier(member); if (!token.IsKind(SyntaxKind.None)) { context.ReportDiagnostic( DiagnosticDescriptors.DeclareEachTypeInSeparateFile, token); } }
private static void ComputeRefactorings(RefactoringContext context, MemberDeclarationSyntax memberDeclaration, SyntaxToken identifier) { if (identifier.Span.Contains(context.Span) && memberDeclaration.IsParentKind(SyntaxKind.NamespaceDeclaration, SyntaxKind.CompilationUnit) && context.IsRootCompilationUnit && ExtractTypeDeclarationToNewDocumentRefactoring.GetNonNestedTypeDeclarations((CompilationUnitSyntax)context.Root).Skip(1).Any()) { context.RegisterRefactoring( ExtractTypeDeclarationToNewDocumentRefactoring.GetTitle(identifier.ValueText), cancellationToken => ExtractTypeDeclarationToNewDocumentRefactoring.RefactorAsync(context.Document, memberDeclaration, cancellationToken)); } }