Beispiel #1
0
 void IAstVisitor.VisitTypeDeclaration(TypeDeclaration typeDeclaration)
 {
     Visit(EnterTypeDeclaration, LeaveTypeDeclaration, typeDeclaration);
 }
Beispiel #2
0
        public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration)
        {
            FixAttributesAndDocComment(typeDeclaration);
            BraceStyle braceStyle;
            bool       indentBody = false;

            switch (typeDeclaration.ClassType)
            {
            case ClassType.Class:
                braceStyle = policy.ClassBraceStyle;
                indentBody = policy.IndentClassBody;
                break;

            case ClassType.Struct:
                braceStyle = policy.StructBraceStyle;
                indentBody = policy.IndentStructBody;
                break;

            case ClassType.Interface:
                braceStyle = policy.InterfaceBraceStyle;
                indentBody = policy.IndentInterfaceBody;
                break;

            case ClassType.Enum:
                braceStyle = policy.EnumBraceStyle;
                indentBody = policy.IndentEnumBody;
                break;

            default:
                throw new InvalidOperationException("unsupported class type : " + typeDeclaration.ClassType);
            }

            foreach (var constraint in typeDeclaration.Constraints)
            {
                constraint.AcceptVisitor(this);
            }

            FixOpenBrace(braceStyle, typeDeclaration.LBraceToken);

            if (indentBody)
            {
                curIndent.Push(IndentType.Block);
            }
            bool startFormat = true;
            bool first       = true;

            VisitChildrenToFormat(typeDeclaration, child => {
                if (first)
                {
                    startFormat = child.StartLocation > typeDeclaration.LBraceToken.StartLocation;
                    first       = false;
                }
                if (child.Role == Roles.LBrace)
                {
                    startFormat = true;
                    if (braceStyle != BraceStyle.DoNotChange)
                    {
                        EnsureMinimumNewLinesAfter(child, GetTypeLevelNewLinesFor(child));
                    }
                    return;
                }
                if (child.Role == Roles.RBrace)
                {
                    startFormat = false;
                    return;
                }
                if (!startFormat || !NoWhitespacePredicate(child))
                {
                    return;
                }
                if (child.Role == Roles.Comma)
                {
                    ForceSpacesBeforeRemoveNewLines(child, false);
                    EnsureMinimumNewLinesAfter(child, 1);
                    return;
                }
                if (NoWhitespacePredicate(child))
                {
                    FixIndentationForceNewLine(child);
                }
                child.AcceptVisitor(this);
                if (NoWhitespacePredicate(child) && child.GetNextSibling(NoWhitespacePredicate).Role != Roles.Comma)
                {
                    EnsureMinimumNewLinesAfter(child, GetTypeLevelNewLinesFor(child));
                }
            });

            if (indentBody)
            {
                curIndent.Pop();
            }

            FixClosingBrace(braceStyle, typeDeclaration.RBraceToken);
        }