[*.{cpp,hpp,ipp}}
charset = utf-8-bom
単純な typo ですが、今までずーと気づかずに config が仕事してくれてると思い込んでました。。。
直すのは簡単です。簡単ですが、また同じ失敗をする可能性があります。(にんげんだもの)
というわけで、テスト書きました。
テスト方法
.editorconfig の記法は概ね ini ファイルと一致します。
なので、適当な ini ファイルパーサーに読み込ませてエラーが起きないかどうか?で検証できそうです。
iutest は C++ のテスティングフレームワークですが、ツール系には Python も使用しています。
Python には ConfigParser があるのでそちらでテストを書きました。
import sys
import os
try:
from configparser import ConfigParser
except ImportError:
from ConfigParser import SafeConfigParser as ConfigParser
class EditorConfig(object):
def __init__(self, path):
self.name = os.path.basename(path)
self.fp = open(path)
self.first_head = True
def readline(self):
if self.first_head:
self.first_head = False
return '[global]\n'
return self.fp.readline()
def __iter__(self):
return self
def __next__(self):
line = self.readline()
if not line:
raise StopIteration
return line
next = __next__ # For Python 2 compatibility.
def main():
path = sys.argv[1]
ini = ConfigParser()
if not os.path.exists(path):
sys.stderr.write('%s not found...' % path)
sys.exit(2)
ini.readfp(EditorConfig(path))
sys.exit(0)
if __name__ == '__main__':
main()
基本的には ini ファイルをパーサーにかけるだけなんですが、1点だけポイントがあります。
EditorConfig は、ディレクトリを上がって .editorconfig を探索しますが、root = true を最初に書いておくとそこで探索が打ち切られます。
この root = true が ini ファイルとしてはセクションのない要素のためエラーになってしまいます。
そのため、
最初に [global] というダミーセクションを挿入して ConfigParser に渡してます。
CI に組み込む
Python が実行できる CI サービスであればなんでも問題ありません。
今回
iutest では Codeship で cpplint やインクルードガードのチェックや絶対パスが混入してないかの、雑多なテストを行っているのでそちらに組み込みました。
こんな感じに検出されます!
これでもう安心ですね。