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))