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); } }
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()); } }
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); }