code: protected function getDescription(array $lines)
      {
          $description = '';
          $summaryFound = false;
          $summaryPassed = false;
  
          foreach ($lines as $line) {
              if ($line && !$summaryPassed) {
                  $summaryFound = true;
                  if (substr(trim($line), -1) == '.') {
                      $summaryPassed = true;
                  }
                  continue;
              }
              if (!$line && $summaryFound && !$summaryPassed) {
                  $summaryPassed = true;
                  continue;
              }
              if ($line && $line[0] == '@') {
                  break;
              }
              if ($line && $summaryPassed) {
                  $description .= $line . "\n";
              }
          }
          return trim($description);
      }
docs: Gets a methods description.
  
  Skips over the summary (as described above), then if there are further
  lines before the first line that begins with an @, then this will
  extract them as the description.
  
  This line and the paragraph above would all be extracted as description.
  
  @param string[] $lines
  @return string