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

Remove fallback options for SimplifierOptions #74222

Merged
merged 3 commits into from
Jul 2, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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 @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ internal static Task<Document> ReduceAsync(Document document, IEnumerable<TextSp
internal static async Task<Document> ReduceAsync(
Document document, ImmutableArray<AbstractReducer> 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<ISimplificationService>()
.ReduceAsync(document, [root.FullSpan], options,
Expand Down
30 changes: 25 additions & 5 deletions src/Workspaces/CoreTestUtilities/OptionsCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -19,6 +20,7 @@
#if !NETCOREAPP
using System;
using Roslyn.Utilities;
using System.Text;
#endif

namespace Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions
Expand Down Expand Up @@ -64,9 +66,9 @@ public void Add<T>(PerLanguageOption2<CodeStyleOption2<T>> option, T value, Noti
public void Add(OptionsCollection? options)
=> AddRange(options);

public void AddRange(OptionsCollection? options)
public void AddRange(IEnumerable<KeyValuePair<OptionKey2, object?>>? options)
{
if (options is null)
if (options == null)
tmat marked this conversation as resolved.
Show resolved Hide resolved
return;

foreach (var (key, value) in options)
Expand Down Expand Up @@ -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<string, string>(o.Key.Option.Definition.ConfigName, o.Key.Option.Definition.Serializer.Serialize(o.Value))).ToImmutableDictionary()));
var builder = ImmutableDictionary.CreateBuilder<string, string>(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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,30 +31,47 @@ public static void AppendToEditorConfig(this NamingStylePreferences namingStyleP
ImmutableArray<NamingStyle> namingStyles,
ImmutableArray<SerializableNamingRule> 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<SymbolSpecification> symbolSpecifications,
ImmutableArray<NamingStyle> namingStyles,
ImmutableArray<SerializableNamingRule> serializableNamingRules,
string language,
Action<string, string> entryWriter,
Action<string>? triviaWriter)
{
triviaWriter?.Invoke($"#### {CompilerExtensionsResources.Naming_styles} ####");

var serializedNameMap = AssignNamesToNamingStyleElements(symbolSpecifications, namingStyles);
var ruleNameMap = AssignNamesToNamingStyleRules(serializableNamingRules, serializedNameMap);
var referencedElements = new HashSet<Guid>();

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)
{
Expand All @@ -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)
{
Expand All @@ -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());
}
}

Expand Down
Loading