コード例 #1
0
 public RemoveParametersPresenterFactory(IActiveCodePaneEditor editor, IRemoveParametersView view,
                                         VBProjectParseResult parseResult)
 {
     _editor      = editor;
     _view        = view;
     _parseResult = parseResult;
 }
コード例 #2
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var classes = parseResult.Declarations.Items.Where(item => !item.IsBuiltIn && item.DeclarationType == DeclarationType.Class).ToList();
            var modules = parseResult.Declarations.Items.Where(item => !item.IsBuiltIn && item.DeclarationType == DeclarationType.Module).ToList();

            var handlers = parseResult.Declarations.Items.Where(item => !item.IsBuiltIn && item.DeclarationType == DeclarationType.Control)
                           .SelectMany(control => parseResult.Declarations.FindEventHandlers(control)).ToList();

            var withEventFields = parseResult.Declarations.Items.Where(item => !item.IsBuiltIn && item.DeclarationType == DeclarationType.Variable && item.IsWithEvents);

            handlers.AddRange(withEventFields.SelectMany(field => parseResult.Declarations.FindEventProcedures(field)));

            var forms = parseResult.Declarations.Items.Where(
                item => !item.IsBuiltIn && item.DeclarationType == DeclarationType.Class &&
                item.QualifiedName.QualifiedModuleName.Component.Type == vbext_ComponentType.vbext_ct_MSForm)
                        .ToList();

            if (forms.Any())
            {
                handlers.AddRange(forms.SelectMany(form => parseResult.Declarations.FindFormEventHandlers(form)));
            }

            var issues = parseResult.Declarations.Items
                         .Where(item => !item.IsBuiltIn && !IsIgnoredDeclaration(parseResult.Declarations, item, handlers, classes, modules))
                         .Select(issue => new IdentifierNotUsedInspectionResult(string.Format(Description, issue.IdentifierName), Severity, issue.Context, issue.QualifiedName.QualifiedModuleName));

            issues = DocumentNames.DocumentEventHandlerPrefixes.Aggregate(issues, (current, item) => current.Where(issue => !issue.Name.Contains("'" + item)));

            return(issues.ToList());
        }
コード例 #3
0
        private Declaration FindSelectedDeclaration(out VBProjectParseResult results)
        {
            var project = _vbe.ActiveVBProject;

            if (project == null)
            {
                results = null;
                return(null);
            }

            var progress = new ParsingProgressPresenter();

            results = progress.Parse(_parser, _vbe.ActiveVBProject);

            var selection = _vbe.SelectedVBComponent;

            if (selection != null)
            {
                var componentName = selection.Name;
                var matches       = results.Declarations[componentName].ToList();
                if (matches.Count == 1)
                {
                    return(matches.Single());
                }

                var result = matches.SingleOrDefault(item =>
                                                     (item.DeclarationType == DeclarationType.Class || item.DeclarationType == DeclarationType.Module) &&
                                                     item.Project == project);

                return(result);
            }

            return(results.Declarations[project.Name].SingleOrDefault(item =>
                                                                      item.DeclarationType == DeclarationType.Project && item.Project == project));
        }
コード例 #4
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var interfaceMembers = parseResult.Declarations.FindInterfaceMembers()
                                   .Concat(parseResult.Declarations.FindInterfaceImplementationMembers())
                                   .ToList();

            var formEventHandlerScopes = parseResult.Declarations.FindFormEventHandlers()
                                         .Select(handler => handler.Scope);

            var eventScopes = parseResult.Declarations.Items.Where(item =>
                                                                   !item.IsBuiltIn && item.DeclarationType == DeclarationType.Event)
                              .Select(e => e.Scope);

            var declareScopes = parseResult.Declarations.Items.Where(item =>
                                                                     item.DeclarationType == DeclarationType.LibraryFunction ||
                                                                     item.DeclarationType == DeclarationType.LibraryProcedure)
                                .Select(e => e.Scope);

            var ignoredScopes = formEventHandlerScopes.Concat(eventScopes).Concat(declareScopes);

            var issues = parseResult.Declarations.Items.Where(declaration =>
                                                              !ignoredScopes.Contains(declaration.ParentScope) &&
                                                              declaration.DeclarationType == DeclarationType.Parameter &&
                                                              !interfaceMembers.Select(m => m.Scope).Contains(declaration.ParentScope) &&
                                                              PrimitiveTypes.Contains(declaration.AsTypeName) &&
                                                              ((VBAParser.ArgContext)declaration.Context).BYVAL() == null &&
                                                              !IsUsedAsByRefParam(parseResult.Declarations, declaration) &&
                                                              !declaration.References.Any(reference => reference.IsAssignment))
                         .Select(issue => new ParameterCanBeByValInspectionResult(string.Format(Description, issue.IdentifierName), Severity, ((dynamic)issue.Context).ambiguousIdentifier(), issue.QualifiedName));

            return(issues);
        }
