9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Perlのコード整形ツールPerltidyを導入する

Last updated at Posted at 2018-11-30

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と超ややこしいコード整形ルールになります。
共存は絶対辞めましょう。

9
5
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
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?