root = true

[*]
indent_style = tab
indent_size = tab
tab_width = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.cs]
tab_size = 4

[*.{xml,config,*proj,nuspec,props,resx,targets,yml,tasks}]
tab_size = 2

[*.{htm,html,js,jsm,ts,tsx,css,sass,scss,less,svg,vue}]
tab_size = 2

[*.json]
tab_size = 2

[*.{ps1,psm1}]
tab_size = 4

[*.sh]
tab_size = 4
end_of_line = lf

[*.{yml,yaml}]
indent_style = space
tab_size = 2

[*.md]
trim_trailing_whitespace = false

[*.{cmd,bat}]
end_of_line = crlf

[Makefile]
indent_style = tab

##########################################
# .NET Language Conventions
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions
##########################################

# Default Severity for .NET Code Style
# https://docs.microsoft.com/dotnet/fundamentals/code-analysis/configuration-options#scope
dotnet_analyzer_diagnostic.severity = error

# Misc preferences
file_header_template = unset                                                    # IDE0073
dotnet_sort_system_directives_first = true
dotnet_separate_import_directive_groups = false

# .NET Code Style Settings
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#net-code-style-settings
[*.{cs,csx,cake}]
# "this." and "Me." qualifiers
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#this-and-me
dotnet_style_qualification_for_field = false
dotnet_style_qualification_for_property = false
dotnet_style_qualification_for_method = false
dotnet_style_qualification_for_event = false

# Language keywords instead of framework type names for type references
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#language-keywords
dotnet_style_predefined_type_for_locals_parameters_members = true               # IDE0049
dotnet_style_predefined_type_for_member_access = true                           # IDE0049

# Modifier preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#normalize-modifiers
dotnet_style_require_accessibility_modifiers = always                           # IDE0040
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async   # IDE0036
dotnet_style_readonly_field = true                                              # IDE0044

# Parentheses preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#parentheses-preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity    # IDE0047 and IDE0048
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity    # IDE0047 and IDE0048
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity         # IDE0047 and IDE0048
dotnet_style_parentheses_in_other_operators = always_for_clarity                # IDE0047 and IDE0048

# Expression-level preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#expression-level-preferences
dotnet_style_object_initializer = true                                          # IDE0017
dotnet_style_collection_initializer = true                                      # IDE0028
dotnet_style_explicit_tuple_names = true                                        # IDE0033
dotnet_style_prefer_inferred_tuple_names = true                                 # IDE0037
dotnet_style_prefer_inferred_anonymous_type_member_names = true                 # IDE0037
dotnet_style_prefer_auto_properties = true                                      # IDE0050
dotnet_style_prefer_is_null_check_over_reference_equality_method = true         # IDE0041
dotnet_style_prefer_conditional_expression_over_assignment = true               # IDE0045
dotnet_style_prefer_conditional_expression_over_return = true                   # IDE0046
dotnet_style_prefer_compound_assignment = true                                  # IDE0054 and IDE0074
dotnet_style_prefer_simplified_interpolation = true                             # IDE0071
dotnet_style_prefer_simplified_boolean_expressions = true                       # IDE0075

# Null-checking preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#null-checking-preferences
dotnet_style_coalesce_expression = true                                         # IDE0029 and IDE0030
dotnet_style_null_propagation = true                                            # IDE0031

# Parameter preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#parameter-preferences
dotnet_code_quality_unused_parameters = all                                     # IDE0060

# Suppression preferences
dotnet_remove_unnecessary_suppression_exclusions = none                         # IDE0079

# More style options (Undocumented)
# https://github.com/MicrosoftDocs/visualstudio-docs/issues/3641
dotnet_style_operator_placement_when_wrapping = end_of_line

# C# Code Style Settings
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#c-code-style-settings
[*.{cs,csx,cake}]
# Implicit and explicit types
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#implicit-and-explicit-types
csharp_style_var_for_built_in_types = true                                      # IDE0007 and IDE0008
csharp_style_var_when_type_is_apparent = true                                   # IDE0007 and IDE0008
csharp_style_var_elsewhere = true                                               # IDE0007 and IDE0008