コード例 #5
0
 public ParameterNotUsedInspectionResult(string inspection, CodeInspectionSeverity type,
                                         ParserRuleContext context, QualifiedMemberName qualifiedName, bool isInterfaceImplementation, RemoveParametersRefactoring quickFixRefactoring, VBProjectParseResult parseResult)
     : base(inspection, type, qualifiedName.QualifiedModuleName, context)
 {
     _isInterfaceImplementation = isInterfaceImplementation;
     _quickFixRefactoring       = quickFixRefactoring;
     _parseResult = parseResult;
 }
コード例 #6
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var issues = from item in parseResult.Declarations.Items
                         where !item.IsBuiltIn && item.Accessibility == Accessibility.Global &&
                         item.Context != null
                         select new ObsoleteGlobalInspectionResult(Description, Severity, new QualifiedContext <ParserRuleContext>(item.QualifiedName.QualifiedModuleName, item.Context));

            return(issues);
        }
コード例 #7
0
        public void QuickFix(VBProjectParseResult parseResult, QualifiedSelection selection)
        {
            _model = new RemoveParametersModel(parseResult, selection);
            var target = _model.Declarations.FindSelection(selection, new[] { DeclarationType.Parameter });

            // ReSharper disable once PossibleUnintendedReferenceComparison
            _model.Parameters.Find(param => param.Declaration == target).IsRemoved = true;
            RemoveParameters();
        }
コード例 #8
0
ファイル: RenameModel.cs プロジェクト: yadimon/Rubberduck
        public RenameModel(VBE vbe, VBProjectParseResult parseResult, QualifiedSelection selection)
        {
            _vbe          = vbe;
            _parseResult  = parseResult;
            _declarations = parseResult.Declarations;
            _selection    = selection;

            AcquireTarget(out _target, Selection);
        }
コード例 #9
0
 private void _bgw_DoWork(object sender, DoWorkEventArgs e)
 {
     _parser.ParseStarted       += _parser_ParseStarted;
     _parser.ResolutionProgress += _parser_ResolutionProgress;
     _parser.ParseProgress      += _parser_ParseProgress;
     Result = _parser.Parse(_project);
     _parser.ParseStarted       -= _parser_ParseStarted;
     _parser.ResolutionProgress -= _parser_ResolutionProgress;
     _parser.ParseProgress      -= _parser_ParseProgress;
 }
コード例 #10
0
ファイル: RenamePresenter.cs プロジェクト: igor-bu/Rubberduck
        public RenamePresenter(VBE vbe, IRenameView view, VBProjectParseResult parseResult, QualifiedSelection selection)
        {
            _vbe  = vbe;
            _view = view;
            _view.OkButtonClicked += OnOkButtonClicked;

            _parseResult  = parseResult;
            _declarations = parseResult.Declarations;
            _selection    = selection;
        }
コード例 #11
0
        public RemoveParametersModel(VBProjectParseResult parseResult, QualifiedSelection selection)
        {
            _parseResult  = parseResult;
            _declarations = parseResult.Declarations;

            AcquireTarget(selection);

            Parameters = new List <Parameter>();
            LoadParameters();
        }
コード例 #12
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var issues = parseResult.Declarations.Items
                         .Where(item => !item.IsBuiltIn)
                         .SelectMany(item =>
                                     item.References.Where(reference => reference.HasExplicitLetStatement))
                         .Select(issue => new ObsoleteLetStatementUsageInspectionResult(Name, Severity, new QualifiedContext <ParserRuleContext>(issue.QualifiedModuleName, issue.Context)));

            return(issues);
        }
コード例 #13
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var issues = parseResult.Declarations.Items
                         .Where(declaration => !declaration.IsBuiltIn &&
                                declaration.DeclarationType == DeclarationType.Project &&
                                declaration.IdentifierName.StartsWith("VBAProject"))
                         .Select(issue => new GenericProjectNameInspectionResult(string.Format(Description, issue.IdentifierName), Severity, issue, parseResult))
                         .ToList();

            return(issues);
        }
