Yasca用のプラグインの開発経験

この記事では、コード品質のアセンブリと分析を自動化できる便利なユーティリティを使用した経験を共有したいと思います。 Yasca-フリーソフトウェアは、小さなPHPエンジンであり、PMD、JLint、RATSなどのJava、C ++、またはPHPコードの分析を実行するためのユーティリティセットです。 これらのユーティリティの実行の統合は、PHP言語で小さなプラグインを開発することにより実行されます。 このようなプラグインの開発プロセスについては、後で説明します。



開始するには、Yascaを機能させる必要があります。 これは非常に簡単です。 ダウンロードページにアクセスし 、実際のyascaコーデックの 1つをダウンロードします 。 ローカルディレクトリ(c:/ yascaなど)を作成し、すべてのアーカイブを1つずつ展開します。 その直後に、ツールを使用する準備が整います。 コマンドラインにコマンドを入力(またはcmdファイルに保存)します(省略記号を、JavaまたはC ++プロジェクトのあるディレクトリへのパスに置き換えます)。



yasca.exe -o ./Report ...
      
      





しばらく作業した後、Yascaはプロジェクトのコーディングスタイルに関するコメントを含むReport.htmlレポートを生成します。 レポート行にはソースコードへのリンクが含まれていますが、不便な点は、リンクをクリックするとファイルの先頭に到達することです。目的の行を番号で検索するのは少し面倒です。 これはまさに私が修正を提案するものです。 ソースコードの目的の行にリンクを配置してみましょう。



ソーステキストでこのような焦点を直接絞り出すことはできないことは明らかですが、ベースとして一時的なhtmlファイルを作成し、各行にブックマークを作成し、行番号を名前として使用できます。 同時に、左側に行番号を表示して、ナビゲートしやすくします。 怖いですが、実際には非常に簡単です。 プラグイン自体(プラグインフォルダーに配置されたMirror.phpという名前にする必要があります)は次のようになります。



 <?php /** * @extends Plugin * @package Yasca */ class Plugin_Mirror extends Plugin { public $valid_file_types = array("java", "c", "cpp", "h", "cs", "sql"); function rmdir_recurse($path) { $path= rtrim($path, '/').'/'; $handle = opendir($path); for (;false !== ($file = readdir($handle));) if($file != "." and $file != ".." ) { $fullpath= $path.$file; if( is_dir($fullpath) ) { $this->rmdir_recurse($fullpath); rmdir($fullpath); } else unlink($fullpath); } closedir($handle); } function execute() { $yasca =& Yasca::getInstance(); static $once = true; if ($once) { $this->rmdir_recurse('./Mirror'); } $once = false; if (!check_in_filetype($this->filename, $this->valid_file_types)) { return; } $filename = preg_replace('/\w:/', './Mirror', $this->filename) . ".html"; $dir_name = preg_replace('/[\\\\\\/][^\\\\\\/]+$/', '', $filename); if (!file_exists($dir_name)) { if (!mkdir($dir_name, 0777, true)) return; } if (file_exists($filename)) { unlink($filename); } if (!$handle = fopen($filename, 'w+', true) ) return; fwrite($handle,"<html><meta http-equiv=\"Content-Type\" content=\"text/html;charset=windows-1251\" /><head></head><body><pre>\n"); $line = 1; foreach ($this->file_contents as $file_line) { $str = $line; while (strlen($str)<5) { $str = " " . $str; } fwrite($handle,"<a name=$line></a>$str: $file_line<br>\n"); $line++; } fwrite($handle,"</pre></body></html>"); fclose($handle); } } ?>
      
      





さて、次回yascaを起動した後、ミラーディレクトリにあるすべての分析済みファイルのコピーをhtmlで作成した形式で取得します。 これらのファイルを有効にするには、レポートの作成プロセスに介入し、レポートが生成するリンクをバージョンに置き換える必要があります。 幸いなことに、このコードはPHPでも書かれています。 libディレクトリに移動し、デフォルトでレポートの作成に使用されるHTMLGroupReport.phpファイルを見つけます。 このファイルで、フラグメントを見つけます。



 fwrite($handle, "<a style=\"margin-right: 12px;\" source_code_link=\"true\" href=\"file://$filename\" target=\"_blank\" title=\"$filename\">$filename_base$line_number_field</a>" . "</td>");
      
      





それを次のものに置き換えます。



 $chg_file_name = getcwd(); $chg_file_name = preg_replace('/\\\\/', '/', $chg_file_name); $chg_file_name = preg_replace('/^\w:/', $chg_file_name . '/Mirror', $filename); if (preg_match('/\.java$|\.c$|\.cpp$|\.h$|\.cs$|\.sql$/i', $chg_file_name)) { fwrite($handle, "<a style=\"margin-right: 12px;\" source_code_link=\"true\" href=\"file://$chg_file_name.html#$line_number\" target=\"code\" title=\"$filename\">$filename_base$line_number_field</a>" . "</td>"); } else { fwrite($handle, "<a style=\"margin-right: 12px;\" source_code_link=\"true\" href=\"file://$filename\" target=\"_blank\" title=\"$filename\">$filename_base$line_number_field</a>" . "</td>"); }
      
      





次に、Yascaを再度起動し、すべてが機能することを確認します。 さらなる自動化という点では、私たちの想像力はあまり制限されていません。 たとえば、MSBuildを使用してWindows用の大規模なC ++プロジェクトのアセンブリを自動化するプラグインがありました。 アセンブリ自体に約1時間かかったため、Yascaとコーデックの作業に関連するわずかな減速は影響しませんでした。 しかし、出力では、コードスタイルに関する警告とコメントの両方を含むレポートを受け取りました。ソースコード内での便利な位置付けです。




All Articles