Perltidyとは
Perlのコード整形ツール。フレームワークCatalystとかも使っててもいい感じに整形してくれるよ!
様々なルールを Perltidyrc
に記述することで定義可能。
- 100文字で改行
- カッコ内の空白は空けない 等
導入
cpanmは使えるようにしておいてください。
$ cpanm Perl::Tidy
# 確認
$ which perltidy
/usr/local/bin/perltidy
導入完了
設定ファイルの記述
記述場所はホームディレクトリの中です。vimrcとかbashrcとかあるあそこですね。
$ vim ~/.perltidyrc
この中に色々記述していきます。とりあえず僕のやつ貼っときます。
# basic option
-enc=utf8 # 文字コードUTF-8(しかしwarning出る)
-ole=unix # 改行は LF
-i=4 # スペース4つ
-l=150 # 1行の長さが150文字以内に収まるようにする
--check-syntax # 整形後 perl -c -T でチェック
# code indentation control
--closing-token-indentation=1 # 配列指定時などに、終了カッコを開始と同じ位置までインデント
--nooutdent-long-quotes # インデントされ過ぎた文字列があっても引き戻して来ない
--nooutdent-long-lines # インデントされ過ぎた行があっても引き戻して来ない
# whitespace control
--nospace-for-semicolon # forループの指定のセミコロンの前にスペースを置かない
--nospace-terminal-semicolon # セミコロンの前にスペースを置かない
--add-semicolons # 行末にセミコロンを置き、次の行に終わりの中括弧を置く
--tight-secret-operators # 0+$val などの特定の表現のときは 0 + $val の様なスペースを空けない
--paren-tightness=2 # 括弧の中のスペースは開けない
# comment control
--minimum-space-to-comment=2 # 行末コメントとコードの間のスペースは2つ
# line break control
--opening-brace-always-on-right # 開き括弧は必ず右端に置く
# controlling list formatting
--maximum-fields-per-table=1 # 配列要素の指定を横に並べる数
--break-at-old-comma-breakpoints # カンマの後の改行を変更しない
# brank line control
--keep-old-blank-lines=2 # 過去の空白行を消さない
# overview
--backup-and-modify-in-place # ファイルを書き換えて、整形前のファイルを.bak で保存する
その他の記述方法はcpanmを見てください。 https://metacpan.org/pod/perltidy
設定ファイルの記述が面倒!
そんなあなたに、Perlのベストプラクティスな設定を自動でやってくれるオプションがあります。 -pbp
これで問題ないのであれば設定ファイルの記述は飛ばしてください。
使用方法
perltidyコマンドの後ろにファイル名を指定するだけです!
ファイル全体にコード整形を通します。
$ perltidy test.pl
これでもうperltidyに記述したコード整形ルールに則ってコードを整形してくれるはずですね。
設定ファイルを記述せずに、ベストプラクティスを使うのであれば
$ perltidy -pbp test.pl
の指定でOKです。
選択範囲のみにPerltidyを実行する
うちのプロジェクトは1ファイル5000行とかザラなので、改修した関数範囲にのみかけるパターンが多いです。
その場合は、エディタの設定に記述します。Vimで記述している人向けの説明になります。他のはわかりません。ごめんなさい。
.vimrcを編集する
$ vi ~/.vimrc
noremap <buffer> ,ptv <Esc>:'<,'>! perltidy<CR>
上記を .vimrc
に記述します。
使うときは、 Shift + v -> 範囲選択 -> ,ptv となります。
意味としては、
-
'<,'>
: ヴィジュアルモードでの選択範囲 -
,ptv
:選択してからタイプする文字。 今回は,ptv
とします-
,ptv
をタイプすると、選択した範囲が perltidy に渡されコード整形させる
-
となります。
ベストプラクティスを使う場合
noremap <buffer> ,ptv <Esc>:'<,'>! perltidy -pbp<CR>
注意!
perltidyrcと、-pbpオプションは共存させると思わぬ挙動になります。
こいつのせいでしばらく悩まされました。
両方記述した場合、順番としてperltidyrcのオプションを読み込んだ後に、-pbpオプションの記述内容に変換します。
完全に上書きというわけでなく、-pbpオプションに記述されている内容のみ上書きするので一部はperltidyrc、一部はpbpと超ややこしいコード整形ルールになります。
共存は絶対辞めましょう。