private void UpdateContext(VBAParser.IfStmtContext context, IModuleRewriter rewriter)
        {
            var elseBlock   = context.elseBlock();
            var elseIfBlock = context.elseIfBlock().FirstOrDefault();

            if (BlockHasDeclaration(context.block()))
            {
                rewriter.InsertBefore(context.Start.TokenIndex, AdjustedBlockText(context.block()));
            }

            if (elseIfBlock != null)
            {
                rewriter.RemoveRange(context.IF().Symbol.TokenIndex, context.block()?.Stop.TokenIndex ?? context.endOfStatement().Stop.TokenIndex);
                rewriter.Replace(elseIfBlock.ELSEIF(), "If");
            }
            else if (elseBlock != null)
            {
                if (!string.IsNullOrEmpty(context.block()?.GetText()))
                {
                    rewriter.RemoveRange(context.block().Start.TokenIndex, elseBlock.ELSE().Symbol.TokenIndex);
                }
                else
                {
                    rewriter.Remove(elseBlock.ELSE());
                }

                Debug.Assert(context.booleanExpression().children.Count == 1);
                UpdateCondition((dynamic)context.booleanExpression().children[0], rewriter);
            }
            else
            {
                rewriter.Remove(context);
            }
        }
Exemplo n.º 2
0
        private static void RemoveAnnotationMarker(IModuleRewriter rewriter, VBAParser.AnnotationContext annotationContext)
        {
            var endOfAnnotationMarker   = annotationContext.start.TokenIndex - 1;
            var startOfAnnotationMarker = endOfAnnotationMarker - ParseTreeAnnotation.ANNOTATION_MARKER.Length + 1;

            rewriter.RemoveRange(startOfAnnotationMarker, endOfAnnotationMarker);
        }
 private static void RemoveArgumentRange(
     int startArgumentIndex,
     int stopArgumentIndex,
     VBAParser.ArgumentListContext argumentList,
     IModuleRewriter rewriter)
 {
     var(startTokenIndex, stopTokenIndex) = TokenIndexRange(startArgumentIndex, stopArgumentIndex, argumentList.argument());
     rewriter.RemoveRange(startTokenIndex, stopTokenIndex);
 }
        //Issue 4319.  If there are 3 or more arguments and the user elects to remove 2 or more of
        //the last arguments, then we need to specifically remove the trailing comma from
        //the last 'kept' argument.
        private void RemoveTrailingComma(IModuleRewriter rewriter, VBAParser.ArgumentListContext argList = null, bool usesNamedParams = false)
        {
            var commaLocator = RetrieveTrailingCommaInfo(_model.RemoveParameters, _model.Parameters);

            if (!commaLocator.RequiresTrailingCommaRemoval)
            {
                return;
            }

            var tokenStart = 0;
            var tokenStop  = 0;

            if (argList is null)
            {
                //Handle Signatures only
                tokenStart = commaLocator.LastRetainedArg.Param.Declaration.Context.Stop.TokenIndex + 1;
                tokenStop  = commaLocator.FirstOfRemovedArgSeries.Param.Declaration.Context.Start.TokenIndex - 1;
                rewriter.RemoveRange(tokenStart, tokenStop);
                return;
            }


            //Handles References
            var args = argList.children.OfType <VBAParser.ArgumentContext>().ToList();

            if (usesNamedParams)
            {
                var lastKeptArg = args.Where(a => a.namedArgument() != null)
                                  .SingleOrDefault(a => a.namedArgument().unrestrictedIdentifier().GetText() ==
                                                   commaLocator.LastRetainedArg.Identifier);

                var firstOfRemovedArgSeries = args.Where(a => a.namedArgument() != null)
                                              .SingleOrDefault(a => a.namedArgument().unrestrictedIdentifier().GetText() ==
                                                               commaLocator.FirstOfRemovedArgSeries.Identifier);

                tokenStart = lastKeptArg.Stop.TokenIndex + 1;
                tokenStop  = firstOfRemovedArgSeries.Start.TokenIndex - 1;
                rewriter.RemoveRange(tokenStart, tokenStop);
                return;
            }
            tokenStart = args[commaLocator.LastRetainedArg.Index].Stop.TokenIndex + 1;
            tokenStop  = args[commaLocator.FirstOfRemovedArgSeries.Index].Start.TokenIndex - 1;
            rewriter.RemoveRange(tokenStart, tokenStop);
        }
 private void UpdateCondition(VBAParser.LogicalNotOpContext condition, IModuleRewriter rewriter)
 {
     if (condition.whiteSpace() != null)
     {
         rewriter.RemoveRange(condition.NOT().Symbol.TokenIndex, condition.whiteSpace().Stop.TokenIndex);
     }
     else
     {
         rewriter.Remove(condition.NOT());
     }
 }
Exemplo n.º 6
0
        private static void RemoveEntireLine(IModuleRewriter rewriter, ParserRuleContext contextInCommentOrAnnotation)
        {
            var previousEndOfLineContext             = PreviousEndOfLine(contextInCommentOrAnnotation);
            var containingCommentOrAnnotationContext = contextInCommentOrAnnotation.GetAncestor <VBAParser.CommentOrAnnotationContext>();

            if (previousEndOfLineContext == null)
            {
                //We are on the first logical line.
                rewriter.RemoveRange(0, containingCommentOrAnnotationContext.stop.TokenIndex);
            }
            else if (containingCommentOrAnnotationContext.Eof() != null)
            {
                //We are on the last logical line. So swallow the NEWLINE from the previous end of line.
                rewriter.RemoveRange(previousEndOfLineContext.stop.TokenIndex, containingCommentOrAnnotationContext.stop.TokenIndex);
            }
            else
            {
                rewriter.RemoveRange(previousEndOfLineContext.stop.TokenIndex + 1, containingCommentOrAnnotationContext.stop.TokenIndex);
            }
        }
        private void UpdateContext(VBAParser.IfWithEmptyThenContext context, IModuleRewriter rewriter)
        {
            var elseClause = context.singleLineElseClause();

            if (context.singleLineElseClause().whiteSpace() != null)
            {
                rewriter.RemoveRange(elseClause.ELSE().Symbol.TokenIndex, elseClause.whiteSpace().Stop.TokenIndex);
            }
            else
            {
                rewriter.Remove(elseClause.ELSE());
            }

            Debug.Assert(context.booleanExpression().children.Count == 1);
            UpdateCondition((dynamic)context.booleanExpression().children[0], rewriter);
        }