# EditorConfig is awesome:http://EditorConfig.org

# top-most EditorConfig file
root = true

# Baseline
[*]
charset = utf-8
end_of_line = crlf
indent_style = space
trim_trailing_whitespace = true
max_line_length = 120

[*.{md,sh}]
end_of_line = lf

# MSBuild
[*.{csproj,proj,projitems,shproj,fsproj,target,props}]
indent_style = space
indent_size = 2

# XML config files
[*.{config,nuspec,resx}]
indent_style = space
indent_size = 2

# JSON files
[*.json]
indent_style = space
indent_size = 2

# Dotnet code style settings:
[*.{cs,csx,vb,vbx}]
indent_size = 4
insert_final_newline = true

# Sort using and Import directives with System.* appearing first
dotnet_sort_system_directives_first = true

# CSharp code style settings:
[*.cs]
charset = utf-8-bom
csharp_prefer_braces = true:warning
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_labels = flush_left

# spaces before parens
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_after_keywords_in_control_flow_statements = true

# Newline settings
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

# Switch indentation
csharp_indent_case_contents = true
csharp_indent_switch_labels = true

# Prefer "var" everywhere it's apparent
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = false:suggestion

# Prefer method-like constructs to have a block body
csharp_style_expression_bodied_methods = false:none
csharp_style_expression_bodied_constructors = false:none
csharp_style_expression_bodied_operators = false:none

# Prefer property-like constructs to have an expression-body
csharp_style_expression_bodied_properties = true:none
csharp_style_expression_bodied_indexers = true:none
csharp_style_expression_bodied_accessors = true:none

# Suggest more modern language features when available
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
csharp_style_throw_expression = false:suggestion
csharp_style_conditional_delegate_call = true:suggestion

# New line preferences
dotnet_style_allow_multiple_blank_lines_experimental = false:suggestion
dotnet_style_allow_statement_immediately_after_block_experimental = false:suggestion

# VSTHRD002: Avoid problematic synchronous waits
dotnet_diagnostic.VSTHRD002.severity = none
# VSTHRD103: Call async methods when in an async method
dotnet_diagnostic.VSTHRD103.severity = none
# VSTHRD200: Use "Async" suffix for async methods
dotnet_diagnostic.VSTHRD200.severity = none
