From 717083e0039f54688602c54e043c98e6fc586eb0 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Wed, 26 Oct 2022 21:44:57 +0300 Subject: [PATCH 01/22] Add "Make declaration partial" codefix --- .../CodeFixes/CSharpCodeFixes.projitems | 1 + ...rpMakeDeclarationPartialCodeFixProvider.cs | 35 +++ .../Tests/CSharpAnalyzers.UnitTests.projitems | 1 + .../MakeDeclarationPartialTests.cs | 234 ++++++++++++++++++ .../Core/CodeFixes/CodeFixes.projitems | 1 + .../Core/CodeFixes/CodeFixesResources.resx | 3 + .../AbstractMakePartialCodeFixProvider.cs | 48 ++++ .../PredefinedCodeFixProviderNames.cs | 1 + .../CodeFixes/xlf/CodeFixesResources.cs.xlf | 5 + .../CodeFixes/xlf/CodeFixesResources.de.xlf | 5 + .../CodeFixes/xlf/CodeFixesResources.es.xlf | 5 + .../CodeFixes/xlf/CodeFixesResources.fr.xlf | 5 + .../CodeFixes/xlf/CodeFixesResources.it.xlf | 5 + .../CodeFixes/xlf/CodeFixesResources.ja.xlf | 5 + .../CodeFixes/xlf/CodeFixesResources.ko.xlf | 5 + .../CodeFixes/xlf/CodeFixesResources.pl.xlf | 5 + .../xlf/CodeFixesResources.pt-BR.xlf | 5 + .../CodeFixes/xlf/CodeFixesResources.ru.xlf | 5 + .../CodeFixes/xlf/CodeFixesResources.tr.xlf | 5 + .../xlf/CodeFixesResources.zh-Hans.xlf | 5 + .../xlf/CodeFixesResources.zh-Hant.xlf | 5 + ...icMakeDeclarationPartialCodeFixProvider.vb | 34 +++ .../CodeFixes/VisualBasicCodeFixes.projitems | 1 + .../MakeDeclarationPartialTests.vb | 179 ++++++++++++++ .../VisualBasicAnalyzers.UnitTests.projitems | 1 + src/Compilers/Test/Core/Traits/Traits.cs | 1 + 26 files changed, 605 insertions(+) create mode 100644 src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs create mode 100644 src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs create mode 100644 src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs create mode 100644 src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb create mode 100644 src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb diff --git a/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems b/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems index 611df14f030d6..95c1a1539010e 100644 --- a/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems +++ b/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems @@ -34,6 +34,7 @@ + diff --git a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs b/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs new file mode 100644 index 0000000000000..ede5910242145 --- /dev/null +++ b/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs @@ -0,0 +1,35 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Composition; +using System.Text; +using Microsoft.CodeAnalysis.CodeFixes; +using System.Xml.Linq; +using Microsoft.CodeAnalysis.MakeDeclarationPartial; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using System.Diagnostics.CodeAnalysis; + +namespace Microsoft.CodeAnalysis.CSharp.MakeDeclarationPartial +{ + [ExportCodeFixProvider(LanguageNames.CSharp, Name = PredefinedCodeFixProviderNames.MakeDeclarationPartial), Shared] + internal sealed class CSharpMakeDeclarationPartialCodeFixProvider : AbstractMakeDeclarationPartialCodeFixProvider + { + private const string CS0260 = nameof(CS0260); + + [ImportingConstructor] + [SuppressMessage("RoslynDiagnosticsReliability", "RS0033:Importing constructor should be [Obsolete]", Justification = "Used in test code: https://github.com/dotnet/roslyn/issues/42814")] + public CSharpMakeDeclarationPartialCodeFixProvider() + { + } + + public override ImmutableArray FixableDiagnosticIds { get; } = + ImmutableArray.Create(CS0260); + + protected override string GetDeclarationName(TypeDeclarationSyntax node) + => node.Identifier.ValueText; + } +} diff --git a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems index ecb6952c6af28..1637581f06677 100644 --- a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems +++ b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems @@ -24,6 +24,7 @@ + diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs new file mode 100644 index 0000000000000..1be8f8b228fe4 --- /dev/null +++ b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs @@ -0,0 +1,234 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#nullable disable + +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.CSharp.MakeDeclarationPartial; +using Microsoft.CodeAnalysis.Diagnostics; +using Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Diagnostics; +using Microsoft.CodeAnalysis.Test.Utilities; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.CodeAnalysis.CSharp.CSharp.UnitTests.MakeDeclarationPartial +{ + [Trait(Traits.Feature, Traits.Features.CodeActionsMakeDeclarationPartial)] + public sealed class MakeDeclarationPartialTests : AbstractCSharpDiagnosticProviderBasedUserDiagnosticTest + { + public MakeDeclarationPartialTests(ITestOutputHelper logger) + : base(logger) + { + } + + internal override (DiagnosticAnalyzer, CodeFixProvider) CreateDiagnosticProviderAndFixer(Workspace workspace) + => (null, new CSharpMakeDeclarationPartialCodeFixProvider()); + + public static IEnumerable AllValidDeclarationTypes() + { + yield return new[] { "class" }; + yield return new[] { "struct" }; + yield return new[] { "interface" }; + yield return new[] { "record" }; + yield return new[] { "record struct" }; + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task OutsideNamespace(string declarationType) + { + await TestInRegularAndScriptAsync($$""" + partial {{declarationType}} Declaration + { + } + + {{declarationType}} [|Declaration|] + { + } + """, $$""" + partial {{declarationType}} Declaration + { + } + + partial {{declarationType}} [|Declaration|] + { + } + """); + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task InsideOneFileScopedNamespace(string declarationType) + { + await TestInRegularAndScriptAsync($$""" + namespace TestNamespace; + + partial {{declarationType}} Declaration + { + } + + {{declarationType}} [|Declaration|] + { + } + """, $$""" + namespace TestNamespace; + + partial {{declarationType}} Declaration + { + } + + partial {{declarationType}} [|Declaration|] + { + } + """); + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task InsideOneBlockScopedNamespace(string declarationType) + { + await TestInRegularAndScriptAsync($$""" + namespace TestNamespace + { + partial {{declarationType}} Declaration + { + } + + {{declarationType}} [|Declaration|] + { + } + } + """, $$""" + namespace TestNamespace + { + partial {{declarationType}} Declaration + { + } + + partial {{declarationType}} [|Declaration|] + { + } + } + """); + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task InsideTwoEqualBlockScopedNamespaces(string declarationType) + { + await TestInRegularAndScriptAsync($$""" + namespace TestNamespace + { + partial {{declarationType}} Declaration + { + } + } + + namespace TestNamespace + { + {{declarationType}} [|Declaration|] + { + } + } + """, $$""" + namespace TestNamespace + { + partial {{declarationType}} Declaration + { + } + } + + namespace TestNamespace + { + partial {{declarationType}} [|Declaration|] + { + } + } + """); + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task InDifferentDocuments(string declarationType) + { + await TestInRegularAndScriptAsync($$""" + + + + partial {{declarationType}} Declaration + { + } + + + {{declarationType}} [|Declaration|] + { + } + + + + """, $$""" + + + + partial {{declarationType}} Declaration + { + } + + + partial {{declarationType}} [|Declaration|] + { + } + + + + """); + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task WithOtherModifiers(string declarationType) + { + await TestInRegularAndScriptAsync($$""" + public partial {{declarationType}} Declaration + { + } + + public {{declarationType}} [|Declaration|] + { + } + """, $$""" + public partial {{declarationType}} Declaration + { + } + + public partial {{declarationType}} [|Declaration|] + { + } + """); + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task NotInDifferentNamespaces(string declarationType) + { + await TestMissingInRegularAndScriptAsync($$""" + namespace TestNamespace1 + { + partial {{declarationType}} Declaration + { + } + } + + namespace TestNamespace2 + { + {{declarationType}} [|Declaration|] + { + } + } + """); + } + } +} diff --git a/src/Analyzers/Core/CodeFixes/CodeFixes.projitems b/src/Analyzers/Core/CodeFixes/CodeFixes.projitems index b88453fa3ebea..00889f491b2f1 100644 --- a/src/Analyzers/Core/CodeFixes/CodeFixes.projitems +++ b/src/Analyzers/Core/CodeFixes/CodeFixes.projitems @@ -31,6 +31,7 @@ + diff --git a/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx b/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx index 3c0e61872ce16..1498d95de3f2f 100644 --- a/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx +++ b/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx @@ -168,4 +168,7 @@ Convert type to '{0}' + + Make this declaration of '{0}' partial + \ No newline at end of file diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs new file mode 100644 index 0000000000000..1e3f7e44c7c46 --- /dev/null +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs @@ -0,0 +1,48 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.CodeActions; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.Editing; + +namespace Microsoft.CodeAnalysis.MakeDeclarationPartial +{ + internal abstract class AbstractMakeDeclarationPartialCodeFixProvider : CodeFixProvider + where TDeclarationSyntax : SyntaxNode + { + protected abstract string GetDeclarationName(TDeclarationSyntax node); + + public override async Task RegisterCodeFixesAsync(CodeFixContext context) + { + var document = context.Document; + var cancellationToken = context.CancellationToken; + + var syntaxRoot = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + var declarationNode = (TDeclarationSyntax)syntaxRoot.FindNode(context.Span); + + context.RegisterCodeFix( + CodeAction.Create( + string.Format(CodeFixesResources.Make_this_declaration_of_0_partial, GetDeclarationName(declarationNode)), + c => MakeDeclarationPartialAsync(document, declarationNode, c)), + context.Diagnostics); + } + + private static async Task MakeDeclarationPartialAsync(Document document, TDeclarationSyntax declaration, CancellationToken cancellationToken) + { + var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + + var editor = new SyntaxEditor(root, document.Project.Solution.Services); + var generator = editor.Generator; + + var modifiers = generator.GetModifiers(declaration); + var newDeclaration = generator.WithModifiers(declaration, modifiers.WithPartial(true)); + + editor.ReplaceNode(declaration, newDeclaration); + + return document.WithSyntaxRoot(editor.GetChangedRoot()); + } + } +} diff --git a/src/Analyzers/Core/CodeFixes/PredefinedCodeFixProviderNames.cs b/src/Analyzers/Core/CodeFixes/PredefinedCodeFixProviderNames.cs index df3bee93da362..14f38c7f40ffe 100644 --- a/src/Analyzers/Core/CodeFixes/PredefinedCodeFixProviderNames.cs +++ b/src/Analyzers/Core/CodeFixes/PredefinedCodeFixProviderNames.cs @@ -68,6 +68,7 @@ internal static class PredefinedCodeFixProviderNames public const string InlineDeclaration = nameof(InlineDeclaration); public const string InvokeDelegateWithConditionalAccess = nameof(InvokeDelegateWithConditionalAccess); public const string JsonDetection = nameof(JsonDetection); + public const string MakeDeclarationPartial = nameof(MakeDeclarationPartial); public const string MakeFieldReadonly = nameof(MakeFieldReadonly); public const string MakeLocalFunctionStatic = nameof(MakeLocalFunctionStatic); public const string MakeMemberStatic = nameof(MakeMemberStatic); diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf index 0f55788705f63..b81b481d90c93 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf @@ -57,6 +57,11 @@ Nastavit jako statickou + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines Odebrat nadbytečné prázdné řádky diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf index d389db6e605bb..f317ba0ad50e3 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf @@ -57,6 +57,11 @@ Als statisch festlegen + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines Zusätzliche Leerzeilen entfernen diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf index 06d95e2451113..8b859703882e8 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf @@ -57,6 +57,11 @@ Hacer estático + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines Quitar líneas en blanco adicionales diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf index c3a6e787412ee..d1a2c7f27e77e 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf @@ -57,6 +57,11 @@ Rendre statique + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines Supprimer les lignes vides supplémentaires diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf index bd95d01210214..3f5b6d36ce011 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf @@ -57,6 +57,11 @@ Imposta come statici + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines Rimuovere le righe vuote aggiuntive diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf index d1c3c52fcdb13..fafaf5fea65ca 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf @@ -57,6 +57,11 @@ 静的にする + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines 余分な空白行を削除する diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf index e19b1d8486d59..526188c6dcde5 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf @@ -57,6 +57,11 @@ 정적으로 만들기 + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines 여분의 빈 줄 제거 diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf index cae55429b5432..337579e8044da 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf @@ -57,6 +57,11 @@ Ustaw jako statyczne + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines Usuń dodatkowe puste wiersze diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf index 858da8db75163..4443de72b59e4 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf @@ -57,6 +57,11 @@ Tornar estático + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines Remover as linhas em branco extras diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf index 9d88ebf864365..58776f0ac67d3 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf @@ -57,6 +57,11 @@ Сделать статическим + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines Удалите лишние пустые строки diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf index 5ad653004ffc4..07b72c6002956 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf @@ -57,6 +57,11 @@ Statik yap + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines Fazladan boş satırları kaldır diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf index a1c61c1dc5f10..c289945137546 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf @@ -57,6 +57,11 @@ 设为静态 + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines 删除多余的空白行 diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf index 2cfc79232f071..6df3dd92b46b3 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf @@ -57,6 +57,11 @@ 使其變成靜態 + + Make this declaration of '{0}' partial + Make this declaration of '{0}' partial + + Remove extra blank lines 移除額外的空白行 diff --git a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb new file mode 100644 index 0000000000000..d70778f92e20e --- /dev/null +++ b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb @@ -0,0 +1,34 @@ +' Licensed to the .NET Foundation under one or more agreements. +' The .NET Foundation licenses this file to you under the MIT license. +' See the LICENSE file in the project root for more information. + +Imports Microsoft.CodeAnalysis.CodeFixes +Imports Microsoft.CodeAnalysis.MakeDeclarationPartial +Imports Microsoft.CodeAnalysis.VisualBasic.Syntax +Imports System.Collections.Immutable +Imports System.Composition +Imports System.Diagnostics.CodeAnalysis + +Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationpartial + + Friend Class VisualBasicMakeDeclarationPartialCodeFixProvider + Inherits AbstractMakeDeclarationPartialCodeFixProvider(Of TypeStatementSyntax) + + Private Const BC40046 As String = NameOf(BC40046) + + + + Public Sub New() + End Sub + + Public Overrides ReadOnly Property FixableDiagnosticIds As ImmutableArray(Of String) + Get + Return ImmutableArray.Create(BC40046) + End Get + End Property + + Protected Overrides Function GetDeclarationName(node As TypeStatementSyntax) As String + Return node.Identifier.ValueText + End Function + End Class +End Namespace diff --git a/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems b/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems index fd29ca16126fd..e4dfba46e689f 100644 --- a/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems +++ b/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems @@ -24,6 +24,7 @@ + diff --git a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb b/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb new file mode 100644 index 0000000000000..1f3e07214e22e --- /dev/null +++ b/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb @@ -0,0 +1,179 @@ +' Licensed to the .NET Foundation under one or more agreements. +' The .NET Foundation licenses this file to you under the MIT license. +' See the LICENSE file in the project root for more information. + +Imports Microsoft.CodeAnalysis.CodeFixes +Imports Microsoft.CodeAnalysis.Diagnostics +Imports Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Diagnostics +Imports Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationpartial + +Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.MakeDeclarationPartial + + Public Class MakeDeclarationPartialTests + Inherits AbstractVisualBasicDiagnosticProviderBasedUserDiagnosticTest + + Friend Overrides Function CreateDiagnosticProviderAndFixer(workspace As Workspace) As (DiagnosticAnalyzer, CodeFixProvider) + Return (Nothing, New VisualBasicMakeDeclarationPartialCodeFixProvider()) + End Function + + + Public Async Function OutsideNamespace() As Task + Await TestInRegularAndScriptAsync( + + + +Partial Class Declaration +End Class + +Class Declaration +End Class + + +Class [|Declaration|] +End Class + + +.ToString(), + + + +Partial Class Declaration +End Class + +Class Declaration +End Class + + +Partial Class Declaration +End Class + + +.ToString()) + End Function + + + Public Async Function InsideOneNamespace() As Task + Await TestInRegularAndScriptAsync( + + + +Namespace TestNamespace + Partial Class Declaration + End Class + + Class Declaration + End Class +End Namespace + + +Namespace TestNamespace + Class [|Declaration|] + End Class +End Namespace + + +.ToString(), + + + +Namespace TestNamespace + Partial Class Declaration + End Class + + Class Declaration + End Class +End Namespace + + +Namespace TestNamespace + Partial Class Declaration + End Class +End Namespace + + +.ToString()) + End Function + + + Public Async Function InsideTwoEqualNamespaces() As Task + Await TestInRegularAndScriptAsync( + + + +Namespace TestNamespace + Partial Class Declaration + End Class +End Namespace + +Namespace TestNamespace + Class Declaration + End Class +End Namespace + + +Namespace TestNamespace + Class [|Declaration|] + End Class +End Namespace + + +.ToString(), + + + +Namespace TestNamespace + Partial Class Declaration + End Class +End Namespace + +Namespace TestNamespace + Class Declaration + End Class +End Namespace + + +Namespace TestNamespace + Partial Class Declaration + End Class +End Namespace + + +.ToString()) + End Function + + + Public Async Function WithOtherModifiers() As Task + Await TestInRegularAndScriptAsync( + + + +Partial Public Class Declaration +End Class + +Public Class Declaration +End Class + + +Public Class [|Declaration|] +End Class + + +.ToString(), + + + +Partial Public Class Declaration +End Class + +Public Class Declaration +End Class + + +Partial Public Class Declaration +End Class + + +.ToString()) + End Function + End Class +End Namespace diff --git a/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems b/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems index 3fb7126ac6bce..258cb5a4220e2 100644 --- a/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems +++ b/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems @@ -19,6 +19,7 @@ + diff --git a/src/Compilers/Test/Core/Traits/Traits.cs b/src/Compilers/Test/Core/Traits/Traits.cs index 91d057efe40b0..b8518e60ded29 100644 --- a/src/Compilers/Test/Core/Traits/Traits.cs +++ b/src/Compilers/Test/Core/Traits/Traits.cs @@ -122,6 +122,7 @@ public static class Features public const string CodeActionsInvertLogical = "CodeActions.InvertLogical"; public const string CodeActionsInvokeDelegateWithConditionalAccess = "CodeActions.InvokeDelegateWithConditionalAccess"; public const string CodeActionsRemoveUnnecessaryLambdaExpression = "CodeActions.RemoveUnnecessaryLambdaExpression"; + public const string CodeActionsMakeDeclarationPartial = "CodeActions.MakeDeclarationPartial"; public const string CodeActionsMakeFieldReadonly = "CodeActions.MakeFieldReadonly"; public const string CodeActionsMakeLocalFunctionStatic = "CodeActions.MakeLocalFunctionStatic"; public const string CodeActionsMakeMethodAsynchronous = "CodeActions.MakeMethodAsynchronous"; From 97db5ed120032803edf9ad4a6e92493417a73abc Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Thu, 27 Oct 2022 00:10:43 +0300 Subject: [PATCH 02/22] Move to VerifyCS --- ...rpMakeDeclarationPartialCodeFixProvider.cs | 3 +- .../MakeDeclarationPartialTests.cs | 179 ++++++++++-------- ...icMakeDeclarationPartialCodeFixProvider.vb | 2 +- 3 files changed, 104 insertions(+), 80 deletions(-) diff --git a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs b/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs index ede5910242145..2ca0e442bdda1 100644 --- a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs +++ b/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs @@ -12,6 +12,7 @@ using Microsoft.CodeAnalysis.MakeDeclarationPartial; using Microsoft.CodeAnalysis.CSharp.Syntax; using System.Diagnostics.CodeAnalysis; +using Microsoft.CodeAnalysis.Host.Mef; namespace Microsoft.CodeAnalysis.CSharp.MakeDeclarationPartial { @@ -21,7 +22,7 @@ internal sealed class CSharpMakeDeclarationPartialCodeFixProvider : AbstractMake private const string CS0260 = nameof(CS0260); [ImportingConstructor] - [SuppressMessage("RoslynDiagnosticsReliability", "RS0033:Importing constructor should be [Obsolete]", Justification = "Used in test code: https://github.com/dotnet/roslyn/issues/42814")] + [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] public CSharpMakeDeclarationPartialCodeFixProvider() { } diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs index 1be8f8b228fe4..d908a115875bd 100644 --- a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs +++ b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs @@ -2,31 +2,23 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.CSharp.MakeDeclarationPartial; -using Microsoft.CodeAnalysis.Diagnostics; -using Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Diagnostics; +using Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions; using Microsoft.CodeAnalysis.Test.Utilities; +using Microsoft.CodeAnalysis.Testing; using Xunit; -using Xunit.Abstractions; namespace Microsoft.CodeAnalysis.CSharp.CSharp.UnitTests.MakeDeclarationPartial { + using VerifyCS = CSharpCodeFixVerifier< + EmptyDiagnosticAnalyzer, + CSharpMakeDeclarationPartialCodeFixProvider>; + [Trait(Traits.Feature, Traits.Features.CodeActionsMakeDeclarationPartial)] - public sealed class MakeDeclarationPartialTests : AbstractCSharpDiagnosticProviderBasedUserDiagnosticTest + public sealed class MakeDeclarationPartialTests { - public MakeDeclarationPartialTests(ITestOutputHelper logger) - : base(logger) - { - } - - internal override (DiagnosticAnalyzer, CodeFixProvider) CreateDiagnosticProviderAndFixer(Workspace workspace) - => (null, new CSharpMakeDeclarationPartialCodeFixProvider()); - public static IEnumerable AllValidDeclarationTypes() { yield return new[] { "class" }; @@ -40,195 +32,226 @@ public static IEnumerable AllValidDeclarationTypes() [MemberData(nameof(AllValidDeclarationTypes))] public async Task OutsideNamespace(string declarationType) { - await TestInRegularAndScriptAsync($$""" + await new VerifyCS.Test + { + TestCode = $$""" partial {{declarationType}} Declaration { } - - {{declarationType}} [|Declaration|] + + {{declarationType}} {|CS0260:Declaration|} { } - """, $$""" + """, + FixedCode = $$""" partial {{declarationType}} Declaration { } - - partial {{declarationType}} [|Declaration|] + + partial {{declarationType}} Declaration { } - """); + """, + LanguageVersion = LanguageVersion.Preview + }.RunAsync(); } [Theory] [MemberData(nameof(AllValidDeclarationTypes))] public async Task InsideOneFileScopedNamespace(string declarationType) { - await TestInRegularAndScriptAsync($$""" + await new VerifyCS.Test + { + TestCode = $$""" namespace TestNamespace; - + partial {{declarationType}} Declaration { } - - {{declarationType}} [|Declaration|] + + {{declarationType}} {|CS0260:Declaration|} { } - """, $$""" + """, + FixedCode = $$""" namespace TestNamespace; - + partial {{declarationType}} Declaration { } - - partial {{declarationType}} [|Declaration|] + + partial {{declarationType}} Declaration { } - """); + """, + LanguageVersion = LanguageVersion.Preview + }.RunAsync(); } [Theory] [MemberData(nameof(AllValidDeclarationTypes))] public async Task InsideOneBlockScopedNamespace(string declarationType) { - await TestInRegularAndScriptAsync($$""" + await new VerifyCS.Test + { + TestCode = $$""" namespace TestNamespace { partial {{declarationType}} Declaration { } - - {{declarationType}} [|Declaration|] + + {{declarationType}} {|CS0260:Declaration|} { } } - """, $$""" + """, + FixedCode = $$""" namespace TestNamespace { partial {{declarationType}} Declaration { } - - partial {{declarationType}} [|Declaration|] + + partial {{declarationType}} Declaration { } } - """); + """, + LanguageVersion = LanguageVersion.Preview + }.RunAsync(); } [Theory] [MemberData(nameof(AllValidDeclarationTypes))] public async Task InsideTwoEqualBlockScopedNamespaces(string declarationType) { - await TestInRegularAndScriptAsync($$""" + await new VerifyCS.Test + { + TestCode = $$""" namespace TestNamespace { partial {{declarationType}} Declaration { } } - + namespace TestNamespace { - {{declarationType}} [|Declaration|] + {{declarationType}} {|CS0260:Declaration|} { } } - """, $$""" + """, + FixedCode = $$""" namespace TestNamespace { partial {{declarationType}} Declaration { } } - + namespace TestNamespace { - partial {{declarationType}} [|Declaration|] + partial {{declarationType}} Declaration { } } - """); + """, + LanguageVersion = LanguageVersion.Preview + }.RunAsync(); } [Theory] [MemberData(nameof(AllValidDeclarationTypes))] public async Task InDifferentDocuments(string declarationType) { - await TestInRegularAndScriptAsync($$""" - - - + var document1 = $$""" partial {{declarationType}} Declaration { } - - - {{declarationType}} [|Declaration|] + """; + + var document2 = $$""" + {{declarationType}} {|CS0260:Declaration|} { } - - - - """, $$""" - - - + """; + + var fixedDocument2 = $$""" partial {{declarationType}} Declaration { } - - - partial {{declarationType}} [|Declaration|] + """; + + await new VerifyCS.Test + { + TestState = { - } - - - - """); + Sources = { document1, document2 } + }, + FixedState = + { + Sources = { document1, fixedDocument2 } + }, + LanguageVersion = LanguageVersion.Preview + }.RunAsync(); } [Theory] [MemberData(nameof(AllValidDeclarationTypes))] public async Task WithOtherModifiers(string declarationType) { - await TestInRegularAndScriptAsync($$""" + await new VerifyCS.Test + { + TestCode = $$""" public partial {{declarationType}} Declaration { } - - public {{declarationType}} [|Declaration|] + + public {{declarationType}} {|CS0260:Declaration|} { } - """, $$""" + """, + FixedCode = $$""" public partial {{declarationType}} Declaration { } - - public partial {{declarationType}} [|Declaration|] + + public partial {{declarationType}} Declaration { } - """); + """, + LanguageVersion = LanguageVersion.Preview + }.RunAsync(); } [Theory] [MemberData(nameof(AllValidDeclarationTypes))] public async Task NotInDifferentNamespaces(string declarationType) { - await TestMissingInRegularAndScriptAsync($$""" + var markup = $$""" namespace TestNamespace1 { partial {{declarationType}} Declaration { } } - + namespace TestNamespace2 { - {{declarationType}} [|Declaration|] + {{declarationType}} Declaration { } } - """); + """; + + await new VerifyCS.Test + { + TestCode = markup, + FixedCode = markup, + LanguageVersion = LanguageVersion.Preview + }.RunAsync(); } } } diff --git a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb index d70778f92e20e..443a140391815 100644 --- a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb +++ b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb @@ -9,7 +9,7 @@ Imports System.Collections.Immutable Imports System.Composition Imports System.Diagnostics.CodeAnalysis -Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationpartial +Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial Friend Class VisualBasicMakeDeclarationPartialCodeFixProvider Inherits AbstractMakeDeclarationPartialCodeFixProvider(Of TypeStatementSyntax) From cecea89b44ad2397d3ae7c72864d9969db33264b Mon Sep 17 00:00:00 2001 From: DoctorKrolic <70431552+DoctorKrolic@users.noreply.github.com> Date: Thu, 27 Oct 2022 00:19:38 +0300 Subject: [PATCH 03/22] Simplify Co-authored-by: CyrusNajmabadi --- .../VisualBasicMakeDeclarationPartialCodeFixProvider.vb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb index 443a140391815..04bb3d96b1ccb 100644 --- a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb +++ b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb @@ -21,11 +21,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial Public Sub New() End Sub - Public Overrides ReadOnly Property FixableDiagnosticIds As ImmutableArray(Of String) - Get - Return ImmutableArray.Create(BC40046) - End Get - End Property + Public Overrides ReadOnly Property FixableDiagnosticIds As ImmutableArray(Of String) = ImmutableArray.Create(BC40046) Protected Overrides Function GetDeclarationName(node As TypeStatementSyntax) As String Return node.Identifier.ValueText From 95f4ded0525c61dcde172c62dc2e16054c9f4ba7 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Thu, 27 Oct 2022 15:04:37 +0300 Subject: [PATCH 04/22] Move to new test infra on VB side --- ...icMakeDeclarationPartialCodeFixProvider.vb | 8 +- .../MakeDeclarationPartialTests.vb | 195 ++++++++---------- 2 files changed, 90 insertions(+), 113 deletions(-) diff --git a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb index 04bb3d96b1ccb..906d216de1282 100644 --- a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb +++ b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb @@ -2,12 +2,12 @@ ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. +Imports System.Collections.Immutable +Imports System.Composition Imports Microsoft.CodeAnalysis.CodeFixes +Imports Microsoft.CodeAnalysis.Host.Mef Imports Microsoft.CodeAnalysis.MakeDeclarationPartial Imports Microsoft.CodeAnalysis.VisualBasic.Syntax -Imports System.Collections.Immutable -Imports System.Composition -Imports System.Diagnostics.CodeAnalysis Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial @@ -17,7 +17,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial Private Const BC40046 As String = NameOf(BC40046) - + Public Sub New() End Sub diff --git a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb b/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb index 1f3e07214e22e..b80e707515ea0 100644 --- a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb +++ b/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb @@ -2,178 +2,155 @@ ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. -Imports Microsoft.CodeAnalysis.CodeFixes -Imports Microsoft.CodeAnalysis.Diagnostics -Imports Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Diagnostics -Imports Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationpartial +Imports Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions +Imports Microsoft.CodeAnalysis.Testing +Imports Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.MakeDeclarationPartial Public Class MakeDeclarationPartialTests - Inherits AbstractVisualBasicDiagnosticProviderBasedUserDiagnosticTest - - Friend Overrides Function CreateDiagnosticProviderAndFixer(workspace As Workspace) As (DiagnosticAnalyzer, CodeFixProvider) - Return (Nothing, New VisualBasicMakeDeclarationPartialCodeFixProvider()) - End Function + Private Class TestVerifier + Inherits VisualBasicCodeFixVerifier(Of EmptyDiagnosticAnalyzer, VisualBasicMakeDeclarationPartialCodeFixProvider).Test + End Class Public Async Function OutsideNamespace() As Task - Await TestInRegularAndScriptAsync( - - - + Dim document1 = " Partial Class Declaration End Class -Class Declaration -End Class - - -Class [|Declaration|] -End Class - - -.ToString(), - - - +Class {|BC40046:Declaration|} +End Class" + + Dim document2 = " +Class {|BC40046:Declaration|} +End Class" + + Dim fixedDocument1 = " Partial Class Declaration End Class -Class Declaration -End Class - - Partial Class Declaration -End Class - - -.ToString()) +End Class" + + Dim test = New TestVerifier() + + test.TestState.Sources.Add(document1) + test.TestState.Sources.Add(document2) + + test.FixedState.Sources.Add(fixedDocument1) + test.FixedState.Sources.Add(document2) + + Await test.RunAsync() End Function Public Async Function InsideOneNamespace() As Task - Await TestInRegularAndScriptAsync( - - - + Dim document1 = " Namespace TestNamespace Partial Class Declaration End Class - Class Declaration + Class {|BC40046:Declaration|} End Class -End Namespace - - +End Namespace" + + Dim document2 = " Namespace TestNamespace - Class [|Declaration|] + Class {|BC40046:Declaration|} End Class -End Namespace - - -.ToString(), - - - +End Namespace" + + Dim fixedDocument1 = " Namespace TestNamespace Partial Class Declaration End Class - Class Declaration - End Class -End Namespace - - -Namespace TestNamespace Partial Class Declaration End Class -End Namespace - - -.ToString()) +End Namespace" + + Dim test = New TestVerifier() + + test.TestState.Sources.Add(document1) + test.TestState.Sources.Add(document2) + + test.FixedState.Sources.Add(fixedDocument1) + test.FixedState.Sources.Add(document2) + + Await test.RunAsync() End Function Public Async Function InsideTwoEqualNamespaces() As Task - Await TestInRegularAndScriptAsync( - - - + Dim document1 = " Namespace TestNamespace Partial Class Declaration End Class End Namespace Namespace TestNamespace - Class Declaration + Class {|BC40046:Declaration|} End Class -End Namespace - - +End Namespace" + + Dim document2 = " Namespace TestNamespace - Class [|Declaration|] + Class {|BC40046:Declaration|} End Class -End Namespace - - -.ToString(), - - - +End Namespace" + + Dim fixedDocument1 = " Namespace TestNamespace Partial Class Declaration End Class End Namespace -Namespace TestNamespace - Class Declaration - End Class -End Namespace - - Namespace TestNamespace Partial Class Declaration End Class -End Namespace - - -.ToString()) +End Namespace" + + Dim test = New TestVerifier() + + test.TestState.Sources.Add(document1) + test.TestState.Sources.Add(document2) + + test.FixedState.Sources.Add(fixedDocument1) + test.FixedState.Sources.Add(document2) + + Await test.RunAsync() End Function Public Async Function WithOtherModifiers() As Task - Await TestInRegularAndScriptAsync( - - - + Dim document1 = " Partial Public Class Declaration End Class -Public Class Declaration -End Class - - -Public Class [|Declaration|] -End Class - - -.ToString(), - - - +Public Class {|BC40046:Declaration|} +End Class" + + Dim document2 = " +Public Class {|BC40046:Declaration|} +End Class" + + Dim fixedDocument1 = " Partial Public Class Declaration End Class -Public Class Declaration -End Class - - Partial Public Class Declaration -End Class - - -.ToString()) +End Class" + + Dim test = New TestVerifier() + + test.TestState.Sources.Add(document1) + test.TestState.Sources.Add(document2) + + test.FixedState.Sources.Add(fixedDocument1) + test.FixedState.Sources.Add(document2) + + Await test.RunAsync() End Function End Class End Namespace From 44c7b46c01e7b62fe93717df62408ff4a240fb61 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Thu, 27 Oct 2022 22:37:55 +0300 Subject: [PATCH 05/22] Add record class test --- .../Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs index d908a115875bd..444377f399a51 100644 --- a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs +++ b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs @@ -25,6 +25,7 @@ public static IEnumerable AllValidDeclarationTypes() yield return new[] { "struct" }; yield return new[] { "interface" }; yield return new[] { "record" }; + yield return new[] { "record class" }; yield return new[] { "record struct" }; } From 9f24d98573265e5cac4cef1c04b81dbbb80b6220 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Thu, 27 Oct 2022 23:27:11 +0300 Subject: [PATCH 06/22] Simplify title --- .../CSharpMakeDeclarationPartialCodeFixProvider.cs | 5 +---- src/Analyzers/Core/CodeFixes/CodeFixesResources.resx | 4 ++-- .../AbstractMakePartialCodeFixProvider.cs | 11 ++++------- .../Core/CodeFixes/xlf/CodeFixesResources.cs.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.de.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.es.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.fr.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.it.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.ja.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.ko.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.pl.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.ru.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.tr.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf | 6 +++--- .../Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf | 6 +++--- ...isualBasicMakeDeclarationPartialCodeFixProvider.vb | 6 +----- 17 files changed, 47 insertions(+), 57 deletions(-) diff --git a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs b/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs index 2ca0e442bdda1..3d56857e8fa6f 100644 --- a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs +++ b/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs @@ -17,7 +17,7 @@ namespace Microsoft.CodeAnalysis.CSharp.MakeDeclarationPartial { [ExportCodeFixProvider(LanguageNames.CSharp, Name = PredefinedCodeFixProviderNames.MakeDeclarationPartial), Shared] - internal sealed class CSharpMakeDeclarationPartialCodeFixProvider : AbstractMakeDeclarationPartialCodeFixProvider + internal sealed class CSharpMakeDeclarationPartialCodeFixProvider : AbstractMakeDeclarationPartialCodeFixProvider { private const string CS0260 = nameof(CS0260); @@ -29,8 +29,5 @@ public CSharpMakeDeclarationPartialCodeFixProvider() public override ImmutableArray FixableDiagnosticIds { get; } = ImmutableArray.Create(CS0260); - - protected override string GetDeclarationName(TypeDeclarationSyntax node) - => node.Identifier.ValueText; } } diff --git a/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx b/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx index 1498d95de3f2f..6d8744cc69e73 100644 --- a/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx +++ b/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx @@ -168,7 +168,7 @@ Convert type to '{0}' - - Make this declaration of '{0}' partial + + Make partial \ No newline at end of file diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs index 1e3f7e44c7c46..c42ae5a0c5e98 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs @@ -10,27 +10,24 @@ namespace Microsoft.CodeAnalysis.MakeDeclarationPartial { - internal abstract class AbstractMakeDeclarationPartialCodeFixProvider : CodeFixProvider - where TDeclarationSyntax : SyntaxNode + internal abstract class AbstractMakeDeclarationPartialCodeFixProvider : CodeFixProvider { - protected abstract string GetDeclarationName(TDeclarationSyntax node); - public override async Task RegisterCodeFixesAsync(CodeFixContext context) { var document = context.Document; var cancellationToken = context.CancellationToken; var syntaxRoot = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); - var declarationNode = (TDeclarationSyntax)syntaxRoot.FindNode(context.Span); + var declarationNode = syntaxRoot.FindNode(context.Span); context.RegisterCodeFix( CodeAction.Create( - string.Format(CodeFixesResources.Make_this_declaration_of_0_partial, GetDeclarationName(declarationNode)), + CodeFixesResources.Make_partial, c => MakeDeclarationPartialAsync(document, declarationNode, c)), context.Diagnostics); } - private static async Task MakeDeclarationPartialAsync(Document document, TDeclarationSyntax declaration, CancellationToken cancellationToken) + private static async Task MakeDeclarationPartialAsync(Document document, SyntaxNode declaration, CancellationToken cancellationToken) { var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf index b81b481d90c93..818f7550c72bd 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf @@ -57,9 +57,9 @@ Nastavit jako statickou - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf index f317ba0ad50e3..3a1bfceb44e37 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf @@ -57,9 +57,9 @@ Als statisch festlegen - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf index 8b859703882e8..09cc0717906e7 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf @@ -57,9 +57,9 @@ Hacer estático - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf index d1a2c7f27e77e..937f598e863b5 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf @@ -57,9 +57,9 @@ Rendre statique - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf index 3f5b6d36ce011..b5a4bea4c4422 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf @@ -57,9 +57,9 @@ Imposta come statici - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf index fafaf5fea65ca..8d35f7f36c6e6 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf @@ -57,9 +57,9 @@ 静的にする - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf index 526188c6dcde5..7c590252813b0 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf @@ -57,9 +57,9 @@ 정적으로 만들기 - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf index 337579e8044da..d9c8cd19354f9 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf @@ -57,9 +57,9 @@ Ustaw jako statyczne - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf index 4443de72b59e4..ac10cbbc23449 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf @@ -57,9 +57,9 @@ Tornar estático - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf index 58776f0ac67d3..04514893947b2 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf @@ -57,9 +57,9 @@ Сделать статическим - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf index 07b72c6002956..1e484607712c3 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf @@ -57,9 +57,9 @@ Statik yap - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf index c289945137546..60240693886f3 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf @@ -57,9 +57,9 @@ 设为静态 - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf index 6df3dd92b46b3..60553dca61a73 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf @@ -57,9 +57,9 @@ 使其變成靜態 - - Make this declaration of '{0}' partial - Make this declaration of '{0}' partial + + Make partial + Make partial diff --git a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb index 906d216de1282..13602d7c1ff75 100644 --- a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb +++ b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb @@ -12,7 +12,7 @@ Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial Friend Class VisualBasicMakeDeclarationPartialCodeFixProvider - Inherits AbstractMakeDeclarationPartialCodeFixProvider(Of TypeStatementSyntax) + Inherits AbstractMakeDeclarationPartialCodeFixProvider Private Const BC40046 As String = NameOf(BC40046) @@ -22,9 +22,5 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial End Sub Public Overrides ReadOnly Property FixableDiagnosticIds As ImmutableArray(Of String) = ImmutableArray.Create(BC40046) - - Protected Overrides Function GetDeclarationName(node As TypeStatementSyntax) As String - Return node.Identifier.ValueText - End Function End Class End Namespace From 0f82c015b0fec6915ba205b576963d6008422f07 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Thu, 27 Oct 2022 23:33:51 +0300 Subject: [PATCH 07/22] Nullability and usings clear --- .../CSharpMakeDeclarationPartialCodeFixProvider.cs | 7 +------ .../AbstractMakePartialCodeFixProvider.cs | 5 +++-- .../VisualBasicMakeDeclarationPartialCodeFixProvider.vb | 1 - 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs b/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs index 3d56857e8fa6f..b921e52e1ae0b 100644 --- a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs +++ b/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs @@ -3,16 +3,11 @@ // See the LICENSE file in the project root for more information. using System; -using System.Collections.Generic; using System.Collections.Immutable; using System.Composition; -using System.Text; using Microsoft.CodeAnalysis.CodeFixes; -using System.Xml.Linq; -using Microsoft.CodeAnalysis.MakeDeclarationPartial; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using System.Diagnostics.CodeAnalysis; using Microsoft.CodeAnalysis.Host.Mef; +using Microsoft.CodeAnalysis.MakeDeclarationPartial; namespace Microsoft.CodeAnalysis.CSharp.MakeDeclarationPartial { diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs index c42ae5a0c5e98..c6b87ae6bf4fe 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs @@ -7,6 +7,7 @@ using Microsoft.CodeAnalysis.CodeActions; using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.Editing; +using Microsoft.CodeAnalysis.Shared.Extensions; namespace Microsoft.CodeAnalysis.MakeDeclarationPartial { @@ -17,7 +18,7 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context) var document = context.Document; var cancellationToken = context.CancellationToken; - var syntaxRoot = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + var syntaxRoot = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var declarationNode = syntaxRoot.FindNode(context.Span); context.RegisterCodeFix( @@ -29,7 +30,7 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context) private static async Task MakeDeclarationPartialAsync(Document document, SyntaxNode declaration, CancellationToken cancellationToken) { - var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + var root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var editor = new SyntaxEditor(root, document.Project.Solution.Services); var generator = editor.Generator; diff --git a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb index 13602d7c1ff75..af2d92fe27837 100644 --- a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb +++ b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb @@ -7,7 +7,6 @@ Imports System.Composition Imports Microsoft.CodeAnalysis.CodeFixes Imports Microsoft.CodeAnalysis.Host.Mef Imports Microsoft.CodeAnalysis.MakeDeclarationPartial -Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial From 6cffa99fd5ad4b468902d7b86fd03e3d42c738c4 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Thu, 27 Oct 2022 23:42:48 +0300 Subject: [PATCH 08/22] VerifyVB --- .../MakeDeclarationPartialTests.vb | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb b/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb index b80e707515ea0..01b5cfded4e9b 100644 --- a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb +++ b/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb @@ -5,14 +5,13 @@ Imports Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions Imports Microsoft.CodeAnalysis.Testing Imports Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial +Imports VerifyVB = Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions.VisualBasicCodeFixVerifier(Of + Microsoft.CodeAnalysis.Testing.EmptyDiagnosticAnalyzer, + Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial.VisualBasicMakeDeclarationPartialCodeFixProvider) Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.MakeDeclarationPartial Public Class MakeDeclarationPartialTests - Private Class TestVerifier - Inherits VisualBasicCodeFixVerifier(Of EmptyDiagnosticAnalyzer, VisualBasicMakeDeclarationPartialCodeFixProvider).Test - End Class - Public Async Function OutsideNamespace() As Task Dim document1 = " @@ -33,7 +32,7 @@ End Class Partial Class Declaration End Class" - Dim test = New TestVerifier() + Dim test = New VerifyVB.Test() test.TestState.Sources.Add(document1) test.TestState.Sources.Add(document2) @@ -70,7 +69,7 @@ Namespace TestNamespace End Class End Namespace" - Dim test = New TestVerifier() + Dim test = New VerifyVB.Test() test.TestState.Sources.Add(document1) test.TestState.Sources.Add(document2) @@ -111,7 +110,7 @@ Namespace TestNamespace End Class End Namespace" - Dim test = New TestVerifier() + Dim test = New VerifyVB.Test() test.TestState.Sources.Add(document1) test.TestState.Sources.Add(document2) @@ -142,7 +141,7 @@ End Class Partial Public Class Declaration End Class" - Dim test = New TestVerifier() + Dim test = New VerifyVB.Test() test.TestState.Sources.Add(document1) test.TestState.Sources.Add(document2) From 9663dbdbeb3763b2c2cf116b1f57e4d9618a8fba Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Fri, 28 Oct 2022 19:11:25 +0300 Subject: [PATCH 09/22] Use C#10 instead of preview --- .../MakeDeclarationPartialTests.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs index 444377f399a51..9f349f5b5809f 100644 --- a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs +++ b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs @@ -53,7 +53,7 @@ public async Task OutsideNamespace(string declarationType) { } """, - LanguageVersion = LanguageVersion.Preview + LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -85,7 +85,7 @@ namespace TestNamespace; { } """, - LanguageVersion = LanguageVersion.Preview + LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -119,7 +119,7 @@ namespace TestNamespace } } """, - LanguageVersion = LanguageVersion.Preview + LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -159,7 +159,7 @@ namespace TestNamespace } } """, - LanguageVersion = LanguageVersion.Preview + LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -195,7 +195,7 @@ public async Task InDifferentDocuments(string declarationType) { Sources = { document1, fixedDocument2 } }, - LanguageVersion = LanguageVersion.Preview + LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -223,7 +223,7 @@ public partial {{declarationType}} Declaration { } """, - LanguageVersion = LanguageVersion.Preview + LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -251,7 +251,7 @@ namespace TestNamespace2 { TestCode = markup, FixedCode = markup, - LanguageVersion = LanguageVersion.Preview + LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } } From 4bab1984f774d14565331974a855e4878c3b45d0 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Wed, 2 Nov 2022 19:56:36 +0300 Subject: [PATCH 10/22] Reimplement codefix using SyntaxEditorBasedCodeFixProvider & FixAll support --- .../Tests/CSharpAnalyzers.UnitTests.projitems | 1 + .../MakeDeclarationPartialFixAllTests.cs | 174 ++++++++++++++++++ .../AbstractMakePartialCodeFixProvider.cs | 34 ++-- 3 files changed, 187 insertions(+), 22 deletions(-) create mode 100644 src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialFixAllTests.cs diff --git a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems index 1637581f06677..7518063e123d6 100644 --- a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems +++ b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems @@ -24,6 +24,7 @@ + diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialFixAllTests.cs b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialFixAllTests.cs new file mode 100644 index 0000000000000..6ac2b060d6f5b --- /dev/null +++ b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialFixAllTests.cs @@ -0,0 +1,174 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.CSharp.MakeDeclarationPartial; +using Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions; +using Microsoft.CodeAnalysis.Test.Utilities; +using Microsoft.CodeAnalysis.Testing; +using Xunit; + +namespace Microsoft.CodeAnalysis.CSharp.CSharp.UnitTests.MakeDeclarationPartial +{ + using VerifyCS = CSharpCodeFixVerifier< + EmptyDiagnosticAnalyzer, + CSharpMakeDeclarationPartialCodeFixProvider>; + + [Trait(Traits.Feature, Traits.Features.CodeActionsMakeDeclarationPartial)] + public sealed class MakeDeclarationPartialFixAllTests + { + public static IEnumerable AllValidDeclarationTypes() + { + yield return new[] { "class" }; + yield return new[] { "struct" }; + yield return new[] { "interface" }; + yield return new[] { "record" }; + yield return new[] { "record class" }; + yield return new[] { "record struct" }; + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task SeveralDeclarationsOfSingleClass(string declarationType) + { + await new VerifyCS.Test + { + TestCode = $$""" + partial {{declarationType}} Declaration + { + } + + {{declarationType}} {|CS0260:Declaration|} + { + } + + {{declarationType}} {|CS0260:Declaration|} + { + } + """, + FixedCode = $$""" + partial {{declarationType}} Declaration + { + } + + partial {{declarationType}} Declaration + { + } + + partial {{declarationType}} Declaration + { + } + """, + LanguageVersion = LanguageVersion.CSharp10 + }.RunAsync(); + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task SingleDeclarationOfSeveralClasses(string declarationType) + { + await new VerifyCS.Test + { + TestCode = $$""" + partial {{declarationType}} Declaration1 + { + } + + {{declarationType}} {|CS0260:Declaration1|} + { + } + + partial {{declarationType}} Declaration2 + { + } + + {{declarationType}} {|CS0260:Declaration2|} + { + } + """, + FixedCode = $$""" + partial {{declarationType}} Declaration1 + { + } + + partial {{declarationType}} Declaration1 + { + } + + partial {{declarationType}} Declaration2 + { + } + + partial {{declarationType}} Declaration2 + { + } + """, + LanguageVersion = LanguageVersion.CSharp10 + }.RunAsync(); + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task SeveralDeclarationsOfSeveralClasses(string declarationType) + { + await new VerifyCS.Test + { + TestCode = $$""" + partial {{declarationType}} Declaration1 + { + } + + {{declarationType}} {|CS0260:Declaration1|} + { + } + + {{declarationType}} {|CS0260:Declaration1|} + { + } + + partial {{declarationType}} Declaration2 + { + } + + {{declarationType}} {|CS0260:Declaration2|} + { + } + + {{declarationType}} {|CS0260:Declaration2|} + { + } + """, + FixedCode = $$""" + partial {{declarationType}} Declaration1 + { + } + + partial {{declarationType}} Declaration1 + { + } + + partial {{declarationType}} Declaration1 + { + } + + partial {{declarationType}} Declaration2 + { + } + + partial {{declarationType}} Declaration2 + { + } + + partial {{declarationType}} Declaration2 + { + } + """, + LanguageVersion = LanguageVersion.CSharp10 + }.RunAsync(); + } + } +} diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs index c6b87ae6bf4fe..f386785bc2b1b 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.CodeActions; @@ -11,36 +12,25 @@ namespace Microsoft.CodeAnalysis.MakeDeclarationPartial { - internal abstract class AbstractMakeDeclarationPartialCodeFixProvider : CodeFixProvider + internal abstract class AbstractMakeDeclarationPartialCodeFixProvider : SyntaxEditorBasedCodeFixProvider { - public override async Task RegisterCodeFixesAsync(CodeFixContext context) + public override Task RegisterCodeFixesAsync(CodeFixContext context) { - var document = context.Document; - var cancellationToken = context.CancellationToken; - - var syntaxRoot = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); - var declarationNode = syntaxRoot.FindNode(context.Span); - - context.RegisterCodeFix( - CodeAction.Create( - CodeFixesResources.Make_partial, - c => MakeDeclarationPartialAsync(document, declarationNode, c)), - context.Diagnostics); + RegisterCodeFix(context, CodeFixesResources.Make_partial, nameof(CodeFixesResources.Make_partial)); + return Task.CompletedTask; } - private static async Task MakeDeclarationPartialAsync(Document document, SyntaxNode declaration, CancellationToken cancellationToken) + protected override async Task FixAllAsync(Document document, ImmutableArray diagnostics, SyntaxEditor editor, CodeActionOptionsProvider fallbackOptions, CancellationToken cancellationToken) { var root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); - - var editor = new SyntaxEditor(root, document.Project.Solution.Services); var generator = editor.Generator; - var modifiers = generator.GetModifiers(declaration); - var newDeclaration = generator.WithModifiers(declaration, modifiers.WithPartial(true)); - - editor.ReplaceNode(declaration, newDeclaration); - - return document.WithSyntaxRoot(editor.GetChangedRoot()); + foreach (var diagnostic in diagnostics) + { + var declaration = root.FindNode(diagnostic.Location.SourceSpan); + var fixedModifiers = generator.GetModifiers(declaration).WithPartial(true); + editor.ReplaceNode(declaration, generator.WithModifiers(declaration, fixedModifiers)); + } } } } From 694398954a32454d7a04c0bd02fdd90cd240bbe4 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Wed, 2 Nov 2022 22:15:16 +0300 Subject: [PATCH 11/22] Fix & simplify VB tests --- .../MakeDeclarationPartialTests.vb | 92 +++++++++---------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb b/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb index 01b5cfded4e9b..06cb03888f668 100644 --- a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb +++ b/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb @@ -14,75 +14,73 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.MakeDeclarationPar Public Class MakeDeclarationPartialTests Public Async Function OutsideNamespace() As Task - Dim document1 = " + Dim document = " Partial Class Declaration End Class Class {|BC40046:Declaration|} -End Class" +End Class - Dim document2 = " Class {|BC40046:Declaration|} End Class" - Dim fixedDocument1 = " + Dim fixedDocument = " Partial Class Declaration End Class Partial Class Declaration -End Class" - - Dim test = New VerifyVB.Test() +End Class - test.TestState.Sources.Add(document1) - test.TestState.Sources.Add(document2) +Class {|BC40046:Declaration|} +End Class" - test.FixedState.Sources.Add(fixedDocument1) - test.FixedState.Sources.Add(document2) + Dim test = New VerifyVB.Test With { + .TestCode = document, + .FixedCode = fixedDocument, + .CodeFixTestBehaviors = CodeFixTestBehaviors.SkipFixAllCheck + } Await test.RunAsync() End Function Public Async Function InsideOneNamespace() As Task - Dim document1 = " + Dim document = " Namespace TestNamespace Partial Class Declaration End Class Class {|BC40046:Declaration|} End Class -End Namespace" - Dim document2 = " -Namespace TestNamespace Class {|BC40046:Declaration|} End Class End Namespace" - Dim fixedDocument1 = " + Dim fixedDocument = " Namespace TestNamespace Partial Class Declaration End Class Partial Class Declaration End Class -End Namespace" - Dim test = New VerifyVB.Test() - - test.TestState.Sources.Add(document1) - test.TestState.Sources.Add(document2) + Class {|BC40046:Declaration|} + End Class +End Namespace" - test.FixedState.Sources.Add(fixedDocument1) - test.FixedState.Sources.Add(document2) + Dim test = New VerifyVB.Test With { + .TestCode = document, + .FixedCode = fixedDocument, + .CodeFixTestBehaviors = CodeFixTestBehaviors.SkipFixAllCheck + } Await test.RunAsync() End Function - Public Async Function InsideTwoEqualNamespaces() As Task - Dim document1 = " + Public Async Function InsideSeveralEqualNamespaces() As Task + Dim document = " Namespace TestNamespace Partial Class Declaration End Class @@ -91,15 +89,14 @@ End Namespace Namespace TestNamespace Class {|BC40046:Declaration|} End Class -End Namespace" +End Namespace - Dim document2 = " Namespace TestNamespace Class {|BC40046:Declaration|} End Class End Namespace" - Dim fixedDocument1 = " + Dim fixedDocument = " Namespace TestNamespace Partial Class Declaration End Class @@ -108,46 +105,49 @@ End Namespace Namespace TestNamespace Partial Class Declaration End Class -End Namespace" - - Dim test = New VerifyVB.Test() +End Namespace - test.TestState.Sources.Add(document1) - test.TestState.Sources.Add(document2) +Namespace TestNamespace + Class {|BC40046:Declaration|} + End Class +End Namespace" - test.FixedState.Sources.Add(fixedDocument1) - test.FixedState.Sources.Add(document2) + Dim test = New VerifyVB.Test With { + .TestCode = document, + .FixedCode = fixedDocument, + .CodeFixTestBehaviors = CodeFixTestBehaviors.SkipFixAllCheck + } Await test.RunAsync() End Function Public Async Function WithOtherModifiers() As Task - Dim document1 = " + Dim document = " Partial Public Class Declaration End Class Public Class {|BC40046:Declaration|} -End Class" +End Class - Dim document2 = " Public Class {|BC40046:Declaration|} End Class" - Dim fixedDocument1 = " + Dim fixedDocument = " Partial Public Class Declaration End Class Partial Public Class Declaration -End Class" - - Dim test = New VerifyVB.Test() +End Class - test.TestState.Sources.Add(document1) - test.TestState.Sources.Add(document2) +Public Class {|BC40046:Declaration|} +End Class" - test.FixedState.Sources.Add(fixedDocument1) - test.FixedState.Sources.Add(document2) + Dim test = New VerifyVB.Test With { + .TestCode = document, + .FixedCode = fixedDocument, + .CodeFixTestBehaviors = CodeFixTestBehaviors.SkipFixAllCheck + } Await test.RunAsync() End Function From af31111236b21387cdde44e0f8ceedd8fea28757 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Thu, 3 Nov 2022 18:46:01 +0300 Subject: [PATCH 12/22] Reuse syntax root from the editor --- .../AbstractMakePartialCodeFixProvider.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs index f386785bc2b1b..808d467cef770 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs @@ -8,7 +8,6 @@ using Microsoft.CodeAnalysis.CodeActions; using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.Editing; -using Microsoft.CodeAnalysis.Shared.Extensions; namespace Microsoft.CodeAnalysis.MakeDeclarationPartial { @@ -20,17 +19,19 @@ public override Task RegisterCodeFixesAsync(CodeFixContext context) return Task.CompletedTask; } - protected override async Task FixAllAsync(Document document, ImmutableArray diagnostics, SyntaxEditor editor, CodeActionOptionsProvider fallbackOptions, CancellationToken cancellationToken) + protected override Task FixAllAsync(Document document, ImmutableArray diagnostics, SyntaxEditor editor, CodeActionOptionsProvider fallbackOptions, CancellationToken cancellationToken) { - var root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + var syntaxRoot = editor.OriginalRoot; var generator = editor.Generator; foreach (var diagnostic in diagnostics) { - var declaration = root.FindNode(diagnostic.Location.SourceSpan); + var declaration = syntaxRoot.FindNode(diagnostic.Location.SourceSpan); var fixedModifiers = generator.GetModifiers(declaration).WithPartial(true); editor.ReplaceNode(declaration, generator.WithModifiers(declaration, fixedModifiers)); } + + return Task.CompletedTask; } } } From 269163054dbe8a771d5d103c89648ef76563bb3b Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Fri, 4 Nov 2022 12:58:10 +0300 Subject: [PATCH 13/22] Remove problematic FixAll support & add tests for nested type case --- .../Tests/CSharpAnalyzers.UnitTests.projitems | 1 - .../MakeDeclarationPartialFixAllTests.cs | 174 ------------------ .../MakeDeclarationPartialTests.cs | 77 ++++++++ .../AbstractMakePartialCodeFixProvider.cs | 5 + .../MakeDeclarationPartialTests.vb | 12 +- 5 files changed, 86 insertions(+), 183 deletions(-) delete mode 100644 src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialFixAllTests.cs diff --git a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems index 7518063e123d6..1637581f06677 100644 --- a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems +++ b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems @@ -24,7 +24,6 @@ - diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialFixAllTests.cs b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialFixAllTests.cs deleted file mode 100644 index 6ac2b060d6f5b..0000000000000 --- a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialFixAllTests.cs +++ /dev/null @@ -1,174 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using Microsoft.CodeAnalysis.CSharp.MakeDeclarationPartial; -using Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions; -using Microsoft.CodeAnalysis.Test.Utilities; -using Microsoft.CodeAnalysis.Testing; -using Xunit; - -namespace Microsoft.CodeAnalysis.CSharp.CSharp.UnitTests.MakeDeclarationPartial -{ - using VerifyCS = CSharpCodeFixVerifier< - EmptyDiagnosticAnalyzer, - CSharpMakeDeclarationPartialCodeFixProvider>; - - [Trait(Traits.Feature, Traits.Features.CodeActionsMakeDeclarationPartial)] - public sealed class MakeDeclarationPartialFixAllTests - { - public static IEnumerable AllValidDeclarationTypes() - { - yield return new[] { "class" }; - yield return new[] { "struct" }; - yield return new[] { "interface" }; - yield return new[] { "record" }; - yield return new[] { "record class" }; - yield return new[] { "record struct" }; - } - - [Theory] - [MemberData(nameof(AllValidDeclarationTypes))] - public async Task SeveralDeclarationsOfSingleClass(string declarationType) - { - await new VerifyCS.Test - { - TestCode = $$""" - partial {{declarationType}} Declaration - { - } - - {{declarationType}} {|CS0260:Declaration|} - { - } - - {{declarationType}} {|CS0260:Declaration|} - { - } - """, - FixedCode = $$""" - partial {{declarationType}} Declaration - { - } - - partial {{declarationType}} Declaration - { - } - - partial {{declarationType}} Declaration - { - } - """, - LanguageVersion = LanguageVersion.CSharp10 - }.RunAsync(); - } - - [Theory] - [MemberData(nameof(AllValidDeclarationTypes))] - public async Task SingleDeclarationOfSeveralClasses(string declarationType) - { - await new VerifyCS.Test - { - TestCode = $$""" - partial {{declarationType}} Declaration1 - { - } - - {{declarationType}} {|CS0260:Declaration1|} - { - } - - partial {{declarationType}} Declaration2 - { - } - - {{declarationType}} {|CS0260:Declaration2|} - { - } - """, - FixedCode = $$""" - partial {{declarationType}} Declaration1 - { - } - - partial {{declarationType}} Declaration1 - { - } - - partial {{declarationType}} Declaration2 - { - } - - partial {{declarationType}} Declaration2 - { - } - """, - LanguageVersion = LanguageVersion.CSharp10 - }.RunAsync(); - } - - [Theory] - [MemberData(nameof(AllValidDeclarationTypes))] - public async Task SeveralDeclarationsOfSeveralClasses(string declarationType) - { - await new VerifyCS.Test - { - TestCode = $$""" - partial {{declarationType}} Declaration1 - { - } - - {{declarationType}} {|CS0260:Declaration1|} - { - } - - {{declarationType}} {|CS0260:Declaration1|} - { - } - - partial {{declarationType}} Declaration2 - { - } - - {{declarationType}} {|CS0260:Declaration2|} - { - } - - {{declarationType}} {|CS0260:Declaration2|} - { - } - """, - FixedCode = $$""" - partial {{declarationType}} Declaration1 - { - } - - partial {{declarationType}} Declaration1 - { - } - - partial {{declarationType}} Declaration1 - { - } - - partial {{declarationType}} Declaration2 - { - } - - partial {{declarationType}} Declaration2 - { - } - - partial {{declarationType}} Declaration2 - { - } - """, - LanguageVersion = LanguageVersion.CSharp10 - }.RunAsync(); - } - } -} diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs index 9f349f5b5809f..2a0d242f69073 100644 --- a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs +++ b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs @@ -227,6 +227,83 @@ public partial {{declarationType}} Declaration }.RunAsync(); } + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task NestedType1(string declarationType) + { + await new VerifyCS.Test + { + TestCode = $$""" + class Test + { + public partial {{declarationType}} Declaration + { + } + + public {{declarationType}} {|CS0260:Declaration|} + { + } + } + """, + FixedCode = $$""" + class Test + { + public partial {{declarationType}} Declaration + { + } + + public partial {{declarationType}} Declaration + { + } + } + """, + LanguageVersion = LanguageVersion.CSharp10 + }.RunAsync(); + } + + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task NestedType2(string declarationType) + { + // Note: fixes here will be executed sequentially, this is not the same as fix-all + await new VerifyCS.Test + { + TestCode = $$""" + partial {{declarationType}} Test + { + } + + {{declarationType}} {|CS0260:Test|} + { + public partial {{declarationType}} Declaration + { + } + + public {{declarationType}} {|CS0260:Declaration|} + { + } + } + """, + FixedCode = $$""" + partial {{declarationType}} Test + { + } + + partial {{declarationType}} Test + { + public partial {{declarationType}} Declaration + { + } + + public partial {{declarationType}} Declaration + { + } + } + """, + LanguageVersion = LanguageVersion.CSharp10 + }.RunAsync(); + } + [Theory] [MemberData(nameof(AllValidDeclarationTypes))] public async Task NotInDifferentNamespaces(string declarationType) diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs index 808d467cef770..8cb96d898a879 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs @@ -13,6 +13,11 @@ namespace Microsoft.CodeAnalysis.MakeDeclarationPartial { internal abstract class AbstractMakeDeclarationPartialCodeFixProvider : SyntaxEditorBasedCodeFixProvider { + // This code fix addresses a very specific compiler error. It's unlikely there will be more than 1 of them at a time. + protected AbstractMakeDeclarationPartialCodeFixProvider() : base(supportsFixAll: false) + { + } + public override Task RegisterCodeFixesAsync(CodeFixContext context) { RegisterCodeFix(context, CodeFixesResources.Make_partial, nameof(CodeFixesResources.Make_partial)); diff --git a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb b/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb index 06cb03888f668..71efdbdcea2c8 100644 --- a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb +++ b/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb @@ -36,8 +36,7 @@ End Class" Dim test = New VerifyVB.Test With { .TestCode = document, - .FixedCode = fixedDocument, - .CodeFixTestBehaviors = CodeFixTestBehaviors.SkipFixAllCheck + .FixedCode = fixedDocument } Await test.RunAsync() @@ -71,8 +70,7 @@ End Namespace" Dim test = New VerifyVB.Test With { .TestCode = document, - .FixedCode = fixedDocument, - .CodeFixTestBehaviors = CodeFixTestBehaviors.SkipFixAllCheck + .FixedCode = fixedDocument } Await test.RunAsync() @@ -114,8 +112,7 @@ End Namespace" Dim test = New VerifyVB.Test With { .TestCode = document, - .FixedCode = fixedDocument, - .CodeFixTestBehaviors = CodeFixTestBehaviors.SkipFixAllCheck + .FixedCode = fixedDocument } Await test.RunAsync() @@ -145,8 +142,7 @@ End Class" Dim test = New VerifyVB.Test With { .TestCode = document, - .FixedCode = fixedDocument, - .CodeFixTestBehaviors = CodeFixTestBehaviors.SkipFixAllCheck + .FixedCode = fixedDocument } Await test.RunAsync() From e1d897547d1dd8caedec79fbd7ad51c967a03bf1 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Fri, 4 Nov 2022 20:00:16 +0300 Subject: [PATCH 14/22] New line --- .../AbstractMakePartialCodeFixProvider.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs index 8cb96d898a879..5353a3a42e4b6 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs @@ -14,7 +14,8 @@ namespace Microsoft.CodeAnalysis.MakeDeclarationPartial internal abstract class AbstractMakeDeclarationPartialCodeFixProvider : SyntaxEditorBasedCodeFixProvider { // This code fix addresses a very specific compiler error. It's unlikely there will be more than 1 of them at a time. - protected AbstractMakeDeclarationPartialCodeFixProvider() : base(supportsFixAll: false) + protected AbstractMakeDeclarationPartialCodeFixProvider() + : base(supportsFixAll: false) { } From ae487467467292387330f906880ec776a7d17fab Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Sat, 12 Nov 2022 18:58:53 +0300 Subject: [PATCH 15/22] Ident --- .../MakeDeclarationPartialTests.cs | 234 +++++++++--------- 1 file changed, 117 insertions(+), 117 deletions(-) diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs index 2a0d242f69073..2535ad3d8f57c 100644 --- a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs +++ b/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs @@ -36,23 +36,23 @@ public async Task OutsideNamespace(string declarationType) await new VerifyCS.Test { TestCode = $$""" - partial {{declarationType}} Declaration - { - } + partial {{declarationType}} Declaration + { + } - {{declarationType}} {|CS0260:Declaration|} - { - } - """, + {{declarationType}} {|CS0260:Declaration|} + { + } + """, FixedCode = $$""" - partial {{declarationType}} Declaration - { - } + partial {{declarationType}} Declaration + { + } - partial {{declarationType}} Declaration - { - } - """, + partial {{declarationType}} Declaration + { + } + """, LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -64,27 +64,27 @@ public async Task InsideOneFileScopedNamespace(string declarationType) await new VerifyCS.Test { TestCode = $$""" - namespace TestNamespace; + namespace TestNamespace; - partial {{declarationType}} Declaration - { - } + partial {{declarationType}} Declaration + { + } - {{declarationType}} {|CS0260:Declaration|} - { - } - """, + {{declarationType}} {|CS0260:Declaration|} + { + } + """, FixedCode = $$""" - namespace TestNamespace; + namespace TestNamespace; - partial {{declarationType}} Declaration - { - } + partial {{declarationType}} Declaration + { + } - partial {{declarationType}} Declaration - { - } - """, + partial {{declarationType}} Declaration + { + } + """, LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -96,29 +96,29 @@ public async Task InsideOneBlockScopedNamespace(string declarationType) await new VerifyCS.Test { TestCode = $$""" - namespace TestNamespace - { - partial {{declarationType}} Declaration + namespace TestNamespace { - } + partial {{declarationType}} Declaration + { + } - {{declarationType}} {|CS0260:Declaration|} - { + {{declarationType}} {|CS0260:Declaration|} + { + } } - } - """, + """, FixedCode = $$""" - namespace TestNamespace - { - partial {{declarationType}} Declaration + namespace TestNamespace { - } + partial {{declarationType}} Declaration + { + } - partial {{declarationType}} Declaration - { + partial {{declarationType}} Declaration + { + } } - } - """, + """, LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -130,35 +130,35 @@ public async Task InsideTwoEqualBlockScopedNamespaces(string declarationType) await new VerifyCS.Test { TestCode = $$""" - namespace TestNamespace - { - partial {{declarationType}} Declaration + namespace TestNamespace { + partial {{declarationType}} Declaration + { + } } - } - namespace TestNamespace - { - {{declarationType}} {|CS0260:Declaration|} + namespace TestNamespace { + {{declarationType}} {|CS0260:Declaration|} + { + } } - } - """, + """, FixedCode = $$""" - namespace TestNamespace - { - partial {{declarationType}} Declaration + namespace TestNamespace { + partial {{declarationType}} Declaration + { + } } - } - namespace TestNamespace - { - partial {{declarationType}} Declaration + namespace TestNamespace { + partial {{declarationType}} Declaration + { + } } - } - """, + """, LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -206,23 +206,23 @@ public async Task WithOtherModifiers(string declarationType) await new VerifyCS.Test { TestCode = $$""" - public partial {{declarationType}} Declaration - { - } + public partial {{declarationType}} Declaration + { + } - public {{declarationType}} {|CS0260:Declaration|} - { - } - """, + public {{declarationType}} {|CS0260:Declaration|} + { + } + """, FixedCode = $$""" - public partial {{declarationType}} Declaration - { - } + public partial {{declarationType}} Declaration + { + } - public partial {{declarationType}} Declaration - { - } - """, + public partial {{declarationType}} Declaration + { + } + """, LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -234,29 +234,29 @@ public async Task NestedType1(string declarationType) await new VerifyCS.Test { TestCode = $$""" - class Test - { - public partial {{declarationType}} Declaration + class Test { - } + public partial {{declarationType}} Declaration + { + } - public {{declarationType}} {|CS0260:Declaration|} - { + public {{declarationType}} {|CS0260:Declaration|} + { + } } - } - """, + """, FixedCode = $$""" - class Test - { - public partial {{declarationType}} Declaration + class Test { - } + public partial {{declarationType}} Declaration + { + } - public partial {{declarationType}} Declaration - { + public partial {{declarationType}} Declaration + { + } } - } - """, + """, LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } @@ -265,41 +265,41 @@ public partial {{declarationType}} Declaration [MemberData(nameof(AllValidDeclarationTypes))] public async Task NestedType2(string declarationType) { - // Note: fixes here will be executed sequentially, this is not the same as fix-all + // Note: fixes here are executed sequentially, this is not the same as fix-all await new VerifyCS.Test { TestCode = $$""" - partial {{declarationType}} Test - { - } - - {{declarationType}} {|CS0260:Test|} - { - public partial {{declarationType}} Declaration + partial {{declarationType}} Test { } - - public {{declarationType}} {|CS0260:Declaration|} + + {{declarationType}} {|CS0260:Test|} { + public partial {{declarationType}} Declaration + { + } + + public {{declarationType}} {|CS0260:Declaration|} + { + } } - } - """, + """, FixedCode = $$""" - partial {{declarationType}} Test - { - } - - partial {{declarationType}} Test - { - public partial {{declarationType}} Declaration + partial {{declarationType}} Test { } - - public partial {{declarationType}} Declaration + + partial {{declarationType}} Test { + public partial {{declarationType}} Declaration + { + } + + public partial {{declarationType}} Declaration + { + } } - } - """, + """, LanguageVersion = LanguageVersion.CSharp10 }.RunAsync(); } From bf6ae5d8e76ba9625a92a65c205349fa62cc57c8 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Sat, 12 Nov 2022 19:02:41 +0300 Subject: [PATCH 16/22] Remove comment --- .../MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs index 5353a3a42e4b6..44aba11b313ad 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs @@ -13,7 +13,6 @@ namespace Microsoft.CodeAnalysis.MakeDeclarationPartial { internal abstract class AbstractMakeDeclarationPartialCodeFixProvider : SyntaxEditorBasedCodeFixProvider { - // This code fix addresses a very specific compiler error. It's unlikely there will be more than 1 of them at a time. protected AbstractMakeDeclarationPartialCodeFixProvider() : base(supportsFixAll: false) { From 3c3a1e1a43b3f1bf0c7a6066d2ac7de84eeee992 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Sat, 3 Dec 2022 19:57:35 +0300 Subject: [PATCH 17/22] Fix all suitable declarations at once --- .../CodeFixes/CSharpCodeFixes.projitems | 2 +- ...MakeDeclarationsPartialCodeFixProvider.cs} | 12 ++-- .../Tests/CSharpAnalyzers.UnitTests.projitems | 2 +- .../MakeDeclarationsPartialTests.cs} | 9 ++- .../Core/CodeFixes/CodeFixes.projitems | 2 +- .../AbstractMakePartialCodeFixProvider.cs | 42 ------------- ...tMakeDeclarationsPartialCodeFixProvider.cs | 60 +++++++++++++++++++ .../PredefinedCodeFixProviderNames.cs | 2 +- ...MakeDeclarationsPartialCodeFixProvider.vb} | 12 ++-- .../CodeFixes/VisualBasicCodeFixes.projitems | 2 +- .../MakeDeclarationPartialTests.vb | 15 ++--- .../VisualBasicAnalyzers.UnitTests.projitems | 2 +- 12 files changed, 88 insertions(+), 74 deletions(-) rename src/Analyzers/CSharp/CodeFixes/{MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs => MakeDeclarationsPartial/CSharpMakeDeclarationsPartialCodeFixProvider.cs} (57%) rename src/Analyzers/CSharp/Tests/{MakeDeclarationPartial/MakeDeclarationPartialTests.cs => MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs} (97%) delete mode 100644 src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs create mode 100644 src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs rename src/Analyzers/VisualBasic/CodeFixes/{MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb => MakeDeclarationsPartial/VisualBasicMakeDeclarationsPartialCodeFixProvider.vb} (58%) rename src/Analyzers/VisualBasic/Tests/{MakeDeclarationPartial => MakeDeclarationsPartial}/MakeDeclarationPartialTests.vb (87%) diff --git a/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems b/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems index 8d91b36385a35..f80285827d25b 100644 --- a/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems +++ b/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems @@ -34,7 +34,7 @@ - + diff --git a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs b/src/Analyzers/CSharp/CodeFixes/MakeDeclarationsPartial/CSharpMakeDeclarationsPartialCodeFixProvider.cs similarity index 57% rename from src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs rename to src/Analyzers/CSharp/CodeFixes/MakeDeclarationsPartial/CSharpMakeDeclarationsPartialCodeFixProvider.cs index b921e52e1ae0b..2b5401a445b1b 100644 --- a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationPartial/CSharpMakeDeclarationPartialCodeFixProvider.cs +++ b/src/Analyzers/CSharp/CodeFixes/MakeDeclarationsPartial/CSharpMakeDeclarationsPartialCodeFixProvider.cs @@ -7,18 +7,18 @@ using System.Composition; using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.Host.Mef; -using Microsoft.CodeAnalysis.MakeDeclarationPartial; +using Microsoft.CodeAnalysis.MakeDeclarationsPartial; -namespace Microsoft.CodeAnalysis.CSharp.MakeDeclarationPartial +namespace Microsoft.CodeAnalysis.CSharp.MakeDeclarationsPartial { - [ExportCodeFixProvider(LanguageNames.CSharp, Name = PredefinedCodeFixProviderNames.MakeDeclarationPartial), Shared] - internal sealed class CSharpMakeDeclarationPartialCodeFixProvider : AbstractMakeDeclarationPartialCodeFixProvider + [ExportCodeFixProvider(LanguageNames.CSharp, Name = PredefinedCodeFixProviderNames.MakeDeclarationsPartial), Shared] + internal sealed class CSharpMakeDeclarationsPartialCodeFixProvider : AbstractMakeDeclarationsPartialCodeFixProvider { - private const string CS0260 = nameof(CS0260); + private const string CS0260 = nameof(CS0260); // Missing partial modifier on declaration of type 'C'; another partial declaration of this type exists [ImportingConstructor] [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] - public CSharpMakeDeclarationPartialCodeFixProvider() + public CSharpMakeDeclarationsPartialCodeFixProvider() { } diff --git a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems index 6427976315e7c..6604f4ed10163 100644 --- a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems +++ b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems @@ -24,7 +24,7 @@ - + diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs b/src/Analyzers/CSharp/Tests/MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs similarity index 97% rename from src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs rename to src/Analyzers/CSharp/Tests/MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs index 2535ad3d8f57c..5fd03ce48c569 100644 --- a/src/Analyzers/CSharp/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.cs +++ b/src/Analyzers/CSharp/Tests/MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs @@ -4,20 +4,20 @@ using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.CodeAnalysis.CSharp.MakeDeclarationPartial; +using Microsoft.CodeAnalysis.CSharp.MakeDeclarationsPartial; using Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions; using Microsoft.CodeAnalysis.Test.Utilities; using Microsoft.CodeAnalysis.Testing; using Xunit; -namespace Microsoft.CodeAnalysis.CSharp.CSharp.UnitTests.MakeDeclarationPartial +namespace Microsoft.CodeAnalysis.CSharp.CSharp.UnitTests.MakeDeclarationsPartial { using VerifyCS = CSharpCodeFixVerifier< EmptyDiagnosticAnalyzer, - CSharpMakeDeclarationPartialCodeFixProvider>; + CSharpMakeDeclarationsPartialCodeFixProvider>; [Trait(Traits.Feature, Traits.Features.CodeActionsMakeDeclarationPartial)] - public sealed class MakeDeclarationPartialTests + public sealed class MakeDeclarationsPartialTests { public static IEnumerable AllValidDeclarationTypes() { @@ -265,7 +265,6 @@ public partial {{declarationType}} Declaration [MemberData(nameof(AllValidDeclarationTypes))] public async Task NestedType2(string declarationType) { - // Note: fixes here are executed sequentially, this is not the same as fix-all await new VerifyCS.Test { TestCode = $$""" diff --git a/src/Analyzers/Core/CodeFixes/CodeFixes.projitems b/src/Analyzers/Core/CodeFixes/CodeFixes.projitems index 28df5b14ed2b2..78bde65084280 100644 --- a/src/Analyzers/Core/CodeFixes/CodeFixes.projitems +++ b/src/Analyzers/Core/CodeFixes/CodeFixes.projitems @@ -31,7 +31,7 @@ - + diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs deleted file mode 100644 index 44aba11b313ad..0000000000000 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationPartial/AbstractMakePartialCodeFixProvider.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Collections.Immutable; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.CodeAnalysis.CodeActions; -using Microsoft.CodeAnalysis.CodeFixes; -using Microsoft.CodeAnalysis.Editing; - -namespace Microsoft.CodeAnalysis.MakeDeclarationPartial -{ - internal abstract class AbstractMakeDeclarationPartialCodeFixProvider : SyntaxEditorBasedCodeFixProvider - { - protected AbstractMakeDeclarationPartialCodeFixProvider() - : base(supportsFixAll: false) - { - } - - public override Task RegisterCodeFixesAsync(CodeFixContext context) - { - RegisterCodeFix(context, CodeFixesResources.Make_partial, nameof(CodeFixesResources.Make_partial)); - return Task.CompletedTask; - } - - protected override Task FixAllAsync(Document document, ImmutableArray diagnostics, SyntaxEditor editor, CodeActionOptionsProvider fallbackOptions, CancellationToken cancellationToken) - { - var syntaxRoot = editor.OriginalRoot; - var generator = editor.Generator; - - foreach (var diagnostic in diagnostics) - { - var declaration = syntaxRoot.FindNode(diagnostic.Location.SourceSpan); - var fixedModifiers = generator.GetModifiers(declaration).WithPartial(true); - editor.ReplaceNode(declaration, generator.WithModifiers(declaration, fixedModifiers)); - } - - return Task.CompletedTask; - } - } -} diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs new file mode 100644 index 0000000000000..13be5db930c6b --- /dev/null +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs @@ -0,0 +1,60 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Immutable; +using System.Diagnostics; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.CodeActions; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.Editing; +using Microsoft.CodeAnalysis.Shared.Extensions; + +namespace Microsoft.CodeAnalysis.MakeDeclarationsPartial +{ + internal abstract class AbstractMakeDeclarationsPartialCodeFixProvider : SyntaxEditorBasedCodeFixProvider + { + protected AbstractMakeDeclarationsPartialCodeFixProvider() + : base(supportsFixAll: false) + { + } + + public override Task RegisterCodeFixesAsync(CodeFixContext context) + { + RegisterCodeFix(context, CodeFixesResources.Make_partial, nameof(CodeFixesResources.Make_partial)); + return Task.CompletedTask; + } + + protected override async Task FixAllAsync(Document document, ImmutableArray diagnostics, SyntaxEditor editor, CodeActionOptionsProvider fallbackOptions, CancellationToken cancellationToken) + { + var syntaxRoot = editor.OriginalRoot; + var generator = editor.Generator; + var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); + + foreach (var diagnostic in diagnostics) + { + var declaration = syntaxRoot.FindNode(diagnostic.Location.SourceSpan); + var symbol = semanticModel.GetDeclaredSymbol(declaration, cancellationToken); + + if (symbol is null) + { + Debug.Fail("Declared symbol must never be null here"); + continue; + } + + foreach (var reference in symbol.DeclaringSyntaxReferences) + { + var node = await reference.GetSyntaxAsync(cancellationToken).ConfigureAwait(false); + var modifiers = generator.GetModifiers(node); + + if (!modifiers.IsPartial) + { + var fixedModifiers = modifiers.WithPartial(true); + editor.ReplaceNode(node, generator.WithModifiers(node, fixedModifiers)); + } + } + } + } + } +} diff --git a/src/Analyzers/Core/CodeFixes/PredefinedCodeFixProviderNames.cs b/src/Analyzers/Core/CodeFixes/PredefinedCodeFixProviderNames.cs index 4544e65edaa3a..238767e9b1b8b 100644 --- a/src/Analyzers/Core/CodeFixes/PredefinedCodeFixProviderNames.cs +++ b/src/Analyzers/Core/CodeFixes/PredefinedCodeFixProviderNames.cs @@ -70,7 +70,7 @@ internal static class PredefinedCodeFixProviderNames public const string InlineDeclaration = nameof(InlineDeclaration); public const string InvokeDelegateWithConditionalAccess = nameof(InvokeDelegateWithConditionalAccess); public const string JsonDetection = nameof(JsonDetection); - public const string MakeDeclarationPartial = nameof(MakeDeclarationPartial); + public const string MakeDeclarationsPartial = nameof(MakeDeclarationsPartial); public const string MakeFieldReadonly = nameof(MakeFieldReadonly); public const string MakeLocalFunctionStatic = nameof(MakeLocalFunctionStatic); public const string MakeMemberStatic = nameof(MakeMemberStatic); diff --git a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationsPartial/VisualBasicMakeDeclarationsPartialCodeFixProvider.vb similarity index 58% rename from src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb rename to src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationsPartial/VisualBasicMakeDeclarationsPartialCodeFixProvider.vb index af2d92fe27837..cb6aea4ebc35d 100644 --- a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationPartial/VisualBasicMakeDeclarationPartialCodeFixProvider.vb +++ b/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationsPartial/VisualBasicMakeDeclarationsPartialCodeFixProvider.vb @@ -6,14 +6,14 @@ Imports System.Collections.Immutable Imports System.Composition Imports Microsoft.CodeAnalysis.CodeFixes Imports Microsoft.CodeAnalysis.Host.Mef -Imports Microsoft.CodeAnalysis.MakeDeclarationPartial +Imports Microsoft.CodeAnalysis.MakeDeclarationsPartial -Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial - - Friend Class VisualBasicMakeDeclarationPartialCodeFixProvider - Inherits AbstractMakeDeclarationPartialCodeFixProvider +Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationsPartial + + Friend Class VisualBasicMakeDeclarationsPartialCodeFixProvider + Inherits AbstractMakeDeclarationsPartialCodeFixProvider - Private Const BC40046 As String = NameOf(BC40046) + Private Const BC40046 As String = NameOf(BC40046) ' Type 'D' and partial type 'D' conflict in container 'C', but are being merged because one of them is declared partial diff --git a/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems b/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems index e4dfba46e689f..970f896d13712 100644 --- a/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems +++ b/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems @@ -24,7 +24,7 @@ - + diff --git a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb b/src/Analyzers/VisualBasic/Tests/MakeDeclarationsPartial/MakeDeclarationPartialTests.vb similarity index 87% rename from src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb rename to src/Analyzers/VisualBasic/Tests/MakeDeclarationsPartial/MakeDeclarationPartialTests.vb index 71efdbdcea2c8..85561160ad071 100644 --- a/src/Analyzers/VisualBasic/Tests/MakeDeclarationPartial/MakeDeclarationPartialTests.vb +++ b/src/Analyzers/VisualBasic/Tests/MakeDeclarationsPartial/MakeDeclarationPartialTests.vb @@ -2,16 +2,13 @@ ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. -Imports Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions -Imports Microsoft.CodeAnalysis.Testing -Imports Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial Imports VerifyVB = Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions.VisualBasicCodeFixVerifier(Of Microsoft.CodeAnalysis.Testing.EmptyDiagnosticAnalyzer, - Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationPartial.VisualBasicMakeDeclarationPartialCodeFixProvider) + Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationsPartial.VisualBasicMakeDeclarationsPartialCodeFixProvider) Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.MakeDeclarationPartial - Public Class MakeDeclarationPartialTests + Public Class MakeDeclarationsPartialTests Public Async Function OutsideNamespace() As Task Dim document = " @@ -31,7 +28,7 @@ End Class Partial Class Declaration End Class -Class {|BC40046:Declaration|} +Partial Class Declaration End Class" Dim test = New VerifyVB.Test With { @@ -64,7 +61,7 @@ Namespace TestNamespace Partial Class Declaration End Class - Class {|BC40046:Declaration|} + Partial Class Declaration End Class End Namespace" @@ -106,7 +103,7 @@ Namespace TestNamespace End Namespace Namespace TestNamespace - Class {|BC40046:Declaration|} + Partial Class Declaration End Class End Namespace" @@ -137,7 +134,7 @@ End Class Partial Public Class Declaration End Class -Public Class {|BC40046:Declaration|} +Partial Public Class Declaration End Class" Dim test = New VerifyVB.Test With { diff --git a/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems b/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems index 226ea5391d766..539e994317e3e 100644 --- a/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems +++ b/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems @@ -19,7 +19,7 @@ - + From e31b8276b98eb786270cd9c1881ec9af1b05e2cc Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Sat, 3 Dec 2022 20:21:38 +0300 Subject: [PATCH 18/22] Change title --- .../Core/CodeFixes/CodeFixesResources.resx | 4 ++-- ...tMakeDeclarationsPartialCodeFixProvider.cs | 24 ++++++++++++++++--- .../CodeFixes/xlf/CodeFixesResources.cs.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.de.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.es.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.fr.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.it.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.ja.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.ko.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.pl.xlf | 10 ++++---- .../xlf/CodeFixesResources.pt-BR.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.ru.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.tr.xlf | 10 ++++---- .../xlf/CodeFixesResources.zh-Hans.xlf | 10 ++++---- .../xlf/CodeFixesResources.zh-Hant.xlf | 10 ++++---- 15 files changed, 88 insertions(+), 70 deletions(-) diff --git a/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx b/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx index f3003fb2995b3..42d80d177dcd6 100644 --- a/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx +++ b/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx @@ -168,7 +168,7 @@ Convert type to '{0}' - - Make partial + + Make all suitable declarations of '{0}' partial \ No newline at end of file diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs index 13be5db930c6b..8e702612c1e92 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs @@ -9,6 +9,7 @@ using Microsoft.CodeAnalysis.CodeActions; using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.Editing; +using Microsoft.CodeAnalysis.LanguageService; using Microsoft.CodeAnalysis.Shared.Extensions; namespace Microsoft.CodeAnalysis.MakeDeclarationsPartial @@ -20,10 +21,27 @@ protected AbstractMakeDeclarationsPartialCodeFixProvider() { } - public override Task RegisterCodeFixesAsync(CodeFixContext context) + public override async Task RegisterCodeFixesAsync(CodeFixContext context) { - RegisterCodeFix(context, CodeFixesResources.Make_partial, nameof(CodeFixesResources.Make_partial)); - return Task.CompletedTask; + var document = context.Document; + var span = context.Span; + var cancellationToken = context.CancellationToken; + + var syntaxFacts = document.GetRequiredLanguageService(); + var syntaxRoot = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + + var node = syntaxRoot.FindNode(span); + + if (node is null || + !syntaxFacts.IsTypeDeclaration(node)) + { + Debug.Fail("Cannot find node or node is not type declaration syntax"); + return; + } + + var declarationName = syntaxFacts.GetIdentifierOfTypeDeclaration(node).ValueText; + var title = string.Format(CodeFixesResources.Make_all_suitable_declarations_of_0_partial, declarationName); + RegisterCodeFix(context, title, title); } protected override async Task FixAllAsync(Document document, ImmutableArray diagnostics, SyntaxEditor editor, CodeActionOptionsProvider fallbackOptions, CancellationToken cancellationToken) diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf index 899129b687bb6..4fb2c85acd60e 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' Nastavit třídu jako abstract @@ -57,11 +62,6 @@ Nastavit jako statickou - - Make partial - Make partial - - Remove extra blank lines Odebrat nadbytečné prázdné řádky diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf index 2536486473499..08f95a85af581 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' Klasse als "abstract" festlegen @@ -57,11 +62,6 @@ Als statisch festlegen - - Make partial - Make partial - - Remove extra blank lines Zusätzliche Leerzeilen entfernen diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf index ecb2fbbceca3a..3db196cb827aa 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' Convertir la clase en "abstract" @@ -57,11 +62,6 @@ Hacer estático - - Make partial - Make partial - - Remove extra blank lines Quitar líneas en blanco adicionales diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf index ace456c4a65f5..1b46169335e35 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' Rendre la classe 'abstract' @@ -57,11 +62,6 @@ Rendre statique - - Make partial - Make partial - - Remove extra blank lines Supprimer les lignes vides supplémentaires diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf index 77eab9b1f1af9..c15ff8e61424f 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' Rendi la classe 'abstract' @@ -57,11 +62,6 @@ Imposta come statici - - Make partial - Make partial - - Remove extra blank lines Rimuovere le righe vuote aggiuntive diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf index 79b8cdd63c799..da81645db4bee 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' クラスを 'abstract' にしてください @@ -57,11 +62,6 @@ 静的にする - - Make partial - Make partial - - Remove extra blank lines 余分な空白行を削除する diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf index ce7fda053b5fb..851f4a94cda32 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' 'abstract' 클래스 만들기 @@ -57,11 +62,6 @@ 정적으로 만들기 - - Make partial - Make partial - - Remove extra blank lines 여분의 빈 줄 제거 diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf index e21607a54350b..7a4b2fb4b8574 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' Ustaw specyfikator „abstract” dla klasy @@ -57,11 +62,6 @@ Ustaw jako statyczne - - Make partial - Make partial - - Remove extra blank lines Usuń dodatkowe puste wiersze diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf index 4b9dfb51c1fa0..b9822bee93de3 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' Tornar a classe 'abstract' @@ -57,11 +62,6 @@ Tornar estático - - Make partial - Make partial - - Remove extra blank lines Remover as linhas em branco extras diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf index f5947f7a19f96..24cafe9dee08a 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' Сделать класс абстрактным @@ -57,11 +62,6 @@ Сделать статическим - - Make partial - Make partial - - Remove extra blank lines Удалите лишние пустые строки diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf index e6eac7c16b2a0..84769b1b39b64 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' Sınıfı 'abstract' yap @@ -57,11 +62,6 @@ Statik yap - - Make partial - Make partial - - Remove extra blank lines Fazladan boş satırları kaldır diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf index 2fee21be782dd..866f4762ec7b0 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' 将类设置为 "abstract" @@ -57,11 +62,6 @@ 设为静态 - - Make partial - Make partial - - Remove extra blank lines 删除多余的空白行 diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf index 5f0c81dbc3ef5..939e0a34fc514 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf @@ -47,6 +47,11 @@ Fix name violation: {0} + + Make all suitable declarations of '{0}' partial + Make all suitable declarations of '{0}' partial + + Make class 'abstract' 將類別設為 'abstract' @@ -57,11 +62,6 @@ 使其變成靜態 - - Make partial - Make partial - - Remove extra blank lines 移除額外的空白行 From c1b9514308641de45d83fce2e4bffa48ef9e755a Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Sat, 3 Dec 2022 20:37:27 +0300 Subject: [PATCH 19/22] Add test to verify sigle fix invocation behaviour --- .../MakeDeclarationsPartialTests.cs | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs b/src/Analyzers/CSharp/Tests/MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs index 5fd03ce48c569..0ca32d7527976 100644 --- a/src/Analyzers/CSharp/Tests/MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs +++ b/src/Analyzers/CSharp/Tests/MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs @@ -303,6 +303,56 @@ public partial {{declarationType}} Declaration }.RunAsync(); } + [Theory] + [MemberData(nameof(AllValidDeclarationTypes))] + public async Task FixOne(string declarationType) + { + var testCode = $$""" + partial {{declarationType}} Test + { + } + + {{declarationType}} {|CS0260:Test|} + { + } + + {{declarationType}} {|CS0260:Test|} + { + } + """; + var fixedCode = $$""" + partial {{declarationType}} Test + { + } + + partial {{declarationType}} Test + { + } + + partial {{declarationType}} Test + { + } + """; + + await new VerifyCS.Test + { + TestCode = testCode, + FixedCode = fixedCode, + LanguageVersion = LanguageVersion.CSharp10, + CodeFixTestBehaviors = CodeFixTestBehaviors.FixOne, + DiagnosticSelector = d => d[0] + }.RunAsync(); + + await new VerifyCS.Test + { + TestCode = testCode, + FixedCode = fixedCode, + LanguageVersion = LanguageVersion.CSharp10, + CodeFixTestBehaviors = CodeFixTestBehaviors.FixOne, + DiagnosticSelector = d => d[1] + }.RunAsync(); + } + [Theory] [MemberData(nameof(AllValidDeclarationTypes))] public async Task NotInDifferentNamespaces(string declarationType) From 4f7f9ff2bacc07398801a86c58a6c7c49eaf0431 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Sat, 3 Dec 2022 23:33:52 +0300 Subject: [PATCH 20/22] Fix VB --- .../AbstractMakeDeclarationsPartialCodeFixProvider.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs index 8e702612c1e92..aac4146c4b1ea 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs @@ -32,10 +32,9 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context) var node = syntaxRoot.FindNode(span); - if (node is null || - !syntaxFacts.IsTypeDeclaration(node)) + if (node is null) { - Debug.Fail("Cannot find node or node is not type declaration syntax"); + Debug.Fail("Cannot find node"); return; } From 16ee66b436c69af8b73b679fc84467a4b6eeeb82 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Sun, 4 Dec 2022 19:47:40 +0300 Subject: [PATCH 21/22] Rename title to "Make type partial" --- .../Core/CodeFixes/CodeFixesResources.resx | 4 ++-- ...tMakeDeclarationsPartialCodeFixProvider.cs | 23 +++---------------- .../CodeFixes/xlf/CodeFixesResources.cs.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.de.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.es.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.fr.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.it.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.ja.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.ko.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.pl.xlf | 10 ++++---- .../xlf/CodeFixesResources.pt-BR.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.ru.xlf | 10 ++++---- .../CodeFixes/xlf/CodeFixesResources.tr.xlf | 10 ++++---- .../xlf/CodeFixesResources.zh-Hans.xlf | 10 ++++---- .../xlf/CodeFixesResources.zh-Hant.xlf | 10 ++++---- 15 files changed, 70 insertions(+), 87 deletions(-) diff --git a/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx b/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx index 42d80d177dcd6..8bd4f1985f234 100644 --- a/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx +++ b/src/Analyzers/Core/CodeFixes/CodeFixesResources.resx @@ -168,7 +168,7 @@ Convert type to '{0}' - - Make all suitable declarations of '{0}' partial + + Make type partial \ No newline at end of file diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs index aac4146c4b1ea..6d625496c1b76 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs @@ -9,7 +9,6 @@ using Microsoft.CodeAnalysis.CodeActions; using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.Editing; -using Microsoft.CodeAnalysis.LanguageService; using Microsoft.CodeAnalysis.Shared.Extensions; namespace Microsoft.CodeAnalysis.MakeDeclarationsPartial @@ -21,26 +20,10 @@ protected AbstractMakeDeclarationsPartialCodeFixProvider() { } - public override async Task RegisterCodeFixesAsync(CodeFixContext context) + public override Task RegisterCodeFixesAsync(CodeFixContext context) { - var document = context.Document; - var span = context.Span; - var cancellationToken = context.CancellationToken; - - var syntaxFacts = document.GetRequiredLanguageService(); - var syntaxRoot = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); - - var node = syntaxRoot.FindNode(span); - - if (node is null) - { - Debug.Fail("Cannot find node"); - return; - } - - var declarationName = syntaxFacts.GetIdentifierOfTypeDeclaration(node).ValueText; - var title = string.Format(CodeFixesResources.Make_all_suitable_declarations_of_0_partial, declarationName); - RegisterCodeFix(context, title, title); + RegisterCodeFix(context, CodeFixesResources.Make_type_partial, nameof(CodeFixesResources.Make_type_partial)); + return Task.CompletedTask; } protected override async Task FixAllAsync(Document document, ImmutableArray diagnostics, SyntaxEditor editor, CodeActionOptionsProvider fallbackOptions, CancellationToken cancellationToken) diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf index 4fb2c85acd60e..90f73c88d65f9 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.cs.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' Nastavit třídu jako abstract @@ -62,6 +57,11 @@ Nastavit jako statickou + + Make type partial + Make type partial + + Remove extra blank lines Odebrat nadbytečné prázdné řádky diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf index 08f95a85af581..5d8e913806f8a 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.de.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' Klasse als "abstract" festlegen @@ -62,6 +57,11 @@ Als statisch festlegen + + Make type partial + Make type partial + + Remove extra blank lines Zusätzliche Leerzeilen entfernen diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf index 3db196cb827aa..a92c942f03a1e 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.es.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' Convertir la clase en "abstract" @@ -62,6 +57,11 @@ Hacer estático + + Make type partial + Make type partial + + Remove extra blank lines Quitar líneas en blanco adicionales diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf index 1b46169335e35..70c9763d69293 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.fr.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' Rendre la classe 'abstract' @@ -62,6 +57,11 @@ Rendre statique + + Make type partial + Make type partial + + Remove extra blank lines Supprimer les lignes vides supplémentaires diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf index c15ff8e61424f..967bdb027dd14 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.it.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' Rendi la classe 'abstract' @@ -62,6 +57,11 @@ Imposta come statici + + Make type partial + Make type partial + + Remove extra blank lines Rimuovere le righe vuote aggiuntive diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf index da81645db4bee..94765e1963512 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ja.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' クラスを 'abstract' にしてください @@ -62,6 +57,11 @@ 静的にする + + Make type partial + Make type partial + + Remove extra blank lines 余分な空白行を削除する diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf index 851f4a94cda32..7b1b9ec09a40d 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ko.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' 'abstract' 클래스 만들기 @@ -62,6 +57,11 @@ 정적으로 만들기 + + Make type partial + Make type partial + + Remove extra blank lines 여분의 빈 줄 제거 diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf index 7a4b2fb4b8574..d8f64da86acb1 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pl.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' Ustaw specyfikator „abstract” dla klasy @@ -62,6 +57,11 @@ Ustaw jako statyczne + + Make type partial + Make type partial + + Remove extra blank lines Usuń dodatkowe puste wiersze diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf index b9822bee93de3..c976e8184664a 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.pt-BR.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' Tornar a classe 'abstract' @@ -62,6 +57,11 @@ Tornar estático + + Make type partial + Make type partial + + Remove extra blank lines Remover as linhas em branco extras diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf index 24cafe9dee08a..1fb80684aa821 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.ru.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' Сделать класс абстрактным @@ -62,6 +57,11 @@ Сделать статическим + + Make type partial + Make type partial + + Remove extra blank lines Удалите лишние пустые строки diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf index 84769b1b39b64..45a63b7e593cb 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.tr.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' Sınıfı 'abstract' yap @@ -62,6 +57,11 @@ Statik yap + + Make type partial + Make type partial + + Remove extra blank lines Fazladan boş satırları kaldır diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf index 866f4762ec7b0..0fa090a5fa3d0 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hans.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' 将类设置为 "abstract" @@ -62,6 +57,11 @@ 设为静态 + + Make type partial + Make type partial + + Remove extra blank lines 删除多余的空白行 diff --git a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf index 939e0a34fc514..88d03df6b3341 100644 --- a/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf +++ b/src/Analyzers/Core/CodeFixes/xlf/CodeFixesResources.zh-Hant.xlf @@ -47,11 +47,6 @@ Fix name violation: {0} - - Make all suitable declarations of '{0}' partial - Make all suitable declarations of '{0}' partial - - Make class 'abstract' 將類別設為 'abstract' @@ -62,6 +57,11 @@ 使其變成靜態 + + Make type partial + Make type partial + + Remove extra blank lines 移除額外的空白行 From 1b0e11dfe96a8d863463cb2d041e5ca6e0918066 Mon Sep 17 00:00:00 2001 From: DoctorKrolic Date: Sun, 4 Dec 2022 20:19:40 +0300 Subject: [PATCH 22/22] Rename codefix to "MakeTypePartial" --- .../CSharp/CodeFixes/CSharpCodeFixes.projitems | 2 +- .../CSharpMakeTypePartialCodeFixProvider.cs} | 8 ++++---- .../CSharp/Tests/CSharpAnalyzers.UnitTests.projitems | 2 +- .../MakeTypePartialTests.cs} | 10 +++++----- src/Analyzers/Core/CodeFixes/CodeFixes.projitems | 2 +- .../AbstractMakeTypePartialCodeFixProvider.cs} | 6 +++--- .../VisualBasicMakeTypePartialCodeFixProvider.vb} | 8 ++++---- .../CodeFixes/VisualBasicCodeFixes.projitems | 2 +- .../MakeTypePartialTests.vb} | 8 ++++---- .../Tests/VisualBasicAnalyzers.UnitTests.projitems | 2 +- src/Compilers/Test/Core/Traits/Traits.cs | 2 +- 11 files changed, 26 insertions(+), 26 deletions(-) rename src/Analyzers/CSharp/CodeFixes/{MakeDeclarationsPartial/CSharpMakeDeclarationsPartialCodeFixProvider.cs => MakeTypePartial/CSharpMakeTypePartialCodeFixProvider.cs} (75%) rename src/Analyzers/CSharp/Tests/{MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs => MakeTypePartial/MakeTypePartialTests.cs} (97%) rename src/Analyzers/Core/CodeFixes/{MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs => MakeTypePartial/AbstractMakeTypePartialCodeFixProvider.cs} (90%) rename src/Analyzers/VisualBasic/CodeFixes/{MakeDeclarationsPartial/VisualBasicMakeDeclarationsPartialCodeFixProvider.vb => MakeTypePartial/VisualBasicMakeTypePartialCodeFixProvider.vb} (78%) rename src/Analyzers/VisualBasic/Tests/{MakeDeclarationsPartial/MakeDeclarationPartialTests.vb => MakeTypePartial/MakeTypePartialTests.vb} (92%) diff --git a/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems b/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems index f80285827d25b..9c152c075fc81 100644 --- a/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems +++ b/src/Analyzers/CSharp/CodeFixes/CSharpCodeFixes.projitems @@ -34,11 +34,11 @@ - + diff --git a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationsPartial/CSharpMakeDeclarationsPartialCodeFixProvider.cs b/src/Analyzers/CSharp/CodeFixes/MakeTypePartial/CSharpMakeTypePartialCodeFixProvider.cs similarity index 75% rename from src/Analyzers/CSharp/CodeFixes/MakeDeclarationsPartial/CSharpMakeDeclarationsPartialCodeFixProvider.cs rename to src/Analyzers/CSharp/CodeFixes/MakeTypePartial/CSharpMakeTypePartialCodeFixProvider.cs index 2b5401a445b1b..2d384392853df 100644 --- a/src/Analyzers/CSharp/CodeFixes/MakeDeclarationsPartial/CSharpMakeDeclarationsPartialCodeFixProvider.cs +++ b/src/Analyzers/CSharp/CodeFixes/MakeTypePartial/CSharpMakeTypePartialCodeFixProvider.cs @@ -7,18 +7,18 @@ using System.Composition; using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.Host.Mef; -using Microsoft.CodeAnalysis.MakeDeclarationsPartial; +using Microsoft.CodeAnalysis.MakeTypePartial; -namespace Microsoft.CodeAnalysis.CSharp.MakeDeclarationsPartial +namespace Microsoft.CodeAnalysis.CSharp.MakeTypePartial { [ExportCodeFixProvider(LanguageNames.CSharp, Name = PredefinedCodeFixProviderNames.MakeDeclarationsPartial), Shared] - internal sealed class CSharpMakeDeclarationsPartialCodeFixProvider : AbstractMakeDeclarationsPartialCodeFixProvider + internal sealed class CSharpMakeTypePartialCodeFixProvider : AbstractMakeTypePartialCodeFixProvider { private const string CS0260 = nameof(CS0260); // Missing partial modifier on declaration of type 'C'; another partial declaration of this type exists [ImportingConstructor] [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] - public CSharpMakeDeclarationsPartialCodeFixProvider() + public CSharpMakeTypePartialCodeFixProvider() { } diff --git a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems index 6604f4ed10163..5821b52501340 100644 --- a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems +++ b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems @@ -24,10 +24,10 @@ - + diff --git a/src/Analyzers/CSharp/Tests/MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs b/src/Analyzers/CSharp/Tests/MakeTypePartial/MakeTypePartialTests.cs similarity index 97% rename from src/Analyzers/CSharp/Tests/MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs rename to src/Analyzers/CSharp/Tests/MakeTypePartial/MakeTypePartialTests.cs index 0ca32d7527976..58630d202ae2e 100644 --- a/src/Analyzers/CSharp/Tests/MakeDeclarationsPartial/MakeDeclarationsPartialTests.cs +++ b/src/Analyzers/CSharp/Tests/MakeTypePartial/MakeTypePartialTests.cs @@ -4,20 +4,20 @@ using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.CodeAnalysis.CSharp.MakeDeclarationsPartial; +using Microsoft.CodeAnalysis.CSharp.MakeTypePartial; using Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions; using Microsoft.CodeAnalysis.Test.Utilities; using Microsoft.CodeAnalysis.Testing; using Xunit; -namespace Microsoft.CodeAnalysis.CSharp.CSharp.UnitTests.MakeDeclarationsPartial +namespace Microsoft.CodeAnalysis.CSharp.CSharp.UnitTests.MakeTypePartial { using VerifyCS = CSharpCodeFixVerifier< EmptyDiagnosticAnalyzer, - CSharpMakeDeclarationsPartialCodeFixProvider>; + CSharpMakeTypePartialCodeFixProvider>; - [Trait(Traits.Feature, Traits.Features.CodeActionsMakeDeclarationPartial)] - public sealed class MakeDeclarationsPartialTests + [Trait(Traits.Feature, Traits.Features.CodeActionsMakeTypePartial)] + public sealed class MakeTypePartialTests { public static IEnumerable AllValidDeclarationTypes() { diff --git a/src/Analyzers/Core/CodeFixes/CodeFixes.projitems b/src/Analyzers/Core/CodeFixes/CodeFixes.projitems index 78bde65084280..693798f7bff51 100644 --- a/src/Analyzers/Core/CodeFixes/CodeFixes.projitems +++ b/src/Analyzers/Core/CodeFixes/CodeFixes.projitems @@ -31,8 +31,8 @@ - + diff --git a/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs b/src/Analyzers/Core/CodeFixes/MakeTypePartial/AbstractMakeTypePartialCodeFixProvider.cs similarity index 90% rename from src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs rename to src/Analyzers/Core/CodeFixes/MakeTypePartial/AbstractMakeTypePartialCodeFixProvider.cs index 6d625496c1b76..2956cdcd4f1a5 100644 --- a/src/Analyzers/Core/CodeFixes/MakeDeclarationsPartial/AbstractMakeDeclarationsPartialCodeFixProvider.cs +++ b/src/Analyzers/Core/CodeFixes/MakeTypePartial/AbstractMakeTypePartialCodeFixProvider.cs @@ -11,11 +11,11 @@ using Microsoft.CodeAnalysis.Editing; using Microsoft.CodeAnalysis.Shared.Extensions; -namespace Microsoft.CodeAnalysis.MakeDeclarationsPartial +namespace Microsoft.CodeAnalysis.MakeTypePartial { - internal abstract class AbstractMakeDeclarationsPartialCodeFixProvider : SyntaxEditorBasedCodeFixProvider + internal abstract class AbstractMakeTypePartialCodeFixProvider : SyntaxEditorBasedCodeFixProvider { - protected AbstractMakeDeclarationsPartialCodeFixProvider() + protected AbstractMakeTypePartialCodeFixProvider() : base(supportsFixAll: false) { } diff --git a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationsPartial/VisualBasicMakeDeclarationsPartialCodeFixProvider.vb b/src/Analyzers/VisualBasic/CodeFixes/MakeTypePartial/VisualBasicMakeTypePartialCodeFixProvider.vb similarity index 78% rename from src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationsPartial/VisualBasicMakeDeclarationsPartialCodeFixProvider.vb rename to src/Analyzers/VisualBasic/CodeFixes/MakeTypePartial/VisualBasicMakeTypePartialCodeFixProvider.vb index cb6aea4ebc35d..da71c3444504f 100644 --- a/src/Analyzers/VisualBasic/CodeFixes/MakeDeclarationsPartial/VisualBasicMakeDeclarationsPartialCodeFixProvider.vb +++ b/src/Analyzers/VisualBasic/CodeFixes/MakeTypePartial/VisualBasicMakeTypePartialCodeFixProvider.vb @@ -6,12 +6,12 @@ Imports System.Collections.Immutable Imports System.Composition Imports Microsoft.CodeAnalysis.CodeFixes Imports Microsoft.CodeAnalysis.Host.Mef -Imports Microsoft.CodeAnalysis.MakeDeclarationsPartial +Imports Microsoft.CodeAnalysis.MakeTypePartial -Namespace Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationsPartial +Namespace Microsoft.CodeAnalysis.VisualBasic.MakeTypePartial - Friend Class VisualBasicMakeDeclarationsPartialCodeFixProvider - Inherits AbstractMakeDeclarationsPartialCodeFixProvider + Friend Class VisualBasicMakeTypePartialCodeFixProvider + Inherits AbstractMakeTypePartialCodeFixProvider Private Const BC40046 As String = NameOf(BC40046) ' Type 'D' and partial type 'D' conflict in container 'C', but are being merged because one of them is declared partial diff --git a/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems b/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems index 970f896d13712..897b802d298f7 100644 --- a/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems +++ b/src/Analyzers/VisualBasic/CodeFixes/VisualBasicCodeFixes.projitems @@ -24,9 +24,9 @@ - + diff --git a/src/Analyzers/VisualBasic/Tests/MakeDeclarationsPartial/MakeDeclarationPartialTests.vb b/src/Analyzers/VisualBasic/Tests/MakeTypePartial/MakeTypePartialTests.vb similarity index 92% rename from src/Analyzers/VisualBasic/Tests/MakeDeclarationsPartial/MakeDeclarationPartialTests.vb rename to src/Analyzers/VisualBasic/Tests/MakeTypePartial/MakeTypePartialTests.vb index 85561160ad071..e3749cc7a0840 100644 --- a/src/Analyzers/VisualBasic/Tests/MakeDeclarationsPartial/MakeDeclarationPartialTests.vb +++ b/src/Analyzers/VisualBasic/Tests/MakeTypePartial/MakeTypePartialTests.vb @@ -4,11 +4,11 @@ Imports VerifyVB = Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions.VisualBasicCodeFixVerifier(Of Microsoft.CodeAnalysis.Testing.EmptyDiagnosticAnalyzer, - Microsoft.CodeAnalysis.VisualBasic.MakeDeclarationsPartial.VisualBasicMakeDeclarationsPartialCodeFixProvider) + Microsoft.CodeAnalysis.VisualBasic.MakeTypePartial.VisualBasicMakeTypePartialCodeFixProvider) -Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.MakeDeclarationPartial - - Public Class MakeDeclarationsPartialTests +Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.MakeTypePartial + + Public Class MakeTypePartialTests Public Async Function OutsideNamespace() As Task Dim document = " diff --git a/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems b/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems index 539e994317e3e..3789ccda803bb 100644 --- a/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems +++ b/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems @@ -19,8 +19,8 @@ - + diff --git a/src/Compilers/Test/Core/Traits/Traits.cs b/src/Compilers/Test/Core/Traits/Traits.cs index 3a6cb984bb15a..14588d0a28786 100644 --- a/src/Compilers/Test/Core/Traits/Traits.cs +++ b/src/Compilers/Test/Core/Traits/Traits.cs @@ -122,7 +122,7 @@ public static class Features public const string CodeActionsInvertLogical = "CodeActions.InvertLogical"; public const string CodeActionsInvokeDelegateWithConditionalAccess = "CodeActions.InvokeDelegateWithConditionalAccess"; public const string CodeActionsRemoveUnnecessaryLambdaExpression = "CodeActions.RemoveUnnecessaryLambdaExpression"; - public const string CodeActionsMakeDeclarationPartial = "CodeActions.MakeDeclarationPartial"; + public const string CodeActionsMakeTypePartial = "CodeActions.MakeTypePartial"; public const string CodeActionsMakeFieldReadonly = "CodeActions.MakeFieldReadonly"; public const string CodeActionsMakeLocalFunctionStatic = "CodeActions.MakeLocalFunctionStatic"; public const string CodeActionsMakeMethodAsynchronous = "CodeActions.MakeMethodAsynchronous";