# Default settings:
# A newline ending every file
# Use 4 spaces as indentation
[*]
charset                  = utf-8
end_of_line              = crlf
indent_style             = space
indent_size              = 4
insert_final_newline     = false
trim_trailing_whitespace = true

# VB and C# files
[*.{vb,cs}]
# avoid this. unless absolutely necessary
dotnet_style_qualification_for_field                                       = false : suggestion
dotnet_style_qualification_for_property                                    = false : suggestion
dotnet_style_qualification_for_method                                      = false : suggestion
dotnet_style_qualification_for_event                                       = false : suggestion

# use language keywords instead of BCL types
dotnet_style_predefined_type_for_locals_parameters_members                 = true : suggestion
dotnet_style_predefined_type_for_member_access                             = true : suggestion

# Use camel_case for or internal constant fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity          = suggestion
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols           = constant_fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.style             = pascal_case_style

dotnet_naming_symbols.constant_fields.applicable_kinds                     = field
dotnet_naming_symbols.constant_fields.required_modifiers                   = const

dotnet_naming_style.pascal_case_style.capitalization                       = pascal_case

# Comment this group and uncomment out the next group if you don't want _ prefixed fields.

# protected fields should be kPascalCase
dotnet_naming_rule.kPascalCase_for_protected_fields.severity               = suggestion
dotnet_naming_rule.kPascalCase_for_protected_fields.symbols                = protected_internal_fields
dotnet_naming_rule.kPascalCase_for_protected_fields.style                  = sims3_style

dotnet_naming_symbols.protected_internal_fields.applicable_kinds           = field
dotnet_naming_symbols.protected_internal_fields.applicable_accessibilities = protected_internal

dotnet_naming_style.sims3_style.required_prefix                            = k
dotnet_naming_style.sims3_style.capitalization                             = pascal_case

# private static fields should be sPascalCase
dotnet_naming_rule.sPascalCase_for_static_fields.severity                  = suggestion
dotnet_naming_rule.sPascalCase_for_static_fields.symbols                   = static_internal_fields
dotnet_naming_rule.sPascalCase_for_static_fields.style                     = sims3_static

dotnet_naming_symbols.static_internal_fields.required_modifiers            = static
dotnet_naming_symbols.static_internal_fields.applicable_kinds              = field
dotnet_naming_symbols.static_internal_fields.applicable_accessibilities    = private

dotnet_naming_style.sims3_static.required_prefix                           = s
dotnet_naming_style.sims3_static.capitalization                            = pascal_case

# all other fields should be _camelCase
dotnet_naming_rule.camel_case_for_private_internal_fields.severity         = suggestion
dotnet_naming_rule.camel_case_for_private_internal_fields.symbols          = private_internal_fields
dotnet_naming_rule.camel_case_for_private_internal_fields.style            = camel_case_underscore_style

dotnet_naming_symbols.private_internal_fields.applicable_kinds             = field
dotnet_naming_symbols.private_internal_fields.applicable_accessibilities   = private, internal

dotnet_naming_style.camel_case_underscore_style.required_prefix            = _
dotnet_naming_style.camel_case_underscore_style.capitalization             = camel_case

# Public members must be capitalized
dotnet_naming_rule.public_members_must_be_capitalized.symbols              = public_symbols
dotnet_naming_symbols.public_symbols.applicable_kinds                      = property,method,field,event,delegate
dotnet_naming_symbols.public_symbols.applicable_accessibilities            = public

dotnet_naming_rule.public_members_must_be_capitalized.style                = first_word_upper_case_style
dotnet_naming_style.first_word_upper_case_style.capitalization             = first_word_upper

dotnet_naming_rule.public_members_must_be_capitalized.severity             = suggestion

# Code style defaults
dotnet_sort_system_directives_first                                        = true
csharp_preserve_single_line_blocks                                         = true
csharp_preserve_single_line_statements                                     = false

# Expression-level preferences
dotnet_style_object_initializer                                            = true : suggestion
dotnet_style_collection_initializer                                        = true : suggestion
dotnet_style_explicit_tuple_names                                          = true : suggestion
dotnet_style_coalesce_expression                                           = true : suggestion
dotnet_style_null_propagation                                              = true : suggestion

[*.cs]
# New line preferences
csharp_new_line_before_open_brace                                        = all
csharp_new_line_before_else                                              = true
csharp_new_line_before_catch                                             = true
csharp_new_line_before_finally                                           = true
csharp_new_line_before_members_in_object_initializers                    = true
csharp_new_line_before_members_in_anonymous_types                        = true
csharp_new_line_between_query_expression_clauses                         = true

# Indentation preferences
csharp_indent_block_contents                                             = true
csharp_indent_braces                                                     = false
csharp_indent_case_contents                                              = true
csharp_indent_switch_labels                                              = true
csharp_indent_labels                                                     = one_less_than_current

# only use var when it's obvious what the variable type is
csharp_style_var_for_built_in_types                                      = true : none
csharp_style_var_when_type_is_apparent                                   = true : none
csharp_style_var_elsewhere                                               = true : suggestion

# Code style defaults
dotnet_sort_system_directives_first                                      = true
csharp_preserve_single_line_blocks                                       = true
csharp_preserve_single_line_statements                                   = false

# Pattern matching
csharp_style_pattern_matching_over_is_with_cast_check                    = true : suggestion
csharp_style_pattern_matching_over_as_with_null_check                    = true : suggestion
csharp_style_inlined_variable_declaration                                = true : suggestion

# Null checking preferences
csharp_style_throw_expression                                            = true : warning
csharp_style_conditional_delegate_call                                   = true : warning

# Space preferences
csharp_space_after_cast                                                  = false
csharp_space_after_colon_in_inheritance_clause                           = true
csharp_space_after_comma                                                 = true
csharp_space_after_dot                                                   = false
csharp_space_after_keywords_in_control_flow_statements                   = true
csharp_space_after_semicolon_in_for_statement                            = true
csharp_space_around_binary_operators                                     = before_and_after
csharp_space_around_declaration_statements                               = do_not_ignore
csharp_space_before_colon_in_inheritance_clause                          = true
csharp_space_before_comma                                                = false
csharp_space_before_dot                                                  = false
csharp_space_before_open_square_brackets                                 = false
csharp_space_before_semicolon_in_for_statement                           = false
csharp_space_between_empty_square_brackets                               = false
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_name_and_open_parenthesis        = false
csharp_space_between_method_declaration_parameter_list_parentheses       = false
csharp_space_between_parentheses                                         = false
csharp_space_between_square_brackets                                     = false

# CA1815: Override equals and operator equals on value types
dotnet_diagnostic.CA1815.severity                                        = silent