コード例 #14
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var issues = from item in parseResult.Declarations.Items.Where(item => !item.IsBuiltIn)
                         where (item.DeclarationType == DeclarationType.Variable ||
                                item.DeclarationType == DeclarationType.Constant ||
                                item.DeclarationType == DeclarationType.Parameter) &&
                         !item.IsTypeSpecified()
                         select new VariableTypeNotDeclaredInspectionResult(string.Format(Name, item.DeclarationType, item.IdentifierName), Severity, item.Context, item.QualifiedName.QualifiedModuleName);

            return(issues);
        }
コード例 #15
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var issues = from item in parseResult.Declarations.Items
                         where !item.IsBuiltIn &&
                         ProcedureTypes.Contains(item.DeclarationType) &&
                         !item.IsTypeSpecified()
                         let issue = new { Declaration = item, QualifiedContext = new QualifiedContext <ParserRuleContext>(item.QualifiedName, item.Context) }
            select new ImplicitVariantReturnTypeInspectionResult(string.Format(Description, issue.Declaration.IdentifierName), Severity, issue.QualifiedContext);

            return(issues);
        }
コード例 #16
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var issues = from item in parseResult.Declarations.Items
                         where !item.IsBuiltIn &&
                         ProcedureTypes.Contains(item.DeclarationType) &&
                         item.Accessibility == Accessibility.Implicit
                         let context = new QualifiedContext <ParserRuleContext>(item.QualifiedName, item.Context)
                                       select new ImplicitPublicMemberInspectionResult(string.Format(Description, ((dynamic)context.Context).ambiguousIdentifier().GetText()), Severity, context);

            return(issues);
        }
コード例 #17
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var issues = parseResult.Declarations.Items
                         .Where(item => !item.IsBuiltIn)
                         .Where(item => item.DeclarationType == DeclarationType.Variable ||
                                item.DeclarationType == DeclarationType.Constant)
                         .GroupBy(variable => variable.Context.Parent as ParserRuleContext)
                         .Where(grouping => grouping.Count() > 1)
                         .Select(grouping => new MultipleDeclarationsInspectionResult(Description, Severity, new QualifiedContext <ParserRuleContext>(grouping.First().QualifiedName.QualifiedModuleName, grouping.Key)));

            return(issues);
        }
コード例 #18
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var declarations = parseResult.Declarations.Items.Where(declaration =>
                                                                    !declaration.IsBuiltIn &&
                                                                    (declaration.DeclarationType == DeclarationType.Constant) &&
                                                                    !declaration.References.Any());

            foreach (var issue in declarations)
            {
                yield return(new IdentifierNotUsedInspectionResult(string.Format(Name, issue.IdentifierName), Severity, issue.Context, issue.QualifiedName.QualifiedModuleName));
            }
        }
コード例 #19
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var multilineParameters = from p in parseResult.Declarations.Items
                                      .Where(item => item.DeclarationType == DeclarationType.Parameter)
                                      where p.Context.GetSelection().LineCount > 1
                                      select p;

            var issues = multilineParameters
                         .Select(param => new MultilineParameterInspectionResult(string.Format(param.Context.GetSelection().LineCount > 3 ? RubberduckUI.EasterEgg_Continuator : Description, param.IdentifierName), Severity, param.Context, param.QualifiedName));

            return(issues);
        }
コード例 #20
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var declarations = from item in parseResult.Declarations.Items
                               where !item.IsBuiltIn && item.HasTypeHint()
                               select new ObsoleteTypeHintInspectionResult(string.Format(Name, "declaration of " + item.DeclarationType.ToString().ToLower(), item.IdentifierName), Severity, new QualifiedContext(item.QualifiedName, item.Context), item);

            var references = from item in parseResult.Declarations.Items.Where(item => !item.IsBuiltIn).SelectMany(d => d.References)
                             where item.HasTypeHint()
                             select new ObsoleteTypeHintInspectionResult(string.Format(Name, "usage of " + item.Declaration.DeclarationType.ToString().ToLower(), item.IdentifierName), Severity, new QualifiedContext(item.QualifiedModuleName, item.Context), item.Declaration);

            return(declarations.Union(references));
        }
