Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away