# Expression-bodied members
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#expression-bodied-members
csharp_style_expression_bodied_constructors = when_on_single_line               # IDE0021
csharp_style_expression_bodied_methods = true                                   # IDE0022
csharp_style_expression_bodied_operators = true                                 # IDE0023 and IDE0024
csharp_style_expression_bodied_properties = true                                # IDE0025
csharp_style_expression_bodied_indexers = true                                  # IDE0026
csharp_style_expression_bodied_accessors = true                                 # IDE0027
csharp_style_expression_bodied_lambdas = true                                   # IDE0053
csharp_style_expression_bodied_local_functions = true                           # IDE0061

# Pattern matching
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#pattern-matching
csharp_style_pattern_matching_over_as_with_null_check = true                    # IDE0019
csharp_style_pattern_matching_over_is_with_cast_check = true                    # IDE0020
csharp_style_prefer_switch_expression = true:suggestion                         # IDE0066
csharp_style_prefer_pattern_matching = true:silent                              # IDE0078
csharp_style_prefer_not_pattern = true:suggestion                               # IDE0083

# Inlined variable declarations
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#inlined-variable-declarations
csharp_style_inlined_variable_declaration = true                                # IDE0018

# Expression-level preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#expression-level-preferences
csharp_prefer_simple_default_expression = true                                  # IDE0034

# "Null" checking preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#c-null-checking-preferences
csharp_style_throw_expression = true                                            # IDE0016
csharp_style_conditional_delegate_call = true                                   # IDE1005

# Code block preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#code-block-preferences
csharp_prefer_braces = true                                                     # IDE0011

# Unused value preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#unused-value-preferences
csharp_style_unused_value_expression_statement_preference = discard_variable    # IDE0058
csharp_style_unused_value_assignment_preference = discard_variable              # IDE0059

# Index and range preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#index-and-range-preferences
csharp_style_prefer_index_operator = true                                       # IDE0056
csharp_style_prefer_range_operator = true                                       # IDE0057

# Miscellaneous preferences
# https://docs.microsoft.com/visualstudio/ide/editorconfig-language-conventions#miscellaneous-preferences
csharp_style_pattern_local_over_anonymous_function = true                       # IDE0039
csharp_style_deconstructed_variable_declaration = true                          # IDE0042
csharp_prefer_static_local_function = true                                      # IDE0062
csharp_prefer_simple_using_statement = true                                     # IDE0063
csharp_using_directive_placement = outside_namespace                            # IDE0065

##########################################
# .NET Formatting Conventions
# https://docs.microsoft.com/visualstudio/ide/editorconfig-code-style-settings-reference#formatting-conventions
##########################################

# Newline options
# https://docs.microsoft.com/visualstudio/ide/editorconfig-formatting-conventions#new-line-options
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 options
# https://docs.microsoft.com/visualstudio/ide/editorconfig-formatting-conventions#indentation-options
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = no_change
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents_when_block = false

# Spacing options
# https://docs.microsoft.com/visualstudio/ide/editorconfig-formatting-conventions#spacing-options
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_parentheses = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_around_binary_operators = before_and_after
csharp_space_between_method_declaration_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_call_parameter_list_parentheses = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_after_comma = true
csharp_space_before_comma = false
csharp_space_after_dot = false
csharp_space_before_dot = false
csharp_space_after_semicolon_in_for_statement = true
csharp_space_before_semicolon_in_for_statement = false
csharp_space_around_declaration_statements = false
csharp_space_before_open_square_brackets = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_square_brackets = false

# Wrapping options
# https://docs.microsoft.com/visualstudio/ide/editorconfig-formatting-conventions#wrap-options
csharp_preserve_single_line_statements = false
csharp_preserve_single_line_blocks = true
csharp_style_namespace_declarations = file_scoped:warning

##########################################
# .NET Naming Conventions
# https://docs.microsoft.com/visualstudio/ide/editorconfig-naming-conventions
##########################################

[*.{cs,csx,cake}]

##########################################
# Styles
##########################################

