рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдЙрдкрдпреЛрдЧреА
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рдВрдпреЛрдЬрди рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо Yasca рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░, рдЬреЛ рдХрд┐ рдПрдХ рдЫреЛрдЯрд╛ PHP рдЗрдВрдЬрди рдФрд░ рдЬрд╛рд╡рд╛, C ++ рдпрд╛ PHP рдХреЛрдб рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ PMD, JLint рдФрд░ RATS рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдПрдХреАрдХрд░рдг PHP рднрд╛рд╖рд╛ рдореЗрдВ рдЫреЛрдЯреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рд╕реНрдХрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╣рдо
рдбрд╛рдЙрдирд▓реЛрдб рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ
рдпрд╛рд╕реНрдХрд╛ рдФрд░
рдХреЛрдбреЗрдХреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕реНрдерд╛рдиреАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП c: / yasca) рдФрд░ рдмрд╕ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рд╕рднреА рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХреЛ рдЦреЛрд▓ рджреЗрдВред рдЙрд╕рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдЙрдкрдХрд░рдг рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рд╣рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ cmd-file рдореЗрдВ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ) рдХрдорд╛рдВрдб (рдХреБрдЫ рдЬрд╛рд╡рд╛ рдпрд╛ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рд▓рд┐рдП рдПрд▓рд┐рдкреНрд╕ рдХреЛ рд░рд┐рдкреНрд▓реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ):
yasca.exe -o ./Report ...
рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╛рд╕реНрдХрд╛ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд░рд┐рдкреЛрд░реНрдЯред рд░рд┐рдкреЛрд░реНрдЯ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдВрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдВрдЫрд┐рдд рд░реЗрдЦрд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдердХрд╛рдК рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рддрдп рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЗрдЪреНрдЫрд┐рдд рд▓рд╛рдЗрди рдкрд░ рд▓рд┐рдВрдХ рдХреЛ рддреБрд░рдВрдд рд╣рдореЗрдВ рд╕реНрдерд┐рддрд┐ рджреЗрдВред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдлреЛрдХрд╕ рдХреЛ рд╕реАрдзреЗ рд╕реНрд░реЛрдд рдЧреНрд░рдВрдереЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд░реИрдВрдХ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд╕реНрдерд╛рдпреА HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдмреБрдХрдорд╛рд░реНрдХ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдмрд╛рдИрдВ рдУрд░, рд╣рдо рд▓рд╛рдЗрди рдирдВрдмрд░ рдбрд╛рд▓реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдпрд╣ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛред рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдкреНрд▓рдЧрдЗрди рдЦреБрдж рдХреЛ (рдЗрд╕реЗ рдорд┐рд░рд░ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдорд┐рд░рд░ .php рдирд╛рдо рджреЗрдирд╛ рд╣реЛрдЧрд╛) рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
<?php 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); } } ?>
рдЕрдм, рдпрд╛рд╕реНрдХрд╛ рдХреЗ рдЕрдЧрд▓реЗ рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдЪрдЯреАрдПрдордПрд▓-рддреИрдпрд╛рд░ рдлреЙрд░реНрдо рдореЗрдВ рдорд┐рд░рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрди рд▓рд┐рдВрдХреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдХреЛрдб PHP рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдБ 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>"); }
рдлрд┐рд░ рд╣рдо рдпрд╛рд╕реНрдХрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдЧреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рдорд╛рд░реА рдХрд▓реНрдкрдирд╛ рдмрд╣реБрдд рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд▓рдЧ-рдЗрди рдерд╛ рдЬреЛ MSBuild рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реЗ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рдШрдВрдЯреЗ рдХрд╛ рд╕рдордп рд▓рдЧрддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╛рд╕реНрдХрд╛ рдФрд░ рдХреЛрдбреЗрдХреНрд╕ рдХреЗ рдХрд╛рдо рд╕реЗ рдЬреБрдбрд╝реА рдереЛрдбрд╝реА рд╕реА рднреА рд╕реБрд╕реНрддреА рдирд╣реАрдВ рдереАред рд▓реЗрдХрд┐рди рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдорд┐рд▓реА, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рдкрд░ рд╡рд╛рд░реНрдирд┐рдВрдЧ рдФрд░ рдХрдореЗрдВрдЯ рджреЛрдиреЛрдВ рдереЗ, рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреЛрдЬрд┐рд╢рдирд┐рдВрдЧ рдХреЗ рд╕рд╛рдеред