From f770548b43ffed47340ea1660a09f98a5cba97f5 Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Thu, 12 Jan 2017 14:35:17 -0500 Subject: [PATCH 1/5] sort-of fixes #2503 (removing a module no longer permanently disables refresh command) --- Rubberduck.Parsing/VBA/ParseCoordinator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rubberduck.Parsing/VBA/ParseCoordinator.cs b/Rubberduck.Parsing/VBA/ParseCoordinator.cs index 7f4a01ebdc..5d605505e9 100644 --- a/Rubberduck.Parsing/VBA/ParseCoordinator.cs +++ b/Rubberduck.Parsing/VBA/ParseCoordinator.cs @@ -209,7 +209,7 @@ private void ParseAll(object requestor, CancellationTokenSource token) } State.SetStatusAndFireStateChanged(requestor, State.Status); - return; + //return; // returning here leaves state in 'ResolvedDeclarations' when a module is removed, which disables refresh } foreach (var component in toParse) From 97dbfd05024696d4c2cd7df3edbe82d926adff05 Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Thu, 12 Jan 2017 14:54:59 -0500 Subject: [PATCH 2/5] fixed IgnoreOnceQuickFix for UndeclaredVariableInspection --- .../Inspections/Results/UndeclaredVariableInspectionResult.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RetailCoder.VBE/Inspections/Results/UndeclaredVariableInspectionResult.cs b/RetailCoder.VBE/Inspections/Results/UndeclaredVariableInspectionResult.cs index bc3ad0dd5a..40c60d4f39 100644 --- a/RetailCoder.VBE/Inspections/Results/UndeclaredVariableInspectionResult.cs +++ b/RetailCoder.VBE/Inspections/Results/UndeclaredVariableInspectionResult.cs @@ -17,7 +17,7 @@ public UndeclaredVariableInspectionResult(IInspection inspection, Declaration ta _quickFixes = new QuickFixBase[] { new IntroduceLocalVariableQuickFix(target), - new IgnoreOnceQuickFix(target.Context, target.QualifiedSelection, inspection.Name), + new IgnoreOnceQuickFix(target.Context, target.QualifiedSelection, inspection.AnnotationName), }; } From 7e16700569c26c148a2321a3ef061c4c03671b3e Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Thu, 12 Jan 2017 17:49:06 -0500 Subject: [PATCH 3/5] added IsInspectionDisabled overload for IdentifierUsage --- .../Inspections/Abstract/InspectionBase.cs | 12 ++++++++++++ .../Inspections/ImplicitByRefParameterInspection.cs | 7 ++----- .../Inspections/ImplicitPublicMemberInspection.cs | 5 ++--- .../ImplicitVariantReturnTypeInspection.cs | 4 +--- .../Inspections/MultipleDeclarationsInspection.cs | 1 - .../Inspections/ObsoleteCallStatementInspection.cs | 3 +-- .../Inspections/ProcedureNotUsedInspection.cs | 11 +++++------ .../Inspections/UnassignedVariableUsageInspection.cs | 2 +- .../Inspections/UndeclaredVariableInspection.cs | 3 ++- .../Inspections/UntypedFunctionUsageInspection.cs | 2 +- 10 files changed, 27 insertions(+), 23 deletions(-) diff --git a/RetailCoder.VBE/Inspections/Abstract/InspectionBase.cs b/RetailCoder.VBE/Inspections/Abstract/InspectionBase.cs index d64591d50a..86316d42b4 100644 --- a/RetailCoder.VBE/Inspections/Abstract/InspectionBase.cs +++ b/RetailCoder.VBE/Inspections/Abstract/InspectionBase.cs @@ -128,6 +128,18 @@ protected bool IsInspectionDisabled(Declaration declaration, string inspectionNa && ((IgnoreAnnotation)annotation).IsIgnored(inspectionName)); } + protected bool IsInspectionDisabled(IdentifierReference reference, string inspectionName) + { + if (reference == null) + { + return false; + } + + return reference.Annotations.Any(annotation => + annotation.AnnotationType == AnnotationType.Ignore + && ((IgnoreAnnotation)annotation).IsIgnored(inspectionName)); + } + public int CompareTo(IInspection other) { return string.Compare(InspectionType + Name, other.InspectionType + other.Name, StringComparison.Ordinal); diff --git a/RetailCoder.VBE/Inspections/ImplicitByRefParameterInspection.cs b/RetailCoder.VBE/Inspections/ImplicitByRefParameterInspection.cs index d34a53def6..10cdd783c5 100644 --- a/RetailCoder.VBE/Inspections/ImplicitByRefParameterInspection.cs +++ b/RetailCoder.VBE/Inspections/ImplicitByRefParameterInspection.cs @@ -25,12 +25,10 @@ public ImplicitByRefParameterInspection(RubberduckParserState state) public override IEnumerable GetInspectionResults() { var interfaceMembersScope = UserDeclarations.FindInterfaceImplementationMembers().Select(m => m.Scope); - var builtinEventHandlers = State.AllDeclarations.FindBuiltInEventHandlers(); + var builtinEventHandlers = Declarations.FindBuiltInEventHandlers(); var issues = (from item in UserDeclarations - where - !IsInspectionDisabled(item, AnnotationName) - && item.DeclarationType == DeclarationType.Parameter + where item.DeclarationType == DeclarationType.Parameter // ParamArray parameters do not allow an explicit "ByRef" parameter mechanism. && !((ParameterDeclaration)item).IsParamArray && !interfaceMembersScope.Contains(item.ParentScope) @@ -40,7 +38,6 @@ public override IEnumerable GetInspectionResults() select new QualifiedContext(item.QualifiedName, arg)) .Select(issue => new ImplicitByRefParameterInspectionResult(this, issue.Context.unrestrictedIdentifier().GetText(), issue)); - return issues; } } diff --git a/RetailCoder.VBE/Inspections/ImplicitPublicMemberInspection.cs b/RetailCoder.VBE/Inspections/ImplicitPublicMemberInspection.cs index 65652a6132..2ef014098a 100644 --- a/RetailCoder.VBE/Inspections/ImplicitPublicMemberInspection.cs +++ b/RetailCoder.VBE/Inspections/ImplicitPublicMemberInspection.cs @@ -33,11 +33,10 @@ public ImplicitPublicMemberInspection(RubberduckParserState state) public override IEnumerable GetInspectionResults() { var issues = from item in UserDeclarations - where !IsInspectionDisabled(item, AnnotationName) - && ProcedureTypes.Contains(item.DeclarationType) + where ProcedureTypes.Contains(item.DeclarationType) && item.Accessibility == Accessibility.Implicit let context = new QualifiedContext(item.QualifiedName, item.Context) - select new ImplicitPublicMemberInspectionResult(this, context, item); + select new ImplicitPublicMemberInspectionResult(this, context, item); return issues; } } diff --git a/RetailCoder.VBE/Inspections/ImplicitVariantReturnTypeInspection.cs b/RetailCoder.VBE/Inspections/ImplicitVariantReturnTypeInspection.cs index 042e01ca13..d4f2dbe55f 100644 --- a/RetailCoder.VBE/Inspections/ImplicitVariantReturnTypeInspection.cs +++ b/RetailCoder.VBE/Inspections/ImplicitVariantReturnTypeInspection.cs @@ -31,9 +31,7 @@ public ImplicitVariantReturnTypeInspection(RubberduckParserState state) public override IEnumerable GetInspectionResults() { var issues = from item in UserDeclarations - where !IsInspectionDisabled(item, AnnotationName) - && ProcedureTypes.Contains(item.DeclarationType) - && !item.IsTypeSpecified + where ProcedureTypes.Contains(item.DeclarationType) && !item.IsTypeSpecified let issue = new {Declaration = item, QualifiedContext = new QualifiedContext(item.QualifiedName, item.Context)} select new ImplicitVariantReturnTypeInspectionResult(this, issue.Declaration.IdentifierName, issue.QualifiedContext, item); return issues; diff --git a/RetailCoder.VBE/Inspections/MultipleDeclarationsInspection.cs b/RetailCoder.VBE/Inspections/MultipleDeclarationsInspection.cs index a428332838..451fc887a1 100644 --- a/RetailCoder.VBE/Inspections/MultipleDeclarationsInspection.cs +++ b/RetailCoder.VBE/Inspections/MultipleDeclarationsInspection.cs @@ -24,7 +24,6 @@ public MultipleDeclarationsInspection(RubberduckParserState state) public override IEnumerable GetInspectionResults() { var issues = UserDeclarations - .Where(item => !IsInspectionDisabled(item, AnnotationName)) .Where(item => item.DeclarationType == DeclarationType.Variable || item.DeclarationType == DeclarationType.Constant) .GroupBy(variable => variable.Context.Parent as ParserRuleContext) diff --git a/RetailCoder.VBE/Inspections/ObsoleteCallStatementInspection.cs b/RetailCoder.VBE/Inspections/ObsoleteCallStatementInspection.cs index e82e02aaee..32bf1dde21 100644 --- a/RetailCoder.VBE/Inspections/ObsoleteCallStatementInspection.cs +++ b/RetailCoder.VBE/Inspections/ObsoleteCallStatementInspection.cs @@ -51,8 +51,7 @@ public override IEnumerable GetInspectionResults() if (!stringStrippedLines.Contains(":")) { results.Add(new ObsoleteCallStatementUsageInspectionResult(this, - new QualifiedContext(context.ModuleName, - context.Context as VBAParser.CallStmtContext))); + new QualifiedContext(context.ModuleName, context.Context))); } } } diff --git a/RetailCoder.VBE/Inspections/ProcedureNotUsedInspection.cs b/RetailCoder.VBE/Inspections/ProcedureNotUsedInspection.cs index 1354c35409..9b9502ed69 100644 --- a/RetailCoder.VBE/Inspections/ProcedureNotUsedInspection.cs +++ b/RetailCoder.VBE/Inspections/ProcedureNotUsedInspection.cs @@ -36,13 +36,13 @@ public override IEnumerable GetInspectionResults() { var declarations = UserDeclarations.ToList(); - var classes = UserDeclarations.Where(item => item.DeclarationType == DeclarationType.ClassModule).ToList(); - var modules = UserDeclarations.Where(item => item.DeclarationType == DeclarationType.ProceduralModule).ToList(); + var classes = declarations.Where(item => item.DeclarationType == DeclarationType.ClassModule).ToList(); + var modules = declarations.Where(item => item.DeclarationType == DeclarationType.ProceduralModule).ToList(); var handlers = declarations.Where(item => item.DeclarationType == DeclarationType.Control) .SelectMany(control => declarations.FindEventHandlers(control)).ToList(); - var withEventFields = UserDeclarations.Where(item => item.DeclarationType == DeclarationType.Variable && item.IsWithEvents); + var withEventFields = declarations.Where(item => item.DeclarationType == DeclarationType.Variable && item.IsWithEvents); handlers.AddRange(withEventFields.SelectMany(field => declarations.FindEventProcedures(field))); var forms = declarations.Where(item => item.DeclarationType == DeclarationType.ClassModule @@ -54,11 +54,10 @@ public override IEnumerable GetInspectionResults() handlers.AddRange(forms.SelectMany(form => State.FindFormEventHandlers(form))); } - handlers.AddRange(State.AllDeclarations.FindBuiltInEventHandlers()); + handlers.AddRange(Declarations.FindBuiltInEventHandlers()); var items = declarations - .Where(item => !IsIgnoredDeclaration(declarations, item, handlers, classes, modules) - && !IsInspectionDisabled(item, AnnotationName)).ToList(); + .Where(item => !IsIgnoredDeclaration(declarations, item, handlers, classes, modules)).ToList(); var issues = items.Select(issue => new IdentifierNotUsedInspectionResult(this, issue, issue.Context, issue.QualifiedName.QualifiedModuleName)); issues = DocumentEventHandlerPrefixes diff --git a/RetailCoder.VBE/Inspections/UnassignedVariableUsageInspection.cs b/RetailCoder.VBE/Inspections/UnassignedVariableUsageInspection.cs index a7cb3a8a95..3a350bc377 100644 --- a/RetailCoder.VBE/Inspections/UnassignedVariableUsageInspection.cs +++ b/RetailCoder.VBE/Inspections/UnassignedVariableUsageInspection.cs @@ -28,7 +28,7 @@ public override IEnumerable GetInspectionResults() && !UserDeclarations.Any(d => d.DeclarationType == DeclarationType.UserDefinedType && d.IdentifierName == declaration.AsTypeName) && !declaration.IsSelfAssigned - && !declaration.References.Any(reference => reference.IsAssignment)); + && !declaration.References.Any(reference => reference.IsAssignment && !IsInspectionDisabled(reference, AnnotationName))); //The parameter scoping was apparently incorrect before - need to filter for the actual function. var lenFunction = BuiltInDeclarations.SingleOrDefault(s => s.DeclarationType == DeclarationType.Function && s.Scope.Equals("VBE7.DLL;VBA.Strings.Len")); diff --git a/RetailCoder.VBE/Inspections/UndeclaredVariableInspection.cs b/RetailCoder.VBE/Inspections/UndeclaredVariableInspection.cs index d172778b2b..2ef7bc9155 100644 --- a/RetailCoder.VBE/Inspections/UndeclaredVariableInspection.cs +++ b/RetailCoder.VBE/Inspections/UndeclaredVariableInspection.cs @@ -3,6 +3,7 @@ using Rubberduck.Inspections.Abstract; using Rubberduck.Inspections.Resources; using Rubberduck.Inspections.Results; +using Rubberduck.Parsing.Symbols; using Rubberduck.Parsing.VBA; namespace Rubberduck.Inspections @@ -20,7 +21,7 @@ public UndeclaredVariableInspection(RubberduckParserState state) public override IEnumerable GetInspectionResults() { - return UserDeclarations.Where(item => item.IsUndeclared) + return UserDeclarations.Where(item => item.IsUndeclared && item.DeclarationType == DeclarationType.Variable) .Select(item => new UndeclaredVariableInspectionResult(this, item)); } } diff --git a/RetailCoder.VBE/Inspections/UntypedFunctionUsageInspection.cs b/RetailCoder.VBE/Inspections/UntypedFunctionUsageInspection.cs index d9ea6077b8..e05412549d 100644 --- a/RetailCoder.VBE/Inspections/UntypedFunctionUsageInspection.cs +++ b/RetailCoder.VBE/Inspections/UntypedFunctionUsageInspection.cs @@ -52,7 +52,7 @@ public override IEnumerable GetInspectionResults() return declarations.SelectMany(declaration => declaration.References .Where(item => _tokens.Contains(item.IdentifierName) && - !IsInspectionDisabled(item.QualifiedModuleName.Component, item.Selection.StartLine)) + !IsInspectionDisabled(item, AnnotationName)) .Select(item => new UntypedFunctionUsageInspectionResult(this, item))); } } From 97cbfbea1ae9221bc5db85b367a144c1f3703560 Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Thu, 12 Jan 2017 17:49:19 -0500 Subject: [PATCH 4/5] v2.0.12 --- RetailCoder.VBE/Properties/AssemblyInfo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RetailCoder.VBE/Properties/AssemblyInfo.cs b/RetailCoder.VBE/Properties/AssemblyInfo.cs index 40e77e2b9e..a2bf371c89 100644 --- a/RetailCoder.VBE/Properties/AssemblyInfo.cs +++ b/RetailCoder.VBE/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.0.11.*")] -[assembly: AssemblyFileVersion("2.0.11.0")] +[assembly: AssemblyVersion("2.0.12.*")] +[assembly: AssemblyFileVersion("2.0.12.0")] From 9142c6e2e57ca164526b62bb40acb6d7924a4352 Mon Sep 17 00:00:00 2001 From: Mathieu Guindon Date: Thu, 12 Jan 2017 18:08:55 -0500 Subject: [PATCH 5/5] fixed typo in file name --- Rubberduck.Parsing/Rubberduck.Parsing.csproj | 2 +- .../{ICustomDelarationLoader.cs => ICustomDeclarationLoader.cs} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename Rubberduck.Parsing/Symbols/{ICustomDelarationLoader.cs => ICustomDeclarationLoader.cs} (100%) diff --git a/Rubberduck.Parsing/Rubberduck.Parsing.csproj b/Rubberduck.Parsing/Rubberduck.Parsing.csproj index 1c48487d15..55d744f935 100644 --- a/Rubberduck.Parsing/Rubberduck.Parsing.csproj +++ b/Rubberduck.Parsing/Rubberduck.Parsing.csproj @@ -149,7 +149,7 @@ - + diff --git a/Rubberduck.Parsing/Symbols/ICustomDelarationLoader.cs b/Rubberduck.Parsing/Symbols/ICustomDeclarationLoader.cs similarity index 100% rename from Rubberduck.Parsing/Symbols/ICustomDelarationLoader.cs rename to Rubberduck.Parsing/Symbols/ICustomDeclarationLoader.cs