public override void EnterVariableSubStmt(VBAParser.VariableSubStmtContext context) { var parent = (VBAParser.VariableStmtContext)context.Parent.Parent; var accessibility = GetMemberAccessibility(parent.visibility()); var identifier = context.identifier(); if (identifier == null) { return; } var name = Identifier.GetName(identifier); var typeHint = Identifier.GetTypeHintValue(identifier); var asTypeClause = context.asTypeClause(); var asTypeName = asTypeClause == null ? Tokens.Variant : asTypeClause.type().GetText(); var withEvents = parent.WITHEVENTS() != null; var isAutoObject = asTypeClause != null && asTypeClause.NEW() != null; bool isArray = context.LPAREN() != null; AddDeclaration( CreateDeclaration( name, asTypeName, accessibility, DeclarationType.Variable, context, context.identifier().GetSelection(), isArray, asTypeClause, typeHint, isAutoObject, withEvents)); }
private static RewriterInfo GetModuleVariableRemovalInfo(VBAParser.VariableSubStmtContext target, VBAParser.ModuleDeclarationsElementContext element, int count, int itemIndex, IReadOnlyList <VBAParser.VariableSubStmtContext> items) { if (count == 1) { return(GetSeparateModuleVariableRemovalInfo(element)); } return(GetRewriterInfoForTargetRemovedFromListStmt(target.Start, itemIndex, items)); }
private string DeclareExplicitVariant(VBAParser.VariableSubStmtContext context, out string instruction) { if (context == null) { instruction = null; return(null); } instruction = context.GetText(); return(instruction + ' ' + Tokens.As + ' ' + Tokens.Variant); }
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 GetModuleVariableRemovalInfo(VBAParser.VariableSubStmtContext target, VBAParser.ModuleDeclarationsElementContext element, int count, int itemIndex, IReadOnlyList <VBAParser.VariableSubStmtContext> items) { var startIndex = element.Start.TokenIndex; var parent = (VBAParser.ModuleDeclarationsContext)element.Parent; var elements = parent.moduleDeclarationsElement(); if (count == 1) { var stopIndex = FindStopTokenIndex(elements, element, parent); return(new RewriterInfo(startIndex, stopIndex)); } return(GetRewriterInfoForTargetRemovedFromListStmt(target.Start, itemIndex, items)); }
public override void EnterVariableSubStmt(VBAParser.VariableSubStmtContext context) { var parent = (VBAParser.VariableStmtContext)context.Parent.Parent; var accessibility = GetMemberAccessibility(parent.visibility()); var asTypeClause = context.asTypeClause(); var asTypeName = asTypeClause == null ? Tokens.Variant : asTypeClause.type().GetText(); var withEvents = parent.WITHEVENTS() != null; var selfAssigned = asTypeClause != null && asTypeClause.NEW() != null; _declarations.Add(CreateDeclaration(context.ambiguousIdentifier().GetText(), asTypeName, accessibility, DeclarationType.Variable, context, context.ambiguousIdentifier().GetSelection(), selfAssigned, withEvents)); }
private static Selection?SingleVariableDeclarationStatementSelection(VBAParser.VariableSubStmtContext context) { if (context is null) { return(null); } var declaredVariableList = (VBAParser.VariableListStmtContext)context.Parent; if (declaredVariableList.variableSubStmt().Length != 1) { return(null); } var declarationContext = (VBAParser.VariableStmtContext)declaredVariableList.Parent; return(declarationContext.GetSelection()); }
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); }
private string DeclareExplicitVariant(VBAParser.VariableSubStmtContext context, string contextLines, out string instruction, out Selection selection) { if (context == null) { instruction = null; selection = VBEditor.Selection.Empty; return(null); } var parent = (ParserRuleContext)context.Parent.Parent; selection = parent.GetSelection(); instruction = contextLines.Substring(selection.StartColumn - 1); var variable = context.GetText(); var replacement = context.identifier().GetText() + ' ' + Tokens.As + ' ' + Tokens.Variant; var insertIndex = instruction.IndexOf(variable, StringComparison.Ordinal); var result = instruction.Substring(0, insertIndex) + replacement + instruction.Substring(insertIndex + variable.Length); return(result); }
public static string GetName(VBAParser.VariableSubStmtContext context) { var nameContext = context.identifier(); return(GetName(nameContext)); }
public static string GetName(VBAParser.VariableSubStmtContext context, out Interval tokenInterval) { var nameContext = context.identifier(); return(GetName(nameContext, out tokenInterval)); }