提交 6716c84a 编写于 作者: A Alireza Habibi

Move files and add code style option

上级 df1c6e77
......@@ -86,6 +86,9 @@
<Compile Include="$(MSBuildThisFileDirectory)UseLocalFunction\CSharpUseLocalFunctionDiagnosticAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UseNullPropagation\CSharpUseNullPropagationDiagnosticAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UseObjectInitializer\CSharpUseObjectInitializerDiagnosticAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UsePatternCombinators\AnalyzedPattern.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UsePatternCombinators\CSharpUsePatternCombinatorsAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UsePatternCombinators\CSharpUsePatternCombinatorsDiagnosticAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UsePatternMatching\CSharpAsAndNullCheckDiagnosticAnalyzer.Analyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UsePatternMatching\CSharpAsAndNullCheckDiagnosticAnalyzer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UsePatternMatching\CSharpIsAndCastCheckDiagnosticAnalyzer.cs" />
......
......@@ -6,6 +6,7 @@
using System.Linq;
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.CSharp.CodeStyle;
using Microsoft.CodeAnalysis.CSharp.Extensions;
using Microsoft.CodeAnalysis.CSharp.Shared.Extensions;
using Microsoft.CodeAnalysis.CSharp.Syntax;
......@@ -21,9 +22,10 @@ internal sealed class CSharpUsePatternCombinatorsDiagnosticAnalyzer :
{
public CSharpUsePatternCombinatorsDiagnosticAnalyzer()
: base(IDEDiagnosticIds.UsePatternCombinatorsDiagnosticId,
option: null,
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Use_pattern_matching),
CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)))
CSharpCodeStyleOptions.PreferPatternMatching,
LanguageNames.CSharp,
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Use_pattern_matching), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)),
new LocalizableResourceString(nameof(CSharpAnalyzersResources.Use_pattern_matching), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)))
{
}
......@@ -69,15 +71,21 @@ private void AnalyzeNode(SyntaxNodeAnalysisContext context)
{
// TODO need an option for user to disable the feature
var parentNode = context.Node;
var syntaxTree = parentNode.SyntaxTree;
var cancellationToken = context.CancellationToken;
if (!((CSharpParseOptions)parentNode.SyntaxTree.Options).LanguageVersion.IsCSharp9OrAbove())
if (!((CSharpParseOptions)syntaxTree.Options).LanguageVersion.IsCSharp9OrAbove())
return;
var styleOption = context.Options.GetOption(CSharpCodeStyleOptions.PreferPatternMatching, syntaxTree, cancellationToken);
if (!styleOption.Value)
return;
var expression = GetExpression(parentNode);
if (expression is null)
return;
var operation = context.SemanticModel.GetOperation(expression, context.CancellationToken);
var operation = context.SemanticModel.GetOperation(expression, cancellationToken);
if (operation is null)
return;
......
......@@ -56,6 +56,7 @@
<Compile Include="$(MSBuildThisFileDirectory)UseNullPropagation\CSharpUseNullPropagationCodeFixProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UseObjectInitializer\CSharpUseObjectInitializerCodeFixProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UseObjectInitializer\UseInitializerHelpers.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UsePatternCombinators\CSharpUsePatternCombinatorsCodeFixProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UsePatternMatching\CSharpAsAndNullCheckCodeFixProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UsePatternMatching\CSharpIsAndCastCheckCodeFixProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UseSimpleUsingStatement\UseSimpleUsingStatementCodeFixProvider.cs" />
......
......@@ -389,6 +389,9 @@ public void CSharp_VerifyIDEDiagnosticSeveritiesAreConfigurable()
# IDE0075
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
# IDE0076
csharp_style_prefer_pattern_matching = true:suggestion
# IDE1005
csharp_style_conditional_delegate_call = true:suggestion
......@@ -895,6 +898,9 @@ public void CSharp_VerifyIDECodeStyleOptionsAreConfigurable()
# IDE0075, PreferSimplifiedBooleanExpressions
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
# IDE0076, PreferPatternMatching
csharp_style_prefer_pattern_matching = true:suggestion
# IDE1005, PreferConditionalDelegateCall
csharp_style_conditional_delegate_call = true:suggestion
......
......@@ -483,6 +483,9 @@
<data name="Prefer_conditional_delegate_call" xml:space="preserve">
<value>Prefer conditional delegate call</value>
</data>
<data name="Prefer_pattern_matching" xml:space="preserve">
<value>Prefer pattern matching</value>
</data>
<data name="Prefer_pattern_matching_over_is_with_cast_check" xml:space="preserve">
<value>Prefer pattern matching over 'is' with 'cast' check</value>
</data>
......
......@@ -667,6 +667,12 @@ public string Style_PreferSwitchExpression
set { SetXmlOption(CSharpCodeStyleOptions.PreferSwitchExpression, value); }
}
public string Style_PreferPatternMatching
{
get { return GetXmlOption(CSharpCodeStyleOptions.PreferPatternMatching); }
set { SetXmlOption(CSharpCodeStyleOptions.PreferPatternMatching, value); }
}
public string Style_PreferPatternMatchingOverAsWithNullCheck
{
get { return GetXmlOption(CSharpCodeStyleOptions.PreferPatternMatchingOverAsWithNullCheck); }
......
......@@ -335,7 +335,7 @@ void M2(object o)
private static readonly string s_preferSwitchExpression = $@"
class C
{{
void M1()
int M1()
{{
//[
// {ServicesVSResources.Prefer_colon}
......@@ -346,7 +346,7 @@ void M1()
}}
//]
}}
void M2()
int M2()
{{
//[
// {ServicesVSResources.Over_colon}
......@@ -360,6 +360,26 @@ void M2()
//]
}}
}}
";
private static readonly string s_preferPatternMatching = $@"
class C
{{
bool M1()
{{
//[
// {ServicesVSResources.Prefer_colon}
return num is 1 or 2;
//]
}}
bool M2()
{{
//[
// {ServicesVSResources.Over_colon}
return num == 1 || num == 2;
//]
}}
}}
";
private static readonly string s_preferPatternMatchingOverAsWithNullCheck = $@"
......@@ -1686,6 +1706,7 @@ internal StyleViewModel(OptionStore optionStore, IServiceProvider serviceProvide
CodeStyleItems.Add(new BooleanCodeStyleOptionViewModel(CodeStyleOptions2.PreferCollectionInitializer, ServicesVSResources.Prefer_collection_initializer, s_preferCollectionInitializer, s_preferCollectionInitializer, this, optionStore, expressionPreferencesGroupTitle));
CodeStyleItems.Add(new BooleanCodeStyleOptionViewModel(CodeStyleOptions2.PreferSimplifiedBooleanExpressions, ServicesVSResources.Prefer_simplified_boolean_expressions, s_preferSimplifiedConditionalExpression, s_preferSimplifiedConditionalExpression, this, optionStore, expressionPreferencesGroupTitle));
CodeStyleItems.Add(new BooleanCodeStyleOptionViewModel(CSharpCodeStyleOptions.PreferSwitchExpression, CSharpVSResources.Prefer_switch_expression, s_preferSwitchExpression, s_preferSwitchExpression, this, optionStore, expressionPreferencesGroupTitle));
CodeStyleItems.Add(new BooleanCodeStyleOptionViewModel(CSharpCodeStyleOptions.PreferPatternMatching, CSharpVSResources.Prefer_pattern_matching, s_preferPatternMatching, s_preferPatternMatching, this, optionStore, expressionPreferencesGroupTitle));
CodeStyleItems.Add(new BooleanCodeStyleOptionViewModel(CSharpCodeStyleOptions.PreferPatternMatchingOverIsWithCastCheck, CSharpVSResources.Prefer_pattern_matching_over_is_with_cast_check, s_preferPatternMatchingOverIsWithCastCheck, s_preferPatternMatchingOverIsWithCastCheck, this, optionStore, expressionPreferencesGroupTitle));
CodeStyleItems.Add(new BooleanCodeStyleOptionViewModel(CSharpCodeStyleOptions.PreferPatternMatchingOverAsWithNullCheck, CSharpVSResources.Prefer_pattern_matching_over_as_with_null_check, s_preferPatternMatchingOverAsWithNullCheck, s_preferPatternMatchingOverAsWithNullCheck, this, optionStore, expressionPreferencesGroupTitle));
CodeStyleItems.Add(new BooleanCodeStyleOptionViewModel(CodeStyleOptions2.PreferConditionalExpressionOverAssignment, ServicesVSResources.Prefer_conditional_expression_over_if_with_assignments, s_preferConditionalExpressionOverIfWithAssignments, s_preferConditionalExpressionOverIfWithAssignments, this, optionStore, expressionPreferencesGroupTitle));
......
......@@ -57,6 +57,13 @@ private static Option2<T> CreateOption<T>(OptionGroup group, string name, T defa
EditorConfigStorageLocation.ForBoolCodeStyleOption("csharp_style_prefer_switch_expression"),
new RoamingProfileStorageLocation($"TextEditor.CSharp.Specific.{nameof(PreferSwitchExpression)}")});
public static readonly Option2<CodeStyleOption2<bool>> PreferPatternMatching = CreateOption(
CSharpCodeStyleOptionGroups.PatternMatching, nameof(PreferPatternMatching),
defaultValue: s_trueWithSuggestionEnforcement,
storageLocations: new OptionStorageLocation2[] {
EditorConfigStorageLocation.ForBoolCodeStyleOption("csharp_style_prefer_pattern_matching"),
new RoamingProfileStorageLocation($"TextEditor.CSharp.Specific.{nameof(PreferPatternMatching)}")});
public static readonly Option2<CodeStyleOption2<bool>> PreferPatternMatchingOverAsWithNullCheck = CreateOption(
CSharpCodeStyleOptionGroups.PatternMatching, nameof(PreferPatternMatchingOverAsWithNullCheck),
defaultValue: s_trueWithSuggestionEnforcement,
......@@ -307,6 +314,7 @@ public static IEnumerable<Option2<CodeStyleOption2<bool>>> GetCodeStyleOptions()
yield return VarElsewhere;
yield return PreferConditionalDelegateCall;
yield return PreferSwitchExpression;
yield return PreferPatternMatching;
yield return PreferPatternMatchingOverAsWithNullCheck;
yield return PreferPatternMatchingOverIsWithCastCheck;
yield return PreferSimpleDefaultExpression;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册