Timothy J. Warren
efbb6d6878
All checks were successful
timw4mail/HummingBirdAnimeClient/pipeline/head This commit looks good
90 lines
2.2 KiB
PHP
90 lines
2.2 KiB
PHP
<?php declare(strict_types=1);
|
|
/**
|
|
* Hummingbird Anime List Client
|
|
*
|
|
* An API client for Kitsu to manage anime and manga watch lists
|
|
*
|
|
* PHP version 8
|
|
*
|
|
* @copyright 2015 - 2022 Timothy J. Warren <tim@timshome.page>
|
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
* @version 5.2
|
|
* @link https://git.timshome.page/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 = "<?php declare(strict_types=1);\n{$header}";
|
|
|
|
$new_source = str_replace($text_to_replace, $new_text, $source);
|
|
file_put_contents($file, $new_source);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
$files = array_filter(
|
|
glob_recursive('*.php'),
|
|
fn (string $file) => ! (str_contains($file, '/vendor/') || str_contains($file, '/tmp/'))
|
|
);
|
|
array_walk($files, 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));
|