private void AddBlockIndentationOperation(List <IndentBlockOperation> list, SyntaxNode node, OptionSet optionSet)
        {
            var bracePair = node.GetBracePair();

            // don't put block indentation operation if the block only contains label statement
            if (node.BlockContainsOnlyLabel() || !bracePair.IsValidBracePair())
            {
                return;
            }

            if (IsExpressionWithBraces(node))
            {
                var option = IndentBlockOption.RelativePosition;
                if (node.IsLambdaBodyBlock() || node is InitializerExpressionSyntax)
                {
                    option = IndentBlockOption.RelativeToFirstTokenOnBaseTokenLine;
                }

                AddIndentBlockOperation(list, GetBaseTokenForRelativeIndentation(node, bracePair.Item1, optionSet),
                                        bracePair.Item1.GetNextToken(includeZeroWidth: true), bracePair.Item2.GetPreviousToken(includeZeroWidth: true), option);

                return;
            }

            AddIndentBlockOperation(list, bracePair.Item1.GetNextToken(includeZeroWidth: true), bracePair.Item2.GetPreviousToken(includeZeroWidth: true));
        }
Example #2
0
        private void AddAndRemoveBlockIndentationOperation(List <IndentBlockOperation> list, SyntaxNode node, OptionSet optionSet)
        {
            var bracePair = node.GetBracePair();

            // don't put block indentation operation if the block only contains label statement or it is lambda expression body block
            if (node.IsLambdaBodyBlock() || node.BlockContainsOnlyLabel() || !bracePair.IsValidBracePair())
            {
                return;
            }

            if (node is BlockSyntax && optionSet.GetOption(CSharpFormattingOptions.OpenCloseBracesIndent))
            {
                AddIndentBlockOperation(list, bracePair.Item1, bracePair.Item1, bracePair.Item1.Span);
                AddIndentBlockOperation(list, bracePair.Item2, bracePair.Item2, bracePair.Item2.Span);
            }

            if (node is BlockSyntax && !optionSet.GetOption(CSharpFormattingOptions.IndentBlock))
            {
                var startToken = bracePair.Item1.GetNextToken(includeZeroWidth: true);
                var endToken   = bracePair.Item2.GetPreviousToken(includeZeroWidth: true);

                RemoveIndentBlockOperation(list, startToken, endToken);
            }

            if (node is SwitchStatementSyntax && !optionSet.GetOption(CSharpFormattingOptions.IndentSwitchSection))
            {
                var startToken = bracePair.Item1.GetNextToken(includeZeroWidth: true);
                var endToken   = bracePair.Item2.GetPreviousToken(includeZeroWidth: true);

                RemoveIndentBlockOperation(list, startToken, endToken);
            }
        }