# camel_case_style - Define the camelCase style
dotnet_naming_style.camel_case_style.capitalization = camel_case
# pascal_case_style - Define the PascalCase style
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
# first_upper_style - The first character must start with an upper-case character
dotnet_naming_style.first_upper_style.capitalization = first_word_upper
# prefix_interface_with_i_style - Interfaces must be PascalCase and the first character of an interface must be an 'I'
dotnet_naming_style.prefix_interface_with_i_style.capitalization = pascal_case
dotnet_naming_style.prefix_interface_with_i_style.required_prefix = I
# prefix_type_parameters_with_t_style - Generic Type Parameters must be PascalCase and the first character must be a 'T'
dotnet_naming_style.prefix_type_parameters_with_t_style.capitalization = pascal_case
dotnet_naming_style.prefix_type_parameters_with_t_style.required_prefix = T
# disallowed_style - Anything that has this style applied is marked as disallowed
dotnet_naming_style.disallowed_style.capitalization  = pascal_case
dotnet_naming_style.disallowed_style.required_prefix = 
dotnet_naming_style.disallowed_style.required_suffix = 
# internal_error_style - This style should never occur... if it does, it indicates a bug in file or in the parser using the file
dotnet_naming_style.internal_error_style.capitalization  = pascal_case
dotnet_naming_style.internal_error_style.required_prefix = 
dotnet_naming_style.internal_error_style.required_suffix = 

##########################################
# .NET Design Guideline Field Naming Rules
# Naming rules for fields follow the .NET Framework design guidelines
# https://docs.microsoft.com/dotnet/standard/design-guidelines/index
##########################################

# All public/protected/protected_internal constant fields must be PascalCase
# https://docs.microsoft.com/dotnet/standard/design-guidelines/field
dotnet_naming_symbols.public_protected_constant_fields_group.applicable_accessibilities = public, protected, protected_internal
dotnet_naming_symbols.public_protected_constant_fields_group.required_modifiers         = const
dotnet_naming_symbols.public_protected_constant_fields_group.applicable_kinds           = field
dotnet_naming_rule.public_protected_constant_fields_must_be_pascal_case_rule.symbols    = public_protected_constant_fields_group
dotnet_naming_rule.public_protected_constant_fields_must_be_pascal_case_rule.style      = pascal_case_style
dotnet_naming_rule.public_protected_constant_fields_must_be_pascal_case_rule.severity   = warning

# All public/protected/protected_internal static readonly fields must be PascalCase
# https://docs.microsoft.com/dotnet/standard/design-guidelines/field
dotnet_naming_symbols.public_protected_static_readonly_fields_group.applicable_accessibilities = public, protected, protected_internal
dotnet_naming_symbols.public_protected_static_readonly_fields_group.required_modifiers         = static, readonly
dotnet_naming_symbols.public_protected_static_readonly_fields_group.applicable_kinds           = field
dotnet_naming_rule.public_protected_static_readonly_fields_must_be_pascal_case_rule.symbols    = public_protected_static_readonly_fields_group
dotnet_naming_rule.public_protected_static_readonly_fields_must_be_pascal_case_rule.style      = pascal_case_style
dotnet_naming_rule.public_protected_static_readonly_fields_must_be_pascal_case_rule.severity   = warning

# No other public/protected/protected_internal fields are allowed
# https://docs.microsoft.com/dotnet/standard/design-guidelines/field
dotnet_naming_symbols.other_public_protected_fields_group.applicable_accessibilities = public, protected, protected_internal
dotnet_naming_symbols.other_public_protected_fields_group.applicable_kinds           = field
dotnet_naming_rule.other_public_protected_fields_disallowed_rule.symbols             = other_public_protected_fields_group
dotnet_naming_rule.other_public_protected_fields_disallowed_rule.style               = disallowed_style
dotnet_naming_rule.other_public_protected_fields_disallowed_rule.severity            = error

##########################################
# StyleCop Field Naming Rules
# Naming rules for fields follow the StyleCop analyzers
# This does not override any rules using disallowed_style above
# https://github.com/DotNetAnalyzers/StyleCopAnalyzers
##########################################

# All constant fields must be PascalCase
# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1303.md
dotnet_naming_symbols.stylecop_constant_fields_group.applicable_accessibilities = public, internal, protected_internal, protected, private_protected, private
dotnet_naming_symbols.stylecop_constant_fields_group.required_modifiers         = const
dotnet_naming_symbols.stylecop_constant_fields_group.applicable_kinds           = field
dotnet_naming_rule.stylecop_constant_fields_must_be_pascal_case_rule.symbols    = stylecop_constant_fields_group
dotnet_naming_rule.stylecop_constant_fields_must_be_pascal_case_rule.style      = pascal_case_style
dotnet_naming_rule.stylecop_constant_fields_must_be_pascal_case_rule.severity   = warning

