예제 #1
0
        public static string GetSelectedProcedureScope(this CodeModule module, Selection selection)
        {
            var moduleName  = module.Name;
            var projectName = module.Parent.Collection.Parent.Name;
            var parentScope = projectName + '.' + moduleName;

            vbext_ProcKind kind;
            var            procStart = module.get_ProcOfLine(selection.StartLine, out kind);
            var            procEnd   = module.get_ProcOfLine(selection.EndLine, out kind);

            return(procStart == procEnd
                ? parentScope + '.' + procStart
                : null);
        }
예제 #2
0
        public static IEnumerable <Member> GetMembers(this CodeModule module, vbext_ProcKind?procedureKind = null)
        {
            var currentLine = module.CountOfDeclarationLines + 1;

            while (currentLine < module.CountOfLines)
            {
                vbext_ProcKind kind;
                var            name = module.get_ProcOfLine(currentLine, out kind);

                if ((procedureKind ?? kind) == kind)
                {
                    var startLine = module.get_ProcStartLine(name, kind);
                    var lineCount = module.get_ProcCountLines(name, kind);

                    var body = module.Lines[startLine, lineCount].Split('\n');

                    Member member;
                    if (Member.TryParse(body, new QualifiedModuleName(module.Parent), out member))
                    {
                        yield return(member);

                        currentLine = startLine + lineCount;
                    }
                    else
                    {
                        currentLine = currentLine + 1;
                    }
                }
            }
        }
예제 #3
0
        private bool IsValidSelection(CodeModule module, Selection selection)
        {
            if (selection.LineCount > 1)
            {
                vbext_ProcKind kindStart;
                var            startProc = module.get_ProcOfLine(selection.StartLine, out kindStart);

                vbext_ProcKind kindEnd;
                var            endProc = module.get_ProcOfLine(selection.EndLine, out kindEnd);

                if (startProc != endProc || kindStart != kindEnd)
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #4
0
        public IEnumerable <Member> GetMembers()
        {
            var currentLine = _module.CountOfDeclarationLines + 1;

            while (currentLine < _module.CountOfLines)
            {
                vbext_ProcKind kind;
                var            name = _module.get_ProcOfLine(currentLine, out kind);

                var startLine = _module.get_ProcStartLine(name, kind);
                var lineCount = _module.get_ProcCountLines(name, kind);

                var body = _module.Lines[startLine, lineCount].Split('\n');

                Member member;
                if (Member.TryParse(body, _module.Parent.Collection.Parent.Name, _module.Parent.Name, out member))
                {
                    yield return(member);

                    currentLine = startLine + lineCount;
                }
            }
        }
예제 #5
0
 public string get_ProcOfLine(int Line, out Microsoft.Vbe.Interop.vbext_ProcKind ProcKind)
 {
     return(_codeModule.get_ProcOfLine(Line, out ProcKind));
 }