PHPコードをHackのコードに置き換えるのは、最高に面倒くさいですよね。
なので、HHVMで提供されている、hackificatorを使用して、一気に変換できないかを検証してみました。
hackificatorはPHPコードをHackに置き換える為のコマンドラインツールです。
hackificatorはOCamlで実装されており、ASTベースでのコード変換を行いまます。(コード読む限り)
試した、HHVMのバージョンは3.12.0です。
置き換えのステップ
置き換えには2ステップ必要です。
- PHPのコードをHackのコードに置き換える
- Hackのコードをstrictモードにアップグレードする
PHPのコードをHackのコードに置き換える
下記のコマンドで、指定したディレクトリ内のPHPコードをHackのコードに置き換えます。
hackificator -thrift .
変換作業の仕様は試した感じでは下記のようでした。
- ファイルのヘッダーを<?phpから<?hhに変える。
- 変換した直後は、partialモードになる(ヘッダーにpartialコメントはつかない)
- 変換時に型の矛盾などのエラーを検出した場合は変換しない。
- 拡張子はPHPのまま。
- タイプヒントの型の変換は行わない。
- PHP7のreturn typeのselfをthisに置き換えたりしない。
- declare(strict_types=1)があるファイルは変換できない。
Hackのコードをstrictモードにアップグレードする
下記のコマンドで、指定したディレクトリ内のHackコードをstrictモードにアップグレードします。
hackificator -upgrade .
- アップグレードできるものは<?hh //strictにヘッダーを変える。
- 型エラーが起きるものは変換しない(partialモード or declモードのまま)。
- 拡張子はそのまま、.hhの場合は、.hhのまま、.phpの場合は.phpのまま。