コード例 #1
0
 private ITreeRange AdjustTreeRange(ITreeRange range)
 {
     if (range.First == range.Last)
     {
         var statement = range.First as IJavaScriptStatement;
         if (statement != null)
             return AdjustStatement(range, statement);
         var expression = range.First as IJavaScriptExpression;
         if (expression != null)
             return AdjustExpression(range, expression);
         var compoundExpression = range.First as ICompoundExpression;
         if (compoundExpression != null)
             return AdjustExpression(range, compoundExpression);
     }
     return range;
 }
コード例 #2
0
        private ITreeRange AdjustStatement(ITreeRange range, IJavaScriptStatement statement)
        {
            var ifStatementByThen = IfStatementNavigator.GetByThen(statement);

            if (ifStatementByThen != null)
            {
                if (ifStatementByThen.Else == null)
                {
                    return(new TreeRange(ifStatementByThen, ifStatementByThen));
                }
                if (!_executing)
                {
                    return(range);
                }
                ifStatementByThen.ReplaceBy(ifStatementByThen.Else);
                return(null);
            }

            var ifStatementByElse = IfStatementNavigator.GetByElse(statement);

            if (ifStatementByElse != null)
            {
                if (ifStatementByElse.Then == null)
                {
                    return(new TreeRange(ifStatementByElse, ifStatementByElse));
                }
                if (!_executing)
                {
                    return(range);
                }
                ifStatementByElse.SetElse(null);
                return(null);
            }

            var doStatement = DoStatementNavigator.GetByStatement(statement);

            if (doStatement != null)
            {
                return(new TreeRange(doStatement, doStatement));
            }

            var whileStatement = WhileStatementNavigator.GetByStatement(statement);

            if (whileStatement != null)
            {
                return(new TreeRange(whileStatement, whileStatement));
            }

            var forStatement = ForStatementNavigator.GetByStatement(statement);

            if (forStatement != null)
            {
                return(new TreeRange(forStatement, forStatement));
            }

            var foreachStatement = ForeachStatementNavigator.GetByStatement(statement);

            if (foreachStatement != null)
            {
                return(new TreeRange(foreachStatement, foreachStatement));
            }

            var withStatement = WithStatementNavigator.GetByStatement(statement);

            if (withStatement != null)
            {
                return(new TreeRange(withStatement, withStatement));
            }

            return(range);
        }
コード例 #3
0
        private ITreeRange AdjustExpression(ITreeRange range, ICompoundExpression expression)
        {
            var expressionStatement = ExpressionStatementNavigator.GetByExpression(expression);

            if (expressionStatement != null)
            {
                return(AdjustStatement(new TreeRange(expressionStatement, expressionStatement), expressionStatement));
            }

            var ifStatement = IfStatementNavigator.GetByCondition(expression);

            if (ifStatement != null)
            {
                if (ifStatement.Else == null)
                {
                    return(new TreeRange(ifStatement, ifStatement));
                }
                if (_executing)
                {
                    var block = ifStatement.Else as IBlock;
                    if (block == null)
                    {
                        ifStatement.ReplaceBy(ifStatement.Else);
                    }
                    else
                    {
                        //StatementUtil.ReplaceStatementWithBlock(block, ifStatementByCondition);
                    }
                }
                return(null);
            }

            var switchStatement = SwitchStatementNavigator.GetByCondition(expression);

            if (switchStatement != null)
            {
                return(new TreeRange(switchStatement, switchStatement));
            }

            var whileStatement = WhileStatementNavigator.GetByCondition(expression);

            if (whileStatement != null)
            {
                return(new TreeRange(whileStatement, whileStatement));
            }

            var doStatement = DoStatementNavigator.GetByCondition(expression);

            if (doStatement != null)
            {
                if (!_executing)
                {
                    return(range);
                }
                var block = doStatement.Statement as IBlock;
                if (block != null && block.Statements.Count == 1)
                {
                    doStatement.ReplaceBy(block.Statements[0]);
                }
                else
                {
                    doStatement.ReplaceBy(doStatement.Statement);
                }
                return(null);
            }

            var forStatement = ForStatementNavigator.GetByForCondition(expression);

            if (forStatement != null)
            {
                return(new TreeRange(forStatement, forStatement));
            }

            return(range);
        }
 public ITreeRange HandleChangeStatements(IPsiServices psiServices, ITreeRange rangeBeforeChange, Func<ITreeRange> changeAction,
   bool strict)
 {
   return changeAction();
 }
コード例 #5
0
 public override ITreeRange FormatInsertedRange(ITreeNode nodeFirst, ITreeNode nodeLast, ITreeRange origin)
 {
     return(new TreeRange(nodeFirst, nodeLast));
 }
