Style code quality
Recipe ID
OpenRewrite.Recipes.CSharp.CodeQuality.Style.StyleCodeQualityArtifactOpenRewrite.Recipes.CSharp.CodeQualityCode style modernization recipes for C#.
Composite recipecsharpstylecode-qualityProprietary
Usage
This recipe has no required configuration options. You’ll need the Moderne CLI configured before running the command below.
mod run . --recipe OpenRewrite.Recipes.CSharp.CodeQuality.Style.StyleCodeQualityIf the recipe isn’t available locally, install it with:
mod config recipes nuget install OpenRewrite.Recipes.CSharp.CodeQualityDefinition
This recipe runs the following recipes in order.
- Use EventArgs.Empty
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseEventArgsEmpty - Place constant values on right side of comparisons
OpenRewrite.Recipes.CSharp.CodeQuality.Style.ConstantValuesOnRightSide - Use string.Length instead of comparison with empty string
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseStringLengthComparison - Use pattern matching for null check
OpenRewrite.Recipes.CSharp.CodeQuality.Simplification.UsePatternMatchingNullCheck - Use string.IsNullOrEmpty method
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseStringIsNullOrEmpty - Use string.Contains instead of IndexOf comparison
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseStringContains - Simplify boolean logic with constants
OpenRewrite.Recipes.CSharp.CodeQuality.Style.SimplifyBooleanLogic - Prefer null check over type check
OpenRewrite.Recipes.CSharp.CodeQuality.Style.PreferNullCheckOverTypeCheck - Use explicit type instead of var
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseExplicitTypeInsteadOfVar - Use method group conversion
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseMethodGroupConversion - Use collection expression
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseCollectionExpression - Use file-scoped namespace
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseFileScopedNamespace - Use primary constructor
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UsePrimaryConstructor - Make class sealed
OpenRewrite.Recipes.CSharp.CodeQuality.Style.MakeClassSealed - Make field read-only
OpenRewrite.Recipes.CSharp.CodeQuality.Style.MakeFieldReadOnly - Use auto property
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseAutoProperty - Mark local variable as const
OpenRewrite.Recipes.CSharp.CodeQuality.Style.MarkLocalVariableAsConst - Use read-only auto property
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseReadOnlyAutoProperty - Default label should be last
OpenRewrite.Recipes.CSharp.CodeQuality.Style.DefaultLabelShouldBeLast - Make class static
OpenRewrite.Recipes.CSharp.CodeQuality.Style.MakeClassStatic - Avoid nested ternary operator
OpenRewrite.Recipes.CSharp.CodeQuality.Style.AvoidNestingTernary - Use element access
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseElementAccess - Sort enum members
OpenRewrite.Recipes.CSharp.CodeQuality.Style.SortEnumMembers - Abstract type should not have public constructors
OpenRewrite.Recipes.CSharp.CodeQuality.Style.AbstractTypeShouldNotHavePublicConstructors - Declare each attribute separately
OpenRewrite.Recipes.CSharp.CodeQuality.Style.DeclareEachAttributeSeparately - Use method chaining
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseMethodChaining - Use using declaration
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseUsingDeclaration - Avoid chain of assignments
OpenRewrite.Recipes.CSharp.CodeQuality.Style.AvoidChainOfAssignments - Implement exception constructors
OpenRewrite.Recipes.CSharp.CodeQuality.Style.ImplementExceptionConstructors - Use AttributeUsageAttribute
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseAttributeUsageAttribute - Value type is never equal to null
OpenRewrite.Recipes.CSharp.CodeQuality.Style.ValueTypeIsNeverEqualToNull - Split variable declaration
OpenRewrite.Recipes.CSharp.CodeQuality.Style.SplitVariableDeclaration - Remove unused parameter
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UnusedParameter - Remove unused type parameter
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UnusedTypeParameter - Parameter name differs from base
OpenRewrite.Recipes.CSharp.CodeQuality.Style.ParameterNameDiffersFromBase - Use constant instead of field
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseConstantInsteadOfField - Call extension method as instance method
OpenRewrite.Recipes.CSharp.CodeQuality.Style.CallExtensionMethodAsInstance - Order named arguments by parameters
OpenRewrite.Recipes.CSharp.CodeQuality.Style.OrderNamedArguments - Order type parameter constraints
OpenRewrite.Recipes.CSharp.CodeQuality.Style.OrderTypeParameterConstraints - Flag duplicate enum value
OpenRewrite.Recipes.CSharp.CodeQuality.Style.DuplicateEnumValue - Use EventHandler<T>
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseEventHandlerT - Declare enum value as combination of names
OpenRewrite.Recipes.CSharp.CodeQuality.Style.DeclareEnumValueAsCombination - Add static modifier to all members of static class
OpenRewrite.Recipes.CSharp.CodeQuality.Style.AddStaticToMembersOfStaticClass - Normalize format of enum flag value
OpenRewrite.Recipes.CSharp.CodeQuality.Style.NormalizeEnumFlagValue - Use coalesce expression
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseCoalesceExpressionFromNullCheck - Declare enum member with zero value
OpenRewrite.Recipes.CSharp.CodeQuality.Style.DeclareEnumMemberWithZeroValue - Use async/await when necessary
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseAsyncAwait - Implement non-generic counterpart
OpenRewrite.Recipes.CSharp.CodeQuality.Style.ImplementNonGenericCounterpart - Fix invalid argument null check
OpenRewrite.Recipes.CSharp.CodeQuality.Style.InvalidArgumentNullCheck - Use enum field explicitly
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseEnumFieldExplicitly - Use var instead of explicit type in foreach
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseVarInForEach - Use explicitly typed array
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseExplicitlyTypedArray - Add parentheses to conditional expression condition
OpenRewrite.Recipes.CSharp.CodeQuality.Style.AddParenthesesToConditionalExpression - Declare each type in separate file
OpenRewrite.Recipes.CSharp.CodeQuality.Style.DeclareEachTypeInSeparateFile - Declare using directive on top level
OpenRewrite.Recipes.CSharp.CodeQuality.Style.DeclareUsingDirectiveOnTopLevel - Add parentheses for clarity
OpenRewrite.Recipes.CSharp.CodeQuality.Style.AddParenthesesForClarity - Composite enum value contains undefined flag
OpenRewrite.Recipes.CSharp.CodeQuality.Style.CompositeEnumContainsUndefinedFlag - Static member in generic type should use a type parameter
OpenRewrite.Recipes.CSharp.CodeQuality.Style.StaticMemberInGenericType - Convert comment to documentation comment
OpenRewrite.Recipes.CSharp.CodeQuality.Style.ConvertCommentToDocComment - Overriding member should not change 'params' modifier
OpenRewrite.Recipes.CSharp.CodeQuality.Style.OverridingMemberShouldNotChangeParams - Merge preprocessor directives
OpenRewrite.Recipes.CSharp.CodeQuality.Style.MergePreprocessorDirectives - Mark type with DebuggerDisplay attribute
OpenRewrite.Recipes.CSharp.CodeQuality.Style.MarkTypeWithDebuggerDisplay - Make method an extension method
OpenRewrite.Recipes.CSharp.CodeQuality.Style.MakeMethodExtensionMethod - Duplicate word in a comment
OpenRewrite.Recipes.CSharp.CodeQuality.Style.DuplicateWordInComment - Use EventArgs.Empty instead of null
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseEventArgsEmptyForNull - Use 'this' for event sender
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseThisForEventSender - Find missing string equality comparer
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindMissingStringEqualityComparer - Obsolete attribute should include explanation
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindObsoleteWithoutMessage - Do not raise reserved exception types
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotRaiseReservedExceptionType - Do not throw from finally block
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotThrowFromFinallyBlock - Embed caught exception as inner exception
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindEmbedCaughtExceptionAsInner - Do not raise ApplicationException
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotRaiseApplicationException - Types should not extend ApplicationException
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindTypeShouldNotExtendApplicationException - Do not use ThreadStatic on instance fields
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindThreadStaticOnInstanceField - Do not use dangerous threading methods
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDangerousThreadingMethods - Do not write custom certificate validation
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotUseCertificateValidationCallback - Do not use anonymous delegates to unsubscribe from events
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindAvoidAnonymousDelegateForUnsubscribe - Use System.Threading.Lock instead of object for locking
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseSystemThreadingLock - ArgumentException should specify argument name
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindArgumentExceptionParameterName - Do not throw NotImplementedException
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotRaiseNotImplementedException - Use OperatingSystem methods instead of RuntimeInformation
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseOperatingSystemMethods - Non-constant static fields should not be visible
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindNonConstantStaticFieldsVisible - Find class with Equals(T) but no IEquatable<T>
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindClassWithEqualsButNoIEquatable - Find non-deterministic end-of-line in strings
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindNonDeterministicEndOfLine - Parenthesize not pattern for clarity
OpenRewrite.Recipes.CSharp.CodeQuality.Style.ParenthesizeNotPattern - Find overrides that change parameter defaults
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindOverrideChangesParameterDefaults - Find boolean literal arguments without parameter name
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindMissingNamedParameter - Find redundant default argument values
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindRedundantArgumentValue - Find ILogger<T> type parameter mismatch
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindILoggerTypeMismatch - Find multi-line XML doc comments
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindMultiLineXmlComment - Use 'var' or explicit type
OpenRewrite.Recipes.CSharp.CodeQuality.Style.UseVarOrExplicitType - Find binary expression with identical sides
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindBothConditionSidesIdentical - Find throw statements in finalizer
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotThrowFromFinalizer - Find async void delegate
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindAsyncVoidDelegate - Find unawaited task return in using block
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindAwaitTaskBeforeDisposing - Find CompareTo without IComparable
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindCompareToWithoutIComparable - Find [DefaultParameterValue] without [Optional]
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDefaultParameterValueNeedsOptional - Find virtual method call in constructor
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotCallVirtualMethodInConstructor - Find comparison with NaN
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotCompareWithNaN - Find type with BCL name
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotCreateTypeWithBCLName - Find static members on generic types
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotDeclareStaticMembersOnGenericTypes - Find overwritten parameter values
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotOverwriteParameterValue - Find EqualityComparer<string>.Default
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotUseEqualityComparerDefaultOfString - Find ToString on object-typed parameter
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotUseObjectToString - Find string.GetHashCode() usage
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotUseStringGetHashCode - Find Equals without [NotNullWhen(true)]
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindEqualsWithoutNotNullWhen - Find event raised with null EventArgs
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindEventArgsSenderNotNull - Find await foreach without CancellationToken
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindFlowCancellationTokenInAwaitForEach - Find IComparable without comparison operators
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindIComparableWithoutComparisonOperators - Find IComparable<T> without IEquatable<T>
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindIComparableWithoutIEquatable - Find IEquatable<T> without Equals(object) override
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindIEquatableWithoutEquals - Find implicit culture-sensitive ToString in concatenation
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindImplicitCultureSensitiveToStringDirect - Find implicit DateTime to DateTimeOffset conversion
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindImplicitDateTimeOffsetConversion - Find interpolated string without parameters
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindInterpolatedStringWithoutParameters - Find potentially invalid attribute argument type
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindInvalidAttributeArgumentType - Find method that is too long
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindMethodTooLong - Find async call missing CancellationToken
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindMissingCancellationTokenOverload - Add trailing comma
OpenRewrite.Recipes.CSharp.CodeQuality.Style.AddTrailingComma - Find override method missing params keyword
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindMissingParamsInOverride - Find string method missing StringComparison
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindMissingStringComparison - Find non-flags enum with [Flags]
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindNonFlagsEnumWithFlagsAttribute - Find unobserved async call result
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindObserveAsyncResult - Find concrete collection in public API
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindPreferCollectionAbstraction - Find raw string with implicit end of line
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindRawStringImplicitEndOfLine - Find static event with non-null sender
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindSenderNullForStaticEvents - Find unawaited task in using statement
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindTaskInUsing - Find ThrowIfNull with value type argument
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindThrowIfNullWithNonNullable - Find type name matching namespace
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindTypeNameMatchesNamespace - Find DateTime.Now/UtcNow usage
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseDateTimeOffsetInsteadOfDateTime - Find [DefaultValue] on parameter
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseDefaultParameterValue - Find == comparison that should use Equals()
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseEqualsMethodInsteadOfOperator - Find integer 0 used instead of named enum value
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseExplicitEnumValue - Find Parse/ToString without IFormatProvider
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseFormatProviderInToString - Find Interlocked.CompareExchange lazy init pattern
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseLazyInitializerEnsureInitialize - Find boolean literal argument without name
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseNamedParameter - Find Process.Start with string argument
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseProcessStartWithStartInfo - Find Regex without ExplicitCapture option
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseRegexOptions - Find redirect without UseShellExecute=false
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseShellExecuteFalseWhenRedirecting - Find ProcessStartInfo without UseShellExecute
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseShellExecuteNotSet - Find Dictionary/HashSet without StringComparer
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseStringComparer - Find 'is' pattern with string literal
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseStringEqualsInsteadOfIsPattern - Find double await pattern
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseTaskUnwrap - Find custom time abstraction
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseTimeProviderInsteadOfCustom - Find argument validation in iterator method
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindValidateArgumentsBeforeYield - Find ElementAt() that could use indexer
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseElementAccessInsteadOfLinq - Find implicit record class declaration
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseRecordClassExplicitly - Find if/else with identical branches
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindIfElseBranchesIdentical - Find equality operator on Span<T>
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindSpanEqualityOperator - Find struct member that could be readonly
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindReadOnlyStructMembers - Find FormattableString usage
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseStringCreateInsteadOfConcat - Find reassigned primary constructor parameter
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindPrimaryConstructorReadonly - Find missing langword in XML comment
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseLangwordInXmlComment - Find multi-line XML doc comment style
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindSingleLineXmlComment - Find non-constant string.Format format string
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindStringFormatConstant - Find explicit zero initialization in enum
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindEnumDefaultValueZero - Find Parse/TryParse without IFormatProvider
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseIFormatProvider - Find redundant nameof with CallerArgumentExpression
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseCallerArgumentExpression - Find async void method
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindAsyncMethodReturnsNull - Find IAsyncEnumerable method without Async suffix
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindMethodReturningIAsyncEnumerable - Find ToString override without DebuggerDisplay
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseDebuggerDisplayAttribute - Find null passed for CancellationToken
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotPassNullForCancellationToken - Find missing NotNullIfNotNull attribute
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindNotNullIfNotNullAttribute - Find Stream.Read() return value ignored
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindStreamReadIgnored - Find Thread.Sleep usage
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotUseSleep - Find GetType() on Type instance
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindDoNotUseGetHashCodeForString - Find missing non-generic interface implementation
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindImplementNonGenericInterface - Find collection emptiness check
OpenRewrite.Recipes.CSharp.CodeQuality.Style.FindUseListPatternMatching