提交 994bad06 编写于 作者: M Manish Vasani

Address PR feedback (use static ctor and remove regions) and also fix an...

Address PR feedback (use static ctor and remove regions) and also fix an assert seen during dogfooding.
上级 f2a6f1b6
......@@ -31,6 +31,37 @@ public async Task NonPrivateField(string accessibility)
}}");
}
[Theory, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedMembers)]
[InlineData("public")]
[InlineData("internal")]
[InlineData("protected")]
[InlineData("protected internal")]
[InlineData("private protected")]
public async Task NonPrivateFieldWithConstantInitializer(string accessibility)
{
await TestMissingInRegularAndScriptAsync(
$@"class MyClass
{{
{accessibility} int [|_goo|] = 0;
}}");
}
[Theory, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedMembers)]
[InlineData("public")]
[InlineData("internal")]
[InlineData("protected")]
[InlineData("protected internal")]
[InlineData("private protected")]
public async Task NonPrivateFieldWithNonConstantInitializer(string accessibility)
{
await TestMissingInRegularAndScriptAsync(
$@"class MyClass
{{
{accessibility} int [|_goo|] = _goo2;
private static readonly int _goo2 = 0;
}}");
}
[Theory, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedMembers)]
[InlineData("public")]
[InlineData("internal")]
......
......@@ -28,6 +28,31 @@ $"Class C
End Class")
End Function
<Theory, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedMembers)>
<InlineData("Public")>
<InlineData("Friend")>
<InlineData("Protected")>
<InlineData("Protected Friend")>
Public Async Function NonPrivateFieldWithConstantInitializer(accessibility As String) As Task
Await TestMissingInRegularAndScriptAsync(
$"Class C
{accessibility} [|_goo|] As Integer = 0
End Class")
End Function
<Theory, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedMembers)>
<InlineData("Public")>
<InlineData("Friend")>
<InlineData("Protected")>
<InlineData("Protected Friend")>
Public Async Function NonPrivateFieldWithNonConstantInitializer(accessibility As String) As Task
Await TestMissingInRegularAndScriptAsync(
$"Class C
{accessibility} [|_goo|] As Integer = _goo2
Private Shared ReadOnly _goo2 As Integer = 0
End Class")
End Function
<Theory, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedMembers)>
<InlineData("Public")>
<InlineData("Friend")>
......
......@@ -19,20 +19,41 @@ internal abstract class AbstractRemoveUnusedMembersDiagnosticAnalyzer<TDocumenta
where TIdentifierNameSyntax : SyntaxNode
{
// IDE0051: "Remove unused members" (Symbol is declared but never referenced)
private static readonly LocalizableResourceString s_removeUnusedMembersTitle = new LocalizableResourceString(nameof(FeaturesResources.Remove_unused_private_members), FeaturesResources.ResourceManager, typeof(FeaturesResources));
private static readonly LocalizableResourceString s_removeUnusedMembersMessage = new LocalizableResourceString(nameof(FeaturesResources.Type_0_has_an_unused_private_member_1_which_can_be_removed), FeaturesResources.ResourceManager, typeof(FeaturesResources));
private static readonly DiagnosticDescriptor s_removeUnusedMembersRule = CreateDescriptor(
IDEDiagnosticIds.RemoveUnusedMembersDiagnosticId, s_removeUnusedMembersTitle, s_removeUnusedMembersMessage, configurable: true, enabledByDefault: true);
private static readonly DiagnosticDescriptor s_removeUnusedMembersWithFadingRule = CreateUnnecessaryDescriptor(
IDEDiagnosticIds.RemoveUnusedMembersDiagnosticId, s_removeUnusedMembersTitle, s_removeUnusedMembersMessage, configurable: true, enabledByDefault: true);
private static readonly DiagnosticDescriptor s_removeUnusedMembersRule;
private static readonly DiagnosticDescriptor s_removeUnusedMembersWithFadingRule;
// IDE0052: "Remove unread members" (Value is written and/or symbol is referenced, but the assigned value is never read)
private static readonly LocalizableResourceString s_removeUnreadMembersTitle = new LocalizableResourceString(nameof(FeaturesResources.Remove_unread_private_members), FeaturesResources.ResourceManager, typeof(FeaturesResources));
private static readonly LocalizableResourceString s_removeUnreadMembersMessage = new LocalizableResourceString(nameof(FeaturesResources.Type_0_has_a_private_member_1_that_can_be_removed_as_the_value_assigned_to_it_is_never_read), FeaturesResources.ResourceManager, typeof(FeaturesResources));
private static readonly DiagnosticDescriptor s_removeUnreadMembersRule = CreateDescriptor(
IDEDiagnosticIds.RemoveUnreadMembersDiagnosticId, s_removeUnreadMembersTitle, s_removeUnreadMembersMessage, configurable: true, enabledByDefault: true);
private static readonly DiagnosticDescriptor s_removeUnreadMembersWithFadingRule = CreateUnnecessaryDescriptor(
IDEDiagnosticIds.RemoveUnreadMembersDiagnosticId, s_removeUnreadMembersTitle, s_removeUnreadMembersMessage, configurable: true, enabledByDefault: true);
private static readonly DiagnosticDescriptor s_removeUnreadMembersRule;
private static readonly DiagnosticDescriptor s_removeUnreadMembersWithFadingRule;
static AbstractRemoveUnusedMembersDiagnosticAnalyzer()
{
var removeUnusedMembersTitle = new LocalizableResourceString(nameof(FeaturesResources.Remove_unused_private_members), FeaturesResources.ResourceManager, typeof(FeaturesResources));
var removeUnusedMembersMessage = new LocalizableResourceString(nameof(FeaturesResources.Type_0_has_an_unused_private_member_1_which_can_be_removed), FeaturesResources.ResourceManager, typeof(FeaturesResources));
s_removeUnusedMembersRule = CreateDescriptor(IDEDiagnosticIds.RemoveUnusedMembersDiagnosticId,
removeUnusedMembersTitle,
removeUnusedMembersMessage,
configurable: true,
enabledByDefault: true);
s_removeUnusedMembersWithFadingRule = CreateUnnecessaryDescriptor(IDEDiagnosticIds.RemoveUnusedMembersDiagnosticId,
removeUnusedMembersTitle,
removeUnusedMembersMessage,
configurable: true,
enabledByDefault: true);
var removeUnreadMembersTitle = new LocalizableResourceString(nameof(FeaturesResources.Remove_unread_private_members), FeaturesResources.ResourceManager, typeof(FeaturesResources));
var removeUnreadMembersMessage = new LocalizableResourceString(nameof(FeaturesResources.Type_0_has_a_private_member_1_that_can_be_removed_as_the_value_assigned_to_it_is_never_read), FeaturesResources.ResourceManager, typeof(FeaturesResources));
s_removeUnreadMembersRule = CreateDescriptor(IDEDiagnosticIds.RemoveUnreadMembersDiagnosticId,
removeUnreadMembersTitle,
removeUnreadMembersMessage,
configurable: true,
enabledByDefault: true);
s_removeUnreadMembersWithFadingRule = CreateUnnecessaryDescriptor(IDEDiagnosticIds.RemoveUnreadMembersDiagnosticId,
removeUnreadMembersTitle,
removeUnreadMembersMessage,
configurable: true,
enabledByDefault: true);
}
protected AbstractRemoveUnusedMembersDiagnosticAnalyzer()
: base (ImmutableArray.Create(s_removeUnusedMembersRule,
......@@ -139,7 +160,10 @@ private void AnalyzeFieldInitializer(OperationAnalysisContext operationContext)
{
foreach (var field in initializer.InitializedFields)
{
OnSymbolUsage(field, ValueUsageInfo.Write);
if (IsCandidateSymbol(field))
{
OnSymbolUsage(field, ValueUsageInfo.Write);
}
}
}
}
......
......@@ -79,8 +79,6 @@ public static string AsXmlCommentText(string text)
return result;
}
#region Diagnostics
internal static DiagnosticDescription Diagnostic(
object code,
string squiggledText = null,
......@@ -131,7 +129,5 @@ public static string NormalizeNewLines(XCData data)
return data.Value;
}
#endregion
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册