Skip to content

Commit

Permalink
Merge pull request #2 from kylekatarnls/feature/handle-return-type
Browse files Browse the repository at this point in the history
Fix #1 handle return type
  • Loading branch information
kylekatarnls authored Aug 18, 2019
2 parents 2a1f35e + dcd4fab commit 99b59f2
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 24 deletions.
29 changes: 21 additions & 8 deletions src/Carbon/Types/Generator.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
use Carbon\Carbon;
use Closure;
use ReflectionClass;
use ReflectionException;
use ReflectionFunction;
use ReflectionMethod;
use ReflectionNamedType;
use ReflectionParameter;

class Generator
Expand Down Expand Up @@ -39,7 +42,7 @@ protected function runBoot($boot): void
* @param (Closure|string)[] $boots
*
* @return mixed
* @throws \ReflectionException
* @throws ReflectionException
*
*/
protected function getMethods($boots)
Expand All @@ -65,8 +68,8 @@ protected function getMethods($boots)
protected function getClosureData($closure, string $source, int $sourceLength)
{
try {
$function = new \ReflectionFunction($closure);
} catch (\ReflectionException $e) {
$function = new ReflectionFunction($closure);
} catch (ReflectionException $e) {
return false;
}

Expand Down Expand Up @@ -98,7 +101,7 @@ protected function getReflectionMethod(string $className, string $name, array $d
foreach ($defaultClasses as $defaultClass) {
try {
return new ReflectionMethod($defaultClass, $name);
} catch (\ReflectionException $e) {
} catch (ReflectionException $e) {
}
}
}
Expand Down Expand Up @@ -210,7 +213,7 @@ protected function getMethodDoc(string $methodDocBlock, string $className, strin
* @param string[] $defaultClasses
*
* @return string
* @throws \ReflectionException
* @throws ReflectionException
*
*/
protected function getMethodsDefinitions($source, $defaultClasses)
Expand All @@ -226,6 +229,9 @@ protected function getMethodsDefinitions($source, $defaultClasses)
continue;
}

/**
* @var $function ReflectionFunction
*/
[$function, $file, $lines] = $closureData;
$file = substr($file, $sourceLength + 1);
$parameters = implode(', ', array_map([$this, 'dumpParameter'], $function->getParameters()));
Expand All @@ -236,8 +242,15 @@ protected function getMethodsDefinitions($source, $defaultClasses)

$methodDocBlock = $this->getMethodDocBlock($methodDocBlock, $code, $length, [$name, $className, $defaultClasses]);
$file .= ':'.$function->getStartLine();
$returnType = $function->getReturnType();
$return = '';

$methods[] = $this->getMethodDoc($methodDocBlock, "$className::$name", "$name($parameters)", $file);
if ($function->hasReturnType()) {
$returnDump = $returnType instanceof ReflectionNamedType ? $returnType->getName() : $returnType->__toString();
$return = ': '.($returnType->allowsNull() ? '?' : '').$returnDump;
}

$methods[] = $this->getMethodDoc($methodDocBlock, "$className::$name", "$name($parameters)$return", $file);
}

return implode("\n", $methods);
Expand All @@ -248,7 +261,7 @@ protected function getMethodsDefinitions($source, $defaultClasses)
* @param string $source
* @param string $name
*
* @throws \ReflectionException
* @throws ReflectionException
*/
public function writeHelpers($defaultClasses, $source, $name = 'types/_ide_carbon_mixin', array $classes = null)
{
Expand Down Expand Up @@ -334,7 +347,7 @@ protected function dumpParameter(ReflectionParameter $parameter)
if ($parameter->isDefaultValueAvailable()) {
$output .= ' = '.$this->dumpValue($parameter->getDefaultValue());
}
} catch (\ReflectionException $exp) {
} catch (ReflectionException $exp) {
}

return $output;
Expand Down
37 changes: 37 additions & 0 deletions tests/Carbon/Command/MacroTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Carbon\Tests\Command;

use Carbon\Carbon;
use Carbon\Cli;
use Carbon\Tests\DummyMixin;
use Carbon\Tests\DummyMixin2;
Expand Down Expand Up @@ -77,6 +78,7 @@ public function testRun()
*/
public function testRunWithFile()
{
Carbon::resetMacros();
$dir = sys_get_temp_dir().'/macro-test-'.mt_rand(0, 999999);
@mkdir($dir);
chdir($dir);
Expand All @@ -91,6 +93,41 @@ public function testRunWithFile()
$this->removeDirectory($dir);
}

