* @license http://www.opensource.org/licenses/mit-license.html MIT License * @version 5.2 * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient */ namespace Aviat\Ion\Etc; if ( ! function_exists('glob_recursive')) { // Does not support flag GLOB_BRACE function glob_recursive(string $pattern, int $flags = 0): array { $files = glob($pattern, $flags); foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) { $files = array_merge($files, glob_recursive($dir . '/' . basename($pattern), $flags)); } return $files; } } function get_text_to_replace(array $tokens): string { $output = ''; // Tokens have the follow structure if arrays: // [0] => token type constant // [1] => raw syntax parsed to that token // [2] => line number foreach ($tokens as $token) { // Since we only care about opening docblocks, // bail out when we get to the namespace token if (is_array($token) && $token[0] === T_NAMESPACE) { break; } if (is_array($token)) { $token = $token[1]; } $output .= $token; } return $output; } function replace_file(string $file, string $template): void { $source = file_get_contents($file); if ($source === FALSE || stripos($source, 'namespace') === FALSE) { return; } $tokens = token_get_all($source); $text_to_replace = get_text_to_replace($tokens); $header = file_get_contents(__DIR__ . $template); $new_text = " ! (str_contains($file, '/vendor/') || str_contains($file, '/tmp/')) ); array_walk($files, static fn (string $file) => replace_file($file, '/header_comment.txt')); echo json_encode(array_values($files), JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . "\n"; printf("Successfully updated header comments in %d files\n", count($files));