public override void EnterConstSubStmt(VBAParser.ConstSubStmtContext context) { var parent = (VBAParser.ConstStmtContext)context.Parent; var accessibility = GetMemberAccessibility(parent.visibility()); var asTypeClause = context.asTypeClause(); var asTypeName = asTypeClause == null ? Tokens.Variant : asTypeClause.type().GetText(); var identifier = context.identifier(); var typeHint = Identifier.GetTypeHintValue(identifier); var name = Identifier.GetName(identifier); var value = context.expression().GetText(); var constStmt = (VBAParser.ConstStmtContext)context.Parent; var declaration = new ConstantDeclaration( new QualifiedMemberName(_qualifiedName, name), _parentDeclaration, _currentScope, asTypeName, asTypeClause, typeHint, FindAnnotations(constStmt.Start.Line), accessibility, DeclarationType.Constant, value, context, identifier.GetSelection()); AddDeclaration(declaration); }
private string DeclareExplicitVariant(VBAParser.ConstSubStmtContext 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; selection = parent.GetSelection(); instruction = contextLines.Substring(selection.StartColumn - 1); var constant = context.GetText(); var replacement = context.identifier().GetText() + ' ' + Tokens.As + ' ' + Tokens.Variant + ' ' + context.EQ().GetText() + ' ' + context.expression().GetText(); var insertIndex = instruction.IndexOf(constant, StringComparison.Ordinal); var result = instruction.Substring(0, insertIndex) + replacement + instruction.Substring(insertIndex + constant.Length); return(result); }
private static RewriterInfo GetLocalConstantRemovalInfo(VBAParser.ConstSubStmtContext target, VBAParser.ConstStmtContext constants, int count, int itemIndex, IReadOnlyList <VBAParser.ConstSubStmtContext> items) { if (count == 1) { return(GetSeparateLocalConstantRemovalInfo(constants)); } return(GetRewriterInfoForTargetRemovedFromListStmt(target.Start, itemIndex, items)); }
private static RewriterInfo GetModuleConstantRemovalInfo( VBAParser.ConstSubStmtContext target, VBAParser.ModuleDeclarationsElementContext element, int count, int itemIndex, IReadOnlyList <VBAParser.ConstSubStmtContext> items) { if (count == 1) { return(GetSeparateModuleConstantRemovalInfo(element)); } return(GetRewriterInfoForTargetRemovedFromListStmt(target.Start, itemIndex, items)); }
private static RewriterInfo GetModuleConstantRemovalInfo( VBAParser.ConstSubStmtContext target, VBAParser.ModuleDeclarationsElementContext element, int count, int itemIndex, IReadOnlyList <VBAParser.ConstSubStmtContext> 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)); }
private static Selection?SingleConstantDeclarationStatementSelection(VBAParser.ConstSubStmtContext context) { if (context is null) { return(null); } var declarationContext = (VBAParser.ConstStmtContext)context.Parent; if (declarationContext.constSubStmt().Length != 1) { return(null); } return(declarationContext.GetSelection()); }
private static RewriterInfo GetLocalConstantRemovalInfo(VBAParser.ConstSubStmtContext target, VBAParser.ConstStmtContext constants, int count, int itemIndex, IReadOnlyList <VBAParser.ConstSubStmtContext> items) { var mainBlockStmt = (VBAParser.MainBlockStmtContext)constants.Parent; var startIndex = mainBlockStmt.Start.TokenIndex; var blockStmt = (VBAParser.BlockStmtContext)mainBlockStmt.Parent; var block = (VBAParser.BlockContext)blockStmt.Parent; var statements = block.blockStmt(); if (count == 1) { var stopIndex = FindStopTokenIndex(statements, mainBlockStmt, block); return(new RewriterInfo(startIndex, stopIndex)); } return(GetRewriterInfoForTargetRemovedFromListStmt(target.Start, itemIndex, items)); }
public override void EnterConstSubStmt(VBAParser.ConstSubStmtContext context) { var parent = (VBAParser.ConstStmtContext)context.Parent; var accessibility = GetMemberAccessibility(parent.visibility()); var asTypeClause = context.asTypeClause(); var asTypeName = asTypeClause == null ? Tokens.Variant : asTypeClause.type().GetText(); var identifier = context.ambiguousIdentifier(); var name = identifier.GetText(); var value = context.valueStmt().GetText(); var declaration = new ValuedDeclaration(new QualifiedMemberName(_qualifiedName, name), _currentScope, asTypeName, accessibility, DeclarationType.Constant, value, context, identifier.GetSelection()); _declarations.Add(declaration); }
private static RewriterInfo GetRewriterInfo(VBAParser.ConstSubStmtContext target, VBAParser.ConstStmtContext context) { if (context == null) { throw new ArgumentNullException(nameof(context), @"Context is null. Expecting a VBAParser.ConstStmtContext instance."); } var items = context.constSubStmt(); var itemIndex = items.ToList().IndexOf(target); var count = items.Count; var element = context.Parent as VBAParser.ModuleDeclarationsElementContext; if (element != null) { return(GetModuleConstantRemovalInfo(target, element, count, itemIndex, items)); } return(GetLocalConstantRemovalInfo(target, context, count, itemIndex, items)); }
private string DeclareExplicitVariant(VBAParser.ConstSubStmtContext context, out string instruction) { if (context == null) { instruction = null; return(null); } var parent = (VBAParser.ConstStmtContext)context.Parent; instruction = parent.GetText(); var constant = context.GetText(); var replacement = context.ambiguousIdentifier().GetText() + ' ' + Tokens.As + ' ' + Tokens.Variant + ' ' + context.EQ().GetText() + ' ' + context.valueStmt().GetText(); var result = instruction.Replace(constant, replacement); return(result); }
public static string GetName(VBAParser.ConstSubStmtContext context, out Interval tokenInterval) { var nameContext = context.identifier(); return(GetName(nameContext, out tokenInterval)); }