root = true

# -------------------------
# Global defaults
# -------------------------
[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

# -------------------------
# C++ / C headers
# -------------------------
[*.{hpp,cpp,c,h}]
indent_style = space
indent_size = 4
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

# -------------------------
# CMake
# -------------------------
[CMakeLists.txt]
indent_style = space
indent_size = 2
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

[*.cmake]
indent_style = space
indent_size = 2
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

# -------------------------
# JavaScript / React
# -------------------------
[*.{js,ts,jsx,tsx}]
indent_style = space
indent_size = 2
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 200

# -------------------------
# JSON
# -------------------------
[*.json]
indent_style = space
indent_size = 2
trim_trailing_whitespace = false
insert_final_newline = true
max_line_length = off

# Specific: lock files (package-lock.json)
[*.{lock,json.lock}]
trim_trailing_whitespace = false
insert_final_newline = false
max_line_length = off

# -------------------------
# CSS
# -------------------------
[*.css]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true

# -------------------------
# HTML
# -------------------------
[*.{html,htm}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 200

# -------------------------
# Markdown
# -------------------------
[*.md]
indent_style = space
# Note: Prettier uses 3 spaces for nested list items, but enforcing 2 spaces
# at the file level while allowing editorconfig-checker to be lenient
indent_size = 2
trim_trailing_whitespace = false
insert_final_newline = true
max_line_length = off

# -------------------------
# YAML
# -------------------------
[*.yml]
indent_style = space
indent_size = 2
trim_trailing_whitespace = false
insert_final_newline = true

# -------------------------
# Images & binary assets
# -------------------------
[*.{png,jpg,jpeg,gif,svg,ase,ico,webp}]
charset = binary
trim_trailing_whitespace = false
insert_final_newline = false
max_line_length = off

# -------------------------
# Text files
# -------------------------
[*.txt]
indent_style = space
indent_size = 2
trim_trailing_whitespace = false
insert_final_newline = true
max_line_length = off

# -------------------------
# Git config files
# -------------------------
[*.{gitignore,gitattributes}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = false
insert_final_newline = true
max_line_length = off

# -------------------------
# LICENSE
# -------------------------
[LICENSE*]
max_line_length = off
trim_trailing_whitespace = false
insert_final_newline = true

# -------------------------
# Bash / Shell scripts
# -------------------------
[*.{sh,bash}]
indent_style = space
indent_size = 2
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

# img2num is in bash
[img2num]
indent_style = space
indent_size = 2
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

# -------------------------
# Batch & PowerShell scripts
# -------------------------
[*.{bat,cmd,ps1}]
indent_style = space
indent_size = 2
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = false
max_line_length = 120