コード例 #6
0
ファイル: T4CodeFormatter.cs プロジェクト: MrJul/ForTea
		public override ITreeRange FormatInsertedRange(ITreeNode nodeFirst, ITreeNode nodeLast, ITreeRange origin)
			=> origin;
コード例 #7
0
ファイル: T4CodeFormatter.cs プロジェクト: JetBrains/ForTea
 public override ITreeRange FormatInsertedRange(ITreeNode nodeFirst, ITreeNode nodeLast, ITreeRange origin) =>
 null;
コード例 #8
0
 public void HandleRemoveStatementsRange(IPsiServices psiServices, ITreeRange treeRange, Action action)
 => action();
コード例 #9
0
 public RemoveUnreachableCodeFix(HeuristicallyUnreachableCodeWarning error)
 {
     _range = error.TreeRange;
 }
コード例 #10
0
 public RemoveUnreachableCodeFix(UnreachableCodeWarning error)
 {
     _range = error.TreeRange;
 }
コード例 #11
0
 private ITreeRange AdjustStatement(ITreeRange range, IJavaScriptStatement statement)
 {
     var ifStatementByThen = IfStatementNavigator.GetByThen(statement);
     if (ifStatementByThen != null)
     {
         if (ifStatementByThen.Else == null)
             return new TreeRange(ifStatementByThen, ifStatementByThen);
         if (!_executing)
             return range;
         ifStatementByThen.ReplaceBy(ifStatementByThen.Else);
         return null;
     }
     
     var ifStatementByElse = IfStatementNavigator.GetByElse(statement);
     if (ifStatementByElse != null)
     {
         if (ifStatementByElse.Then == null)
             return new TreeRange(ifStatementByElse, ifStatementByElse);
         if (!_executing)
             return range;
         ifStatementByElse.SetElse(null);
         return null;
     }
     
     var doStatement = DoStatementNavigator.GetByStatement(statement);
     if (doStatement != null)
         return new TreeRange(doStatement, doStatement);
     
     var whileStatement = WhileStatementNavigator.GetByStatement(statement);
     if (whileStatement != null)
         return new TreeRange(whileStatement, whileStatement);
     
     var forStatement = ForStatementNavigator.GetByStatement(statement);
     if (forStatement != null)
         return new TreeRange(forStatement, forStatement);
     
     var foreachStatement = ForeachStatementNavigator.GetByStatement(statement);
     if (foreachStatement != null)
         return new TreeRange(foreachStatement, foreachStatement);
     
     var withStatement = WithStatementNavigator.GetByStatement(statement);
     if (withStatement != null)
         return new TreeRange(withStatement, withStatement);
     
     return range;
 }
コード例 #12
0
        private ITreeRange AdjustExpression(ITreeRange range, ICompoundExpression expression)
        {
            var expressionStatement = ExpressionStatementNavigator.GetByExpression(expression);
            if (expressionStatement != null)
                return AdjustStatement(new TreeRange(expressionStatement, expressionStatement), expressionStatement);
            
            var ifStatement = IfStatementNavigator.GetByCondition(expression);
            if (ifStatement != null)
            {
                if (ifStatement.Else == null)
                {
                    return new TreeRange(ifStatement, ifStatement);
                }
                if (_executing)
                {
                    var block = ifStatement.Else as IBlock;
                    if (block == null)
                    {
                        ifStatement.ReplaceBy(ifStatement.Else);
                    }
                    else
                    {
                        //StatementUtil.ReplaceStatementWithBlock(block, ifStatementByCondition);
                    }
                }
                return null;
            }

            var switchStatement = SwitchStatementNavigator.GetByCondition(expression);
            if (switchStatement != null)
                return new TreeRange(switchStatement, switchStatement);
            
            var whileStatement = WhileStatementNavigator.GetByCondition(expression);
            if (whileStatement != null)
                return new TreeRange(whileStatement, whileStatement);

            var doStatement = DoStatementNavigator.GetByCondition(expression);
            if (doStatement != null)
            {
                if (!_executing)
                    return range;
                var block = doStatement.Statement as IBlock;
                if (block != null && block.Statements.Count == 1)
                {
                    doStatement.ReplaceBy(block.Statements[0]);
                }
                else
                {
                    doStatement.ReplaceBy(doStatement.Statement);
                }
                return null;
            }

            var forStatement = ForStatementNavigator.GetByForCondition(expression);
            if (forStatement != null)
                return new TreeRange(forStatement, forStatement);

            return range;
        }
