提交 e987136a 编写于 作者: C CyrusNajmabadi 提交者: GitHub

Merge pull request #14960 from CyrusNajmabadi/useSuggestionTagInsteadOfFading

Don't fade code out when suggesting the 'Qualify with 'this.'' lightbulb
Fixes #10223
......@@ -65,7 +65,7 @@ internal virtual Diagnostic AnalyzeSyntax(OptionSet optionSet, TDeclaration decl
{
var additionalLocations = ImmutableArray.Create(declaration.GetLocation());
return Diagnostic.Create(
CreateDescriptor(this.DescriptorId, _expressionBodyTitle, preferExpressionBodiedOption.Notification.Value),
CreateDescriptor(_expressionBodyTitle, preferExpressionBodiedOption.Notification.Value),
GetBody(declaration).Statements[0].GetLocation(),
additionalLocations: additionalLocations);
}
......@@ -78,7 +78,7 @@ internal virtual Diagnostic AnalyzeSyntax(OptionSet optionSet, TDeclaration decl
{
var additionalLocations = ImmutableArray.Create(declaration.GetLocation());
return Diagnostic.Create(
CreateDescriptor(this.DescriptorId, _blockBodyTitle, preferExpressionBodiedOption.Notification.Value),
CreateDescriptor(_blockBodyTitle, preferExpressionBodiedOption.Notification.Value),
expressionBody.GetLocation(),
additionalLocations: additionalLocations);
}
......
......@@ -31,7 +31,6 @@ internal abstract class AbstractCodeStyleDiagnosticAnalyzer : DiagnosticAnalyzer
private readonly LocalizableString _localizableTitle;
private readonly LocalizableString _localizableMessage;
private readonly DiagnosticDescriptor _descriptor;
protected AbstractCodeStyleDiagnosticAnalyzer(
string descriptorId, LocalizableString title, LocalizableString message = null)
......@@ -40,28 +39,32 @@ internal abstract class AbstractCodeStyleDiagnosticAnalyzer : DiagnosticAnalyzer
_localizableTitle = title;
_localizableMessage = message ?? title;
_descriptor = CreateDescriptor(descriptorId, DiagnosticSeverity.Hidden);
var primaryDescriptor = CreateDescriptor(descriptorId, DiagnosticSeverity.Hidden);
UnnecessaryWithSuggestionDescriptor = CreateDescriptor(
descriptorId, DiagnosticSeverity.Hidden, DiagnosticCustomTags.Unnecessary);
UnnecessaryWithoutSuggestionDescriptor = CreateDescriptor(descriptorId + "WithoutSuggestion",
descriptorId, _localizableTitle, _localizableMessage,
DiagnosticSeverity.Hidden, DiagnosticCustomTags.Unnecessary);
UnnecessaryWithoutSuggestionDescriptor = CreateDescriptor(
descriptorId + "WithoutSuggestion",
_localizableTitle, _localizableMessage,
DiagnosticSeverity.Hidden, DiagnosticCustomTags.Unnecessary);
SupportedDiagnostics = ImmutableArray.Create(
_descriptor, UnnecessaryWithoutSuggestionDescriptor, UnnecessaryWithSuggestionDescriptor);
primaryDescriptor, UnnecessaryWithoutSuggestionDescriptor, UnnecessaryWithSuggestionDescriptor);
}
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; }
protected DiagnosticDescriptor CreateDescriptor(string id, DiagnosticSeverity severity, params string[] customTags)
=> CreateDescriptor(id, _localizableTitle, severity, customTags);
protected DiagnosticDescriptor CreateDescriptor(DiagnosticSeverity severity, params string[] customTags)
=> CreateDescriptor(DescriptorId, _localizableTitle, _localizableMessage, severity, customTags);
protected DiagnosticDescriptor CreateDescriptor(string id, LocalizableString title, DiagnosticSeverity severity, params string[] customTags)
=> CreateDescriptor(id, title, title, severity, customTags);
protected DiagnosticDescriptor CreateDescriptor(LocalizableString title, DiagnosticSeverity severity, params string[] customTags)
=> CreateDescriptor(DescriptorId, title, title, severity, customTags);
protected DiagnosticDescriptor CreateDescriptor(string id, LocalizableString title, LocalizableString message, DiagnosticSeverity severity, params string[] customTags)
private DiagnosticDescriptor CreateDescriptor(string id, LocalizableString title, LocalizableString message, DiagnosticSeverity severity, params string[] customTags)
=> new DiagnosticDescriptor(
id,
title,
message,
id, title, message,
DiagnosticCategory.Style,
severity,
isEnabledByDefault: true,
......
......@@ -11,21 +11,16 @@
namespace Microsoft.CodeAnalysis.QualifyMemberAccess
{
internal abstract class AbstractQualifyMemberAccessDiagnosticAnalyzer<TLanguageKindEnum> : DiagnosticAnalyzer, IBuiltInAnalyzer where TLanguageKindEnum : struct
internal abstract class AbstractQualifyMemberAccessDiagnosticAnalyzer<TLanguageKindEnum> :
AbstractCodeStyleDiagnosticAnalyzer, IBuiltInAnalyzer
where TLanguageKindEnum : struct
{
private static readonly LocalizableString s_shouldBeQualifiedMessage = new LocalizableResourceString(nameof(WorkspacesResources.Member_access_should_be_qualified), WorkspacesResources.ResourceManager, typeof(WorkspacesResources));
private static readonly LocalizableString s_qualifyMembersTitle = new LocalizableResourceString(nameof(FeaturesResources.Add_this_or_Me_qualification), FeaturesResources.ResourceManager, typeof(FeaturesResources));
private static readonly DiagnosticDescriptor s_descriptorQualifyMemberAccess = new DiagnosticDescriptor(IDEDiagnosticIds.AddQualificationDiagnosticId,
s_qualifyMembersTitle,
s_shouldBeQualifiedMessage,
DiagnosticCategory.Style,
DiagnosticSeverity.Hidden,
isEnabledByDefault: true,
customTags: DiagnosticCustomTags.Unnecessary);
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(s_descriptorQualifyMemberAccess);
protected AbstractQualifyMemberAccessDiagnosticAnalyzer()
: base(IDEDiagnosticIds.AddQualificationDiagnosticId,
new LocalizableResourceString(nameof(WorkspacesResources.Member_access_should_be_qualified), WorkspacesResources.ResourceManager, typeof(WorkspacesResources)),
new LocalizableResourceString(nameof(FeaturesResources.Add_this_or_Me_qualification), FeaturesResources.ResourceManager, typeof(FeaturesResources)))
{
}
public bool OpenFileOnly(Workspace workspace)
{
......@@ -50,6 +45,8 @@ public override void Initialize(AnalysisContext context)
internalMethod.Invoke(context, new object[] { new Action<OperationAnalysisContext>(AnalyzeOperation), ImmutableArray.Create(OperationKind.FieldReferenceExpression, OperationKind.PropertyReferenceExpression, OperationKind.MethodBindingExpression) });
}
public DiagnosticAnalyzerCategory GetAnalyzerCategory() => DiagnosticAnalyzerCategory.SemanticSpanAnalysis;
private void AnalyzeOperation(OperationAnalysisContext context)
{
var memberReference = (IMemberReferenceExpression)context.Operation;
......@@ -90,25 +87,13 @@ private void AnalyzeOperation(OperationAnalysisContext context)
var severity = optionValue.Notification.Value;
if (severity != DiagnosticSeverity.Hidden)
{
var descriptor = new DiagnosticDescriptor(
IDEDiagnosticIds.AddQualificationDiagnosticId,
s_qualifyMembersTitle,
s_shouldBeQualifiedMessage,
DiagnosticCategory.Style,
severity,
isEnabledByDefault: true,
customTags: DiagnosticCustomTags.Unnecessary);
context.ReportDiagnostic(Diagnostic.Create(descriptor, context.Operation.Syntax.GetLocation()));
context.ReportDiagnostic(Diagnostic.Create(
CreateDescriptor(severity),
context.Operation.Syntax.GetLocation()));
}
}
}
public DiagnosticAnalyzerCategory GetAnalyzerCategory()
{
return DiagnosticAnalyzerCategory.SemanticSpanAnalysis;
}
internal static PerLanguageOption<CodeStyleOption<bool>> GetApplicableOptionFromSymbolKind(SymbolKind symbolKind)
{
switch (symbolKind)
......
......@@ -103,7 +103,7 @@ private void AnalyzeSyntax(SyntaxNodeAnalysisContext context)
whenPartToCheck.GetLocation());
context.ReportDiagnostic(Diagnostic.Create(
this.CreateDescriptor(this.DescriptorId, option.Notification.Value),
this.CreateDescriptor(option.Notification.Value),
conditionalExpression.GetLocation(),
locations));
}
......
......@@ -129,7 +129,7 @@ private void AnalyzeSyntax(SyntaxNodeAnalysisContext context)
whenPartToKeep.GetLocation());
context.ReportDiagnostic(Diagnostic.Create(
this.CreateDescriptor(this.DescriptorId, option.Notification.Value),
this.CreateDescriptor(option.Notification.Value),
conditionalExpression.GetLocation(),
locations));
}
......
......@@ -96,7 +96,7 @@ private void AnalyzeNode(SyntaxNodeAnalysisContext context, INamedTypeSymbol ien
var severity = option.Notification.Value;
context.ReportDiagnostic(Diagnostic.Create(
CreateDescriptor(DescriptorId, severity),
CreateDescriptor(severity),
objectCreationExpression.GetLocation(),
additionalLocations: locations));
......
......@@ -112,7 +112,7 @@ private void AnalyzeSyntax(SyntaxNodeAnalysisContext context)
whenPartToCheck.GetLocation());
context.ReportDiagnostic(Diagnostic.Create(
this.CreateDescriptor(this.DescriptorId, option.Notification.Value),
this.CreateDescriptor(option.Notification.Value),
conditionalExpression.GetLocation(),
locations));
}
......
......@@ -80,7 +80,7 @@ private void AnalyzeNode(SyntaxNodeAnalysisContext context)
var severity = option.Notification.Value;
context.ReportDiagnostic(Diagnostic.Create(
CreateDescriptor(DescriptorId, severity),
CreateDescriptor(severity),
objectCreationExpression.GetLocation(),
additionalLocations: locations));
......
......@@ -132,7 +132,7 @@ private void AnalyzeOperation(OperationAnalysisContext context)
throwOperation.ThrownObject.Syntax.GetLocation(),
assignmentExpression.Value.Syntax.GetLocation());
var descriptor = CreateDescriptor(DescriptorId, option.Notification.Value);
var descriptor = CreateDescriptor(option.Notification.Value);
context.ReportDiagnostic(
Diagnostic.Create(descriptor, throwStatement.GetLocation(), additionalLocations: allLocations));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册