コード例 #1
0
        void PlaceOnNewLine(NewLinePlacement newLine, AstNode keywordNode)
        {
            if (keywordNode == null || keywordNode.StartLocation.IsEmpty)
            {
                return;
            }

            var prev = keywordNode.GetPrevNode(NoWhitespacePredicate);

            if (prev is Comment || prev is PreProcessorDirective || prev is InlineAsmNode)
            {
                return;
            }

            if (newLine == NewLinePlacement.DoNotCare)
            {
                newLine = prev.EndLocation.Line == keywordNode.StartLocation.Line ? NewLinePlacement.SameLine : NewLinePlacement.NewLine;
            }

            int offset = document.GetOffset(keywordNode.StartLocation);

            int    whitespaceStart = SearchWhitespaceStart(offset);
            string indentString    = newLine == NewLinePlacement.NewLine ? options.EolMarker + curIndent.IndentString : " ";

            AddChange(whitespaceStart, offset - whitespaceStart, indentString);
        }
コード例 #2
0
        void FixIndentationForceNewLine(AstNode node)
        {
            var directive = node as PreProcessorDirective;

            if (node.GetPrevNode() is NewLineNode)
            {
                if (directive != null && !policy.IndentPreprocessorDirectives)
                {
                    var startNode   = node.GetPrevNode();
                    var startOffset = document.GetOffset(startNode.EndLocation);
                    int endOffset   = document.GetOffset(node.StartLocation);
                    AddChange(startOffset, endOffset - startOffset, "");
                    return;
                }
                else
                {
                    FixIndentation(node);
                }
            }
            else
            {
                // if no new line preceeds an #endif directive it's excluded
                if (directive != null)
                {
                    if (directive.Type == PreProcessorDirectiveType.Endif)
                    {
                        return;
                    }
                }
                var startNode   = node.GetPrevSibling(n => !(n is WhitespaceNode)) ?? node;
                var startOffset = document.GetOffset(startNode.EndLocation);
                int endOffset   = document.GetOffset(node.StartLocation);
                if (startOffset >= endOffset)
                {
                    return;
                }
                if (directive != null && !policy.IndentPreprocessorDirectives)
                {
                    AddChange(startOffset, endOffset - startOffset, "");
                    return;
                }

                AddChange(startOffset, endOffset - startOffset, curIndent.IndentString);
            }
        }
コード例 #3
0
        void CorrectClosingBrace(AstNode rbrace)
        {
            if (rbrace.IsNull)
            {
                return;
            }
            int braceOffset    = document.GetOffset(rbrace.StartLocation);
            var prevNode       = rbrace.GetPrevNode();
            int prevNodeOffset = prevNode != null?document.GetOffset(prevNode.EndLocation) : 0;

            if (prevNode is NewLineNode)
            {
                EnsureText(prevNodeOffset, braceOffset, curIndent.IndentString);
            }
            else
            {
                EnsureText(prevNodeOffset, braceOffset, options.EolMarker + curIndent.IndentString);
            }
        }
コード例 #4
0
        void FixOpenBrace(BraceStyle braceStyle, AstNode lbrace)
        {
            if (lbrace.IsNull)
            {
                return;
            }
            switch (braceStyle)
            {
            case BraceStyle.DoNotChange:
                return;

            case BraceStyle.BannerStyle:
            case BraceStyle.EndOfLine:
                var prev = lbrace.GetPrevNode(NoWhitespacePredicate);
                if (prev is PreProcessorDirective)
                {
                    return;
                }
                int prevOffset = document.GetOffset(prev.EndLocation);

                if (prev is Comment || prev is PreProcessorDirective || prev is InlineAsmNode)
                {
                    int next = document.GetOffset(lbrace.GetNextNode().StartLocation);
                    EnsureText(prevOffset, next, "");
                    while (prev is Comment || prev is PreProcessorDirective || prev is InlineAsmNode)
                    {
                        prev = prev.GetPrevNode();
                    }
                    prevOffset = document.GetOffset(prev.EndLocation);
                    AddChange(prevOffset, 0, " {");
                }
                else
                {
                    int braceOffset2 = document.GetOffset(lbrace.StartLocation);
                    EnsureText(prevOffset, braceOffset2, " ");
                }
                break;

            case BraceStyle.EndOfLineWithoutSpace:
                prev = lbrace.GetPrevNode(NoWhitespacePredicate);
                if (prev is PreProcessorDirective)
                {
                    return;
                }
                prevOffset = document.GetOffset(prev.EndLocation);
                int braceOffset = document.GetOffset(lbrace.StartLocation);
                EnsureText(prevOffset, braceOffset, "");
                break;

            case BraceStyle.NextLine:
                prev = lbrace.GetPrevNode(NoWhitespacePredicate);
                if (prev is PreProcessorDirective)
                {
                    return;
                }
                prevOffset  = document.GetOffset(prev.EndLocation);
                braceOffset = document.GetOffset(lbrace.StartLocation);
                EnsureText(prevOffset, braceOffset, options.EolMarker + curIndent.IndentString);
                break;

            case BraceStyle.NextLineShifted:
                prev = lbrace.GetPrevNode(NoWhitespacePredicate);
                if (prev is PreProcessorDirective)
                {
                    return;
                }
                prevOffset  = document.GetOffset(prev.EndLocation);
                braceOffset = document.GetOffset(lbrace.StartLocation);
                curIndent.Push(IndentType.Block);
                EnsureText(prevOffset, braceOffset, options.EolMarker + curIndent.IndentString);
                curIndent.Pop();
                break;

            case BraceStyle.NextLineShifted2:
                prev = lbrace.GetPrevNode(NoWhitespacePredicate);
                if (prev is PreProcessorDirective)
                {
                    return;
                }
                prevOffset  = document.GetOffset(prev.EndLocation);
                braceOffset = document.GetOffset(lbrace.StartLocation);
                curIndent.Push(IndentType.Block);
                EnsureText(prevOffset, braceOffset, options.EolMarker + curIndent.IndentString);
                curIndent.Pop();
                break;
            }
        }