コード例 #13
0
        private ITreeRange AdjustExpression(ITreeRange range, IJavaScriptExpression expression)
        {
            var binaryExpressionByLeftOperand = BinaryExpressionNavigator.GetByLeftOperand(expression);
            if (binaryExpressionByLeftOperand != null && binaryExpressionByLeftOperand.Sign != null)
                return new TreeRange(expression, binaryExpressionByLeftOperand.Sign);

            var binaryExpressionByRightOperand = BinaryExpressionNavigator.GetByRightOperand(expression);
            if (binaryExpressionByRightOperand != null && binaryExpressionByRightOperand.Sign != null)
                return new TreeRange(binaryExpressionByRightOperand.Sign, expression);

            var conditionalTernaryExpressionByConditionOperand = ConditionalTernaryExpressionNavigator.GetByConditionOperand(expression);
            if (conditionalTernaryExpressionByConditionOperand != null)
                return AdjustExpression(new TreeRange(conditionalTernaryExpressionByConditionOperand, conditionalTernaryExpressionByConditionOperand), conditionalTernaryExpressionByConditionOperand);
            
            var conditionalTernaryExpressionByThenResult = ConditionalTernaryExpressionNavigator.GetByThenResult(expression);
            if (conditionalTernaryExpressionByThenResult != null)
            {
                if (conditionalTernaryExpressionByThenResult.ElseResult == null)
                    return AdjustExpression(new TreeRange(conditionalTernaryExpressionByThenResult, conditionalTernaryExpressionByThenResult), conditionalTernaryExpressionByThenResult);
                if (!_executing)
                    return range;
                conditionalTernaryExpressionByThenResult.ReplaceBy(conditionalTernaryExpressionByThenResult.ElseResult);
                return null;
            }

            var conditionalTernaryExpressionByElseResult = ConditionalTernaryExpressionNavigator.GetByElseResult(expression);
            if (conditionalTernaryExpressionByElseResult != null)
            {
                if (!_executing)
                    return range;
                conditionalTernaryExpressionByElseResult.ReplaceBy(conditionalTernaryExpressionByElseResult.ThenResult);
                return null;
            }
            
            var prefixExpression = PrefixExpressionNavigator.GetByOperand(expression);
            if (prefixExpression != null)
                return AdjustExpression(new TreeRange(prefixExpression, prefixExpression), prefixExpression);
            
            var postfixExpression = PostfixExpressionNavigator.GetByOperand(expression);
            if (postfixExpression != null)
                return AdjustExpression(new TreeRange(postfixExpression, postfixExpression), postfixExpression);
            return range;
        }
コード例 #14
0
 public RemoveUnreachableCodeFix(UnreachableCodeWarning error)
 {
     _range = error.TreeRange;
 }
コード例 #15
0
        public override void FormatReplacedRange(ITreeNode first, ITreeNode last, ITreeRange oldNodes)
        {
            FormatInsertedNodes(first, last, false);

            FormatterImplHelper.CheckForMinimumSeparator(this, first, last);
        }
コード例 #16
0
 public RemoveUnreachableCodeFix(HeuristicallyUnreachableCodeWarning error)
 {
     _range = error.TreeRange;
 }
コード例 #17
0
 public override ITreeRange FormatInsertedRange(ITreeNode nodeFirst, ITreeNode nodeLast, ITreeRange origin) =>
 FormatterImplHelper.FormatInsertedRangeHelper(this, nodeFirst, nodeLast, origin, true);
コード例 #18
0
 public ITreeRange HandleChangeStatements(IPsiServices psiServices, ITreeRange rangeBeforeChange, Func <ITreeRange> changeAction, bool strict)
 => changeAction();
コード例 #19
0
 public override ITreeRange FormatInsertedRange(ITreeNode nodeFirst, ITreeNode nodeLast, ITreeRange origin)
 {
   Format(nodeFirst, nodeLast, CodeFormatProfile.GENERATOR, null);
   return new TreeRange(nodeFirst, nodeLast);
 }
コード例 #20
0
 public override ITreeRange FormatInsertedRange(ITreeNode nodeFirst, ITreeNode nodeLast, ITreeRange origin)
 {
     Format(nodeFirst, nodeLast, CodeFormatProfile.GENERATOR, null);
     return(new TreeRange(nodeFirst, nodeLast));
 }