コード例 #21
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var modules = parseResult.ComponentParseResults.ToList();

            foreach (var comment in modules.SelectMany(module => module.Comments))
            {
                if (comment.Marker == Tokens.Rem)
                {
                    yield return(new ObsoleteCommentSyntaxInspectionResult(Description, Severity, comment));
                }
            }
        }
コード例 #22
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var assignedByValParameters =
                parseResult.Declarations.Items.Where(declaration => !declaration.IsBuiltIn &&
                                                     declaration.DeclarationType == DeclarationType.Parameter &&
                                                     ((VBAParser.ArgContext)declaration.Context).BYVAL() != null &&
                                                     declaration.References.Any(reference => reference.IsAssignment));

            var issues = assignedByValParameters
                         .Select(param => new AssignedByValParameterInspectionResult(string.Format(Name, param.IdentifierName), Severity, param.Context, param.QualifiedName));

            return(issues);
        }
コード例 #23
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var declarations = parseResult.Declarations.Items.Where(declaration =>
                                                                    !declaration.IsBuiltIn
                                                                    //&& !declaration.IsArray()
                                                                    && declaration.DeclarationType == DeclarationType.Variable &&
                                                                    declaration.References.All(reference => reference.IsAssignment));

            foreach (var issue in declarations)
            {
                yield return(new IdentifierNotUsedInspectionResult(string.Format(Description, issue.IdentifierName), Severity, ((dynamic)issue.Context).ambiguousIdentifier(), issue.QualifiedName.QualifiedModuleName));
            }
        }
コード例 #24
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var interfaceMembers = parseResult.Declarations.FindInterfaceImplementationMembers();
            var issues           = (from item in parseResult.Declarations.Items
                                    where item.DeclarationType == DeclarationType.Parameter &&
                                    !item.IsBuiltIn &&
                                    !interfaceMembers.Select(m => m.Scope).Contains(item.ParentScope)
                                    let arg = item.Context.Parent as VBAParser.ArgContext
                                              where arg != null && arg.BYREF() == null && arg.BYVAL() == null
                                              select new QualifiedContext <VBAParser.ArgContext>(item.QualifiedName, arg))
                                   .Select(issue => new ImplicitByRefParameterInspectionResult(string.Format(Name, issue.Context.ambiguousIdentifier().GetText()), Severity, issue));

            return(issues);
        }
コード例 #25
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var usages = parseResult.Declarations.Items.Where(declaration => !declaration.IsBuiltIn &&
                                                              declaration.DeclarationType == DeclarationType.Variable &&
                                                              !declaration.References.Any(reference => reference.IsAssignment))
                         .SelectMany(declaration => declaration.References);

            foreach (var issue in usages)
            {
                //todo: add context to IdentifierReference
                //yield return new UnassignedVariableUsageInspectionResult(string.Format(Name, issue.Context.GetText()), Severity, issue.Context, issue.QualifiedName);
            }

            return(null);
        }
コード例 #26
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var interfaceMembers = parseResult.Declarations.FindInterfaceMembers();
            var interfaceImplementationMembers = parseResult.Declarations.FindInterfaceImplementationMembers();

            var functions = parseResult.Declarations.Items
                            .Where(declaration => !declaration.IsBuiltIn && ReturningMemberTypes.Contains(declaration.DeclarationType) &&
                                   !interfaceMembers.Contains(declaration)).ToList();

            var issues = functions
                         .Where(declaration => declaration.References.All(r => !r.IsAssignment))
                         .Select(issue => new NonReturningFunctionInspectionResult(string.Format(Name, issue.IdentifierName), Severity, new QualifiedContext <ParserRuleContext>(issue.QualifiedName, issue.Context), interfaceImplementationMembers.Select(m => m.Scope).Contains(issue.Scope)));

            return(issues);
        }
コード例 #27
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var options = parseResult.Declarations.Items
                          .Where(declaration => !declaration.IsBuiltIn &&
                                 declaration.DeclarationType == DeclarationType.ModuleOption &&
                                 declaration.Context is VBAParser.OptionExplicitStmtContext)
                          .ToList();

            var modules = parseResult.Declarations.Items
                          .Where(declaration => !declaration.IsBuiltIn && ModuleTypes.Contains(declaration.DeclarationType));

            var issues = modules.Where(module => !options.Select(option => option.Scope).Contains(module.Scope))
                         .Select(issue => new OptionExplicitInspectionResult(Name, Severity, issue.QualifiedName.QualifiedModuleName));

            return(issues);
        }