/**
* @covers ::run
* @covers \Carbon\Types\Generator::runBoot
* @covers \Carbon\Types\Generator::getClosureData
* @covers \Carbon\Types\Generator::getMethodDocBlock
* @covers \Carbon\Types\Generator::getMethodDoc
* @covers \Carbon\Types\Generator::getMethods
* @covers \Carbon\Types\Generator::getMethodsDefinitions
* @covers \Carbon\Types\Generator::getParameterName
* @covers \Carbon\Types\Generator::getParameterNameAndType
* @covers \Carbon\Types\Generator::dumpParameter
* @covers \Carbon\Types\Generator::dumpValue
* @covers \Carbon\Types\Generator::getReflectionMethod
* @covers \Carbon\Types\Generator::getNextMethod
* @covers \Carbon\Types\Generator::loadFileLines
* @covers \Carbon\Types\Generator::getMethodSourceCode
* @covers \Carbon\Types\Generator::writeHelpers
*/
public function testRunTyping()
{
Carbon::resetMacros();
$dir = sys_get_temp_dir().'/macro-test-'.mt_rand(0, 999999);
@mkdir($dir);
chdir($dir);
file_put_contents('bar.php', '<?php \Carbon\Carbon::macro(\'bar\', function (string $foo): ?string { if (strlen($foo)) { return "foo: $foo"; } });');
$cli = new Cli();
$cli->mute();
$cli('carbon', 'macro', 'bar.php');

$contents = file_get_contents("$dir/types/_ide_carbon_mixin_instantiated.php");
$this->assertStringContainsString('public function bar(string $foo): ?string', $contents);

$this->removeDirectory($dir);
}

/**
* @covers ::getComposerData
* @covers ::getCarbonMacrosFromData
Expand Down
16 changes: 8 additions & 8 deletions tests/Carbon/Command/_ide_carbon_mixin_instantiated.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class Carbon
*
* Say "Hi!" to a given person name.
*/
public function sayHi(string $name)
public function sayHi(string $name): string
{
// Content, see src/DummyMixin.php:15
}
Expand All @@ -19,7 +19,7 @@ public function sayHi(string $name)
*
* Say "Bye!" to a given person name.
*/
public function sayBye(string $name)
public function sayBye(string $name): string
{
// Content, see src/DummyMixin2.php:15
}
Expand All @@ -35,7 +35,7 @@ class CarbonImmutable
*
* Say "Hi!" to a given person name.
*/
public function sayHi(string $name)
public function sayHi(string $name): string
{
// Content, see src/DummyMixin.php:15
}
Expand All @@ -45,7 +45,7 @@ public function sayHi(string $name)
*
* Say "Bye!" to a given person name.
*/
public function sayBye(string $name)
public function sayBye(string $name): string
{
// Content, see src/DummyMixin2.php:15
}
Expand All @@ -61,7 +61,7 @@ class Carbon
*
* Say "Hi!" to a given person name.
*/
public function sayHi(string $name)
public function sayHi(string $name): string
{
// Content, see src/DummyMixin.php:15
}
Expand All @@ -71,7 +71,7 @@ public function sayHi(string $name)
*
* Say "Bye!" to a given person name.
*/
public function sayBye(string $name)
public function sayBye(string $name): string
{
// Content, see src/DummyMixin2.php:15
}
Expand All @@ -87,7 +87,7 @@ class Date
*
* Say "Hi!" to a given person name.
*/
public function sayHi(string $name)
public function sayHi(string $name): string
{
// Content, see src/DummyMixin.php:15
}
Expand All @@ -97,7 +97,7 @@ public function sayHi(string $name)
*
* Say "Bye!" to a given person name.
*/
public function sayBye(string $name)
public function sayBye(string $name): string
{
// Content, see src/DummyMixin2.php:15
}
Expand Down
16 changes: 8 additions & 8 deletions tests/Carbon/Command/_ide_carbon_mixin_static.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class Carbon
*
* Say "Hi!" to a given person name.
*/
public static function sayHi(string $name)
public static function sayHi(string $name): string
{
// Content, see src/DummyMixin.php:15
}
Expand All @@ -19,7 +19,7 @@ public static function sayHi(string $name)
*
* Say "Bye!" to a given person name.
*/
public static function sayBye(string $name)
public static function sayBye(string $name): string
{
// Content, see src/DummyMixin2.php:15
}
Expand All @@ -35,7 +35,7 @@ class CarbonImmutable
*
* Say "Hi!" to a given person name.
*/
public static function sayHi(string $name)
public static function sayHi(string $name): string
{
// Content, see src/DummyMixin.php:15
}
Expand All @@ -45,7 +45,7 @@ public static function sayHi(string $name)
*
* Say "Bye!" to a given person name.
*/
public static function sayBye(string $name)
public static function sayBye(string $name): string
{
// Content, see src/DummyMixin2.php:15
}
Expand All @@ -61,7 +61,7 @@ class Carbon
*
* Say "Hi!" to a given person name.
*/
public static function sayHi(string $name)
public static function sayHi(string $name): string
{
// Content, see src/DummyMixin.php:15
}
Expand All @@ -71,7 +71,7 @@ public static function sayHi(string $name)
*
* Say "Bye!" to a given person name.
*/
public static function sayBye(string $name)
public static function sayBye(string $name): string
{
// Content, see src/DummyMixin2.php:15
}
Expand All @@ -87,7 +87,7 @@ class Date
*
* Say "Hi!" to a given person name.
*/
public static function sayHi(string $name)
public static function sayHi(string $name): string
{
// Content, see src/DummyMixin.php:15
}
Expand All @@ -97,7 +97,7 @@ public static function sayHi(string $name)
*
* Say "Bye!" to a given person name.
*/
public static function sayBye(string $name)
public static function sayBye(string $name): string
{
// Content, see src/DummyMixin2.php:15
}
Expand Down

0 comments on commit 99b59f2

Please sign in to comment.