Skip to content

Commit f4962e0

Browse files
author
Scott McGinness
committed
Ignore inferred tuple element name when explicit name is given
1 parent b6b9b02 commit f4962e0

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp7/NamingRules/SA1316CSharp7UnitTests.cs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ namespace StyleCop.Analyzers.Test.CSharp7.NamingRules
88
using Microsoft.CodeAnalysis.Testing;
99
using StyleCop.Analyzers.Lightup;
1010
using StyleCop.Analyzers.NamingRules;
11-
using StyleCop.Analyzers.Settings.ObjectModel;
1211
using Xunit;
1312
using static StyleCop.Analyzers.Test.Verifiers.StyleCopCodeFixVerifier<
1413
StyleCop.Analyzers.NamingRules.SA1316TupleElementNamesShouldUseCorrectCasing,
@@ -170,6 +169,40 @@ public void TestMethod()
170169
await VerifyCSharpDiagnosticAsync(LanguageVersionEx.CSharp7_1, testCode, settings, DiagnosticResult.EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false);
171170
}
172171

172+
/// <summary>
173+
/// Validates the properly explicitly named tuple elements, even when using inferred tuple element names, will not produce diagnostics.
174+
/// </summary>
175+
/// <param name="settings">The test settings to use.</param>
176+
/// <param name="tupleElementName1">The expected tuple element name for the first field.</param>
177+
/// <param name="tupleElementName2">The expected tuple element name for the second field.</param>
178+
/// <returns>A <see cref="Task"/> representing the asynchronous unit test.</returns>
179+
[Theory]
180+
[InlineData(CamelCaseInferredTestSettings, "elementName1", "elementName2", "ElementValue1", "ElementValue2")]
181+
[InlineData(PascalCaseInferredTestSettings, "ElementName1", "ElementName2", "elementValue1", "elementValue2")]
182+
public async Task ValidateProperCasedExplicitNamesEvenWithInferredTupleElementNamesAsync(string settings, string tupleElementName1, string tupleElementName2, string tupleInferred1, string tupleInferred2)
183+
{
184+
var testCode = $@"
185+
public class TestClass
186+
{{
187+
public void TestMethod1()
188+
{{
189+
var {tupleInferred1} = 1;
190+
var {tupleInferred2} = ""test"";
191+
var tuple = ({tupleElementName1}: {tupleInferred1}, {tupleElementName2}: {tupleInferred2});
192+
}}
193+
194+
public void TestMethod2()
195+
{{
196+
var {tupleInferred1} = 1;
197+
var {tupleElementName2} = ""test"";
198+
var tuple = ({tupleElementName1}: {tupleInferred1}, {tupleElementName2});
199+
}}
200+
}}
201+
";
202+
203+
await VerifyCSharpDiagnosticAsync(LanguageVersionEx.CSharp7_1, testCode, settings, DiagnosticResult.EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false);
204+
}
205+
173206
/// <summary>
174207
/// Validates the improperly named tuple element names will produce the expected diagnostics.
175208
/// </summary>

StyleCop.Analyzers/StyleCop.Analyzers/NamingRules/SA1316TupleElementNamesShouldUseCorrectCasing.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ namespace StyleCop.Analyzers.NamingRules
66
using System;
77
using System.Collections.Immutable;
88
using Microsoft.CodeAnalysis;
9-
using Microsoft.CodeAnalysis.CSharp;
10-
using Microsoft.CodeAnalysis.CSharp.Syntax;
119
using Microsoft.CodeAnalysis.Diagnostics;
1210
using StyleCop.Analyzers.Helpers;
1311
using StyleCop.Analyzers.Lightup;
@@ -86,7 +84,7 @@ private static void HandleTupleExpressionAction(SyntaxNodeAnalysisContext contex
8684
var tupleExpression = (TupleExpressionSyntaxWrapper)context.Node;
8785
foreach (var argument in tupleExpression.Arguments)
8886
{
89-
var inferredMemberName = SyntaxFactsEx.TryGetInferredMemberName(argument.Expression);
87+
var inferredMemberName = SyntaxFactsEx.TryGetInferredMemberName(argument.NameColon?.Name ?? argument.Expression);
9088
if (inferredMemberName != null)
9189
{
9290
CheckName(context, settings, inferredMemberName, argument.Expression.GetLocation(), false);

0 commit comments

Comments
 (0)