From d8d8193cec262b540eb1aab31c66ec33f0fceef3 Mon Sep 17 00:00:00 2001 From: Andrei Shenets Date: Sun, 30 Mar 2025 12:39:38 +0200 Subject: [PATCH 01/38] Added ignoring of JetBrains Rider/Idea files --- .gitignore | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index aa3419f5f5..a5ec2da68c 100644 --- a/.gitignore +++ b/.gitignore @@ -140,7 +140,7 @@ publish/ *.[Pp]ublish.xml *.azurePubxml -# TODO: Un-comment the next line if you do not want to checkin +# TODO: Un-comment the next line if you do not want to checkin # your web deploy settings because they may include unencrypted # passwords #*.pubxml @@ -244,4 +244,7 @@ ModelManifest.xml # FAKE - F# Make .fake/ -.DS_Store \ No newline at end of file +.DS_Store + +# JetBrains Rider setting files +.idea/ From 3afb7e8a822c0551e84552f377ac971317698014 Mon Sep 17 00:00:00 2001 From: Andrei Shenets Date: Sun, 30 Mar 2025 13:50:30 +0200 Subject: [PATCH 02/38] Added forcing of 2 space indent for Analyzers.xml files. Disabled trimming of trailing white spaces --- .editorconfig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.editorconfig b/.editorconfig index f9ecc06957..680563c619 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,6 +10,10 @@ indent_style = space [*.{cs,csx}] indent_size = 4 +[Analyzers.xml] +indent_size = 2 +trim_trailing_whitespace = false + # https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/csharp-formatting-options # New-line options From acc63033736da0b54eec748bf8a882d217538dfc Mon Sep 17 00:00:00 2001 From: Andrei Shenets Date: Sun, 30 Mar 2025 13:51:12 +0200 Subject: [PATCH 03/38] Generated constants for RCS1269 --- src/Analyzers.xml | 36 +++++++++++++++++++ src/Common/DiagnosticIdentifiers.Generated.cs | 1 + src/Common/DiagnosticRules.Generated.cs | 12 +++++++ .../src/configurationFiles.generated.ts | 3 ++ 4 files changed, 52 insertions(+) diff --git a/src/Analyzers.xml b/src/Analyzers.xml index 072001d577..e340d56cfb 100644 --- a/src/Analyzers.xml +++ b/src/Analyzers.xml @@ -7819,6 +7819,42 @@ string s = """ + + RCS1269 + FixBracketFormattingOfList + Fix bracket formatting of a list + Fix bracket formatting of {0} + Info + false + + This analyzer: + * adds new line after an opening bracket of method definition or call + * adds new line before a closing bracket of method definition or call + * aligns the closing bracket with the block containing its opening bracket + The analyzer works only for multi-line declarations. + + + + + + + + + + + + RCS9001 UsePatternMatching diff --git a/src/Common/DiagnosticIdentifiers.Generated.cs b/src/Common/DiagnosticIdentifiers.Generated.cs index 7d6e59085e..3f811ce922 100644 --- a/src/Common/DiagnosticIdentifiers.Generated.cs +++ b/src/Common/DiagnosticIdentifiers.Generated.cs @@ -280,5 +280,6 @@ public static partial class DiagnosticIdentifiers public const string UseRawStringLiteral = "RCS1266"; public const string UseStringInterpolationInsteadOfStringConcat = "RCS1267"; public const string SimplifyNumericComparison = "RCS1268"; + public const string FixBracketFormattingOfList = "RCS1269"; } } \ No newline at end of file diff --git a/src/Common/DiagnosticRules.Generated.cs b/src/Common/DiagnosticRules.Generated.cs index 0b631ac6fb..e9f72ec0e6 100644 --- a/src/Common/DiagnosticRules.Generated.cs +++ b/src/Common/DiagnosticRules.Generated.cs @@ -3323,5 +3323,17 @@ public static partial class DiagnosticRules helpLinkUri: DiagnosticIdentifiers.SimplifyNumericComparison, customTags: []); + /// RCS1269 + public static readonly DiagnosticDescriptor FixBracketFormattingOfList = DiagnosticDescriptorFactory.Create( + id: DiagnosticIdentifiers.FixBracketFormattingOfList, + title: "Fix bracket formatting of a list", + messageFormat: "Fix bracket formatting of {0}", + category: DiagnosticCategories.Roslynator, + defaultSeverity: DiagnosticSeverity.Info, + isEnabledByDefault: false, + description: null, + helpLinkUri: DiagnosticIdentifiers.FixBracketFormattingOfList, + customTags: []); + } } \ No newline at end of file diff --git a/src/VisualStudioCode/package/src/configurationFiles.generated.ts b/src/VisualStudioCode/package/src/configurationFiles.generated.ts index 538f74612f..8028596d79 100644 --- a/src/VisualStudioCode/package/src/configurationFiles.generated.ts +++ b/src/VisualStudioCode/package/src/configurationFiles.generated.ts @@ -923,6 +923,9 @@ roslynator_analyzers.enabled_by_default = true|false # Simplify numeric comparison #dotnet_diagnostic.rcs1268.severity = suggestion +# Fix bracket formatting of a list +#dotnet_diagnostic.rcs1269.severity = none + # Use pattern matching #dotnet_diagnostic.rcs9001.severity = silent From 48719da5b4211b40e85f01d22616fb80608b18c1 Mon Sep 17 00:00:00 2001 From: Andrei Shenets Date: Sun, 30 Mar 2025 14:08:53 +0200 Subject: [PATCH 04/38] Adjusted indent size for *.xml files --- .editorconfig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index 680563c619..aa35122b52 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,8 +10,10 @@ indent_style = space [*.{cs,csx}] indent_size = 4 -[Analyzers.xml] +[*.xml] indent_size = 2 + +[Analyzers.xml] trim_trailing_whitespace = false # https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/csharp-formatting-options From be55b98ff729effb3fe62d911b1784914f9252ca Mon Sep 17 00:00:00 2001 From: Andrei Shenets Date: Sun, 30 Mar 2025 14:09:33 +0200 Subject: [PATCH 05/38] Added TargetBracesStyle --- .../CSharp/CodeStyle/TargetBracesStyle.cs | 11 +++++++++ .../CSharp/Extensions/CodeStyleExtensions.cs | 23 +++++++++++++++++++ src/Common/ConfigOptionKeys.Generated.cs | 1 + src/Common/ConfigOptionValues.Generated.cs | 4 ++++ src/Common/ConfigOptions.Generated.cs | 6 +++++ src/ConfigOptions.xml | 9 ++++++++ .../src/configurationFiles.generated.ts | 3 +++ 7 files changed, 57 insertions(+) create mode 100644 src/Common/CSharp/CodeStyle/TargetBracesStyle.cs diff --git a/src/Common/CSharp/CodeStyle/TargetBracesStyle.cs b/src/Common/CSharp/CodeStyle/TargetBracesStyle.cs new file mode 100644 index 0000000000..d816fb0178 --- /dev/null +++ b/src/Common/CSharp/CodeStyle/TargetBracesStyle.cs @@ -0,0 +1,11 @@ +// Copyright (c) .NET Foundation and Contributors. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Roslynator.CSharp.CodeStyle; + +public enum TargetBracesStyle +{ + None, + Opening, + Closing, + Both +} \ No newline at end of file diff --git a/src/Common/CSharp/Extensions/CodeStyleExtensions.cs b/src/Common/CSharp/Extensions/CodeStyleExtensions.cs index 48fafdc967..4afb16cdf9 100644 --- a/src/Common/CSharp/Extensions/CodeStyleExtensions.cs +++ b/src/Common/CSharp/Extensions/CodeStyleExtensions.cs @@ -656,6 +656,29 @@ public static NewLinePosition GetNullConditionalOperatorNewLinePosition(this Syn return context.GetConfigOptions().GetNullConditionalOperatorNewLinePosition(defaultValue); } + public static TargetBracesStyle GetTargetBracesStyle(this SyntaxNodeAnalysisContext context) + { + AnalyzerConfigOptions configOptions = context.GetConfigOptions(); + + if (ConfigOptions.TryGetValue(configOptions, ConfigOptions.TargetBracesStyle, out string rawValue)) + { + if (string.Equals(rawValue, ConfigOptionValues.TargetBracesStyle_Both, StringComparison.OrdinalIgnoreCase)) + { + return TargetBracesStyle.Both; + } + else if (string.Equals(rawValue, ConfigOptionValues.TargetBracesStyle_Closing, StringComparison.OrdinalIgnoreCase)) + { + return TargetBracesStyle.Closing; + } + else if (string.Equals(rawValue, ConfigOptionValues.TargetBracesStyle_Opening, StringComparison.OrdinalIgnoreCase)) + { + return TargetBracesStyle.Opening; + } + } + + return TargetBracesStyle.None; + } + private static bool TryGetNewLinePosition( AnalyzerConfigOptions configOptions, ConfigOptionDescriptor option, diff --git a/src/Common/ConfigOptionKeys.Generated.cs b/src/Common/ConfigOptionKeys.Generated.cs index d03c51daff..b5b25046a3 100644 --- a/src/Common/ConfigOptionKeys.Generated.cs +++ b/src/Common/ConfigOptionKeys.Generated.cs @@ -37,6 +37,7 @@ internal static partial class ConfigOptionKeys public const string PrefixFieldIdentifierWithUnderscore = "roslynator_prefix_field_identifier_with_underscore"; public const string SuppressUnityScriptMethods = "roslynator_suppress_unity_script_methods"; public const string TabLength = "roslynator_tab_length"; + public const string TargetBracesStyle = "roslynator_target_braces_style"; public const string TrailingCommaStyle = "roslynator_trailing_comma_style"; public const string UnityCodeAnalysisEnabled = "roslynator_unity_code_analysis.enabled"; public const string UseAnonymousFunctionOrMethodGroup = "roslynator_use_anonymous_function_or_method_group"; diff --git a/src/Common/ConfigOptionValues.Generated.cs b/src/Common/ConfigOptionValues.Generated.cs index 06ae33fb45..ee449d1350 100644 --- a/src/Common/ConfigOptionValues.Generated.cs +++ b/src/Common/ConfigOptionValues.Generated.cs @@ -52,6 +52,10 @@ internal static partial class ConfigOptionValues public const string ObjectCreationTypeStyle_Explicit = "explicit"; public const string ObjectCreationTypeStyle_Implicit = "implicit"; public const string ObjectCreationTypeStyle_ImplicitWhenTypeIsObvious = "implicit_when_type_is_obvious"; + public const string TargetBracesStyle_None = "none"; + public const string TargetBracesStyle_Opening = "opening"; + public const string TargetBracesStyle_Closing = "closing"; + public const string TargetBracesStyle_Both = "both"; public const string TrailingCommaStyle_Include = "include"; public const string TrailingCommaStyle_Omit = "omit"; public const string TrailingCommaStyle_OmitWhenSingleLine = "omit_when_single_line"; diff --git a/src/Common/ConfigOptions.Generated.cs b/src/Common/ConfigOptions.Generated.cs index 556a34bd13..95e6066949 100644 --- a/src/Common/ConfigOptions.Generated.cs +++ b/src/Common/ConfigOptions.Generated.cs @@ -196,6 +196,12 @@ public static partial class ConfigOptions defaultValuePlaceholder: "", description: "A number of spaces that are equivalent to a tab character"); + public static readonly ConfigOptionDescriptor TargetBracesStyle = new( + key: ConfigOptionKeys.TargetBracesStyle, + defaultValue: "none", + defaultValuePlaceholder: "both|closing|none|opening", + description: "Define which braces should be used as a target of the code fix"); + public static readonly ConfigOptionDescriptor TrailingCommaStyle = new( key: ConfigOptionKeys.TrailingCommaStyle, defaultValue: null, diff --git a/src/ConfigOptions.xml b/src/ConfigOptions.xml index 7e43508098..cb70170eee 100644 --- a/src/ConfigOptions.xml +++ b/src/ConfigOptions.xml @@ -237,6 +237,15 @@ when_type_is_obvious +