カオスに満ちたhamlファイル群にhaml-lintを入れて一括置換でどこまで解決できるかやってみるよ

January 29th, 2019

haml、人気ですよね。僕もお手伝いしているプロジェクトでよく使われています。

とはいえlintまで入っていることは稀で、混沌としてしまっていることはままあります。

なのでじゃあそのまま混沌でいてくださいよってわけにもいかないので、一括置換でどこまで戦えるのかを試してみました。

結論いうと力尽きたのでぜんぜんだめです、2,3割は手動でやりました。

チャレンジする環境

$ cat ../../Gemfile.lock |grep haml
      haml (>= 3.0, < 5.0)
    haml (4.0.7)
    haml-rails (0.9.0)
      haml (>= 4.0.6, < 5.0)
      html2haml (>= 1.0.1)
    haml_lint (0.19.0)
      haml (~> 4.0)
    html2haml (2.2.0)
      haml (>= 4.0, < 6)
  haml-rails
  haml_lint
  
$ perl -v

This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)

$ cat ../../.haml-lint.yml
───────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: ../../.haml-lint.yml
───────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ linters:
   2   │   LineLength:
   3   │     enabled: false

末尾にある不要なスラッシュを消す

perl -i -pe 's/\/$//' **/*.haml

左のブレースに1つ空白をつける

perl -i -pe 's/([^#]){([^ ])/\1{ \2/' **/*.haml

右のブレースに1つ空白をつける

perl -i -pe 's/([^ ])}$/\1 }/' **/*.haml

スクリプトのイコールのあとに空白をつける

perl -i -pe 's/ =([^ |=|>])/ = \1/' **/*.haml
perl -i -pe 's/^( +)-([^ |=|>])/\1- \2/' **/*.haml

ハッシュロケットの記法を統一

perl -i -pe 's/:([a-zA-Z_-]+) =>/\1:/g' **/*.haml
perl -i -pe 's/" =>/":/g' **/*.haml
perl -i -pe "s/' =>/':/g" **/*.haml

image_tagを使ってないところをできるだけ使う

perl -i -pe 's/%img{ src: (.)}[/]/= image_tag \1/g' **/.haml

明示しなくていいdivを消す

perl -i -pe 's/%div.(\w+)/.\1/' **/*.haml

末尾の空白を消す

perl -i -pe 's/ +$//' **/*.haml

コメントのシャープのあとに空白を入れる

perl -i -pe 's/-#([^ ])/-# \1/' **/*.haml

IDとCLASSの順序を整える

perl -i -pe 's/(#\w+)(\.[\.|\-|\_|\w]+)/\2\1/' **/*.haml

AUTHOR

Daisuke Tsuji
Daisuke Tsuji@dim0627

フリーのWeb Developer。

RubyとかRailsを触ってる時間が多い。コーディングもマークアップもライティングもデザインもSEOもやるタイプ。

だいたいどれもだめ。