public override void ExitVariableListStmt([NotNull] VBAParser.VariableListStmtContext context) { if (context.variableSubStmt().Length > 1) { _contexts.Add(new QualifiedContext <ParserRuleContext>(CurrentModuleName, context)); } }
public override void ExitVariableListStmt([NotNull] VBAParser.VariableListStmtContext context) { if (context.variableSubStmt().Length > 1) { SaveContext(context); } }
private static RewriterInfo GetSeparateLocalVariableRemovalInfo(VBAParser.VariableListStmtContext variables) { var mainBlockStmt = variables.GetAncestor <VBAParser.MainBlockStmtContext>(); var startIndex = mainBlockStmt.Start.TokenIndex; int stopIndex = FindStopTokenIndexForRemoval(mainBlockStmt); return(new RewriterInfo(startIndex, stopIndex)); }
private static RewriterInfo GetLocalVariableRemovalInfo(VBAParser.VariableSubStmtContext target, VBAParser.VariableListStmtContext variables, int count, int itemIndex, IReadOnlyList <VBAParser.VariableSubStmtContext> items) { if (count == 1) { return(GetSeparateLocalVariableRemovalInfo(variables)); } return(GetRewriterInfoForTargetRemovedFromListStmt(target.Start, itemIndex, items)); }
private static RewriterInfo GetLocalVariableRemovalInfo(VBAParser.VariableSubStmtContext target, VBAParser.VariableListStmtContext variables, int count, int itemIndex, IReadOnlyList <VBAParser.VariableSubStmtContext> items) { var mainBlockStmt = (VBAParser.MainBlockStmtContext)variables.Parent.Parent; var startIndex = mainBlockStmt.Start.TokenIndex; if (count == 1) { int stopIndex = variables.Stop.TokenIndex + 1; // also remove trailing newlines? var containingBlock = (VBAParser.BlockContext)mainBlockStmt.Parent.Parent; var blockStmtIndex = containingBlock.children.IndexOf(mainBlockStmt.Parent); // a few things can happen here if (blockStmtIndex == containingBlock.ChildCount) { // well we're lucky? stopIndex = containingBlock.Stop.TokenIndex; } else if (containingBlock.GetChild(blockStmtIndex + 1) is VBAParser.EndOfStatementContext eos) { // since EOS includes the following comment, we need to do weird shit // eos cannot be EOF, since we're on a local var, but it can be a statment separator var eol = eos.endOfLine(0); if (eol?.commentOrAnnotation() != null) { stopIndex = eol.commentOrAnnotation().Start.TokenIndex - 1; } else { // remove until the end of the EOS or continue to the start of the following if (blockStmtIndex + 2 >= containingBlock.ChildCount) { stopIndex = eol.Stop.TokenIndex; } else { stopIndex = containingBlock.GetChild <ParserRuleContext>(blockStmtIndex + 2).Start.TokenIndex - 1; } } } return(new RewriterInfo(startIndex, stopIndex)); } var blockStmt = (VBAParser.BlockStmtContext)mainBlockStmt.Parent; var block = (VBAParser.BlockContext)blockStmt.Parent; var statements = block.blockStmt(); return(GetRewriterInfoForTargetRemovedFromListStmt(target.Start, itemIndex, items)); }
private static RewriterInfo GetRewriterInfo(VBAParser.VariableSubStmtContext variable, VBAParser.VariableListStmtContext context) { if (context == null) { throw new ArgumentNullException(nameof(context), @"Context is null. Expecting a VBAParser.VariableListStmtContext instance."); } var items = context.variableSubStmt(); var itemIndex = items.ToList().IndexOf(variable); var count = items.Length; if (context.Parent.Parent is VBAParser.ModuleDeclarationsElementContext element) { return(GetModuleVariableRemovalInfo(variable, element, count, itemIndex, items)); } if (context.Parent is VBAParser.VariableStmtContext) { return(GetLocalVariableRemovalInfo(variable, context, count, itemIndex, items)); } return(RewriterInfo.None); }