private void MakeFormat(FormattingRange range, IEnumerable <string> space)
        {
            PsiFormatterHelper.ReplaceSpaces(range.First, range.Last, space);

            // TODO: Move antiglueing logic into CalcSpaces()
            ITokenNode nextToken;
            ITokenNode prevToken = range.First.FindLastTokenIn();

            if (prevToken != null)
            {
                nextToken = prevToken.GetNextToken();
            }
            else
            {
                nextToken = range.First.NextSibling.FindFirstTokenIn();
                if (nextToken != null)
                {
                    prevToken = nextToken.GetPrevToken();
                }
            }

            if (prevToken != null && nextToken != null)
            {
                ITokenNode separator = Context.CodeFormatter.GetMinimalSeparator(prevToken, nextToken);
                if (separator != null)
                {
                    LowLevelModificationUtil.AddChildAfter(range.First, separator);
                }
            }
        }
Exemplo n.º 2
0
        public override ITokenNode GetMinimalSeparator(ITokenNode leftToken, ITokenNode rightToken)
        {
            if (leftToken is IWhitespaceNode || leftToken.GetTokenType() == PsiTokenType.WHITE_SPACE)
            {
                return(null);
            }

            if (leftToken.GetTokenType() == PsiTokenType.END_OF_LINE_COMMENT && rightToken.GetTokenType() != PsiTokenType.NEW_LINE)
            {
                return(PsiFormatterHelper.CreateNewLine("\r\n"));
            }

            if (rightToken is IWhitespaceNode || rightToken.GetTokenType() == PsiTokenType.WHITE_SPACE)
            {
                return(null);
            }

            if (leftToken.GetTokenType() == PsiTokenType.LBRACE || leftToken.GetTokenType() == PsiTokenType.RBRACE || leftToken.GetTokenType() == PsiTokenType.RBRACE || leftToken.GetTokenType() == PsiTokenType.RBRACKET || leftToken.GetTokenType() == PsiTokenType.LPARENTH || leftToken.GetTokenType() == PsiTokenType.RPARENTH || leftToken.GetTokenType() == PsiTokenType.LT || leftToken.GetTokenType() == PsiTokenType.GT)
            {
                return(null);
            }

            if (rightToken.GetTokenType() == PsiTokenType.LBRACE || rightToken.GetTokenType() == PsiTokenType.RBRACE || rightToken.GetTokenType() == PsiTokenType.RBRACE || rightToken.GetTokenType() == PsiTokenType.RBRACKET || rightToken.GetTokenType() == PsiTokenType.LPARENTH || rightToken.GetTokenType() == PsiTokenType.RPARENTH || rightToken.GetTokenType() == PsiTokenType.LT || rightToken.GetTokenType() == PsiTokenType.GT)
            {
                return(null);
            }

            if (rightToken.GetTokenType() == PsiTokenType.ASTERISK || rightToken.GetTokenType() == PsiTokenType.QUEST)
            {
                return(null);
            }

            if ((leftToken.GetTokenType() == PsiTokenType.COLON || leftToken.GetTokenType() == PsiTokenType.SEMICOLON) &&
                (!(rightToken.GetTokenType() == PsiTokenType.C_STYLE_COMMENT || rightToken.GetTokenType() == PsiTokenType.END_OF_LINE_COMMENT)))
            {
                return(PsiFormatterHelper.CreateNewLine("\r\n"));
            }

            TokenNodeType tokenType1 = leftToken.GetTokenType();
            TokenNodeType tokenType2 = rightToken.GetTokenType();

            if (myGlueingCache.Get(new TokenTypePair(tokenType1, tokenType2)))
            {
                return
                    (tokenType1 == PsiTokenType.END_OF_LINE_COMMENT
            ? PsiFormatterHelper.CreateNewLine("\r\n")
            : PsiFormatterHelper.CreateSpace(" "));
            }

            return(null);
        }
Exemplo n.º 3
0
 public override ITreeNode[] CreateSpace(string indent, ITreeNode rightNonSpace, ITreeNode replacedSpace)
 {
     return(new ITreeNode[] { PsiFormatterHelper.CreateSpace(indent) });
 }
 private void MakeFormat(FormattingRange range, IEnumerable <string> space)
 {
     PsiFormatterHelper.ReplaceSpaces(range.First, range.Last, space);
 }
 public override ITreeNode CreateNewLine()
 {
     return(PsiFormatterHelper.CreateNewLine());
 }
 public override ITreeNode CreateSpace(string indent, ITreeNode replacedSpace)
 {
     return(PsiFormatterHelper.CreateSpace(indent));
 }
 public override ITokenNode GetMinimalSeparator(ITokenNode leftToken, ITokenNode rightToken)
 {
     return(PsiFormatterHelper.CreateSpace(" "));
 }