Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[automated] Merge branch 'main' => 'release/dev18.0' #77226

Merged
merged 94 commits into from
Feb 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
d7b8c24
Allow more of Razor to use Roslyn Lsp types
davidwengier Jul 30, 2024
0f0ae05
Add missing Lsp types/properties/defaults
davidwengier Jul 30, 2024
4852886
Fix some typos
davidwengier Jul 30, 2024
8493177
Cache based on project state not project.
CyrusNajmabadi Feb 10, 2025
80ac906
Cache based on project state not project.
CyrusNajmabadi Feb 10, 2025
84d19cb
Merge remote-tracking branch 'upstream/main' into diagProjectState
CyrusNajmabadi Feb 10, 2025
ebff826
Merge remote-tracking branch 'upstream/main' into diagProjectState
CyrusNajmabadi Feb 10, 2025
494c5e0
Update docs
CyrusNajmabadi Feb 10, 2025
8d93475
PR feedback
CyrusNajmabadi Feb 10, 2025
a070add
fix remote side
CyrusNajmabadi Feb 10, 2025
2fcadee
Merge remote-tracking branch 'upstream/main' into diagProjectState
CyrusNajmabadi Feb 11, 2025
c53e1e0
Multi-target LSP tests to run against .NET9
dibarbet Feb 12, 2025
c3fc118
cleanup warnings in pull diags tests
dibarbet Feb 12, 2025
9cfab2d
cleanup more warnings
dibarbet Feb 12, 2025
fecfec9
Update dependencies from https://github.com/dotnet/arcade build 20250…
dotnet-maestro[bot] Feb 12, 2025
6781b3e
Merge remote-tracking branch 'upstream/main' into RazorUsingMoreLspTypes
davidwengier Feb 12, 2025
81112e0
Have distinct messages for adding/removing accessibility modifiers
CyrusNajmabadi Feb 12, 2025
703574f
Share code
CyrusNajmabadi Feb 12, 2025
7b91b2f
Add semicolon
CyrusNajmabadi Feb 12, 2025
26317e4
fix more build errors and warnings
dibarbet Feb 12, 2025
76b364e
refactor lsp test harness to allow different test workspaces
dibarbet Feb 12, 2025
3f873ed
remove unnecessary csproj item
dibarbet Feb 13, 2025
32a5390
Update src/EditorFeatures/Test/LanguageServer/VSTypeScriptHandlerTest…
dibarbet Feb 13, 2025
589ad23
Merge remote-tracking branch 'upstream/main' into diagProjectState
CyrusNajmabadi Feb 13, 2025
16967dc
Update PublishData.json
akhera99 Feb 13, 2025
ef1d7fe
Update PublishData.json (#77208)
JoeRobich Feb 13, 2025
9dd780c
Multi-target LSP tests to run against .NET (#77173)
dibarbet Feb 13, 2025
7015680
Switch to UI thread to activate Semantic Search UIContext (#77195)
tmat Feb 13, 2025
659c0f9
Initial work to support FixAll in 'use interpoalted string'
CyrusNajmabadi Feb 13, 2025
dc945ec
Complete work
CyrusNajmabadi Feb 13, 2025
f2a3f7b
Revert
CyrusNajmabadi Feb 13, 2025
4a5b490
Reduce allocations in SymbolCompletionItem.GetSupportedPlatforms (#77…
ToddGrun Feb 13, 2025
b60539f
Make conditional weak table static
CyrusNajmabadi Feb 13, 2025
6357650
Only refetch from CWT if adding to it failed
CyrusNajmabadi Feb 13, 2025
a3bdd94
Update 'use interpolated string' refactoring to support fix all (#77209)
CyrusNajmabadi Feb 13, 2025
7b781d4
Only refetch from CWT if adding to it failed (#77211)
CyrusNajmabadi Feb 13, 2025
5bf4bfe
Update Semantic Search Ref assembly (#77196)
tmat Feb 13, 2025
13e9626
Make conditional weak table static (#77210)
CyrusNajmabadi Feb 13, 2025
191ee36
using snippet
akhera99 Feb 14, 2025
c86f8c2
Store checlksum
CyrusNajmabadi Feb 14, 2025
6b9b958
Fix issue parsing for-statement initializer chain with commas and no …
CyrusNajmabadi Feb 14, 2025
40b0cba
Cache based on project state not project. (#77141)
CyrusNajmabadi Feb 14, 2025
d993eb9
Remove potential leak in CachingSemanticModelProvider._providerCache …
ToddGrun Feb 14, 2025
a4f5f69
Merge in main
CyrusNajmabadi Feb 14, 2025
7017121
Merge branch 'main' into diagProjectStateFull2
CyrusNajmabadi Feb 14, 2025
62ec083
Update Compiler Breaking Changes - DotNet 9.md
CyrusNajmabadi Feb 14, 2025
d8d312d
Defer checksum computation
CyrusNajmabadi Feb 14, 2025
b0ad3f4
Update Compiler Breaking Changes - DotNet 9.md (#77231)
CyrusNajmabadi Feb 14, 2025
250126c
Cache diagnostic info based on project state not project. (#77230)
CyrusNajmabadi Feb 14, 2025
39048c8
Have distinct messages for adding vs. removing accessibility modifier…
CyrusNajmabadi Feb 14, 2025
30bae2d
Do not offer primary constructor parameters when offering to generate…
CyrusNajmabadi Feb 14, 2025
1c29926
Rename feature to 'Add or remove accessibility modifiers'
CyrusNajmabadi Feb 14, 2025
dbad668
Cleanup and revert
CyrusNajmabadi Feb 14, 2025
7c437ed
Revert
CyrusNajmabadi Feb 14, 2025
00718bf
Fix
CyrusNajmabadi Feb 14, 2025
9bd6246
Add test
CyrusNajmabadi Feb 14, 2025
add6035
Merge branch 'main' into addOrRemove
CyrusNajmabadi Feb 14, 2025
15a63a1
revert
CyrusNajmabadi Feb 14, 2025
f642e6a
Add test
CyrusNajmabadi Feb 14, 2025
c8841d7
Fix issue where hitting enter before a raw-string literal was process…
CyrusNajmabadi Feb 14, 2025
c93ec5f
remove import
CyrusNajmabadi Feb 14, 2025
da5c0c5
Semantic Snippets - using snippet (#77214)
akhera99 Feb 14, 2025
03e26e5
revert
CyrusNajmabadi Feb 14, 2025
f6fc311
Rename feature to 'Add or remove accessibility modifiers' (#77234)
CyrusNajmabadi Feb 15, 2025
6b8381c
add background color for inline hints in high contrast mode
akhera99 Feb 15, 2025
e91c871
Fix issue where hitting enter before a raw-string literal was process…
CyrusNajmabadi Feb 15, 2025
ad54fbc
Do not offer primary constructor parameters when offering to generate…
CyrusNajmabadi Feb 15, 2025
2b29799
Inline Hints - Add background for Windows high contrast mode (#77238)
akhera99 Feb 15, 2025
eecbc00
fix syncing
CyrusNajmabadi Feb 15, 2025
ccff5c5
Allow oop syncing to send over ephemeral solutions with name/filepath…
CyrusNajmabadi Feb 15, 2025
5d046a0
Properly pass progress object along in fix all provider
CyrusNajmabadi Feb 15, 2025
1315d69
Use property
CyrusNajmabadi Feb 15, 2025
abdd4cd
Simplify code
CyrusNajmabadi Feb 15, 2025
0129d0c
Simplify
CyrusNajmabadi Feb 15, 2025
1e6c551
Remove dependency on semantics
CyrusNajmabadi Feb 15, 2025
13e2a61
Simplify
CyrusNajmabadi Feb 15, 2025
9a8c310
preserve behavior
CyrusNajmabadi Feb 15, 2025
9af27d3
Remove need to use semantics in the 'move type' code refactoring prov…
CyrusNajmabadi Feb 15, 2025
567599f
Properly pass progress object along in fix all provider (#77243)
CyrusNajmabadi Feb 15, 2025
8090cf1
Remove state type from 'move type' refactoring
CyrusNajmabadi Feb 15, 2025
69e9d63
inline
CyrusNajmabadi Feb 15, 2025
6042dd3
inline
CyrusNajmabadi Feb 15, 2025
74659ba
remove more
CyrusNajmabadi Feb 15, 2025
46086b2
Semantic document
CyrusNajmabadi Feb 15, 2025
cba9de6
rename
CyrusNajmabadi Feb 15, 2025
254b024
REvert
CyrusNajmabadi Feb 15, 2025
deadb60
REvert
CyrusNajmabadi Feb 15, 2025
c127487
REvert
CyrusNajmabadi Feb 15, 2025
d862b94
Remove state type from 'move type' refactoring (#77248)
CyrusNajmabadi Feb 16, 2025
80ccf3f
Make `InterceptableLocation` implement `IEquatable<InterceptableLocat…
aradalvand Feb 17, 2025
7561e17
Allow more of Razor to use Roslyn Lsp types (#74597)
davidwengier Feb 17, 2025
a97fa11
Add missing word to the documentation file (#77259)
kkm000 Feb 18, 2025
51f74e4
[main] Update dependencies from dotnet/arcade (#77175)
akhera99 Feb 19, 2025
c84d249
Fix Quick Info nullability display for backing fields (#77240)
RikkiGibson Feb 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public class C
***Introduced in Visual Studio 2022 version 17.10***

*Conversion* of a collection expression to a `struct` or `class` that implements `System.Collections.IEnumerable` and *does not* have a strongly-typed `GetEnumerator()`
requires the elements in the collection expression are implicitly convertible to the `object`.
requires that the elements in the collection expression are implicitly convertible to `object`.
Previously, the elements of a collection expression targeting an `IEnumerable` implementation were assumed to be convertible to `object`, and converted only when binding to the applicable `Add` method.

This additional requirement means that collection expression conversions to `IEnumerable` implementations are treated consistently with other target types where the elements in the collection expression must be implicitly convertible to the *iteration type* of the target type.
Expand Down
27 changes: 27 additions & 0 deletions docs/compilers/CSharp/Compiler Breaking Changes - DotNet 9.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,30 @@ class C
```

A workaround is to use explicit delegate types instead of relying on `var` inference in those cases.

## `dotnet_style_require_accessibility_modifiers` now consistently applies to interface members

PR: https://github.com/dotnet/roslyn/pull/76324

Prior to this change, the analyzer for dotnet_style_require_accessibility_modifiers would simply ignore interface
members. This was because C# initially disallowed modifiers for interface members entirely, having them always
be public.

Later versions of the language relaxed this restriction, allowing users to provide accessibility modifiers on
interface members, including a redundant `public` modifier.

The analyzer was updated to now enforce the value for this option on interface members as well. The meaning
of the value is as follows:

1. `never`. The analyzer does no analysis. Redundant modifiers are allowed on all members.
2. `always`. Redundant modifiers are always required on all members (including interface members). For example:
a `private` modifier on a class member, and a `public` modifier on an interface member. This is the option to
use if you feel that all members no matter what should state their accessibility explicitly.
4. `for_non_interface_members`. Redundant modifiers are required on all members *that are not* part of an interface,
but disallowed for interface members. For example: `private` will be required on private class members. However,
a public interface member will not be allowed to have redundant `public` modifiers. This matches the standard
modifier approach present prior to the language allowing modifiers on interface members.
5. `omit_if_default`. Redundant modifiers are disallowed. For example a private class member will be disallowed from
using `private`, and a public interface member will be disallowed from using `public`. This is the option to use
if you feel that restating the accessibility when it matches what the language chooses by default is redundant and
should be disalloed.
16 changes: 8 additions & 8 deletions eng/Version.Details.xml
Original file line number Diff line number Diff line change
Expand Up @@ -122,19 +122,19 @@
</Dependency>
</ProductDependencies>
<ToolsetDependencies>
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="9.0.0-beta.25077.4">
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="9.0.0-beta.25111.5">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>bac7e1caea791275b7c3ccb4cb75fd6a04a26618</Sha>
<Sha>5da211e1c42254cb35e7ef3d5a8428fb24853169</Sha>
</Dependency>
<!-- Intermediate is necessary for source build. -->
<Dependency Name="Microsoft.SourceBuild.Intermediate.arcade" Version="9.0.0-beta.25077.4">
<Dependency Name="Microsoft.SourceBuild.Intermediate.arcade" Version="9.0.0-beta.25111.5">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>bac7e1caea791275b7c3ccb4cb75fd6a04a26618</Sha>
<Sha>5da211e1c42254cb35e7ef3d5a8428fb24853169</Sha>
<SourceBuild RepoName="arcade" ManagedOnly="true" />
</Dependency>
<Dependency Name="Microsoft.DotNet.XliffTasks" Version="9.0.0-beta.25077.4">
<Dependency Name="Microsoft.DotNet.XliffTasks" Version="9.0.0-beta.25111.5">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>bac7e1caea791275b7c3ccb4cb75fd6a04a26618</Sha>
<Sha>5da211e1c42254cb35e7ef3d5a8428fb24853169</Sha>
</Dependency>
<Dependency Name="Microsoft.DiaSymReader" Version="2.0.0">
<Uri>https://github.com/dotnet/symreader</Uri>
Expand All @@ -150,9 +150,9 @@
<Uri>https://github.com/dotnet/roslyn</Uri>
<Sha>5d10d428050c0d6afef30a072c4ae68776621877</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="9.0.0-beta.25077.4">
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="9.0.0-beta.25111.5">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>bac7e1caea791275b7c3ccb4cb75fd6a04a26618</Sha>
<Sha>5da211e1c42254cb35e7ef3d5a8428fb24853169</Sha>
</Dependency>
<Dependency Name="Microsoft.CodeAnalysis.NetAnalyzers" Version="8.0.0-preview.23468.1">
<Uri>https://github.com/dotnet/roslyn-analyzers</Uri>
Expand Down
2 changes: 1 addition & 1 deletion eng/config/PublishData.json
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@
"vsBranch": "dev/monicaro/versioning",
"vsMajorVersion": 18,
"insertionTitlePrefix": "[d18.0 P1]",
"insertionCreateDraftPR": false
"insertionCreateDraftPR": true
},
"main": {
"nugetKind": [
Expand Down
8 changes: 4 additions & 4 deletions global.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
{
"sdk": {
"version": "9.0.102",
"version": "9.0.103",
"allowPrerelease": false,
"rollForward": "patch"
},
"tools": {
"dotnet": "9.0.102",
"dotnet": "9.0.103",
"vs": {
"version": "17.8.0"
}
},
"msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.25077.4",
"Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.25077.4",
"Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.25111.5",
"Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.25111.5",
"Microsoft.Build.Traversal": "3.4.0"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using Microsoft.CodeAnalysis.AddAccessibilityModifiers;
using Microsoft.CodeAnalysis.AddOrRemoveAccessibilityModifiers;
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.CSharp.Extensions;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.LanguageService;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Roslyn.Utilities;

namespace Microsoft.CodeAnalysis.CSharp.AddAccessibilityModifiers;
namespace Microsoft.CodeAnalysis.CSharp.AddOrRemoveAccessibilityModifiers;

internal class CSharpAddAccessibilityModifiers : AbstractAddAccessibilityModifiers<MemberDeclarationSyntax>
internal class CSharpAddOrRemoveAccessibilityModifiers : AbstractAddOrRemoveAccessibilityModifiers<MemberDeclarationSyntax>
{
public static readonly CSharpAddAccessibilityModifiers Instance = new();
public static readonly CSharpAddOrRemoveAccessibilityModifiers Instance = new();

protected CSharpAddAccessibilityModifiers()
protected CSharpAddOrRemoveAccessibilityModifiers()
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,22 @@
// 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 Microsoft.CodeAnalysis.AddAccessibilityModifiers;
using Microsoft.CodeAnalysis.AddOrRemoveAccessibilityModifiers;
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.CSharp.Extensions;
using Microsoft.CodeAnalysis.CSharp.LanguageService;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.LanguageService;

namespace Microsoft.CodeAnalysis.CSharp.AddAccessibilityModifiers;
namespace Microsoft.CodeAnalysis.CSharp.AddOrRemoveAccessibilityModifiers;

[DiagnosticAnalyzer(LanguageNames.CSharp)]
internal class CSharpAddAccessibilityModifiersDiagnosticAnalyzer
: AbstractAddAccessibilityModifiersDiagnosticAnalyzer<CompilationUnitSyntax>
internal sealed class CSharpAddOrRemoveAccessibilityModifiersDiagnosticAnalyzer
: AbstractAddOrRemoveAccessibilityModifiersDiagnosticAnalyzer<CompilationUnitSyntax>
{
protected override IAccessibilityFacts AccessibilityFacts => CSharpAccessibilityFacts.Instance;
protected override IAddOrRemoveAccessibilityModifiers AddOrRemoveAccessibilityModifiers => CSharpAddOrRemoveAccessibilityModifiers.Instance;

protected override void ProcessCompilationUnit(
SyntaxTreeAnalysisContext context,
CodeStyleOption2<AccessibilityModifiersRequired> option, CompilationUnitSyntax compilationUnit)
Expand Down Expand Up @@ -47,20 +48,6 @@ private void ProcessMemberDeclaration(
if (member is TypeDeclarationSyntax typeDeclaration)
ProcessMembers(context, option, typeDeclaration.Members);

if (!CSharpAddAccessibilityModifiers.Instance.ShouldUpdateAccessibilityModifier(
CSharpAccessibilityFacts.Instance, member, option.Value, out var name, out var modifiersAdded))
{
return;
}

// Have an issue to flag, either add or remove. Report issue to user.
var additionalLocations = ImmutableArray.Create(member.GetLocation());
context.ReportDiagnostic(DiagnosticHelper.Create(
Descriptor,
name.GetLocation(),
option.Notification,
context.Options,
additionalLocations: additionalLocations,
modifiersAdded ? ModifiersAddedProperties : null));
CheckMemberAndReportDiagnostic(context, option, member);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@

using System.Composition;
using System.Diagnostics.CodeAnalysis;
using Microsoft.CodeAnalysis.AddAccessibilityModifiers;
using Microsoft.CodeAnalysis.AddOrRemoveAccessibilityModifiers;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.CSharp.Syntax;

namespace Microsoft.CodeAnalysis.CSharp.AddAccessibilityModifiers;
namespace Microsoft.CodeAnalysis.CSharp.AddOrRemoveAccessibilityModifiers;

[ExportCodeFixProvider(LanguageNames.CSharp, Name = PredefinedCodeFixProviderNames.AddAccessibilityModifiers), Shared]
[ExportCodeFixProvider(LanguageNames.CSharp, Name = PredefinedCodeFixProviderNames.AddOrRemoveAccessibilityModifiers), Shared]
[method: ImportingConstructor]
[method: SuppressMessage("RoslynDiagnosticsReliability", "RS0033:Importing constructor should be [Obsolete]", Justification = "Used in test code: https://github.com/dotnet/roslyn/issues/42814")]
internal sealed class CSharpAddAccessibilityModifiersCodeFixProvider() : AbstractAddAccessibilityModifiersCodeFixProvider
internal sealed class CSharpAddOrRemoveAccessibilityModifiersCodeFixProvider() : AbstractAddOrRemoveAccessibilityModifiersCodeFixProvider
{
protected override SyntaxNode MapToDeclarator(SyntaxNode node)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@

using System;
using System.Composition;
using Microsoft.CodeAnalysis.AddAccessibilityModifiers;
using Microsoft.CodeAnalysis.AddOrRemoveAccessibilityModifiers;
using Microsoft.CodeAnalysis.Host.Mef;

namespace Microsoft.CodeAnalysis.CSharp.AddAccessibilityModifiers;
namespace Microsoft.CodeAnalysis.CSharp.AddOrRemoveAccessibilityModifiers;

[ExportLanguageService(typeof(IAddAccessibilityModifiersService), LanguageNames.CSharp), Shared]
[ExportLanguageService(typeof(IAddOrRemoveAccessibilityModifiersService), LanguageNames.CSharp), Shared]
[method: ImportingConstructor]
[method: Obsolete(MefConstruction.ImportingConstructorMessage, error: true)]
internal sealed class CSharpAddAccessibilityModifiersService() : CSharpAddAccessibilityModifiers, IAddAccessibilityModifiersService;
internal sealed class CSharpAddOrRemoveAccessibilityModifiersService() : CSharpAddOrRemoveAccessibilityModifiers, IAddOrRemoveAccessibilityModifiersService;
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,26 @@

using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.CSharp.AddAccessibilityModifiers;
using Microsoft.CodeAnalysis.CSharp.AddOrRemoveAccessibilityModifiers;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Diagnostics;
using Microsoft.CodeAnalysis.Test.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
using Xunit.Abstractions;

namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.AddAccessibilityModifiers;
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.AddOrRemoveAccessibilityModifiers;

[Trait(Traits.Feature, Traits.Features.CodeActionsAddAccessibilityModifiers)]
public class AddAccessibilityModifiersFixAllTests : AbstractCSharpDiagnosticProviderBasedUserDiagnosticTest_NoEditor
[Trait(Traits.Feature, Traits.Features.CodeActionsAddOrRemoveAccessibilityModifiers)]
public class AddOrRemoveAccessibilityModifiersFixAllTests : AbstractCSharpDiagnosticProviderBasedUserDiagnosticTest_NoEditor
{
public AddAccessibilityModifiersFixAllTests(ITestOutputHelper logger)
public AddOrRemoveAccessibilityModifiersFixAllTests(ITestOutputHelper logger)
: base(logger)
{
}

internal override (DiagnosticAnalyzer, CodeFixProvider) CreateDiagnosticProviderAndFixer(Workspace workspace)
=> (new CSharpAddAccessibilityModifiersDiagnosticAnalyzer(), new CSharpAddAccessibilityModifiersCodeFixProvider());
=> (new CSharpAddOrRemoveAccessibilityModifiersDiagnosticAnalyzer(), new CSharpAddOrRemoveAccessibilityModifiersCodeFixProvider());

[Fact, WorkItem("https://github.com/dotnet/vscode-csharp/issues/6611")]
[Trait(Traits.Feature, Traits.Features.CodeActionsFixAllOccurrences)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.AddAccessibilityModifiers;
using Microsoft.CodeAnalysis.CSharp.AddOrRemoveAccessibilityModifiers;
using Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions;
using Microsoft.CodeAnalysis.Test.Utilities;
using Roslyn.Test.Utilities;
using Xunit;

namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.AddAccessibilityModifiers;
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.AddOrRemoveAccessibilityModifiers;

using VerifyCS = CSharpCodeFixVerifier<
CSharpAddAccessibilityModifiersDiagnosticAnalyzer,
CSharpAddAccessibilityModifiersCodeFixProvider>;
CSharpAddOrRemoveAccessibilityModifiersDiagnosticAnalyzer,
CSharpAddOrRemoveAccessibilityModifiersCodeFixProvider>;

[Trait(Traits.Feature, Traits.Features.CodeActionsAddAccessibilityModifiers)]
public sealed class AddAccessibilityModifiersTests
[Trait(Traits.Feature, Traits.Features.CodeActionsAddOrRemoveAccessibilityModifiers)]
public sealed class AddOrRemoveAccessibilityModifiersTests
{
[Theory, CombinatorialData]
public void TestStandardProperty(AnalyzerProperty property)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.LanguageService;

namespace Microsoft.CodeAnalysis.AddAccessibilityModifiers;
namespace Microsoft.CodeAnalysis.AddOrRemoveAccessibilityModifiers;

internal abstract class AbstractAddAccessibilityModifiers<TMemberDeclarationSyntax> : IAddAccessibilityModifiers
internal abstract class AbstractAddOrRemoveAccessibilityModifiers<TMemberDeclarationSyntax> : IAddOrRemoveAccessibilityModifiers
where TMemberDeclarationSyntax : SyntaxNode
{
public bool ShouldUpdateAccessibilityModifier(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,33 @@
using System.Collections.Immutable;
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.LanguageService;

namespace Microsoft.CodeAnalysis.AddAccessibilityModifiers;
namespace Microsoft.CodeAnalysis.AddOrRemoveAccessibilityModifiers;

internal abstract class AbstractAddAccessibilityModifiersDiagnosticAnalyzer<TCompilationUnitSyntax>()
internal abstract class AbstractAddOrRemoveAccessibilityModifiersDiagnosticAnalyzer<TCompilationUnitSyntax>()
: AbstractBuiltInCodeStyleDiagnosticAnalyzer(
IDEDiagnosticIds.AddAccessibilityModifiersDiagnosticId,
EnforceOnBuildValues.AddAccessibilityModifiers,
IDEDiagnosticIds.AddOrRemoveAccessibilityModifiersDiagnosticId,
EnforceOnBuildValues.AddOrRemoveAccessibilityModifiers,
CodeStyleOptions2.AccessibilityModifiersRequired,
new LocalizableResourceString(nameof(AnalyzersResources.Add_accessibility_modifiers), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)),
new LocalizableResourceString(nameof(AnalyzersResources.Accessibility_modifiers_required), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)))
where TCompilationUnitSyntax : SyntaxNode
{
protected abstract IAccessibilityFacts AccessibilityFacts { get; }
protected abstract IAddOrRemoveAccessibilityModifiers AddOrRemoveAccessibilityModifiers { get; }

protected abstract void ProcessCompilationUnit(SyntaxTreeAnalysisContext context, CodeStyleOption2<AccessibilityModifiersRequired> option, TCompilationUnitSyntax compilationUnitSyntax);

protected readonly DiagnosticDescriptor ModifierRemovedDescriptor = CreateDescriptorWithId(
IDEDiagnosticIds.AddOrRemoveAccessibilityModifiersDiagnosticId,
EnforceOnBuildValues.AddOrRemoveAccessibilityModifiers,
hasAnyCodeStyleOption: true,
new LocalizableResourceString(nameof(AnalyzersResources.Remove_accessibility_modifiers), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)),
new LocalizableResourceString(nameof(AnalyzersResources.Accessibility_modifiers_unnecessary), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)));

protected static readonly ImmutableDictionary<string, string?> ModifiersAddedProperties = ImmutableDictionary<string, string?>.Empty.Add(
AddAccessibilityModifiersConstants.ModifiersAdded, AddAccessibilityModifiersConstants.ModifiersAdded);
AddOrRemoveAccessibilityModifiersConstants.ModifiersAdded, AddOrRemoveAccessibilityModifiersConstants.ModifiersAdded);

public sealed override DiagnosticAnalyzerCategory GetAnalyzerCategory()
=> DiagnosticAnalyzerCategory.SyntaxTreeWithoutSemanticsAnalysis;
Expand All @@ -39,5 +52,25 @@ private void AnalyzeTree(SyntaxTreeAnalysisContext context, CompilationOptions c
ProcessCompilationUnit(context, option, (TCompilationUnitSyntax)context.Tree.GetRoot(context.CancellationToken));
}

protected abstract void ProcessCompilationUnit(SyntaxTreeAnalysisContext context, CodeStyleOption2<AccessibilityModifiersRequired> option, TCompilationUnitSyntax compilationUnitSyntax);
protected void CheckMemberAndReportDiagnostic(
SyntaxTreeAnalysisContext context,
CodeStyleOption2<AccessibilityModifiersRequired> option,
SyntaxNode member)
{
if (!this.AddOrRemoveAccessibilityModifiers.ShouldUpdateAccessibilityModifier(
this.AccessibilityFacts, member, option.Value, out var name, out var modifiersAdded))
{
return;
}

// Have an issue to flag, either add or remove. Report issue to user.
var additionalLocations = ImmutableArray.Create(member.GetLocation());
context.ReportDiagnostic(DiagnosticHelper.Create(
modifiersAdded ? Descriptor : ModifierRemovedDescriptor,
name.GetLocation(),
option.Notification,
context.Options,
additionalLocations: additionalLocations,
modifiersAdded ? ModifiersAddedProperties : null));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.LanguageService;

namespace Microsoft.CodeAnalysis.AddAccessibilityModifiers;
namespace Microsoft.CodeAnalysis.AddOrRemoveAccessibilityModifiers;

internal static partial class AddAccessibilityModifiersConstants
internal static partial class AddOrRemoveAccessibilityModifiersConstants
{
public const string ModifiersAdded = nameof(ModifiersAdded);
}

internal interface IAddAccessibilityModifiers
internal interface IAddOrRemoveAccessibilityModifiers
{
bool ShouldUpdateAccessibilityModifier(
IAccessibilityFacts accessibilityFacts,
Expand Down
Loading
Loading