Example #1
0
        void EnforceBraceStyle(MonoDevelop.CSharp.Formatting.BraceStyle braceStyle, ICSharpNode lbrace, ICSharpNode rbrace)
        {
            if (lbrace == null || rbrace == null)
            {
                return;
            }

//			LineSegment lbraceLineSegment = data.Document.GetLine (lbrace.StartLocation.Line);
            int lbraceOffset = data.Document.LocationToOffset(lbrace.StartLocation.Line, lbrace.StartLocation.Column);

//			LineSegment rbraceLineSegment = data.Document.GetLine (rbrace.StartLocation.Line);
            int    rbraceOffset    = data.Document.LocationToOffset(rbrace.StartLocation.Line, rbrace.StartLocation.Column);
            int    whitespaceStart = SearchWhitespaceStart(lbraceOffset);
            int    whitespaceEnd   = SearchWhitespaceStart(rbraceOffset);
            string startIndent     = "";
            string endIndent       = "";

            switch (braceStyle)
            {
            case BraceStyle.DoNotChange:
                startIndent = endIndent = null;
                break;

            case BraceStyle.EndOfLineWithoutSpace:
                startIndent = "";
                endIndent   = data.EolMarker + curIndent.IndentString;
                break;

            case BraceStyle.EndOfLine:
                startIndent = " ";
                endIndent   = data.EolMarker + curIndent.IndentString;
                break;

            case BraceStyle.NextLine:
                startIndent = data.EolMarker + curIndent.IndentString;
                endIndent   = data.EolMarker + curIndent.IndentString;
                break;

            case BraceStyle.NextLineShifted2:
            case BraceStyle.NextLineShifted:
                endIndent = startIndent = data.EolMarker + curIndent.IndentString + curIndent.SingleIndent;
                break;
            }

            if (lbraceOffset > 0 && startIndent != null)
            {
                AddChange(whitespaceStart, lbraceOffset - whitespaceStart, startIndent);
            }
            if (rbraceOffset > 0 && endIndent != null)
            {
                AddChange(whitespaceEnd, rbraceOffset - whitespaceEnd, endIndent);
            }
        }
Example #2
0
        object FixEmbeddedStatment(MonoDevelop.CSharp.Formatting.BraceStyle braceStyle, MonoDevelop.CSharp.Formatting.BraceForcement braceForcement, CSharpTokenNode token, bool allowInLine, ICSharpNode node)
        {
            if (node == null)
            {
                return(null);
            }
            bool isBlock = node is BlockStatement;

            switch (braceForcement)
            {
            case BraceForcement.DoNotChange:
                //nothing
                break;

            case BraceForcement.AddBraces:
                if (!isBlock)
                {
                    int    offset     = data.Document.LocationToOffset(node.StartLocation.Line, node.StartLocation.Column);
                    int    start      = SearchWhitespaceStart(offset);
                    string startBrace = "";
                    switch (braceStyle)
                    {
                    case BraceStyle.EndOfLineWithoutSpace:
                        startBrace = "{";
                        break;

                    case BraceStyle.EndOfLine:
                        startBrace = " {";
                        break;

                    case BraceStyle.NextLine:
                        startBrace = data.EolMarker + curIndent.IndentString + "{";
                        break;

                    case BraceStyle.NextLineShifted2:
                    case BraceStyle.NextLineShifted:
                        startBrace = data.EolMarker + curIndent.IndentString + curIndent.SingleIndent + "{";
                        break;
                    }
                    AddChange(start, offset - start, startBrace);
                }
                break;

            case BraceForcement.RemoveBraces:
                if (isBlock)
                {
                    BlockStatement block = node as BlockStatement;
                    if (block.Statements.Count() == 1)
                    {
                        int offset1 = data.Document.LocationToOffset(node.StartLocation.Line, node.StartLocation.Column);
                        int start   = SearchWhitespaceStart(offset1);

                        int offset2 = data.Document.LocationToOffset(node.EndLocation.Line, node.EndLocation.Column);
                        int end     = SearchWhitespaceStart(offset2 - 1);

                        AddChange(start, offset1 - start + 1, null);
                        AddChange(end + 1, offset2 - end, null);
                        node    = (ICSharpNode)block.FirstChild;
                        isBlock = false;
                    }
                }
                break;
            }
            int originalLevel = curIndent.Level;

            if (isBlock)
            {
                BlockStatement block = node as BlockStatement;
                if (allowInLine && block.StartLocation.Line == block.EndLocation.Line && block.Statements.Count() <= 1)
                {
                    if (block.Statements.Count() == 1)
                    {
                        nextStatementIndent = " ";
                    }
                }
                else
                {
                    EnforceBraceStyle(braceStyle, block.LBrace, block.RBrace);
                }
                if (braceStyle == BraceStyle.NextLineShifted2)
                {
                    curIndent.Level++;
                }
            }
            else
            {
                if (allowInLine && token.StartLocation.Line == node.EndLocation.Line)
                {
                    nextStatementIndent = " ";
                }
            }
            if (!(node is IfElseStatement && node.Parent is IfElseStatement || node is UsingStatement && node.Parent is UsingStatement))
            {
                curIndent.Level++;
            }
            object result = isBlock ? base.VisitBlockStatement((BlockStatement)node, null) : node.AcceptVisitor(this, null);

            curIndent.Level = originalLevel;
            switch (braceForcement)
            {
            case BraceForcement.DoNotChange:
                break;

            case BraceForcement.AddBraces:
                if (!isBlock)
                {
                    int    offset     = data.Document.LocationToOffset(node.EndLocation.Line, node.EndLocation.Column);
                    string startBrace = "";
                    switch (braceStyle)
                    {
                    case BraceStyle.DoNotChange:
                        startBrace = null;
                        break;

                    case BraceStyle.EndOfLineWithoutSpace:
                        startBrace = data.EolMarker + curIndent.IndentString + "}";
                        break;

                    case BraceStyle.EndOfLine:
                        startBrace = data.EolMarker + curIndent.IndentString + "}";
                        break;

                    case BraceStyle.NextLine:
                        startBrace = data.EolMarker + curIndent.IndentString + "}";
                        break;

                    case BraceStyle.NextLineShifted2:
                    case BraceStyle.NextLineShifted:
                        startBrace = data.EolMarker + curIndent.IndentString + curIndent.SingleIndent + "}";
                        break;
                    }
                    if (startBrace != null)
                    {
                        AddChange(offset, 0, startBrace);
                    }
                }
                break;
            }
            return(result);
        }
Example #3
0
 object FixEmbeddedStatment(MonoDevelop.CSharp.Formatting.BraceStyle braceStyle, MonoDevelop.CSharp.Formatting.BraceForcement braceForcement, ICSharpNode node)
 {
     return(FixEmbeddedStatment(braceStyle, braceForcement, null, false, node));
 }