コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 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));
 }
コード例 #4
0
 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));
 }
コード例 #5
0
        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));
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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));
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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));
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        public static string GetName(VBAParser.ConstSubStmtContext context, out Interval tokenInterval)
        {
            var nameContext = context.identifier();

            return(GetName(nameContext, out tokenInterval));
        }