# ファイルの全体的な説明。
#
# この`.editorconfig`ファイルでは自分が認識した全てのファイルを包括するルールを記述します。
# 単純化のためになるべく全てのプロジェクトで同じ設定ファイルを使います。
# なのでプロジェクトと関係していないセクションもありますが、
# コンフリクトしない限りは問題としません。
#
# `editorconfig-checker`コマンドでの検査は、
# `.editorconfig-checker.json`設定ファイルの存在を前提にします。
# 例えばURLなどの改行できない要素が多く含まれるから、
# 長さを厳格に検査したくないというような場合はそちらで検査を除外します。
# `.editorconfig`側で`unset`を書いてしまうと、
# コードフォーマッターに伝わる長さのソフトリミット的な制約も変わってしまうことを危惧しているためです。

# このファイルをeditorconfigのrootとして指定します。
# 特定のディレクトリで例外的なファイルがあったら、
# そのディレクトリで例外ルールを記述します。
root = true

[*]
# デフォルトではBOMなしの通常のUTF-8を文字コードとして採用します。
charset = utf-8
# デフォルトではUNIX向けの標準的な改行コードを使います。
end_of_line = lf
# POSIXが定めるテキストファイルは改行で終わるのでデフォルトではそれを求めます。
# それで余分な改行が入るファイルの方を例外として処理します。
insert_final_newline = true
# デフォルトでは余分な空白は許可しません。
trim_trailing_whitespace = true

# 行の長さのデフォルト値です。
# しばしばURLなど分割困難で長過ぎる要素が入るファイルが多いので、
# そのようなものには検査しないという形で例外が許可されます。
# あくまで対応できるファイルで原則の値を設定することと、
# editorconfig対応フォーマッターへ設定値を伝えることを目的としています。
max_line_length = 100

# デフォルトではインデントはスペースで行いインデント幅は2にします。
# そうではない言語を例外として設定します。
# これもcheckerがインデントではないものを誤認することがあるので、
# しばしば検査しないという形で例外が許可されます。
indent_style = space
indent_size = 2

# 標準インデントが4の言語。
[*.{cs,csx,java,kt,kts,php,py,pyi,rs}]
indent_size = 4

# 標準インデントがタブの言語。
[{*.go,*.make,*.mk,Makefile}]
indent_style = tab
indent_size = unset

# 変則的に2インデントや3インデントが混ざり合ったりして、
# インデントが倍数になるとは限らない言語。
[*.{chs,el,hs,hsc,hsig,lhs,lhsig}]
indent_size = unset

[*.md]
# Markdownで番号付きリストをネストした場合、
# インデント幅はマーカー幅に依存するため固定値での指定は不適切です。
# よって値を指定しないことにします。
indent_size = unset
# Markdownには最後にスペースを2つ入れて強制改行するシンタックスがあります。
# それを使えるように末尾のスペースを許可します。
# 本来はなるべく強制改行は使わず意味で段落して、
# 改行位置はクライアントのデバイスに任せるべきですが、
# 機能として存在しているものが強制的に使えなくなるのは不健全なので、
# コンフリクトする設定は除外します。
trim_trailing_whitespace = false

[*.bat]
# Windows向けbatファイルではUnicodeは使えないのでlatin1を指定します。
# 本当はasciiを指定したいのですが設定キーが存在しません。
charset = latin1
# Windows向けファイルなのでCRLFを指定します。
end_of_line = crlf

[*.ps1]
# PowerShellの様々な実行環境やバージョンで安定してUTF-8を使うにはBOMを書き込みます。
# BOMを書き込まないと日本語Windows環境ではShift_JISだと認識されてしまうバージョンがあります。
# PowerShellではBOMを書き込むことで問題が生じることはないので、
# BOMを書き込むことが安定します。
charset = utf-8-bom
# Windows向けファイルなのでCRLFを指定します。
end_of_line = crlf

[*.reg]
# BOMを書き込まないとWindows環境では別の文字コードだと認識されてしまいます。
charset = utf-8-bom
# Windows向けファイルなのでCRLFを指定します。
end_of_line = crlf
