From 36f8c20000b5a86f4fc6351b7de5d1243002ec13 Mon Sep 17 00:00:00 2001 From: comintern Date: Sun, 15 Jan 2017 19:12:40 -0600 Subject: [PATCH 01/10] Changed check for IsArray on function return types. --- .../Symbols/DeclarationSymbolsListener.cs | 2 +- .../ObjectVariableNotSetInpsectionTests.cs | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Rubberduck.Parsing/Symbols/DeclarationSymbolsListener.cs b/Rubberduck.Parsing/Symbols/DeclarationSymbolsListener.cs index 9151a71f2b..5872792297 100644 --- a/Rubberduck.Parsing/Symbols/DeclarationSymbolsListener.cs +++ b/Rubberduck.Parsing/Symbols/DeclarationSymbolsListener.cs @@ -470,7 +470,7 @@ public override void EnterFunctionStmt(VBAParser.FunctionStmtContext context) ? Tokens.Variant : asTypeClause.type().GetText(); var typeHint = Identifier.GetTypeHintValue(identifier); - var isArray = asTypeClause != null && asTypeClause.type().LPAREN() != null; + var isArray = asTypeName.EndsWith("()"); var declaration = CreateDeclaration( name, asTypeName, diff --git a/RubberduckTests/Inspections/ObjectVariableNotSetInpsectionTests.cs b/RubberduckTests/Inspections/ObjectVariableNotSetInpsectionTests.cs index fccb6afd60..3be05ae9fa 100644 --- a/RubberduckTests/Inspections/ObjectVariableNotSetInpsectionTests.cs +++ b/RubberduckTests/Inspections/ObjectVariableNotSetInpsectionTests.cs @@ -7,6 +7,7 @@ using Rubberduck.Parsing.VBA; using Rubberduck.VBEditor.Application; using Rubberduck.VBEditor.Events; +using Rubberduck.VBEditor.SafeComWrappers; using Rubberduck.VBEditor.SafeComWrappers.Abstract; using RubberduckTests.Mocks; @@ -171,6 +172,44 @@ Dim target As Range Assert.AreEqual(0, inspectionResults.Count()); } + //https://github.com/rubberduck-vba/Rubberduck/issues/2266 + [TestMethod] + [DeploymentItem(@"Testfiles\")] + [TestCategory("Inspections")] + public void ObjectVariableNotSet_FunctionReturnsArrayOfType_ReturnsNoResult() + { + const string inputCode = @" +Private Function GetSomeDictionaries() As Dictionary() + Dim temp(0 To 1) As Worksheet + Set temp(0) = New Dictionary + Set temp(1) = New Dictionary + GetSomeDictionaries = temp +End Function"; + + //Arrange + var builder = new MockVbeBuilder(); + var project = builder.ProjectBuilder("VBAProject", ProjectProtection.Unprotected) + .AddComponent("Codez", ComponentType.StandardModule, inputCode) + .AddReference("Scripting", @"C:\Windows\SysWOW64\scrrun.dll", true) + .Build(); + + var vbe = builder.AddProject(project).Build(); + + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState(new Mock().Object)); + + parser.State.AddTestLibrary("Scripting.1.0.xml"); + + parser.Parse(new CancellationTokenSource()); + if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new ObjectVariableNotSetInspection(parser.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.IsFalse(inspectionResults.Any()); + } + [TestMethod] [TestCategory("Inspections")] public void ObjectVariableNotSet_IgnoreQuickFixWorks() From bdc8e453caf4b88278b2204408780b6977691755 Mon Sep 17 00:00:00 2001 From: comintern Date: Mon, 16 Jan 2017 08:42:51 -0600 Subject: [PATCH 02/10] Only add Option Explicit in extracted interface if not present. Closes #2180 --- .../ExtractInterface/ExtractInterfaceRefactoring.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/RetailCoder.VBE/Refactorings/ExtractInterface/ExtractInterfaceRefactoring.cs b/RetailCoder.VBE/Refactorings/ExtractInterface/ExtractInterfaceRefactoring.cs index baa5081658..12e2e79e7a 100644 --- a/RetailCoder.VBE/Refactorings/ExtractInterface/ExtractInterfaceRefactoring.cs +++ b/RetailCoder.VBE/Refactorings/ExtractInterface/ExtractInterfaceRefactoring.cs @@ -103,7 +103,11 @@ private void AddInterface() { interfaceComponent.Name = _model.InterfaceName; - interfaceModule.InsertLines(1, Tokens.Option + ' ' + Tokens.Explicit + Environment.NewLine); + var optionPresent = interfaceModule.CountOfLines > 1; + if (!optionPresent) + { + interfaceModule.InsertLines(1, Tokens.Option + ' ' + Tokens.Explicit + Environment.NewLine); + } interfaceModule.InsertLines(3, GetInterfaceModuleBody()); var module = _model.TargetDeclaration.QualifiedSelection.QualifiedName.Component.CodeModule; From 77b5adc93e1c093bf5c23ff84f5985efb7f7f1c7 Mon Sep 17 00:00:00 2001 From: comintern Date: Mon, 16 Jan 2017 10:23:38 -0600 Subject: [PATCH 03/10] Add Indenter settings for vertical spacing between procedures. --- RetailCoder.VBE/UI/RubberduckUI.Designer.cs | 20 ++++++- RetailCoder.VBE/UI/RubberduckUI.resx | 6 ++ .../UI/Settings/IndenterSettings.xaml | 17 ++++++ .../UI/Settings/IndenterSettingsViewModel.cs | 40 ++++++++++++- .../ParserRuleContextExtensions.cs | 30 ++++++---- Rubberduck.SmartIndenter/IIndenterSettings.cs | 3 +- Rubberduck.SmartIndenter/IndenterSettings.cs | 27 +++++++++ .../ParserRuleContextExtensionTests.cs | 60 +++++++++++++++++++ RubberduckTests/RubberduckTests.csproj | 1 + .../Settings/IndenterSettingsTests.cs | 31 ++++++++-- 10 files changed, 215 insertions(+), 20 deletions(-) create mode 100644 RubberduckTests/Grammar/ParserRuleContextExtensionTests.cs diff --git a/RetailCoder.VBE/UI/RubberduckUI.Designer.cs b/RetailCoder.VBE/UI/RubberduckUI.Designer.cs index 35ab2388f6..3113ac186d 100644 --- a/RetailCoder.VBE/UI/RubberduckUI.Designer.cs +++ b/RetailCoder.VBE/UI/RubberduckUI.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// Runtime Version:4.0.30319.36373 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -2077,6 +2077,24 @@ public static string IndenterSettings_SpecialOptionsLabel { } } + /// + /// Looks up a localized string similar to Maintain vertical spacing. + /// + public static string IndenterSettings_VerticalSpacing { + get { + return ResourceManager.GetString("IndenterSettings_VerticalSpacing", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Vertical Spacing. + /// + public static string IndenterSettings_VerticalSpacingLabel { + get { + return ResourceManager.GetString("IndenterSettings_VerticalSpacingLabel", resourceCulture); + } + } + /// /// Looks up a localized string similar to Inspect. /// diff --git a/RetailCoder.VBE/UI/RubberduckUI.resx b/RetailCoder.VBE/UI/RubberduckUI.resx index ebeff93fd3..c4f3f5cb7d 100644 --- a/RetailCoder.VBE/UI/RubberduckUI.resx +++ b/RetailCoder.VBE/UI/RubberduckUI.resx @@ -1902,4 +1902,10 @@ End Sub Smart Indenter settings were found in your registry. Would you like to import them to Rubberduck? + + Maintain vertical spacing + + + Vertical Spacing + \ No newline at end of file diff --git a/RetailCoder.VBE/UI/Settings/IndenterSettings.xaml b/RetailCoder.VBE/UI/Settings/IndenterSettings.xaml index f151557523..d0f4acaf74 100644 --- a/RetailCoder.VBE/UI/Settings/IndenterSettings.xaml +++ b/RetailCoder.VBE/UI/Settings/IndenterSettings.xaml @@ -194,6 +194,23 @@ NumValue="{Binding IndentSpaces, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" MinNumber="0"/> +