# All static readonly fields must be PascalCase
# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1311.md
dotnet_naming_symbols.stylecop_static_readonly_fields_group.applicable_accessibilities = public, internal, protected_internal, protected, private_protected, private
dotnet_naming_symbols.stylecop_static_readonly_fields_group.required_modifiers         = static, readonly
dotnet_naming_symbols.stylecop_static_readonly_fields_group.applicable_kinds           = field
dotnet_naming_rule.stylecop_static_readonly_fields_must_be_pascal_case_rule.symbols    = stylecop_static_readonly_fields_group
dotnet_naming_rule.stylecop_static_readonly_fields_must_be_pascal_case_rule.style      = pascal_case_style
dotnet_naming_rule.stylecop_static_readonly_fields_must_be_pascal_case_rule.severity   = warning

# No non-private instance fields are allowed
# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1401.md
dotnet_naming_symbols.stylecop_fields_must_be_private_group.applicable_accessibilities = public, internal, protected_internal, protected, private_protected
dotnet_naming_symbols.stylecop_fields_must_be_private_group.applicable_kinds           = field
dotnet_naming_rule.stylecop_instance_fields_must_be_private_rule.symbols               = stylecop_fields_must_be_private_group
dotnet_naming_rule.stylecop_instance_fields_must_be_private_rule.style                 = disallowed_style
dotnet_naming_rule.stylecop_instance_fields_must_be_private_rule.severity              = error

# Private fields must be camelCase
# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1306.md
dotnet_naming_symbols.stylecop_private_fields_group.applicable_accessibilities = private
dotnet_naming_symbols.stylecop_private_fields_group.applicable_kinds           = field
dotnet_naming_rule.stylecop_private_fields_must_be_camel_case_rule.symbols     = stylecop_private_fields_group
dotnet_naming_rule.stylecop_private_fields_must_be_camel_case_rule.style       = camel_case_style
dotnet_naming_rule.stylecop_private_fields_must_be_camel_case_rule.severity    = warning

# Local variables must be camelCase
# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1312.md
dotnet_naming_symbols.stylecop_local_fields_group.applicable_accessibilities = local
dotnet_naming_symbols.stylecop_local_fields_group.applicable_kinds           = local
dotnet_naming_rule.stylecop_local_fields_must_be_camel_case_rule.symbols     = stylecop_local_fields_group
dotnet_naming_rule.stylecop_local_fields_must_be_camel_case_rule.style       = camel_case_style
dotnet_naming_rule.stylecop_local_fields_must_be_camel_case_rule.severity    = silent

# This rule should never fire.  However, it's included for at least two purposes:
# First, it helps to understand, reason about, and root-case certain types of issues, such as bugs in .editorconfig parsers.
# Second, it helps to raise immediate awareness if a new field type is added (as occurred recently in C#).
dotnet_naming_symbols.sanity_check_uncovered_field_case_group.applicable_accessibilities = *
dotnet_naming_symbols.sanity_check_uncovered_field_case_group.applicable_kinds           = field
dotnet_naming_rule.sanity_check_uncovered_field_case_rule.symbols  = sanity_check_uncovered_field_case_group
dotnet_naming_rule.sanity_check_uncovered_field_case_rule.style    = internal_error_style
dotnet_naming_rule.sanity_check_uncovered_field_case_rule.severity = error

##########################################
# Other Naming Rules
##########################################

# All of the following must be PascalCase:
# - Namespaces
#   https://docs.microsoft.com/dotnet/standard/design-guidelines/names-of-namespaces
#   https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1300.md
# - Classes and Enumerations
#   https://docs.microsoft.com/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces
#   https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1300.md
# - Delegates
#   https://docs.microsoft.com/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces#names-of-common-types
# - Constructors, Properties, Events, Methods
#   https://docs.microsoft.com/dotnet/standard/design-guidelines/names-of-type-members
dotnet_naming_symbols.element_group.applicable_kinds = namespace, class, enum, struct, delegate, event, method, property
dotnet_naming_rule.element_rule.symbols              = element_group
dotnet_naming_rule.element_rule.style                = pascal_case_style
dotnet_naming_rule.element_rule.severity             = warning

