root = true [*] charset = utf-8 insert_final_newline = true trim_trailing_whitespace = true indent_style = space [*.{csproj,props,targets,slnx,xml}] indent_size = 2 [*.json] indent_size = 4 [**/Migrations/**.cs] generated_code = true [*.cs] indent_size = 4 csharp_style_namespace_declarations = block_scoped:warning csharp_using_directive_placement = outside_namespace:warning dotnet_sort_system_directives_first = true dotnet_separate_import_directive_groups = false dotnet_diagnostic.IDE0005.severity = warning dotnet_style_require_accessibility_modifiers = always:warning csharp_style_var_for_built_in_types = true:suggestion csharp_style_var_when_type_is_apparent = true:suggestion csharp_style_var_elsewhere = true:suggestion csharp_prefer_braces = when_multiline:warning csharp_style_prefer_primary_constructors = true:suggestion csharp_style_expression_bodied_methods = when_on_single_line:suggestion dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion # Naming. Roslyn applies the first matching rule in file order, so the specific rules come first. # Private fields are _camelCase whatever their modifiers (static, readonly, const). dotnet_naming_rule.private_fields.symbols = private_fields dotnet_naming_rule.private_fields.style = underscore_camel_case dotnet_naming_rule.private_fields.severity = warning dotnet_naming_symbols.private_fields.applicable_kinds = field dotnet_naming_symbols.private_fields.applicable_accessibilities = private dotnet_naming_style.underscore_camel_case.capitalization = camel_case dotnet_naming_style.underscore_camel_case.required_prefix = _ # Non-private fields (constants, static readonly, etc.) are PascalCase. dotnet_naming_rule.other_fields.symbols = other_fields dotnet_naming_rule.other_fields.style = pascal_case dotnet_naming_rule.other_fields.severity = warning dotnet_naming_symbols.other_fields.applicable_kinds = field dotnet_naming_symbols.other_fields.applicable_accessibilities = public, internal, protected, protected_internal, private_protected dotnet_naming_style.pascal_case.capitalization = pascal_case dotnet_naming_rule.interfaces.symbols = interfaces dotnet_naming_rule.interfaces.style = interface_style dotnet_naming_rule.interfaces.severity = warning dotnet_naming_symbols.interfaces.applicable_kinds = interface dotnet_naming_style.interface_style.capitalization = pascal_case dotnet_naming_style.interface_style.required_prefix = I dotnet_naming_rule.types_and_members.symbols = types_and_members dotnet_naming_rule.types_and_members.style = pascal_case dotnet_naming_rule.types_and_members.severity = warning dotnet_naming_symbols.types_and_members.applicable_kinds = class, struct, enum, delegate, property, method, event dotnet_naming_symbols.types_and_members.applicable_accessibilities = * # CA1848/CA1873 would turn every log call into a [LoggerMessage] source-generated method; CA1716 flags the # EF-style IDatabase.Set() and the Musify.Application.Shared namespace, whose names are deliberate. dotnet_diagnostic.CA1848.severity = suggestion dotnet_diagnostic.CA1873.severity = suggestion dotnet_diagnostic.CA1716.severity = suggestion # The routing slip builders are stateless services resolved from DI; they stay instance members. dotnet_diagnostic.CA1822.severity = suggestion # Test names follow Method_Scenario_Expected. [Tests/**.cs] dotnet_diagnostic.CA1707.severity = none # xUnit collection fixtures are conventionally named ...Collection. dotnet_diagnostic.CA1711.severity = none