Artykuły na każdy temat

[PHP] Liczenie komentarzy w kodzie źródłowym

Dodano 31.05.2016r. o 16:06
Oczywiście istnieją takie narzędzia jak PHPDoc, CLOC lub PHPLOC nie mniej jednak na potrzeby szybkiej analizy komentarzy potrzebowałem czegoś prostszego. Wygląda to bardzo prosto:
Kod:
<?php
$dir '../path_to_project/';
$prohibited_dirs = ['/libs/''/templates_c/'];
header('Content-Type: text/plain; charset=utf-8');

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirFilesystemIterator::UNIX_PATHS FilesystemIterator::SKIP_DOTS)) as $file_info)
{
 if($file_info -> getExtension() === 'php')
 {
  $path substr($file_info -> getPathname(), strlen($dir));

  if($path[0] !== '/')
  {
   $path '/'.$path;
  }

  foreach($prohibited_dirs as $prohibited_dir)
  {
   if(substr($path0strlen($prohibited_dir)) === $prohibited_dir)
   {
    $path null;
    break;
   }
  }

  if($path !== null)
  {
   foreach(token_get_all(file_get_contents($file_info -> getPathname())) as $token)
   {
    if(in_array($token[0], [T_COMMENTT_DOC_COMMENT]) === true)
    {
     // One-line C++ style comments
     if(substr($token[1], 02) === '//')
     {
      ++$comments[$path]['double_slash'];
     }
     // One-line Shell style comments
     else if(substr($token[1], 01) === '#')
     {
      ++$comments[$path]['hash'];
     }
     // Multi-line comments
     else
     {
      ++$comments[$path]['multi_line'];
     }
    }
   }
  }
 }
}

var_dump($comments);
?>
Nigdy bym nie pomyślał, że funkcja token_get_all() może być tak przydatna. W $token[1] mamy zawartość komentarza, który także można wrzucić do tablicy. Jeżeli taka jest potrzeba to warto zastosować trim() i ewentualnie uciąć niepotrzebne znaki. Gdyby ktoś pytał o zastosowani funkcji token_get_all() to podpowiadam, że stosuję się ją np. do tworzenia tzw. sandboxów. Szkoda, że nie ma predefiniowanych stałych na konkretne typy komentarzy no ale...

Komentarze

Brak komentarzy

Dodaj komentarz

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)