root = true

[*]
insert_final_newline = true
end_of_line          = crlf
indent_size          = 4
charset              = utf-8

[*.cs]
indent_style                                                             = tab
dotnet_sort_system_directives_first                                      = true
dotnet_style_coalesce_expression                                         = true : warning
dotnet_style_explicit_tuple_names                                        = true : warning
dotnet_style_null_propagation                                            = true : suggestion
dotnet_style_object_initializer                                          = true : suggestion
dotnet_style_parentheses_in_arithmetic_binary_operators                  = never_if_unnecessary : suggestion
dotnet_style_parentheses_in_other_binary_operators                       = never_if_unnecessary : suggestion
dotnet_style_parentheses_in_other_operators                              = never_if_unnecessary : suggestion
dotnet_style_parentheses_in_relational_binary_operators                  = never_if_unnecessary : suggestion
dotnet_style_predefined_type_for_locals_parameters_members               = true : error
dotnet_style_predefined_type_for_member_access                           = true : error
dotnet_style_prefer_auto_properties                                      = true : suggestion
dotnet_style_prefer_conditional_expression_over_assignment               = true
dotnet_style_prefer_conditional_expression_over_return                   = true
dotnet_style_prefer_inferred_anonymous_type_member_names                 = true : silent
dotnet_style_prefer_inferred_tuple_names                                 = true : silent
dotnet_style_prefer_is_null_check_over_reference_equality_method         = true : warning
dotnet_style_qualification_for_event                                     = false : warning
dotnet_style_qualification_for_field                                     = false : warning
dotnet_style_qualification_for_method                                    = false : warning
dotnet_style_qualification_for_property                                  = false : warning
dotnet_style_readonly_field                                              = true : error
dotnet_style_require_accessibility_modifiers                             = always : warning
csharp_indent_case_contents                                              = true
csharp_indent_labels                                                     = one_less_than_current
csharp_indent_switch_labels                                              = false
csharp_new_line_before_else                                              = true
csharp_new_line_before_finally                                           = true
csharp_new_line_between_query_expression_clauses                         = true
csharp_new_line_before_open_brace                                        = all
csharp_prefer_braces                                                     = false : warning
csharp_prefer_simple_default_expression                                  = true : warning
csharp_preserve_single_line_blocks                                       = true
csharp_preserve_single_line_statements                                   = true
csharp_space_after_cast                                                  = false
csharp_space_after_colon_in_inheritance_clause                           = true
csharp_space_after_keywords_in_control_flow_statements                   = true
csharp_space_around_binary_operators                                     = before_and_after
csharp_space_before_colon_in_inheritance_clause                          = true
csharp_space_between_method_call_empty_parameter_list_parentheses        = false
csharp_space_between_method_call_name_and_opening_parenthesis            = false
csharp_space_between_method_call_parameter_list_parentheses              = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_parameter_list_parentheses       = false
csharp_space_between_parentheses                                         = false
csharp_style_conditional_delegate_call                                   = true : warning
csharp_style_deconstructed_variable_declaration                          = true : suggestion
csharp_style_expression_bodied_accessors                                 = true : suggestion
csharp_style_expression_bodied_constructors                              = true : suggestion
csharp_style_expression_bodied_indexers                                  = true : suggestion
csharp_style_expression_bodied_methods                                   = true : suggestion
csharp_style_expression_bodied_operators                                 = true : suggestion
csharp_style_expression_bodied_properties                                = true : suggestion
csharp_style_inlined_variable_declaration                                = true : suggestion
csharp_style_pattern_local_over_anonymous_function                       = true : warning
csharp_style_pattern_matching_over_as_with_null_check                    = true : warning
csharp_style_pattern_matching_over_is_with_cast_check                    = true : error
csharp_style_throw_expression                                            = true : silent
csharp_style_var_elsewhere                                               = true : silent
csharp_style_var_for_built_in_types                                      = false : suggestion
csharp_style_var_when_type_is_apparent                                   = true : warning

dotnet_naming_style.pascal_case.capitalization                           = pascal_case
dotnet_naming_style.camel_case.capitalization                            = camel_case

# Interface naming
dotnet_naming_symbols.interfaces.applicable_kinds                        = interface

dotnet_naming_style.interface_naming_style.required_prefix               = I
dotnet_naming_style.interface_naming_style.capitalization                = pascal_case

dotnet_naming_rule.interface_naming.severity                             = error
dotnet_naming_rule.interface_naming.symbols                              = interfaces
dotnet_naming_rule.interface_naming.style                                = interface_naming_style

# Type parameter naming
dotnet_naming_symbols.type_parameters.applicable_kinds                   = type_parameter

dotnet_naming_style.type_parameter_naming_style.required_prefix          = T
dotnet_naming_style.type_parameter_naming_style.capitalization           = pascal_case

dotnet_naming_rule.type_parameter_naming.severity                        = error
dotnet_naming_rule.type_parameter_naming.symbols                         = type_parameters
dotnet_naming_rule.type_parameter_naming.style                           = type_parameter_naming_style

# Const fields naming
dotnet_naming_symbols.const_fields.applicable_kinds                      = field
dotnet_naming_symbols.const_fields.required_modifiers                    = const

dotnet_naming_rule.const_field_naming.severity                           = error
dotnet_naming_rule.const_field_naming.symbols                            = const_fields
dotnet_naming_rule.const_field_naming.style                              = pascal_case

# Static Readonly fields naming
dotnet_naming_symbols.static_readonly_fields.applicable_kinds            = field
dotnet_naming_symbols.static_readonly_fields.required_modifiers          = static, readonly

dotnet_naming_rule.static_readonly_field_naming.severity                 = error
dotnet_naming_rule.static_readonly_field_naming.symbols                  = static_readonly_fields
dotnet_naming_rule.static_readonly_field_naming.style                    = pascal_case

# Local variable naming
dotnet_naming_symbols.locals.applicable_kinds                            = parameter, local

dotnet_naming_rule.local_naming.severity                                 = error
dotnet_naming_rule.local_naming.symbols                                  = locals
dotnet_naming_rule.local_naming.style                                    = camel_case

# Private field naming
dotnet_naming_symbols.non_public_fields.applicable_kinds                 = field
dotnet_naming_symbols.non_public_fields.applicable_accessibilities       = private, internal

dotnet_naming_style.non_public_field_naming_style.required_prefix        = _
dotnet_naming_style.non_public_field_naming_style.capitalization         = camel_case

dotnet_naming_rule.non_public_field_naming.severity                      = error
dotnet_naming_rule.non_public_field_naming.symbols                       = non_public_fields
dotnet_naming_rule.non_public_field_naming.style                         = non_public_field_naming_style

# Public declaration naming
dotnet_naming_symbols.public_symbols.applicable_kinds                    = namespace, class, struct, interface, enum, property, method, field, event, delegate, local_function
dotnet_naming_symbols.public_symbols.applicable_accessibilities          = public, protected, protected_internal, protected_friend

dotnet_naming_rule.public_symbol_naming.severity                         = error
dotnet_naming_rule.public_symbol_naming.symbols                          = public_symbols
dotnet_naming_rule.public_symbol_naming.style                            = pascal_case

[*.{csproj,proj,props,targets}]
indent_size  = 2
indent_style = tab
