diff --git a/src/VisualStudio/CSharp/Impl/Options/Formatting/StyleViewModel.cs b/src/VisualStudio/CSharp/Impl/Options/Formatting/StyleViewModel.cs
index 49191e04801f933e4b50b777deabb0e4421deaa1..41ec26233c6da0587002b460663684287e0b5ec8 100644
--- a/src/VisualStudio/CSharp/Impl/Options/Formatting/StyleViewModel.cs
+++ b/src/VisualStudio/CSharp/Impl/Options/Formatting/StyleViewModel.cs
@@ -406,6 +406,26 @@ public Customer()
//]
}
}
+";
+
+ private static readonly string s_preferExplicitTupleName = @"
+class Customer
+{
+ public Customer()
+ {
+//[
+ // Prefer:
+ (string name, int age) customer = GetCustomer();
+ var name = customer.name;
+ var age = customer.age;
+
+ // Over:
+ (string name, int age) customer = GetCustomer();
+ var name = customer.Item1;
+ var age = customer.Item2;
+//]
+ }
+}
";
private static readonly string s_preferInlinedVariableDeclaration = @"
@@ -660,6 +680,7 @@ internal StyleViewModel(OptionSet optionSet, IServiceProvider serviceProvider) :
CodeStyleItems.Add(new SimpleCodeStyleOptionViewModel(CodeStyleOptions.PreferCollectionInitializer, ServicesVSResources.Prefer_collection_initializer, s_preferCollectionInitializer, s_preferCollectionInitializer, this, optionSet, expressionPreferencesGroupTitle));
CodeStyleItems.Add(new SimpleCodeStyleOptionViewModel(CSharpCodeStyleOptions.PreferPatternMatchingOverIsWithCastCheck, CSharpVSResources.Prefer_pattern_matching_over_is_with_cast_check, s_preferPatternMatchingOverIsWithCastCheck, s_preferPatternMatchingOverIsWithCastCheck, this, optionSet, expressionPreferencesGroupTitle));
CodeStyleItems.Add(new SimpleCodeStyleOptionViewModel(CSharpCodeStyleOptions.PreferPatternMatchingOverAsWithNullCheck, CSharpVSResources.Prefer_pattern_matching_over_as_with_null_check, s_preferPatternMatchingOverAsWithNullCheck, s_preferPatternMatchingOverAsWithNullCheck, this, optionSet, expressionPreferencesGroupTitle));
+ CodeStyleItems.Add(new SimpleCodeStyleOptionViewModel(CodeStyleOptions.PreferExplicitTupleNames, ServicesVSResources.Prefer_explicit_tuple_name, s_preferExplicitTupleName, s_preferExplicitTupleName, this, optionSet, expressionPreferencesGroupTitle));
// Variable preferences
CodeStyleItems.Add(new SimpleCodeStyleOptionViewModel(CodeStyleOptions.PreferInlinedVariableDeclaration, ServicesVSResources.Prefer_inlined_variable_declaration, s_preferInlinedVariableDeclaration, s_preferInlinedVariableDeclaration, this, optionSet, variablePreferencesGroupTitle));
diff --git a/src/VisualStudio/Core/Def/ServicesVSResources.Designer.cs b/src/VisualStudio/Core/Def/ServicesVSResources.Designer.cs
index 75eccbb2aad9025a1bebaed9dca8c366a11b3ad9..9cb7c3a9f63dc5c07e876489e0e25ba03eec218c 100644
--- a/src/VisualStudio/Core/Def/ServicesVSResources.Designer.cs
+++ b/src/VisualStudio/Core/Def/ServicesVSResources.Designer.cs
@@ -1392,6 +1392,15 @@ internal class ServicesVSResources {
}
}
+ ///
+ /// Looks up a localized string similar to Prefer explicit tuple name.
+ ///
+ internal static string Prefer_explicit_tuple_name {
+ get {
+ return ResourceManager.GetString("Prefer_explicit_tuple_name", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Prefer framework type.
///
diff --git a/src/VisualStudio/Core/Def/ServicesVSResources.resx b/src/VisualStudio/Core/Def/ServicesVSResources.resx
index ab78691d70709ae2661de13c0d77217ff0ba0c57..5e6e309a7e052cad4da2dfefc61896aa86eec370 100644
--- a/src/VisualStudio/Core/Def/ServicesVSResources.resx
+++ b/src/VisualStudio/Core/Def/ServicesVSResources.resx
@@ -816,4 +816,7 @@ Additional information: {1}
Prefer null propagation
+
+ Prefer explicit tuple name
+
\ No newline at end of file
diff --git a/src/VisualStudio/VisualBasic/Impl/Options/StyleViewModel.vb b/src/VisualStudio/VisualBasic/Impl/Options/StyleViewModel.vb
index a470d17a513a22f5050bb6156cc9c697ef7ac97a..e4feb42d36ae9af7653fd2a256bfaeae1ad3a6f0 100644
--- a/src/VisualStudio/VisualBasic/Impl/Options/StyleViewModel.vb
+++ b/src/VisualStudio/VisualBasic/Impl/Options/StyleViewModel.vb
@@ -188,6 +188,24 @@ Class Customer
End Sub
End Class"
+ Private Shared ReadOnly s_preferExplicitTupleName As String = "
+Class Customer
+ Public Sub New()
+//[
+ ' Prefer:
+ Dim customer As (name As String, age As Integer)
+ Dim name = customer.name
+ Dim age = customer.age
+
+ ' Over
+ Dim customer As (name As String, age As Integer)
+ Dim name = customer.Item1
+ Dim age = customer.Item2
+//]
+ End Sub
+end class
+"
+
Private Shared ReadOnly s_preferCoalesceExpression As String = "
Imports System
@@ -262,6 +280,7 @@ End Class"
' expression preferences
Me.CodeStyleItems.Add(New SimpleCodeStyleOptionViewModel(CodeStyleOptions.PreferObjectInitializer, ServicesVSResources.Prefer_object_initializer, s_preferObjectInitializer, s_preferObjectInitializer, Me, optionSet, expressionPreferencesGroupTitle))
Me.CodeStyleItems.Add(New SimpleCodeStyleOptionViewModel(CodeStyleOptions.PreferCollectionInitializer, ServicesVSResources.Prefer_collection_initializer, s_preferCollectionInitializer, s_preferCollectionInitializer, Me, optionSet, expressionPreferencesGroupTitle))
+ Me.CodeStyleItems.Add(New SimpleCodeStyleOptionViewModel(CodeStyleOptions.PreferExplicitTupleNames, ServicesVSResources.Prefer_explicit_tuple_name, s_preferExplicitTupleName, s_preferExplicitTupleName, Me, optionSet, expressionPreferencesGroupTitle))
' nothing preferences
Me.CodeStyleItems.Add(New SimpleCodeStyleOptionViewModel(CodeStyleOptions.PreferCoalesceExpression, ServicesVSResources.Prefer_coalesce_expression, s_preferCoalesceExpression, s_preferCoalesceExpression, Me, optionSet, nothingPreferencesGroupTitle))