コード例 #28
0
        public VBProjectParseResult Parse(VBProject project, object owner = null)
        {
            if (owner != null)
            {
                OnParseStarted(new[] { project.Name }, owner);
            }

            var results = new List <VBComponentParseResult>();

            if (project.Protection == vbext_ProjectProtection.vbext_pp_locked)
            {
                return(new VBProjectParseResult(project, results));
            }

            var modules     = project.VBComponents.Cast <VBComponent>();
            var mustResolve = false;

            foreach (var vbComponent in modules)
            {
                OnParseProgress(vbComponent);

                bool fromCache;
                var  componentResult = Parse(vbComponent, out fromCache);

                if (componentResult != null)
                {
                    mustResolve = mustResolve || !fromCache;
                    results.Add(componentResult);
                }
            }

            var parseResult = new VBProjectParseResult(project, results);

            if (mustResolve)
            {
                parseResult.Progress += parseResult_Progress;
                parseResult.Resolve();
                parseResult.Progress -= parseResult_Progress;
            }
            if (owner != null)
            {
                OnParseCompleted(new[] { parseResult }, owner);
            }

            return(parseResult);
        }
コード例 #29
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var options = parseResult.Declarations.Items
                          .Where(declaration => !declaration.IsBuiltIn &&
                                 declaration.DeclarationType == DeclarationType.ModuleOption &&
                                 declaration.Context is VBAParser.OptionBaseStmtContext)
                          .ToList();

            if (!options.Any())
            {
                return(new List <CodeInspectionResultBase>());
            }

            var issues = options.Where(option => ((VBAParser.OptionBaseStmtContext)option.Context).INTEGERLITERAL().GetText() == "1")
                         .Select(issue => new OptionBaseInspectionResult(Name, Severity, issue.QualifiedName.QualifiedModuleName));

            return(issues);
        }
コード例 #30
0
        public IEnumerable <CodeInspectionResultBase> GetInspectionResults(VBProjectParseResult parseResult)
        {
            var interfaceMemberScopes = parseResult.Declarations.FindInterfaceMembers().Select(m => m.Scope).ToList();
            var interfaceImplementationMemberScopes = parseResult.Declarations.FindInterfaceImplementationMembers().Select(m => m.Scope).ToList();

            var parameters = parseResult.Declarations.Items.Where(parameter => !parameter.IsBuiltIn &&
                                                                  parameter.DeclarationType == DeclarationType.Parameter &&
                                                                  !(parameter.Context.Parent.Parent is VBAParser.EventStmtContext) &&
                                                                  !(parameter.Context.Parent.Parent is VBAParser.DeclareStmtContext));

            var unused = parameters.Where(parameter => !parameter.References.Any()).ToList();

            var issues = from issue in unused.Where(parameter => !IsInterfaceMemberParameter(parameter, interfaceMemberScopes))
                         let isInterfaceImplementationMember = IsInterfaceMemberImplementationParameter(issue, interfaceImplementationMemberScopes)
                                                               select new ParameterNotUsedInspectionResult(string.Format(Name, issue.IdentifierName), Severity, ((dynamic)issue.Context).ambiguousIdentifier(), issue.QualifiedName, isInterfaceImplementationMember);

            return(issues.ToList());
        }
コード例 #31
0
        public VBProjectParseResult Parse(VBProject project, object owner = null)
        {
            if (owner != null)
            {
                OnParseStarted(new[]{project.Name}, owner);
            }

            var results = new List<VBComponentParseResult>();
            if (project.Protection == vbext_ProjectProtection.vbext_pp_locked)
            {
                return new VBProjectParseResult(project, results);
            }

            var modules = project.VBComponents.Cast<VBComponent>();
            var mustResolve = false;
            foreach (var vbComponent in modules)
            {
                OnParseProgress(vbComponent);

                bool fromCache;
                var componentResult = Parse(vbComponent, out fromCache);

                if (componentResult != null)
                {
                    mustResolve = mustResolve || !fromCache;
                    results.Add(componentResult);
                }
            }

            var parseResult = new VBProjectParseResult(project, results);
            if (mustResolve)
            {
                parseResult.Progress += parseResult_Progress;
                parseResult.Resolve();
                parseResult.Progress -= parseResult_Progress;
            }
            if (owner != null)
            {
                OnParseCompleted(new[] {parseResult}, owner);
            }

            return parseResult;
        }