From c6f25a4e4200ae70f1aa6911e84b9b325f718dbc Mon Sep 17 00:00:00 2001 From: Max Doerner Date: Sun, 19 Jan 2020 19:11:30 +0100 Subject: [PATCH] Make FunctionReturnValueDiscarded inspections correctly deal with output lists --- ...ctionReturnValueAlwaysDiscardedInspection.cs | 9 ++++++++- .../FunctionReturnValueDiscardedInspection.cs | 4 +++- ...ReturnValueAlwaysDiscardedInspectionTests.cs | 17 +++++++++++++++++ ...nctionReturnValueDiscardedInspectionTests.cs | 17 +++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/Rubberduck.CodeAnalysis/Inspections/Concrete/FunctionReturnValueAlwaysDiscardedInspection.cs b/Rubberduck.CodeAnalysis/Inspections/Concrete/FunctionReturnValueAlwaysDiscardedInspection.cs index b3bfa0cbdc..a3c3970cc0 100644 --- a/Rubberduck.CodeAnalysis/Inspections/Concrete/FunctionReturnValueAlwaysDiscardedInspection.cs +++ b/Rubberduck.CodeAnalysis/Inspections/Concrete/FunctionReturnValueAlwaysDiscardedInspection.cs @@ -144,7 +144,14 @@ private static bool IsCalledAsProcedure(ParserRuleContext context) ? methodCall : context; var memberAccessParent = ownFunctionCallExpression.GetAncestor(); - return memberAccessParent == null; + if (memberAccessParent != null) + { + return false; + } + + //If we are in an output list, the value is used somewhere in defining the argument. + var outputListParent = context.GetAncestor(); + return outputListParent == null; } protected override string ResultDescription(Declaration declaration) diff --git a/Rubberduck.CodeAnalysis/Inspections/Concrete/FunctionReturnValueDiscardedInspection.cs b/Rubberduck.CodeAnalysis/Inspections/Concrete/FunctionReturnValueDiscardedInspection.cs index e4c91a4bcc..96855023a4 100644 --- a/Rubberduck.CodeAnalysis/Inspections/Concrete/FunctionReturnValueDiscardedInspection.cs +++ b/Rubberduck.CodeAnalysis/Inspections/Concrete/FunctionReturnValueDiscardedInspection.cs @@ -82,7 +82,9 @@ private static bool IsCalledAsProcedure(ParserRuleContext context) return false; } - return true; + //If we are in an output list, the value is used somewhere in defining the argument. + var outputListParent = context.GetAncestor(); + return outputListParent == null; } protected override string ResultDescription(IdentifierReference reference) diff --git a/RubberduckTests/Inspections/FunctionReturnValueAlwaysDiscardedInspectionTests.cs b/RubberduckTests/Inspections/FunctionReturnValueAlwaysDiscardedInspectionTests.cs index cfcbb9d92f..63b0ecfeb9 100644 --- a/RubberduckTests/Inspections/FunctionReturnValueAlwaysDiscardedInspectionTests.cs +++ b/RubberduckTests/Inspections/FunctionReturnValueAlwaysDiscardedInspectionTests.cs @@ -323,6 +323,23 @@ End Sub Assert.AreEqual(0, InspectionResultsForStandardModule(code).Count()); } + [Test] + [Category("Inspections")] + [Category("Unused Value")] + public void OutputListFunctionCall_DoesNotReturnResult() + { + const string code = @" +Public Function Foo(ByVal bar As String) As Integer + Foo = 42 +End Function + +Public Sub Baz() + Debug.Print Foo(""Test"") +End Sub +"; + Assert.AreEqual(0, InspectionResultsForStandardModule(code).Count()); + } + [Test] [Category("Inspections")] [Category("Unused Value")] diff --git a/RubberduckTests/Inspections/FunctionReturnValueDiscardedInspectionTests.cs b/RubberduckTests/Inspections/FunctionReturnValueDiscardedInspectionTests.cs index 20a4eae77a..e4add27931 100644 --- a/RubberduckTests/Inspections/FunctionReturnValueDiscardedInspectionTests.cs +++ b/RubberduckTests/Inspections/FunctionReturnValueDiscardedInspectionTests.cs @@ -281,6 +281,23 @@ End Sub Assert.AreEqual(0, InspectionResultsForStandardModule(code).Count()); } + [Test] + [Category("Inspections")] + [Category("Unused Value")] + public void FunctionReturnValueDiscarded_DoesNotReturnResult_OutputListFunctionCall() + { + const string code = @" +Public Function Foo(ByVal bar As String) As Integer + Foo = 42 +End Function + +Public Sub Baz() + Debug.Print Foo(""Test"") +End Sub +"; + Assert.AreEqual(0, InspectionResultsForStandardModule(code).Count()); + } + [Test] [Category("Inspections")] [Category("Unused Value")]