From 2c19a3ea8b02d8d765c6f74316041715a63eb642 Mon Sep 17 00:00:00 2001 From: tmat Date: Mon, 17 Jun 2024 20:28:51 -0700 Subject: [PATCH 1/3] SimplifierOptions --- ...seImplicitObjectCreationCodeFixProvider.cs | 2 +- .../Core/Analyzers/AnalyzerOptionsProvider.cs | 2 +- ...NavigationBarItemService_CodeGeneration.vb | 2 +- .../AbstractUseTypeCodeRefactoringProvider.cs | 2 +- ...uctorFromMembersCodeRefactoringProvider.cs | 2 +- ...calForExpressionCodeRefactoringProvider.cs | 2 +- .../AbstractEncapsulateFieldService.cs | 2 +- ...ddParameterCheckCodeRefactoringProvider.cs | 7 +++---- ...ice.AbstractIntroduceVariableCodeAction.cs | 2 +- ...bstractSimplifyTypeNamesCodeFixProvider.cs | 4 ++-- .../AbstractSnippetProvider.cs | 2 +- .../Razor/SimplifyMethodHandler.cs | 2 +- .../Options/SimplifierOptionsStorage.cs | 19 ------------------- .../InlineCompletionsHandler.cs | 2 +- .../VSTypeScriptHandlerTests.cs | 2 +- .../SnippetFunctionGenerateSwitchCases.cs | 2 +- .../SnippetFunctionSimpleTypeName.cs | 2 +- .../CodeModel/AbstractCodeModelService.cs | 2 +- .../Core/Impl/CodeModel/FileCodeModel.cs | 2 +- .../CSharpSimplificationService.cs | 4 ++-- ...GlobalCodeActionOptionsWorkspaceService.cs | 2 +- .../AbstractSimplificationService.cs | 2 +- .../Portable/Simplification/Simplifier.cs | 2 +- .../Simplification/CSharpSimplification.cs | 4 ++-- .../Core/CodeCleanup/CodeCleanupOptions.cs | 2 +- .../Simplification/AbstractSimplification.cs | 7 +------ .../Core/Simplification/ISimplification.cs | 2 +- .../Core/Simplification/SimplifierOptions.cs | 11 ++++------- .../VisualBasicSimplification.vb | 4 ++-- .../VisualBasicSimplificationService.vb | 4 ++-- 30 files changed, 39 insertions(+), 67 deletions(-) delete mode 100644 src/LanguageServer/Protocol/Features/Options/SimplifierOptionsStorage.cs diff --git a/src/Analyzers/CSharp/CodeFixes/UseImplicitObjectCreation/CSharpUseImplicitObjectCreationCodeFixProvider.cs b/src/Analyzers/CSharp/CodeFixes/UseImplicitObjectCreation/CSharpUseImplicitObjectCreationCodeFixProvider.cs index e3923519cbf63..f2dbf68ad4aa4 100644 --- a/src/Analyzers/CSharp/CodeFixes/UseImplicitObjectCreation/CSharpUseImplicitObjectCreationCodeFixProvider.cs +++ b/src/Analyzers/CSharp/CodeFixes/UseImplicitObjectCreation/CSharpUseImplicitObjectCreationCodeFixProvider.cs @@ -58,7 +58,7 @@ public override Task RegisterCodeFixesAsync(CodeFixContext context) #if CODE_STYLE var options = CSharpSimplifierOptions.Default; #else - var options = (CSharpSimplifierOptions)await document.GetSimplifierOptionsAsync(fallbackOptions, cancellationToken).ConfigureAwait(false); + var options = (CSharpSimplifierOptions)await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); #endif // Bulk apply these, except at the expression level. One fix at the expression level may prevent another fix diff --git a/src/Analyzers/Core/Analyzers/AnalyzerOptionsProvider.cs b/src/Analyzers/Core/Analyzers/AnalyzerOptionsProvider.cs index d119e11e3550a..efa914b38a10b 100644 --- a/src/Analyzers/Core/Analyzers/AnalyzerOptionsProvider.cs +++ b/src/Analyzers/Core/Analyzers/AnalyzerOptionsProvider.cs @@ -49,7 +49,7 @@ public AnalyzerOptionsProvider(IOptionsReader options, string language, Analyzer public CodeStyleOption2 PreferPredefinedTypeKeywordInDeclaration => GetOption(CodeStyleOptions2.PreferIntrinsicPredefinedTypeKeywordInDeclaration, FallbackSimplifierOptions.PreferPredefinedTypeKeywordInDeclaration); public SimplifierOptions GetSimplifierOptions(ISimplification simplification) - => simplification.GetSimplifierOptions(_options, _fallbackOptions.CleanupOptions?.SimplifierOptions); + => simplification.GetSimplifierOptions(_options); // SyntaxFormattingOptions diff --git a/src/EditorFeatures/VisualBasic/NavigationBar/VisualBasicEditorNavigationBarItemService_CodeGeneration.vb b/src/EditorFeatures/VisualBasic/NavigationBar/VisualBasicEditorNavigationBarItemService_CodeGeneration.vb index 744874b427aa6..3bd42bc2532c8 100644 --- a/src/EditorFeatures/VisualBasic/NavigationBar/VisualBasicEditorNavigationBarItemService_CodeGeneration.vb +++ b/src/EditorFeatures/VisualBasic/NavigationBar/VisualBasicEditorNavigationBarItemService_CodeGeneration.vb @@ -60,7 +60,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.NavigationBar Return document End If - Dim simplifierOptions = Await newDocument.GetSimplifierOptionsAsync(globalOptions, cancellationToken).ConfigureAwait(False) + Dim simplifierOptions = Await newDocument.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(False) Dim formattingOptions = Await newDocument.GetSyntaxFormattingOptionsAsync(globalOptions, cancellationToken).ConfigureAwait(False) newDocument = Await Simplifier.ReduceAsync(newDocument, Simplifier.Annotation, simplifierOptions, cancellationToken).ConfigureAwait(False) diff --git a/src/Features/CSharp/Portable/CodeRefactorings/UseExplicitOrImplicitType/AbstractUseTypeCodeRefactoringProvider.cs b/src/Features/CSharp/Portable/CodeRefactorings/UseExplicitOrImplicitType/AbstractUseTypeCodeRefactoringProvider.cs index 28223f71c1158..7632a6bbfa868 100644 --- a/src/Features/CSharp/Portable/CodeRefactorings/UseExplicitOrImplicitType/AbstractUseTypeCodeRefactoringProvider.cs +++ b/src/Features/CSharp/Portable/CodeRefactorings/UseExplicitOrImplicitType/AbstractUseTypeCodeRefactoringProvider.cs @@ -47,7 +47,7 @@ public override async Task ComputeRefactoringsAsync(CodeRefactoringContext conte return; } - var simplifierOptions = (CSharpSimplifierOptions)await document.GetSimplifierOptionsAsync(context.Options, cancellationToken).ConfigureAwait(false); + var simplifierOptions = (CSharpSimplifierOptions)await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); var typeStyle = AnalyzeTypeName(declaredType, semanticModel, simplifierOptions, cancellationToken); if (typeStyle.IsStylePreferred && typeStyle.Notification.Severity != ReportDiagnostic.Suppress) { diff --git a/src/Features/CSharp/Portable/GenerateConstructorFromMembers/CSharpGenerateConstructorFromMembersCodeRefactoringProvider.cs b/src/Features/CSharp/Portable/GenerateConstructorFromMembers/CSharpGenerateConstructorFromMembersCodeRefactoringProvider.cs index 058e49683e135..d301224badb3d 100644 --- a/src/Features/CSharp/Portable/GenerateConstructorFromMembers/CSharpGenerateConstructorFromMembersCodeRefactoringProvider.cs +++ b/src/Features/CSharp/Portable/GenerateConstructorFromMembers/CSharpGenerateConstructorFromMembersCodeRefactoringProvider.cs @@ -49,7 +49,7 @@ protected override string ToDisplayString(IParameterSymbol parameter, SymbolDisp protected override async ValueTask PrefersThrowExpressionAsync(Document document, SimplifierOptionsProvider fallbackOptions, CancellationToken cancellationToken) { - var options = (CSharpSimplifierOptions)await document.GetSimplifierOptionsAsync(fallbackOptions, cancellationToken).ConfigureAwait(false); + var options = (CSharpSimplifierOptions)await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); return options.PreferThrowExpression.Value; } diff --git a/src/Features/CSharp/Portable/IntroduceVariable/CSharpIntroduceLocalForExpressionCodeRefactoringProvider.cs b/src/Features/CSharp/Portable/IntroduceVariable/CSharpIntroduceLocalForExpressionCodeRefactoringProvider.cs index a94c7015693e5..ad85222af598f 100644 --- a/src/Features/CSharp/Portable/IntroduceVariable/CSharpIntroduceLocalForExpressionCodeRefactoringProvider.cs +++ b/src/Features/CSharp/Portable/IntroduceVariable/CSharpIntroduceLocalForExpressionCodeRefactoringProvider.cs @@ -94,7 +94,7 @@ protected override bool IsValid(ExpressionStatementSyntax expressionStatement, T CancellationToken cancellationToken) { var semanticFacts = document.GetRequiredLanguageService(); - var simplifierOptions = (CSharpSimplifierOptions)await document.GetSimplifierOptionsAsync(optionsProvider, cancellationToken).ConfigureAwait(false); + var simplifierOptions = (CSharpSimplifierOptions)await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); var tupleUnderlyingType = tupleType.TupleUnderlyingType ?? tupleType; diff --git a/src/Features/Core/Portable/EncapsulateField/AbstractEncapsulateFieldService.cs b/src/Features/Core/Portable/EncapsulateField/AbstractEncapsulateFieldService.cs index 82afe2421891b..e8e0cd659dab4 100644 --- a/src/Features/Core/Portable/EncapsulateField/AbstractEncapsulateFieldService.cs +++ b/src/Features/Core/Portable/EncapsulateField/AbstractEncapsulateFieldService.cs @@ -220,7 +220,7 @@ private async Task EncapsulateFieldsInCurrentProcessAsync(Document doc new SyntaxAnnotation(), document); - var simplifierOptions = await document.GetSimplifierOptionsAsync(fallbackOptions, cancellationToken).ConfigureAwait(false); + var simplifierOptions = await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); var documentWithProperty = await AddPropertyAsync( document, document.Project.Solution, field, generatedProperty, fallbackOptions, cancellationToken).ConfigureAwait(false); diff --git a/src/Features/Core/Portable/InitializeParameter/AbstractAddParameterCheckCodeRefactoringProvider.cs b/src/Features/Core/Portable/InitializeParameter/AbstractAddParameterCheckCodeRefactoringProvider.cs index d24e9ef3490c3..6bf4ec9fcb46e 100644 --- a/src/Features/Core/Portable/InitializeParameter/AbstractAddParameterCheckCodeRefactoringProvider.cs +++ b/src/Features/Core/Portable/InitializeParameter/AbstractAddParameterCheckCodeRefactoringProvider.cs @@ -76,7 +76,7 @@ internal abstract class AbstractAddParameterCheckCodeRefactoringProvider< // Great. The list has parameters that need null checks. Offer to add null checks for all. return [CodeAction.Create( FeaturesResources.Add_null_checks_for_all_parameters, - c => UpdateDocumentForRefactoringAsync(document, blockStatementOpt, listOfParametersOrdinals, parameterSpan, fallbackOptions, c), + c => UpdateDocumentForRefactoringAsync(document, blockStatementOpt, listOfParametersOrdinals, parameterSpan, c), nameof(FeaturesResources.Add_null_checks_for_all_parameters))]; } @@ -96,7 +96,7 @@ internal abstract class AbstractAddParameterCheckCodeRefactoringProvider< if (!ParameterValidForNullCheck(document, parameter, semanticModel, blockStatementOpt, cancellationToken)) return []; - var simplifierOptions = (TSimplifierOptions)await document.GetSimplifierOptionsAsync(fallbackOptions, cancellationToken).ConfigureAwait(false); + var simplifierOptions = (TSimplifierOptions)await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); // Great. There was no null check. Offer to add one. using var result = TemporaryArray.Empty; @@ -128,7 +128,6 @@ internal abstract class AbstractAddParameterCheckCodeRefactoringProvider< IBlockOperation? blockStatementOpt, List listOfParametersOrdinals, TextSpan parameterSpan, - CleanCodeGenerationOptionsProvider fallbackOptions, CancellationToken cancellationToken) { TSimplifierOptions? lazySimplifierOptions = null; @@ -156,7 +155,7 @@ internal abstract class AbstractAddParameterCheckCodeRefactoringProvider< if (!CanOfferRefactoring(functionDeclaration, semanticModel, syntaxFacts, cancellationToken, out blockStatementOpt)) continue; - lazySimplifierOptions ??= (TSimplifierOptions)await document.GetSimplifierOptionsAsync(fallbackOptions, cancellationToken).ConfigureAwait(false); + lazySimplifierOptions ??= (TSimplifierOptions)await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); // If parameter is a string, default check would be IsNullOrEmpty. This is because IsNullOrEmpty is more // commonly used in this regard according to telemetry and UX testing. diff --git a/src/Features/Core/Portable/IntroduceVariable/AbstractIntroduceVariableService.AbstractIntroduceVariableCodeAction.cs b/src/Features/Core/Portable/IntroduceVariable/AbstractIntroduceVariableService.AbstractIntroduceVariableCodeAction.cs index 0ae59492bed8c..6f498ef5690a7 100644 --- a/src/Features/Core/Portable/IntroduceVariable/AbstractIntroduceVariableService.AbstractIntroduceVariableCodeAction.cs +++ b/src/Features/Core/Portable/IntroduceVariable/AbstractIntroduceVariableService.AbstractIntroduceVariableCodeAction.cs @@ -54,7 +54,7 @@ private abstract class AbstractIntroduceVariableCodeAction : CodeAction protected override async Task GetChangedDocumentAsync(CancellationToken cancellationToken) { var changedDocument = await GetChangedDocumentCoreAsync(cancellationToken).ConfigureAwait(false); - var simplifierOptions = await changedDocument.GetSimplifierOptionsAsync(Options.SimplifierOptions, cancellationToken).ConfigureAwait(false); + var simplifierOptions = await changedDocument.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); return await Simplifier.ReduceAsync(changedDocument, simplifierOptions, cancellationToken).ConfigureAwait(false); } diff --git a/src/Features/Core/Portable/SimplifyTypeNames/AbstractSimplifyTypeNamesCodeFixProvider.cs b/src/Features/Core/Portable/SimplifyTypeNames/AbstractSimplifyTypeNamesCodeFixProvider.cs index 29bd9287c26a5..1959ce97852be 100644 --- a/src/Features/Core/Portable/SimplifyTypeNames/AbstractSimplifyTypeNamesCodeFixProvider.cs +++ b/src/Features/Core/Portable/SimplifyTypeNames/AbstractSimplifyTypeNamesCodeFixProvider.cs @@ -80,7 +80,7 @@ public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var model = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); - var options = (TSimplifierOptions)await document.GetSimplifierOptionsAsync(context.Options, cancellationToken).ConfigureAwait(false); + var options = (TSimplifierOptions)await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); var (node, diagnosticId) = GetNodeToSimplify( root, model, span, options, cancellationToken); @@ -104,7 +104,7 @@ public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) { var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var model = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); - var simplifierOptions = (TSimplifierOptions)await document.GetSimplifierOptionsAsync(fallbackOptions, cancellationToken).ConfigureAwait(false); + var simplifierOptions = (TSimplifierOptions)await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); foreach (var diagnostic in diagnostics) { diff --git a/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractSnippetProvider.cs b/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractSnippetProvider.cs index 97d1fb5a2f799..081bff40383e7 100644 --- a/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractSnippetProvider.cs +++ b/src/Features/Core/Portable/Snippets/SnippetProviders/AbstractSnippetProvider.cs @@ -151,7 +151,7 @@ public async Task GetSnippetAsync(Document document, int position if (document.SupportsSyntaxTree) { var addImportPlacementOptions = await document.GetAddImportPlacementOptionsAsync(fallbackOptions: null, cancellationToken).ConfigureAwait(false); - var simplifierOptions = await document.GetSimplifierOptionsAsync(fallbackOptions: null, cancellationToken).ConfigureAwait(false); + var simplifierOptions = await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); var syntaxFormattingOptions = await document.GetSyntaxFormattingOptionsAsync(fallbackOptions: null, cancellationToken).ConfigureAwait(false); document = await ImportAdder.AddImportsFromSymbolAnnotationAsync( diff --git a/src/LanguageServer/Protocol/ExternalAccess/Razor/SimplifyMethodHandler.cs b/src/LanguageServer/Protocol/ExternalAccess/Razor/SimplifyMethodHandler.cs index 28d1050bd652f..db341b92a151f 100644 --- a/src/LanguageServer/Protocol/ExternalAccess/Razor/SimplifyMethodHandler.cs +++ b/src/LanguageServer/Protocol/ExternalAccess/Razor/SimplifyMethodHandler.cs @@ -59,7 +59,7 @@ public SimplifyMethodHandler() // Call to the Simplifier and pass back the edits. var configOptions = await originalDocument.GetAnalyzerConfigOptionsAsync(cancellationToken).ConfigureAwait(false); var simplificationService = originalDocument.Project.Services.GetRequiredService(); - var options = simplificationService.GetSimplifierOptions(configOptions, simplificationService.DefaultOptions); + var options = simplificationService.GetSimplifierOptions(configOptions); var newDocument = await Simplifier.ReduceAsync(annotatedDocument, options, cancellationToken).ConfigureAwait(false); var changes = await newDocument.GetTextChangesAsync(originalDocument, cancellationToken).ConfigureAwait(false); return changes.Select(change => ProtocolConversions.TextChangeToTextEdit(change, originalSourceText)).ToArray(); diff --git a/src/LanguageServer/Protocol/Features/Options/SimplifierOptionsStorage.cs b/src/LanguageServer/Protocol/Features/Options/SimplifierOptionsStorage.cs deleted file mode 100644 index d216c5adb7cc3..0000000000000 --- a/src/LanguageServer/Protocol/Features/Options/SimplifierOptionsStorage.cs +++ /dev/null @@ -1,19 +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.Threading; -using System.Threading.Tasks; -using Microsoft.CodeAnalysis.Host; -using Microsoft.CodeAnalysis.Options; - -namespace Microsoft.CodeAnalysis.Simplification; - -internal static class SimplifierOptionsStorage -{ - public static ValueTask GetSimplifierOptionsAsync(this Document document, IGlobalOptionService globalOptions, CancellationToken cancellationToken) - => document.GetSimplifierOptionsAsync(globalOptions.GetSimplifierOptions(document.Project.Services), cancellationToken); - - public static SimplifierOptions GetSimplifierOptions(this IGlobalOptionService options, LanguageServices languageServices) - => options.GetSimplifierOptions(languageServices, fallbackOptions: null); -} diff --git a/src/LanguageServer/Protocol/Handler/InlineCompletions/InlineCompletionsHandler.cs b/src/LanguageServer/Protocol/Handler/InlineCompletions/InlineCompletionsHandler.cs index e3390a4e9c8ad..3704fdb11da52 100644 --- a/src/LanguageServer/Protocol/Handler/InlineCompletions/InlineCompletionsHandler.cs +++ b/src/LanguageServer/Protocol/Handler/InlineCompletions/InlineCompletionsHandler.cs @@ -138,7 +138,7 @@ public TextDocumentIdentifier GetTextDocumentIdentifier(VSInternalInlineCompleti // Use the formatting options specified by the client to format the snippet. var formattingOptions = await ProtocolConversions.GetFormattingOptionsAsync(request.Options, document, _globalOptions, cancellationToken).ConfigureAwait(false); - var simplifierOptions = await document.GetSimplifierOptionsAsync(_globalOptions, cancellationToken).ConfigureAwait(false); + var simplifierOptions = await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); var formattedLspSnippet = await GetFormattedLspSnippetAsync(parsedSnippet, wordOnLeft.Value, document, sourceText, formattingOptions, simplifierOptions, cancellationToken).ConfigureAwait(false); diff --git a/src/LanguageServer/ProtocolUnitTests/VSTypeScriptHandlerTests.cs b/src/LanguageServer/ProtocolUnitTests/VSTypeScriptHandlerTests.cs index 33dc6b49bf646..31c6ceb43706a 100644 --- a/src/LanguageServer/ProtocolUnitTests/VSTypeScriptHandlerTests.cs +++ b/src/LanguageServer/ProtocolUnitTests/VSTypeScriptHandlerTests.cs @@ -84,7 +84,7 @@ public async Task TestGetSimplifierOptionsOnTypeScriptDocument() await using var testLspServer = await CreateTsTestLspServerAsync(workspaceXml); var document = testLspServer.GetCurrentSolution().Projects.Single().Documents.Single(); - var simplifierOptions = testLspServer.TestWorkspace.GlobalOptions.GetSimplifierOptions(document.Project.Services, fallbackOptions: null); + var simplifierOptions = testLspServer.TestWorkspace.GlobalOptions.GetSimplifierOptions(document.Project.Services); Assert.Same(SimplifierOptions.CommonDefaults, simplifierOptions); } diff --git a/src/VisualStudio/Core/Def/Snippets/SnippetFunctions/SnippetFunctionGenerateSwitchCases.cs b/src/VisualStudio/Core/Def/Snippets/SnippetFunctions/SnippetFunctionGenerateSwitchCases.cs index 526e0a7091825..36808805bb5a1 100644 --- a/src/VisualStudio/Core/Def/Snippets/SnippetFunctions/SnippetFunctionGenerateSwitchCases.cs +++ b/src/VisualStudio/Core/Def/Snippets/SnippetFunctions/SnippetFunctionGenerateSwitchCases.cs @@ -55,7 +55,7 @@ protected override async Task<(int ExitCode, string Value, int HasCurrentValue)> return (VSConstants.S_OK, snippetFunctionService.SwitchDefaultCaseForm, hasCurrentValue); } - var simplifierOptions = await document.GetSimplifierOptionsAsync(snippetExpansionClient.EditorOptionsService.GlobalOptions, cancellationToken).ConfigureAwait(false); + var simplifierOptions = await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); var value = await snippetFunctionService.GetSwitchExpansionAsync(document, caseGenerationSpan.Value, switchExpressionSpan.Value, simplifierOptions, cancellationToken).ConfigureAwait(false); if (value == null) diff --git a/src/VisualStudio/Core/Def/Snippets/SnippetFunctions/SnippetFunctionSimpleTypeName.cs b/src/VisualStudio/Core/Def/Snippets/SnippetFunctions/SnippetFunctionSimpleTypeName.cs index 77665d5efd398..441423e364c80 100644 --- a/src/VisualStudio/Core/Def/Snippets/SnippetFunctions/SnippetFunctionSimpleTypeName.cs +++ b/src/VisualStudio/Core/Def/Snippets/SnippetFunctions/SnippetFunctionSimpleTypeName.cs @@ -42,7 +42,7 @@ protected override async Task<(int ExitCode, string Value, int HasDefaultValue)> if (!TryGetFieldSpan(out var fieldSpan)) return (VSConstants.E_FAIL, value, hasDefaultValue); - var simplifierOptions = await document.GetSimplifierOptionsAsync(snippetExpansionClient.EditorOptionsService.GlobalOptions, cancellationToken).ConfigureAwait(false); + var simplifierOptions = await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); var simplifiedTypeName = await SnippetFunctionService.GetSimplifiedTypeNameAsync(document, fieldSpan.Value, _fullyQualifiedName, simplifierOptions, cancellationToken).ConfigureAwait(false); if (string.IsNullOrEmpty(simplifiedTypeName)) diff --git a/src/VisualStudio/Core/Impl/CodeModel/AbstractCodeModelService.cs b/src/VisualStudio/Core/Impl/CodeModel/AbstractCodeModelService.cs index d86f436a36f3c..5a3744b54f520 100644 --- a/src/VisualStudio/Core/Impl/CodeModel/AbstractCodeModelService.cs +++ b/src/VisualStudio/Core/Impl/CodeModel/AbstractCodeModelService.cs @@ -1088,7 +1088,7 @@ private Document FormatAnnotatedNode(Document document, SyntaxAnnotation annotat { document = _threadingContext.JoinableTaskFactory.Run(async () => { - var simplifierOptions = await document.GetSimplifierOptionsAsync(_editorOptionsService.GlobalOptions, cancellationToken).ConfigureAwait(false); + var simplifierOptions = await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); return await Simplifier.ReduceAsync(document, annotation, simplifierOptions, cancellationToken).ConfigureAwait(false); }); } diff --git a/src/VisualStudio/Core/Impl/CodeModel/FileCodeModel.cs b/src/VisualStudio/Core/Impl/CodeModel/FileCodeModel.cs index c6fbbb5fcedcc..62359b046a62e 100644 --- a/src/VisualStudio/Core/Impl/CodeModel/FileCodeModel.cs +++ b/src/VisualStudio/Core/Impl/CodeModel/FileCodeModel.cs @@ -704,7 +704,7 @@ int IVBFileCodeModelEvents.EndEdit() // perform expensive operations at once var newDocument = State.ThreadingContext.JoinableTaskFactory.Run(async () => { - var simplifierOptions = await _batchDocument.GetSimplifierOptionsAsync(GlobalOptions, CancellationToken.None).ConfigureAwait(false); + var simplifierOptions = await _batchDocument.GetSimplifierOptionsAsync(CancellationToken.None).ConfigureAwait(false); return await Simplifier.ReduceAsync(_batchDocument, Simplifier.Annotation, simplifierOptions, CancellationToken.None).ConfigureAwait(false); }); diff --git a/src/Workspaces/CSharp/Portable/Simplification/CSharpSimplificationService.cs b/src/Workspaces/CSharp/Portable/Simplification/CSharpSimplificationService.cs index 7b46d9a52c515..d83fd71346b56 100644 --- a/src/Workspaces/CSharp/Portable/Simplification/CSharpSimplificationService.cs +++ b/src/Workspaces/CSharp/Portable/Simplification/CSharpSimplificationService.cs @@ -46,8 +46,8 @@ internal partial class CSharpSimplificationService() public override SimplifierOptions DefaultOptions => CSharpSimplifierOptions.Default; - public override SimplifierOptions GetSimplifierOptions(IOptionsReader options, SimplifierOptions? fallbackOptions) - => new CSharpSimplifierOptions(options, (CSharpSimplifierOptions?)fallbackOptions); + public override SimplifierOptions GetSimplifierOptions(IOptionsReader options) + => new CSharpSimplifierOptions(options, fallbackOptions: null); public override SyntaxNode Expand(SyntaxNode node, SemanticModel semanticModel, SyntaxAnnotation? annotationForReplacedAliasIdentifier, Func? expandInsideNode, bool expandParameter, CancellationToken cancellationToken) { diff --git a/src/Workspaces/Core/Portable/Options/LegacyGlobalCodeActionOptionsWorkspaceService.cs b/src/Workspaces/Core/Portable/Options/LegacyGlobalCodeActionOptionsWorkspaceService.cs index 3c3fdb47c529c..ff2967895982c 100644 --- a/src/Workspaces/Core/Portable/Options/LegacyGlobalCodeActionOptionsWorkspaceService.cs +++ b/src/Workspaces/Core/Portable/Options/LegacyGlobalCodeActionOptionsWorkspaceService.cs @@ -41,7 +41,7 @@ ValueTask OptionsProvider.GetO => ValueTaskFactory.FromResult(options.GetSyntaxFormattingOptions(languageServices, fallbackOptions: null)); ValueTask OptionsProvider.GetOptionsAsync(LanguageServices languageServices, CancellationToken cancellationToken) - => ValueTaskFactory.FromResult(options.GetSimplifierOptions(languageServices, fallbackOptions: null)); + => ValueTaskFactory.FromResult(options.GetSimplifierOptions(languageServices)); ValueTask OptionsProvider.GetOptionsAsync(LanguageServices languageServices, CancellationToken cancellationToken) => ValueTaskFactory.FromResult(options.GetAddImportPlacementOptions(languageServices, allowInHiddenRegions: null, fallbackOptions: null)); diff --git a/src/Workspaces/Core/Portable/Simplification/AbstractSimplificationService.cs b/src/Workspaces/Core/Portable/Simplification/AbstractSimplificationService.cs index c7af9c3154d4e..e054e086ca941 100644 --- a/src/Workspaces/Core/Portable/Simplification/AbstractSimplificationService.cs +++ b/src/Workspaces/Core/Portable/Simplification/AbstractSimplificationService.cs @@ -42,7 +42,7 @@ protected AbstractSimplificationService(ImmutableArray reducers protected abstract void AddImportDeclarations(TCompilationUnitSyntax root, ArrayBuilder importDeclarations); public abstract SimplifierOptions DefaultOptions { get; } - public abstract SimplifierOptions GetSimplifierOptions(IOptionsReader options, SimplifierOptions? fallbackOptions); + public abstract SimplifierOptions GetSimplifierOptions(IOptionsReader options); protected virtual SyntaxNode TransformReducedNode(SyntaxNode reducedNode, SyntaxNode originalNode) => reducedNode; diff --git a/src/Workspaces/Core/Portable/Simplification/Simplifier.cs b/src/Workspaces/Core/Portable/Simplification/Simplifier.cs index c51be4e025b96..4e914dd0958a1 100644 --- a/src/Workspaces/Core/Portable/Simplification/Simplifier.cs +++ b/src/Workspaces/Core/Portable/Simplification/Simplifier.cs @@ -256,7 +256,7 @@ internal static async Task GetOptionsAsync(Document document, { optionSet ??= await document.GetOptionsAsync(cancellationToken).ConfigureAwait(false); var simplificationService = document.Project.Solution.Services.GetRequiredLanguageService(document.Project.Language); - return simplificationService.GetSimplifierOptions(optionSet, fallbackOptions: null); + return simplificationService.GetSimplifierOptions(optionSet); } #pragma warning restore } diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Simplification/CSharpSimplification.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Simplification/CSharpSimplification.cs index ed0177bc6faee..5eace49fe5914 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Simplification/CSharpSimplification.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/CSharp/Simplification/CSharpSimplification.cs @@ -14,6 +14,6 @@ internal sealed class CSharpSimplification : AbstractSimplification public override SimplifierOptions DefaultOptions => CSharpSimplifierOptions.Default; - public override SimplifierOptions GetSimplifierOptions(IOptionsReader options, SimplifierOptions? fallbackOptions) - => new CSharpSimplifierOptions(options, (CSharpSimplifierOptions?)fallbackOptions); + public override SimplifierOptions GetSimplifierOptions(IOptionsReader options) + => new CSharpSimplifierOptions(options, fallbackOptions: null); } diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CodeCleanup/CodeCleanupOptions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CodeCleanup/CodeCleanupOptions.cs index 03e3542930354..658ddb186f855 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CodeCleanup/CodeCleanupOptions.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CodeCleanup/CodeCleanupOptions.cs @@ -88,7 +88,7 @@ public static CodeCleanupOptions GetCodeCleanupOptions(this IOptionsReader optio => new() { FormattingOptions = options.GetSyntaxFormattingOptions(languageServices, fallbackOptions?.FormattingOptions), - SimplifierOptions = options.GetSimplifierOptions(languageServices, fallbackOptions?.SimplifierOptions), + SimplifierOptions = options.GetSimplifierOptions(languageServices), AddImportOptions = options.GetAddImportPlacementOptions(languageServices, allowImportsInHiddenRegions, fallbackOptions?.AddImportOptions), DocumentFormattingOptions = options.GetDocumentFormattingOptions(fallbackOptions?.DocumentFormattingOptions), }; diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/AbstractSimplification.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/AbstractSimplification.cs index 77c93a2aef321..54f2939652cbd 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/AbstractSimplification.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/AbstractSimplification.cs @@ -2,11 +2,6 @@ // 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 Microsoft.CodeAnalysis.Diagnostics; -using Microsoft.CodeAnalysis.Formatting; using Microsoft.CodeAnalysis.Options; namespace Microsoft.CodeAnalysis.Simplification; @@ -14,5 +9,5 @@ namespace Microsoft.CodeAnalysis.Simplification; internal abstract class AbstractSimplification : ISimplification { public abstract SimplifierOptions DefaultOptions { get; } - public abstract SimplifierOptions GetSimplifierOptions(IOptionsReader options, SimplifierOptions? fallbackOptions); + public abstract SimplifierOptions GetSimplifierOptions(IOptionsReader options); } diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/ISimplification.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/ISimplification.cs index 367ea4be74965..22d9d03149504 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/ISimplification.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/ISimplification.cs @@ -10,5 +10,5 @@ namespace Microsoft.CodeAnalysis.Simplification; internal interface ISimplification { SimplifierOptions DefaultOptions { get; } - SimplifierOptions GetSimplifierOptions(IOptionsReader options, SimplifierOptions? fallbackOptions); + SimplifierOptions GetSimplifierOptions(IOptionsReader options); } diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/SimplifierOptions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/SimplifierOptions.cs index 9d758291163c6..db49116604628 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/SimplifierOptions.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Simplification/SimplifierOptions.cs @@ -75,16 +75,13 @@ internal interface SimplifierOptionsProvider internal static partial class SimplifierOptionsProviders { #if !CODE_STYLE - public static SimplifierOptions GetSimplifierOptions(this IOptionsReader options, LanguageServices languageServices, SimplifierOptions? fallbackOptions) - => languageServices.GetService()?.GetSimplifierOptions(options, fallbackOptions) ?? fallbackOptions ?? SimplifierOptions.CommonDefaults; + public static SimplifierOptions GetSimplifierOptions(this IOptionsReader options, LanguageServices languageServices) + => languageServices.GetService()?.GetSimplifierOptions(options) ?? SimplifierOptions.CommonDefaults; - public static async ValueTask GetSimplifierOptionsAsync(this Document document, SimplifierOptions? fallbackOptions, CancellationToken cancellationToken) + public static async ValueTask GetSimplifierOptionsAsync(this Document document, CancellationToken cancellationToken) { var configOptions = await document.GetAnalyzerConfigOptionsAsync(cancellationToken).ConfigureAwait(false); - return configOptions.GetSimplifierOptions(document.Project.Services, fallbackOptions); + return configOptions.GetSimplifierOptions(document.Project.Services); } - - public static async ValueTask GetSimplifierOptionsAsync(this Document document, SimplifierOptionsProvider fallbackOptionsProvider, CancellationToken cancellationToken) - => await document.GetSimplifierOptionsAsync(await fallbackOptionsProvider.GetOptionsAsync(document.Project.Services, cancellationToken).ConfigureAwait(false), cancellationToken).ConfigureAwait(false); #endif } diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Simplification/VisualBasicSimplification.vb b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Simplification/VisualBasicSimplification.vb index 615dbb44f66a3..7eb08356f3d1f 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Simplification/VisualBasicSimplification.vb +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Simplification/VisualBasicSimplification.vb @@ -18,8 +18,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Simplification End Get End Property - Public Overrides Function GetSimplifierOptions(options As IOptionsReader, fallbackOptions As SimplifierOptions) As SimplifierOptions - Return New VisualBasicSimplifierOptions(options, If(DirectCast(fallbackOptions, VisualBasicSimplifierOptions), VisualBasicSimplifierOptions.Default)) + Public Overrides Function GetSimplifierOptions(options As IOptionsReader) As SimplifierOptions + Return New VisualBasicSimplifierOptions(options, fallbackOptions:=Nothing) End Function End Class End Namespace diff --git a/src/Workspaces/VisualBasic/Portable/Simplification/VisualBasicSimplificationService.vb b/src/Workspaces/VisualBasic/Portable/Simplification/VisualBasicSimplificationService.vb index 9246a9f11d22e..1b43d7563f8a2 100644 --- a/src/Workspaces/VisualBasic/Portable/Simplification/VisualBasicSimplificationService.vb +++ b/src/Workspaces/VisualBasic/Portable/Simplification/VisualBasicSimplificationService.vb @@ -44,8 +44,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Simplification End Get End Property - Public Overrides Function GetSimplifierOptions(options As IOptionsReader, fallbackOptions As SimplifierOptions) As SimplifierOptions - Return New VisualBasicSimplifierOptions(options, If(DirectCast(fallbackOptions, VisualBasicSimplifierOptions), VisualBasicSimplifierOptions.Default)) + Public Overrides Function GetSimplifierOptions(options As IOptionsReader) As SimplifierOptions + Return New VisualBasicSimplifierOptions(options, fallbackOptions:=Nothing) End Function Public Overrides Function Expand(node As SyntaxNode, semanticModel As SemanticModel, aliasReplacementAnnotation As SyntaxAnnotation, expandInsideNode As Func(Of SyntaxNode, Boolean), expandParameter As Boolean, cancellationToken As CancellationToken) As SyntaxNode From 6bf2608330e3421fd2d4564958e88ef35720c3e6 Mon Sep 17 00:00:00 2001 From: tmat Date: Mon, 1 Jul 2024 13:38:19 -0700 Subject: [PATCH 2/3] Fix tests --- .../EventHookup/EventHookupTestState.cs | 6 +- .../Portable/Simplification/Simplifier.cs | 2 +- .../CoreTestUtilities/OptionsCollection.cs | 30 ++++++++-- ...gStylePreferencesEditorConfigSerializer.cs | 59 ++++++++++++------- 4 files changed, 69 insertions(+), 28 deletions(-) diff --git a/src/EditorFeatures/CSharpTest/EventHookup/EventHookupTestState.cs b/src/EditorFeatures/CSharpTest/EventHookup/EventHookupTestState.cs index 0794fb43754d9..34ee3662015da 100644 --- a/src/EditorFeatures/CSharpTest/EventHookup/EventHookupTestState.cs +++ b/src/EditorFeatures/CSharpTest/EventHookup/EventHookupTestState.cs @@ -40,7 +40,11 @@ public EventHookupTestState(XElement workspaceElement, OptionsCollection options _testSessionHookupMutex = new Mutex(false); _commandHandler.TESTSessionHookupMutex = _testSessionHookupMutex; - options?.SetGlobalOptions(Workspace.GlobalOptions); + + if (options != null) + { + Workspace.SetAnalyzerFallbackOptions(options); + } } public static EventHookupTestState CreateTestState(string markup, OptionsCollection options = null) diff --git a/src/Workspaces/Core/Portable/Simplification/Simplifier.cs b/src/Workspaces/Core/Portable/Simplification/Simplifier.cs index 4e914dd0958a1..6750525992cf4 100644 --- a/src/Workspaces/Core/Portable/Simplification/Simplifier.cs +++ b/src/Workspaces/Core/Portable/Simplification/Simplifier.cs @@ -244,7 +244,7 @@ internal static Task ReduceAsync(Document document, IEnumerable ReduceAsync( Document document, ImmutableArray reducers, CancellationToken cancellationToken) { - var options = await document.GetSimplifierOptionsAsync(fallbackOptions: null, cancellationToken).ConfigureAwait(false); + var options = await document.GetSimplifierOptionsAsync(cancellationToken).ConfigureAwait(false); var root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); return await document.GetRequiredLanguageService() .ReduceAsync(document, [root.FullSpan], options, diff --git a/src/Workspaces/CoreTestUtilities/OptionsCollection.cs b/src/Workspaces/CoreTestUtilities/OptionsCollection.cs index 94665d087e9a6..2dd25d10a1461 100644 --- a/src/Workspaces/CoreTestUtilities/OptionsCollection.cs +++ b/src/Workspaces/CoreTestUtilities/OptionsCollection.cs @@ -7,6 +7,7 @@ using System.Diagnostics; using Microsoft.CodeAnalysis.CodeStyle; using Microsoft.CodeAnalysis.Options; +using Microsoft.CodeAnalysis.Diagnostics.Analyzers.NamingStyles; #if !CODE_STYLE using System.Collections.Immutable; @@ -19,6 +20,7 @@ #if !NETCOREAPP using System; using Roslyn.Utilities; +using System.Text; #endif namespace Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions @@ -64,9 +66,9 @@ public void Add(PerLanguageOption2> option, T value, Noti public void Add(OptionsCollection? options) => AddRange(options); - public void AddRange(OptionsCollection? options) + public void AddRange(IEnumerable>? options) { - if (options is null) + if (options == null) return; foreach (var (key, value) in options) @@ -95,9 +97,27 @@ public StructuredAnalyzerConfigOptions ToAnalyzerConfigOptions() { Assert.All(this, o => Assert.True(o.Key.Option.Definition.IsEditorConfigOption)); - return StructuredAnalyzerConfigOptions.Create( - new DictionaryAnalyzerConfigOptions( - this.Select(static o => new KeyValuePair(o.Key.Option.Definition.ConfigName, o.Key.Option.Definition.Serializer.Serialize(o.Value))).ToImmutableDictionary())); + var builder = ImmutableDictionary.CreateBuilder(AnalyzerConfigOptions.KeyComparer); + + foreach (var (key, value) in this) + { + if (value is NamingStylePreferences namingPreferences) + { + NamingStylePreferencesEditorConfigSerializer.WriteNamingStylePreferencesToEditorConfig( + namingPreferences.SymbolSpecifications, + namingPreferences.NamingStyles, + namingPreferences.NamingRules, + LanguageName, + entryWriter: builder.Add, + triviaWriter: null); + } + else + { + builder.Add(key.Option.Definition.ConfigName, key.Option.Definition.Serializer.Serialize(value)); + } + } + + return StructuredAnalyzerConfigOptions.Create(new DictionaryAnalyzerConfigOptions(builder.ToImmutable())); } #endif diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/NamingStyles/Serialization/NamingStylePreferencesEditorConfigSerializer.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/NamingStyles/Serialization/NamingStylePreferencesEditorConfigSerializer.cs index 81bf841ca8526..f27600ca2941d 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/NamingStyles/Serialization/NamingStylePreferencesEditorConfigSerializer.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/NamingStyles/Serialization/NamingStylePreferencesEditorConfigSerializer.cs @@ -31,30 +31,47 @@ public static void AppendToEditorConfig(this NamingStylePreferences namingStyleP ImmutableArray namingStyles, ImmutableArray serializableNamingRules, string language, - StringBuilder editorconfig) + StringBuilder builder) { - editorconfig.AppendLine($"#### {CompilerExtensionsResources.Naming_styles} ####"); + WriteNamingStylePreferencesToEditorConfig( + symbolSpecifications, + namingStyles, + serializableNamingRules, + language, + entryWriter: (name, value) => builder.AppendLine($"{name} = {value}"), + triviaWriter: trivia => builder.AppendLine(trivia)); + } + + public static void WriteNamingStylePreferencesToEditorConfig( + ImmutableArray symbolSpecifications, + ImmutableArray namingStyles, + ImmutableArray serializableNamingRules, + string language, + Action entryWriter, + Action? triviaWriter) + { + triviaWriter?.Invoke($"#### {CompilerExtensionsResources.Naming_styles} ####"); var serializedNameMap = AssignNamesToNamingStyleElements(symbolSpecifications, namingStyles); var ruleNameMap = AssignNamesToNamingStyleRules(serializableNamingRules, serializedNameMap); var referencedElements = new HashSet(); - editorconfig.AppendLine(); - editorconfig.AppendLine($"# {CompilerExtensionsResources.Naming_rules}"); + triviaWriter?.Invoke(""); + triviaWriter?.Invoke($"# {CompilerExtensionsResources.Naming_rules}"); foreach (var namingRule in serializableNamingRules) { referencedElements.Add(namingRule.SymbolSpecificationID); referencedElements.Add(namingRule.NamingStyleID); - editorconfig.AppendLine(); - editorconfig.AppendLine($"dotnet_naming_rule.{ruleNameMap[namingRule]}.severity = {namingRule.EnforcementLevel.ToNotificationOption(defaultSeverity: DiagnosticSeverity.Hidden).ToEditorConfigString()}"); - editorconfig.AppendLine($"dotnet_naming_rule.{ruleNameMap[namingRule]}.symbols = {serializedNameMap[namingRule.SymbolSpecificationID]}"); - editorconfig.AppendLine($"dotnet_naming_rule.{ruleNameMap[namingRule]}.style = {serializedNameMap[namingRule.NamingStyleID]}"); + triviaWriter?.Invoke(""); + entryWriter($"dotnet_naming_rule.{ruleNameMap[namingRule]}.severity", namingRule.EnforcementLevel.ToNotificationOption(defaultSeverity: DiagnosticSeverity.Hidden).ToEditorConfigString()); + entryWriter($"dotnet_naming_rule.{ruleNameMap[namingRule]}.symbols", serializedNameMap[namingRule.SymbolSpecificationID]); + entryWriter($"dotnet_naming_rule.{ruleNameMap[namingRule]}.style", serializedNameMap[namingRule.NamingStyleID]); } - editorconfig.AppendLine(); - editorconfig.AppendLine($"# {CompilerExtensionsResources.Symbol_specifications}"); + triviaWriter?.Invoke(""); + triviaWriter?.Invoke($"# {CompilerExtensionsResources.Symbol_specifications}"); foreach (var symbolSpecification in symbolSpecifications) { @@ -63,14 +80,14 @@ public static void AppendToEditorConfig(this NamingStylePreferences namingStyleP continue; } - editorconfig.AppendLine(); - editorconfig.AppendLine($"dotnet_naming_symbols.{serializedNameMap[symbolSpecification.ID]}.applicable_kinds = {symbolSpecification.ApplicableSymbolKindList.ToEditorConfigString()}"); - editorconfig.AppendLine($"dotnet_naming_symbols.{serializedNameMap[symbolSpecification.ID]}.applicable_accessibilities = {symbolSpecification.ApplicableAccessibilityList.ToEditorConfigString(language)}"); - editorconfig.AppendLine($"dotnet_naming_symbols.{serializedNameMap[symbolSpecification.ID]}.required_modifiers = {symbolSpecification.RequiredModifierList.ToEditorConfigString(language)}"); + triviaWriter?.Invoke(""); + entryWriter($"dotnet_naming_symbols.{serializedNameMap[symbolSpecification.ID]}.applicable_kinds", symbolSpecification.ApplicableSymbolKindList.ToEditorConfigString()); + entryWriter($"dotnet_naming_symbols.{serializedNameMap[symbolSpecification.ID]}.applicable_accessibilities", symbolSpecification.ApplicableAccessibilityList.ToEditorConfigString(language)); + entryWriter($"dotnet_naming_symbols.{serializedNameMap[symbolSpecification.ID]}.required_modifiers", symbolSpecification.RequiredModifierList.ToEditorConfigString(language)); } - editorconfig.AppendLine(); - editorconfig.AppendLine($"# {CompilerExtensionsResources.Naming_styles}"); + triviaWriter?.Invoke(""); + triviaWriter?.Invoke($"# {CompilerExtensionsResources.Naming_styles}"); foreach (var namingStyle in namingStyles) { @@ -79,11 +96,11 @@ public static void AppendToEditorConfig(this NamingStylePreferences namingStyleP continue; } - editorconfig.AppendLine(); - editorconfig.AppendLine($"dotnet_naming_style.{serializedNameMap[namingStyle.ID]}.required_prefix = {namingStyle.Prefix}"); - editorconfig.AppendLine($"dotnet_naming_style.{serializedNameMap[namingStyle.ID]}.required_suffix = {namingStyle.Suffix}"); - editorconfig.AppendLine($"dotnet_naming_style.{serializedNameMap[namingStyle.ID]}.word_separator = {namingStyle.WordSeparator}"); - editorconfig.AppendLine($"dotnet_naming_style.{serializedNameMap[namingStyle.ID]}.capitalization = {namingStyle.CapitalizationScheme.ToEditorConfigString()}"); + triviaWriter?.Invoke(""); + entryWriter($"dotnet_naming_style.{serializedNameMap[namingStyle.ID]}.required_prefix", namingStyle.Prefix); + entryWriter($"dotnet_naming_style.{serializedNameMap[namingStyle.ID]}.required_suffix", namingStyle.Suffix); + entryWriter($"dotnet_naming_style.{serializedNameMap[namingStyle.ID]}.word_separator", namingStyle.WordSeparator); + entryWriter($"dotnet_naming_style.{serializedNameMap[namingStyle.ID]}.capitalization", namingStyle.CapitalizationScheme.ToEditorConfigString()); } } From 29d19b74e01b22314f5c84ced3d9ca374c4f93a7 Mon Sep 17 00:00:00 2001 From: tmat Date: Mon, 1 Jul 2024 14:49:13 -0700 Subject: [PATCH 3/3] Fix --- src/EditorFeatures/CSharpTest/Intents/IntentTestsBase.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/EditorFeatures/CSharpTest/Intents/IntentTestsBase.cs b/src/EditorFeatures/CSharpTest/Intents/IntentTestsBase.cs index e5a5ca8815e4b..bb034974a541b 100644 --- a/src/EditorFeatures/CSharpTest/Intents/IntentTestsBase.cs +++ b/src/EditorFeatures/CSharpTest/Intents/IntentTestsBase.cs @@ -97,7 +97,10 @@ public class IntentTestsBase OptionsCollection? options = null, string? intentData = null) { - options?.SetGlobalOptions(workspace.GlobalOptions); + if (options != null) + { + workspace.SetAnalyzerFallbackOptions(options); + } var intentSource = workspace.ExportProvider.GetExportedValue();