root = true

[*]
charset = utf-8
# LF: пишут инструменты проекта (Python/Node), требуется shell-скриптам на Linux CI
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

[*.{cs,vb}]
indent_size = 4

# Стиль фигурных скобок — Allman (на отдельной строке)
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

# using — в начале файла
dotnet_sort_system_directives_first = true

# Модификаторы доступа — всегда явные
dotnet_style_require_accessibility_modifiers = always:error

# Квалификация this. — запрещена (поля, свойства, методы, события)
dotnet_style_qualification_for_field = false:warning
dotnet_style_qualification_for_property = false:warning
dotnet_style_qualification_for_method = false:warning
dotnet_style_qualification_for_event = false:warning

# Члены
# var — запрещён для встроенных типов (ломает сборку), для очевидных/прочих — silent (§4 код-стайла)
csharp_style_var_for_built_in_types = false:warning
csharp_style_var_when_type_is_apparent = false:silent
csharp_style_var_elsewhere = false:silent

[*.cs]
# Отключить лишние правила IDE, которые конфликтуют с код-стайлом проекта
dotnet_diagnostic.IDE0290.severity = none

# --- Правила именования ---
# Приватные const-поля: PascalCase
# Приватные static readonly-поля (константоподобные): PascalCase
# Остальные приватные поля: обязательный префикс `_` + camelCase
dotnet_naming_rule.private_const_fields_pascal.severity = warning
dotnet_naming_rule.private_const_fields_pascal.symbols = private_const_fields
dotnet_naming_rule.private_const_fields_pascal.style = pascal_case_style

dotnet_naming_symbols.private_const_fields.applicable_kinds = field
dotnet_naming_symbols.private_const_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_const_fields.required_modifiers = const

dotnet_naming_rule.private_static_readonly_fields_pascal.severity = warning
dotnet_naming_rule.private_static_readonly_fields_pascal.symbols = private_static_readonly_fields
dotnet_naming_rule.private_static_readonly_fields_pascal.style = pascal_case_style

dotnet_naming_symbols.private_static_readonly_fields.applicable_kinds = field
dotnet_naming_symbols.private_static_readonly_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_static_readonly_fields.required_modifiers = static, readonly

dotnet_naming_style.pascal_case_style.capitalization = pascal_case

dotnet_naming_rule.private_fields_underscore_camel.severity = warning
dotnet_naming_rule.private_fields_underscore_camel.symbols = private_fields
dotnet_naming_rule.private_fields_underscore_camel.style = underscore_camel_style

dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private

dotnet_naming_style.underscore_camel_style.required_prefix = _
dotnet_naming_style.underscore_camel_style.capitalization = camel_case

dotnet_diagnostic.IDE1006.severity = warning
