123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757 |
- <?php
- /**
- * This file is part of the Carbon package.
- *
- * (c) Brian Nesbitt <brian@nesbot.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- use Carbon\Carbon;
- use Carbon\CarbonImmutable;
- use Carbon\CarbonInterface;
- use Carbon\Factory;
- use Carbon\FactoryImmutable;
- use Symfony\Component\Translation\TranslatorInterface;
- $tags = [
- 'property',
- 'property-read',
- PHP_EOL,
- 'mode',
- ['call', 'is'],
- ['call', 'isDayOfWeek'],
- ['call', 'isSameUnit'],
- ['call', 'setUnit'],
- ['call', 'addUnit'],
- ['call', 'addRealUnit'],
- ['call', 'roundUnit'],
- ['call', 'diffForHumans'],
- ];
- $nativeMethods = [
- 'getOffset' => 'int',
- 'getTimestamp' => 'int',
- ];
- $modes = [];
- $autoDocLines = [];
- $carbon = __DIR__.'/src/Carbon/Carbon.php';
- $immutable = __DIR__.'/src/Carbon/CarbonImmutable.php';
- $interface = __DIR__.'/src/Carbon/CarbonInterface.php';
- $phpLevel = 7.1;
- file_put_contents($interface, preg_replace('/(\/\/ <methods[\s\S]*>)([\s\S]+)(<\/methods>)/mU', "$1\n\n // $3", file_get_contents($interface), 1));
- require_once __DIR__.'/vendor/autoload.php';
- $trait = __DIR__.'/src/Carbon/Traits/Date.php';
- $code = '';
- $overrideTyping = [
- $carbon => [
- // 'createFromImmutable' => ['static Carbon', 'DateTimeImmutable $dateTime', 'Create a new Carbon object from an immutable date.'],
- 'createFromFormat' => ['static static|false', 'string $format, string $time, DateTimeZone|string|false|null $timezone = null', 'Parse a string into a new Carbon object according to the specified format.'],
- '__set_state' => ['static static', 'array $array', 'https://php.net/manual/en/datetime.set-state.php'],
- ],
- $immutable => [
- // 'createFromMutable' => ['static CarbonImmutable', 'DateTime $dateTime', 'Create a new CarbonImmutable object from an immutable date.'],
- 'createFromFormat' => ['static static|false', 'string $format, string $time, DateTimeZone|string|false|null $timezone = null', 'Parse a string into a new CarbonImmutable object according to the specified format.'],
- '__set_state' => ['static static', 'array $array', 'https://php.net/manual/en/datetime.set-state.php'],
- ],
- ];
- foreach (glob(__DIR__.'/src/Carbon/Traits/*.php') as $file) {
- $code .= file_get_contents($file);
- }
- function unitName($unit)
- {
- switch ($unit) {
- case 'milli':
- return 'millisecond';
- case 'micro':
- return 'microsecond';
- default:
- return $unit;
- }
- }
- function pluralize($word)
- {
- if (preg_match('/(millenni)um$/i', $word)) {
- return preg_replace('/(millenni)um$/i', '$1a', $word);
- }
- return preg_replace('/(centur)y$/i', '$1ie', $word).'s';
- }
- function dumpValue($value)
- {
- if ($value === null) {
- return 'null';
- }
- if ($value === CarbonInterface::TRANSLATE_ALL) {
- return 'CarbonInterface::TRANSLATE_ALL';
- }
- $value = preg_replace('/^array\s*\(\s*\)$/', '[]', var_export($value, true));
- $value = preg_replace('/^array\s*\(([\s\S]+)\)$/', '[$1]', $value);
- return $value;
- }
- function cleanClassName($name)
- {
- if (preg_match('/^[A-Z]/', $name)) {
- $name = "\\$name";
- }
- if (ltrim($name, '\\') === TranslatorInterface::class) {
- return 'TranslatorInterface';
- }
- return preg_replace('/^\\\\(Date(?:Time(?:Immutable|Interface|Zone)?|Interval)|[a-z]*Exception|Closure)$/i', '$1', preg_replace('/^\\\\Carbon\\\\/', '', $name));
- }
- function dumpParameter($method, ReflectionParameter $parameter)
- {
- global $defaultValues;
- $name = $parameter->getName();
- $output = '$'.$name;
- if ($parameter->isVariadic()) {
- $output = "...$output";
- }
- if ($parameter->getType()) {
- $name = cleanClassName($parameter->getType()->getName());
- if ($parameter->allowsNull()) {
- $name = "?$name";
- }
- $output = "$name $output";
- }
- if (isset($defaultValues[$method])) {
- if (isset($defaultValues[$method][$name])) {
- $output .= ' = '.dumpValue($defaultValues[$method][$name]);
- }
- return $output;
- }
- try {
- if ($parameter->isDefaultValueAvailable()) {
- $output .= ' = '.dumpValue($parameter->getDefaultValue());
- }
- } catch (ReflectionException $exp) {
- }
- return $output;
- }
- $deprecated = [];
- foreach ($tags as $tag) {
- if (\is_array($tag)) {
- [$tag, $pattern] = $tag;
- }
- $pattern = $pattern ?? '\S+';
- if ($tag === PHP_EOL) {
- $autoDocLines[] = '';
- continue;
- }
- preg_match_all('/\/\/ @'.$tag.'\s+(?<type>'.$pattern.')(?:\s+\$(?<name>\S+)(?:[^\S\n](?<description>.*))?\n|(?:[^\S\n](?<description2>.*))?\n(?<comments>(?:[ \t]+\/\/[^\n]*\n)*)[^\']*\'(?<name2>[^\']+)\')/', $code, $matches, PREG_SET_ORDER);
- foreach ($matches as $match) {
- $vars = (object) $match;
- $deprecation = null;
- if (isset($vars->comments) && preg_match(
- '`^[ \t]+(//|/*|#)[ \t]*@deprecated(?:\s(?<deprecation>[\s\S]*))?$`',
- $vars->comments,
- $comments
- )) {
- ['deprecation' => $deprecation] = $comments;
- $deprecation = preg_replace('/^\s*(\/\/|#|\*) {0,3}/m', '', trim($deprecation));
- if (preg_match('/^(?:[a-z]+:[^\n]+\n)+$/', "$deprecation\n")) {
- $data = [];
- foreach (explode("\n", $deprecation) as $line) {
- [$name, $value] = array_map('trim', explode(':', $line, 2));
- $data[$name] = $value;
- }
- $deprecation = $data;
- } else {
- $deprecation = ['reason' => $deprecation];
- }
- }
- $vars->name = $vars->name ?: $vars->name2;
- $vars->description = $vars->description ?: $vars->description2;
- if ($tag === 'mode') {
- if (!isset($modes[$vars->type])) {
- $modes[$vars->type] = [];
- }
- $modes[$vars->type][] = $vars->name;
- continue;
- }
- if ($tag === 'call') {
- switch ($vars->type) {
- case 'diffForHumans':
- foreach ($modes[$vars->type] as $mode) {
- $autoDocLines[] = [
- '@method',
- 'string',
- "$mode{$vars->name}DiffForHumans(DateTimeInterface \$other = null, int \$parts = 1)",
- "Get the difference ($mode format, '{$vars->name}' mode) in a human readable format in the current locale. (\$other and \$parts parameters can be swapped.)",
- ];
- }
- break;
- case 'isDayOfWeek':
- $autoDocLines[] = [
- '@method',
- 'bool',
- 'is'.ucFirst($vars->name).'()',
- 'Checks if the instance day is '.unitName(strtolower($vars->name)).'.',
- ];
- break;
- case 'is':
- $autoDocLines[] = [
- '@method',
- 'bool',
- 'is'.ucFirst($vars->name).'()',
- $vars->description,
- ];
- break;
- case 'isSameUnit':
- $unit = $vars->name;
- $unitName = unitName($unit);
- $method = 'isSame'.ucFirst($unit);
- if (!method_exists(Carbon::class, $method)) {
- $autoDocLines[] = [
- '@method',
- 'bool',
- $method.'(Carbon|DateTimeInterface|string|null $date = null)',
- "Checks if the given date is in the same $unitName as the instance. If null passed, compare to now (with the same timezone).",
- ];
- }
- $autoDocLines[] = [
- '@method',
- 'bool',
- 'isCurrent'.ucFirst($unit).'()',
- "Checks if the instance is in the same $unitName as the current moment.",
- ];
- $autoDocLines[] = [
- '@method',
- 'bool',
- 'isNext'.ucFirst($unit).'()',
- "Checks if the instance is in the same $unitName as the current moment next $unitName.",
- ];
- $autoDocLines[] = [
- '@method',
- 'bool',
- 'isLast'.ucFirst($unit).'()',
- "Checks if the instance is in the same $unitName as the current moment last $unitName.",
- ];
- break;
- case 'setUnit':
- $unit = $vars->name;
- $unitName = unitName($unit);
- $plUnit = pluralize($unit);
- $autoDocLines[] = [
- '@method',
- 'self',
- "$plUnit(int \$value)",
- "Set current instance $unitName to the given value.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- "$unit(int \$value)",
- "Set current instance $unitName to the given value.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'set'.ucfirst($plUnit).'(int $value)',
- "Set current instance $unitName to the given value.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'set'.ucfirst($unit).'(int $value)',
- "Set current instance $unitName to the given value.",
- ];
- break;
- case 'addUnit':
- $unit = $vars->name;
- $unitName = unitName($unit);
- $plUnit = pluralize($unit);
- $plUnitName = pluralize($unitName);
- $autoDocLines[] = [
- '@method',
- 'self',
- 'add'.ucFirst($plUnit).'(int $value = 1)',
- "Add $plUnitName (the \$value count passed in) to the instance (using date interval).",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'add'.ucFirst($unit).'()',
- "Add one $unitName to the instance (using date interval).",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'sub'.ucFirst($plUnit).'(int $value = 1)',
- "Sub $plUnitName (the \$value count passed in) to the instance (using date interval).",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'sub'.ucFirst($unit).'()',
- "Sub one $unitName to the instance (using date interval).",
- ];
- if (\in_array($unit, [
- 'month',
- 'quarter',
- 'year',
- 'decade',
- 'century',
- 'millennium',
- ])) {
- $autoDocLines[] = [
- '@method',
- 'self',
- 'add'.ucFirst($plUnit).'WithOverflow(int $value = 1)',
- "Add $plUnitName (the \$value count passed in) to the instance (using date interval) with overflow explicitly allowed.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'add'.ucFirst($unit).'WithOverflow()',
- "Add one $unitName to the instance (using date interval) with overflow explicitly allowed.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'sub'.ucFirst($plUnit).'WithOverflow(int $value = 1)',
- "Sub $plUnitName (the \$value count passed in) to the instance (using date interval) with overflow explicitly allowed.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'sub'.ucFirst($unit).'WithOverflow()',
- "Sub one $unitName to the instance (using date interval) with overflow explicitly allowed.",
- ];
- foreach (['WithoutOverflow', 'WithNoOverflow', 'NoOverflow'] as $alias) {
- $autoDocLines[] = [
- '@method',
- 'self',
- 'add'.ucFirst($plUnit)."$alias(int \$value = 1)",
- "Add $plUnitName (the \$value count passed in) to the instance (using date interval) with overflow explicitly forbidden.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'add'.ucFirst($unit)."$alias()",
- "Add one $unitName to the instance (using date interval) with overflow explicitly forbidden.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'sub'.ucFirst($plUnit)."$alias(int \$value = 1)",
- "Sub $plUnitName (the \$value count passed in) to the instance (using date interval) with overflow explicitly forbidden.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'sub'.ucFirst($unit)."$alias()",
- "Sub one $unitName to the instance (using date interval) with overflow explicitly forbidden.",
- ];
- }
- break;
- }
- break;
- case 'addRealUnit':
- $unit = $vars->name;
- $unitName = unitName($unit);
- $plUnit = pluralize($unit);
- $plUnitName = pluralize($unitName);
- $autoDocLines[] = [
- '@method',
- 'self',
- 'addReal'.ucFirst($plUnit).'(int $value = 1)',
- "Add $plUnitName (the \$value count passed in) to the instance (using timestamp).",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'addReal'.ucFirst($unit).'()',
- "Add one $unitName to the instance (using timestamp).",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'subReal'.ucFirst($plUnit).'(int $value = 1)',
- "Sub $plUnitName (the \$value count passed in) to the instance (using timestamp).",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'subReal'.ucFirst($unit).'()',
- "Sub one $unitName to the instance (using timestamp).",
- ];
- $autoDocLines[] = [
- '@method',
- 'CarbonPeriod',
- $plUnit.'Until($endDate = null, int $factor = 1)',
- "Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each $unitName or every X $plUnitName if a factor is given.",
- ];
- break;
- case 'roundUnit':
- $unit = $vars->name;
- $unitName = unitName($unit);
- $plUnit = pluralize($unit);
- $autoDocLines[] = [
- '@method',
- 'self',
- 'round'.ucFirst($unit).'(float $precision = 1, string $function = "round")',
- "Round the current instance $unitName with given precision using the given function.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'round'.ucFirst($plUnit).'(float $precision = 1, string $function = "round")',
- "Round the current instance $unitName with given precision using the given function.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'floor'.ucFirst($unit).'(float $precision = 1)',
- "Truncate the current instance $unitName with given precision.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'floor'.ucFirst($plUnit).'(float $precision = 1)',
- "Truncate the current instance $unitName with given precision.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'ceil'.ucFirst($unit).'(float $precision = 1)',
- "Ceil the current instance $unitName with given precision.",
- ];
- $autoDocLines[] = [
- '@method',
- 'self',
- 'ceil'.ucFirst($plUnit).'(float $precision = 1)',
- "Ceil the current instance $unitName with given precision.",
- ];
- break;
- }
- continue;
- }
- $description = trim($vars->description);
- $variable = $vars->name;
- if (str_starts_with($description, '$')) {
- [$variable, $description] = explode(' ', $description, 2);
- $variable = ltrim($variable, '$');
- $description = ltrim($description);
- }
- if ($deprecation !== null) {
- $deprecated[$tag] = $deprecated[$tag] ?? [];
- $deprecated[$tag][] = [
- 'deprecation' => $deprecation,
- 'type' => $vars->type,
- 'variable' => $variable,
- 'description' => $description ?: '',
- ];
- continue;
- }
- $autoDocLines[] = [
- '@'.$tag,
- $vars->type,
- '$'.$variable,
- $description ?: '',
- ];
- }
- }
- $fileTemplate = <<<EOF
- <?php
- declare(strict_types=1);
- /**
- * This file is part of the Carbon package.
- *
- * (c) Brian Nesbitt <brian@nesbot.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Carbon\Traits;
- trait DeprecatedProperties
- {/* content */}
- EOF;
- $propertyTemplate = '
- /**
- * %description%
- *
- * @var %type%
- *
- * @deprecated %line1%
- * %line2%
- */
- public $%variable%;
- ';
- $lineGlue = preg_replace('/^[\s\S]*%line1%([\s\S]*)%line2%[\s\S]*$/', '$1', $propertyTemplate);
- $propertyTemplate = preg_replace('/(%line1%[\s\S]*%line2%)/', '%deprecation%', $propertyTemplate);
- file_put_contents(
- __DIR__.'/src/Carbon/Traits/DeprecatedProperties.php',
- strtr($fileTemplate, [
- '/* content */' => implode('', array_map(static function (array $property) use ($lineGlue, $propertyTemplate) {
- if (isset($property['deprecation']['since'])) {
- $property['deprecation']['since'] = 'Deprecated since '.$property['deprecation']['since'];
- }
- return strtr($propertyTemplate, [
- '%description%' => $property['description'],
- '%type%' => $property['type'],
- '%variable%' => $property['variable'],
- '%deprecation%' => implode($lineGlue, array_filter([
- $property['deprecation']['reason'] ?? null,
- $property['deprecation']['replacement'] ?? null,
- $property['deprecation']['since'] ?? null,
- ])),
- ]);
- }, array_merge($deprecated['property'] ?? [], $deprecated['property-read'] ?? []))),
- ])
- );
- function compileDoc($autoDocLines, $file)
- {
- $class = 'CarbonInterface';
- if (preg_match('`[\\\\/](Carbon\w*)\.php$`', $file, $match)) {
- $class = $match[1];
- }
- $autoDoc = '';
- $columnsMaxLengths = [];
- foreach ($autoDocLines as &$editableLine) {
- if (\is_array($editableLine)) {
- if (($editableLine[1] ?? '') === 'self') {
- $editableLine[1] = $class === 'Carbon' ? '$this' : $class;
- }
- foreach ($editableLine as $column => $text) {
- $length = \strlen($text);
- $max = $columnsMaxLengths[$column] ?? 0;
- if ($length > $max) {
- $columnsMaxLengths[$column] = $length;
- }
- }
- }
- }
- foreach ($autoDocLines as $line) {
- $autoDoc .= "\n *";
- if (\is_string($line)) {
- if (!empty($line)) {
- $autoDoc .= " $line";
- }
- continue;
- }
- $computedLine = ' ';
- foreach ($line as $column => $text) {
- $computedLine .= str_pad($text, $columnsMaxLengths[$column] + 1, ' ', STR_PAD_RIGHT);
- }
- $autoDoc .= rtrim($computedLine);
- }
- return $autoDoc;
- }
- $files = new stdClass();
- foreach ([$trait, $carbon, $immutable, $interface] as $file) {
- $content = file_get_contents($file);
- $files->$file = preg_replace_callback('/(<autodoc[\s\S]*>)([\s\S]+)(<\/autodoc>)/mU', function ($matches) use ($file, $autoDocLines, $overrideTyping) {
- foreach (($overrideTyping[$file] ?? []) as $method => $line) {
- $line[1] = $method.'('.$line[1].')';
- array_unshift($line, '@method');
- $autoDocLines[] = $line;
- }
- $autoDoc = compileDoc($autoDocLines, $file);
- return $matches[1]."\n *$autoDoc\n *\n * ".$matches[3];
- }, $content, 1);
- }
- $staticMethods = [];
- $staticImmutableMethods = [];
- $methods = '';
- $carbonMethods = get_class_methods(Carbon::class);
- sort($carbonMethods);
- foreach ($carbonMethods as $method) {
- if (!method_exists(CarbonImmutable::class, $method) ||
- method_exists(DateTimeInterface::class, $method) ||
- $method === 'createFromInterface'
- ) {
- continue;
- }
- $function = new ReflectionMethod(Carbon::class, $method);
- $static = $function->isStatic() ? ' static' : '';
- $parameters = implode(', ', array_map(function (ReflectionParameter $parameter) use ($method) {
- return dumpParameter($method, $parameter);
- }, $function->getParameters()));
- $methodDocBlock = $function->getDocComment() ?: '';
- if (!str_starts_with($method, '__') && $function->isStatic()) {
- $doc = preg_replace('/^\/\*+\n([\s\S]+)\s*\*\//', '$1', $methodDocBlock);
- $doc = preg_replace('/^\s*\*\s?/m', '', $doc);
- $doc = explode("\n@", $doc, 2);
- $doc = preg_split('/(\r\n|\r|\n)/', trim($doc[0]));
- $returnType = $function->getReturnType();
- if ($returnType instanceof ReflectionNamedType) {
- $returnType = $returnType->getName();
- }
- if (!$returnType && preg_match('/\*\s*@returns?\s+(\S+)/', $methodDocBlock, $match)) {
- $returnType = $match[1];
- }
- $returnType = str_replace('static|CarbonInterface', 'static', $returnType ?: 'static');
- if (!method_exists(Factory::class, $method)) {
- $staticMethods[] = [
- '@method',
- str_replace('static', 'Carbon', $returnType),
- "$method($parameters)",
- $doc[0],
- ];
- for ($i = 1; $i < \count($doc); $i++) {
- $staticMethods[] = ['', '', '', $doc[$i]];
- }
- }
- if (!method_exists(FactoryImmutable::class, $method)) {
- $staticImmutableMethods[] = [
- '@method',
- str_replace('static', 'CarbonImmutable', $returnType),
- "$method($parameters)",
- $doc[0],
- ];
- for ($i = 1; $i < \count($doc); $i++) {
- $staticImmutableMethods[] = ['', '', '', $doc[$i]];
- }
- }
- }
- $return = $function->getReturnType() ? ': '.$function->getReturnType()->getName() : '';
- if (!empty($methodDocBlock)) {
- $methodDocBlock = "\n $methodDocBlock";
- } elseif (isset($nativeMethods[$method])) {
- $link = strtolower($method);
- $methodDocBlock = "\n /**\n".
- " * Calls DateTime::$method if mutable or DateTimeImmutable::$method else.\n".
- " *\n".
- " * @see https://php.net/manual/en/datetime.$link.php\n".
- ' */';
- }
- if (str_contains($return, 'self') && $phpLevel < 7.4) {
- $return = '';
- }
- if ($method === '__toString' && $phpLevel < 8) {
- $return = '';
- }
- if (method_exists($function, 'getAttributes') && ($attributes = $function->getAttributes())) {
- foreach ($attributes as $attribute) {
- $methodDocBlock .= "\n #[".$attribute->getName().']';
- }
- }
- $methods .= "\n$methodDocBlock\n public$static function $method($parameters)$return;";
- }
- $files->$interface = strtr(preg_replace_callback('/(\/\/ <methods[\s\S]*>)([\s\S]+)(<\/methods>)/mU', function ($matches) use ($methods) {
- return $matches[1]."$methods\n\n // ".$matches[3];
- }, $files->$interface, 1), [
- 'CarbonInterface::TRANSLATE_ALL' => 'self::TRANSLATE_ALL',
- ]);
- $factories = [
- __DIR__.'/src/Carbon/Factory.php' => $staticMethods,
- __DIR__.'/src/Carbon/FactoryImmutable.php' => $staticImmutableMethods,
- ];
- foreach ($factories as $file => $methods) {
- $autoDoc = compileDoc($methods, $file);
- $content = file_get_contents($file);
- $files->$file = preg_replace_callback('/(<autodoc[\s\S]*>)([\s\S]+)(<\/autodoc>)/mU', function ($matches) use ($file, $autoDoc) {
- return $matches[1]."\n *$autoDoc\n *\n * ".$matches[3];
- }, $content, 1);
- }
- foreach ($files as $file => $contents) {
- file_put_contents($file, $contents);
- }
|