コード例 #21
0
        private static void SwapFileHeaderNode(ICSharpFile file, string newHeader)
        {
            ITreeRange existingHeaderRange = Utils.GetFileHeaderTreeRange(file);

            using (WriteLockCookie.Create(file.IsPhysical()))
            {
                ICommentNode newCommentNode;

                if (existingHeaderRange.IsEmpty)
                {
                    // existing header missing so add on a new line for our new header
                    newHeader += Environment.NewLine;

                    IWhitespaceNode node          = file.ToTreeNode().FirstChild as IWhitespaceNode;
                    bool            insertNewLine = true;
                    while (node != null)
                    {
                        if (node.IsNewLine)
                        {
                            insertNewLine = false;
                            break;
                        }

                        node = node.NextSibling as IWhitespaceNode;
                    }

                    if (insertNewLine)
                    {
                        newHeader += Environment.NewLine;
                    }

                    newCommentNode =
                        (ICommentNode)
                        CSharpTokenType.END_OF_LINE_COMMENT.Create(new JB::JetBrains.Text.StringBuffer(newHeader), new TreeOffset(0), new TreeOffset(newHeader.Length));

                    LowLevelModificationUtil.AddChildBefore(file.ToTreeNode().FirstChild, new ITreeNode[] { newCommentNode });
                }
                else
                {
                    ITokenNode lastToken = (ITokenNode)existingHeaderRange.Last;
                    ITokenNode nextToken = lastToken.GetNextToken();
                    if (nextToken != null)
                    {
                        ITokenNode nextNextToken = nextToken.GetNextToken();
                        if (nextNextToken != null)
                        {
                            ITokenNode nextNextNextToken = nextNextToken.GetNextToken();

                            if (!nextToken.IsNewLine() || !nextNextToken.IsNewLine())
                            {
                                newHeader += Environment.NewLine;
                            }

                            if (nextNextNextToken.GetTokenType() == CSharpTokenType.PP_SHARP && nextToken.IsNewLine() && nextNextToken.IsNewLine())
                            {
                                newHeader += Environment.NewLine;
                            }

                            newCommentNode =
                                (ICommentNode)
                                CSharpTokenType.END_OF_LINE_COMMENT.Create(
                                    new JB::JetBrains.Text.StringBuffer(newHeader), new TreeOffset(0), new TreeOffset(newHeader.Length));

                            LowLevelModificationUtil.ReplaceChildRange(existingHeaderRange.First, existingHeaderRange.Last, new ITreeNode[] { newCommentNode });
                        }
                    }
                }
            }
        }
コード例 #22
0
ファイル: T4CodeFormatter.cs プロジェクト: MrJul/ForTea
		public override void FormatReplacedRange(ITreeNode first, ITreeNode last, ITreeRange oldNodes) {
		}
コード例 #23
0
        private ITreeRange AdjustExpression(ITreeRange range, IJavaScriptExpression expression)
        {
            var binaryExpressionByLeftOperand = BinaryExpressionNavigator.GetByLeftOperand(expression);

            if (binaryExpressionByLeftOperand != null && binaryExpressionByLeftOperand.Sign != null)
            {
                return(new TreeRange(expression, binaryExpressionByLeftOperand.Sign));
            }

            var binaryExpressionByRightOperand = BinaryExpressionNavigator.GetByRightOperand(expression);

            if (binaryExpressionByRightOperand != null && binaryExpressionByRightOperand.Sign != null)
            {
                return(new TreeRange(binaryExpressionByRightOperand.Sign, expression));
            }

            var conditionalTernaryExpressionByConditionOperand = ConditionalTernaryExpressionNavigator.GetByConditionOperand(expression);

            if (conditionalTernaryExpressionByConditionOperand != null)
            {
                return(AdjustExpression(new TreeRange(conditionalTernaryExpressionByConditionOperand, conditionalTernaryExpressionByConditionOperand), conditionalTernaryExpressionByConditionOperand));
            }

            var conditionalTernaryExpressionByThenResult = ConditionalTernaryExpressionNavigator.GetByThenResult(expression);

            if (conditionalTernaryExpressionByThenResult != null)
            {
                if (conditionalTernaryExpressionByThenResult.ElseResult == null)
                {
                    return(AdjustExpression(new TreeRange(conditionalTernaryExpressionByThenResult, conditionalTernaryExpressionByThenResult), conditionalTernaryExpressionByThenResult));
                }
                if (!_executing)
                {
                    return(range);
                }
                conditionalTernaryExpressionByThenResult.ReplaceBy(conditionalTernaryExpressionByThenResult.ElseResult);
                return(null);
            }

            var conditionalTernaryExpressionByElseResult = ConditionalTernaryExpressionNavigator.GetByElseResult(expression);

            if (conditionalTernaryExpressionByElseResult != null)
            {
                if (!_executing)
                {
                    return(range);
                }
                conditionalTernaryExpressionByElseResult.ReplaceBy(conditionalTernaryExpressionByElseResult.ThenResult);
                return(null);
            }

            var prefixExpression = PrefixExpressionNavigator.GetByOperand(expression);

            if (prefixExpression != null)
            {
                return(AdjustExpression(new TreeRange(prefixExpression, prefixExpression), prefixExpression));
            }

            var postfixExpression = PostfixExpressionNavigator.GetByOperand(expression);

            if (postfixExpression != null)
            {
                return(AdjustExpression(new TreeRange(postfixExpression, postfixExpression), postfixExpression));
            }
            return(range);
        }
コード例 #24
0
 public override void FormatReplacedRange(ITreeNode first, ITreeNode last, ITreeRange oldNodes)
 {
 }
 public void HandleRemoveStatementsRange(IPsiServices psiServices, ITreeRange treeRange, Action action)
 {
   action();
 }