# Interfaces use PascalCase and are prefixed with uppercase 'I'
# https://docs.microsoft.com/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces
dotnet_naming_symbols.interface_group.applicable_kinds = interface
dotnet_naming_rule.interface_rule.symbols              = interface_group
dotnet_naming_rule.interface_rule.style                = prefix_interface_with_i_style
dotnet_naming_rule.interface_rule.severity             = warning

# Generics Type Parameters use PascalCase and are prefixed with uppercase 'T'
# https://docs.microsoft.com/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces
dotnet_naming_symbols.type_parameter_group.applicable_kinds = type_parameter
dotnet_naming_rule.type_parameter_rule.symbols              = type_parameter_group
dotnet_naming_rule.type_parameter_rule.style                = prefix_type_parameters_with_t_style
dotnet_naming_rule.type_parameter_rule.severity             = warning

# Function parameters use camelCase
# https://docs.microsoft.com/dotnet/standard/design-guidelines/naming-parameters
dotnet_naming_symbols.parameters_group.applicable_kinds = parameter
dotnet_naming_rule.parameters_rule.symbols              = parameters_group
dotnet_naming_rule.parameters_rule.style                = camel_case_style
dotnet_naming_rule.parameters_rule.severity             = warning

##########################################


##########################################
# Code Analyzers Rules
##########################################

# AsyncFixer
# http://www.asyncfixer.com


# Meziantou
# https://www.meziantou.net/enforcing-asynchronous-code-good-practices-using-a-roslyn-analyzer.htm
dotnet_diagnostic.MA0003.severity = suggestion      # https://github.com/atc-net/atc-coding-rules/blob/main/documentation/CodeAnalyzersRules/Meziantou/MA0003.md
dotnet_diagnostic.MA0004.severity = suggestion      # https://github.com/atc-net/atc-coding-rules/blob/main/documentation/CodeAnalyzersRules/Meziantou/MA0004.md
dotnet_diagnostic.MA0016.severity = error           # https://github.com/atc-net/atc-coding-rules/blob/main/documentation/CodeAnalyzersRules/Meziantou/MA0016.md
dotnet_diagnostic.MA0025.severity = suggestion      # https://github.com/atc-net/atc-coding-rules/blob/main/documentation/CodeAnalyzersRules/Meziantou/MA0025.md
dotnet_diagnostic.MA0026.severity = suggestion      # https://github.com/atc-net/atc-coding-rules/blob/main/documentation/CodeAnalyzersRules/Meziantou/MA0026.md
dotnet_diagnostic.MA0028.severity = none            # https://github.com/atc-net/atc-coding-rules/blob/main/documentation/CodeAnalyzersRules/Meziantou/MA0028.md


# Microsoft - Code Analysis
# https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/
dotnet_diagnostic.CA1707.severity = error           # https://github.com/atc-net/atc-coding-rules/blob/main/documentation/CodeAnalyzersRules/MicrosoftCodeAnalysis/CA1707.md
dotnet_diagnostic.CA2007.severity = suggestion      # https://github.com/atc-net/atc-coding-rules/blob/main/documentation/CodeAnalyzersRules/MicrosoftCodeAnalysis/CA2007.md


# SonarAnalyzer.CSharp
# https://rules.sonarsource.com/csharp
dotnet_diagnostic.S1135.severity = suggestion       # https://github.com/atc-net/atc-coding-rules/blob/main/documentation/CodeAnalyzersRules/SonarAnalyzerCSharp/S1135.md

##########################################
# Custom - Code Analyzers Rules
##########################################

# Visual Studio
dotnet_diagnostic.IDE0079.severity = warning # IDE0079: Remove unnecessary suppression

# AsyncFixer

# Meziantou
dotnet_diagnostic.MA0004.severity = none # MA0004: Use .ConfigureAwait(false)
dotnet_diagnostic.MA0012.severity = none # MA0012: Do not raise reserved exception type
dotnet_diagnostic.MA0015.severity = suggestion # MA0015: Specify the parameter name
dotnet_diagnostic.MA0018.severity = none # MA0018: Do not declare static members on generic types - same as CA1000

