LoginSignup
3
3

More than 5 years have passed since last update.

指定したディレクトリ以下のHaskellソースの自動インデントを行うワンライナー

Last updated at Posted at 2015-12-13

hindentコマンドを利用して、指定したディレクトリ以下のすべてのHaskellソースの自動インデントを行うワンライナー

for f in `find . -name "*.hs"`; do cat $f | (hindent --style chris-done > $f.hindent); if [ -s $f.hindent ]; then mv $f.hindent $f; else break; fi; done

hindentはソースを改行した際にtrailing whitespaceを残すことがあるため、それを削除する機能も追加したバージョン

for f in `find . -name "*.hs"`; do cat $f | hindent --style chris-done | (sed 's/ *$//' > $f.hindent); if [ -s $f.hindent ]; then mv $f.hindent $f; else break; fi; done

上記プラス、hindentはソースの最終行の改行を削除してしまうので最終行に改行を必ず入れるバージョン

for f in `find . -name "*.hs"`; do cat $f | hindent --style chris-done | sed 's/ *$//' | (perl -0pe 's/\n*\Z/\n/m' > $f.hindent); if [ -s $f.hindent ]; then mv $f.hindent $f; else break; fi; done

上記プラス、hindentはたまにエラーになるためどのファイルがエラーになったかも表示するようにしたバージョン

for f in `find . -name "*.hs"`; do printf "$f ... "; cat $f | hindent --style chris-done | sed 's/ *$//' | (perl -0pe 's/\n*\Z/\n/m' > $f.hindent); if [ -s $f.hindent ]; then mv $f.hindent $f; echo done; else break; fi; done

上記プラス、stylish-haskellも併用したバージョン

for f in `find . -name "*.hs"`; do printf "$f ... "; cat $f | hindent --style chris-done | stylish-haskell | sed 's/ *$//' | (perl -0pe 's/\n*\Z/\n/m' > $f.hindent); if [ -s $f.hindent ]; then mv $f.hindent $f; echo done; else break; fi; done
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3