# Microsoft - Code Analysis
# https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/
dotnet_diagnostic.CA1014.severity = none # CA1014: Mark assemblies with CLSCompliant
dotnet_diagnostic.CA1031.severity = suggestion # CA1031: Do not catch general exception types
dotnet_diagnostic.CA1032.severity = none # CA1032: Implement standard exception constructors
dotnet_diagnostic.CA2201.severity = suggestion # CA2201: Do not raise reserved exception types

# SonarAnalyzer.CSharp
# https://rules.sonarsource.com/csharp
dotnet_diagnostic.S112.severity = none # S112: General exceptions should never be thrown
dotnet_diagnostic.S1075.severity = suggestion # S1075: URIs should not be hardcoded
dotnet_diagnostic.S1186.severity = suggestion # S1186: Methods should not be empty
dotnet_diagnostic.S2292.severity = suggestion # S2292: Trivial properties should be auto-implemented
dotnet_diagnostic.S3267.severity = suggestion # S3267: Convert foreach loop to LINQ query
dotnet_diagnostic.S2743.severity = suggestion # S2743: A static field in a generic type is not shared among instances
dotnet_diagnostic.S4158.severity = none # BUGGY with C#9 code - doesnt understand local methods

# Razor specific rules
[*.{cs,razor}]
dotnet_diagnostic.BL0001.severity = none
dotnet_diagnostic.BL0002.severity = none
dotnet_diagnostic.BL0003.severity = none
dotnet_diagnostic.BL0004.severity = none
dotnet_diagnostic.BL0005.severity = none
dotnet_diagnostic.BL0006.severity = none
dotnet_diagnostic.BL0007.severity = none

##########################################
# Custom Test Code Analyzers Rules
##########################################
[tests/**.cs]

# Visual Studio
csharp_style_pattern_local_over_anonymous_function = false # IDE0039: Use local function

# AsyncFixer
# http://www.asyncfixer.com
dotnet_diagnostic.AsyncFixer01.severity = none # AsyncFixer01: Unnecessary async/await usage

# Meziantou
# https://www.meziantou.net/enforcing-asynchronous-code-good-practices-using-a-roslyn-analyzer.htm
dotnet_diagnostic.MA0006.severity = suggestion # MA0006: use String.Equals
dotnet_diagnostic.MA0007.severity = none # MA0007: Add a comma after the last value
dotnet_diagnostic.MA0048.severity = silent # MA0048: File name must match type name

# Microsoft - Code Analysis
# https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/
dotnet_diagnostic.CA1054.severity = none # CA1054: URI-like parameters should not be strings
dotnet_diagnostic.CA1062.severity = none # CA1062: Validate arguments of public methods
dotnet_diagnostic.CA1707.severity = none # CA1707: Identifiers should not contain underscores
dotnet_diagnostic.CA1812.severity = none # CA1812: Avoid uninstantiated internal classes - components under test are never instantiated directly.
dotnet_diagnostic.CA1822.severity = suggestion # CA1822: Mark members as static
dotnet_diagnostic.CA1859.severity = none # CA1859: Change return type of method
dotnet_diagnostic.CA2007.severity = none # CA2007: Consider calling ConfigureAwait on the awaited task

# Microsoft - FxCop
# https://github.com/dotnet/roslyn-analyzers
dotnet_diagnostic.CA1031.severity = none # CA1031: Do not catch general exception types
dotnet_diagnostic.CA2012.severity = none # CA2012: Use ValueTasks correctly
dotnet_diagnostic.CA2201.severity = none # CA2201: Do not raise reserved exception types

# SonarAnalyzer.CSharp
# https://rules.sonarsource.com/csharp
dotnet_diagnostic.S125.severity = none # S125: Sections of code should not be commented out
dotnet_diagnostic.S3459.severity = none # S3459: Unassigned members should be removed
dotnet_diagnostic.S3871.severity = none # S3871: Exception types should be "public"
dotnet_diagnostic.S1186.severity = none # S1186: Methods should not be empty
dotnet_diagnostic.S1133.severity = none # S1133: Deprecated code should be removed
dotnet_diagnostic.S3963.severity = none # S3963: "static" fields should be initialized inline (covered by CA1810)
