mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 10:07:12 +00:00
Adds support for macros (#500)
* Adds support for macros * Fixes formatting
This commit is contained in:
committed by
Barry vd. Heuvel
parent
2a63d51496
commit
b76156b24c
@@ -312,6 +312,24 @@ class Alias
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if the class is macroable
|
||||||
|
$traits = collect($reflection->getTraitNames());
|
||||||
|
if ($traits->contains('Illuminate\Support\Traits\Macroable')) {
|
||||||
|
$properties = $reflection->getStaticProperties();
|
||||||
|
$macros = isset($properties['macros']) ? $properties['macros'] : [];
|
||||||
|
foreach ($macros as $macro_name => $macro_func) {
|
||||||
|
$function = new \ReflectionFunction($macro_func);
|
||||||
|
// Add macros
|
||||||
|
$this->methods[] = new Macro(
|
||||||
|
$function,
|
||||||
|
$this->alias,
|
||||||
|
$reflection,
|
||||||
|
$macro_name,
|
||||||
|
$this->interfaces
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Barryvdh\LaravelIdeHelper;
|
||||||
|
|
||||||
|
use Barryvdh\Reflection\DocBlock;
|
||||||
|
use Barryvdh\Reflection\DocBlock\Tag;
|
||||||
|
|
||||||
|
class Macro extends Method
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Macro constructor.
|
||||||
|
*
|
||||||
|
* @param \ReflectionFunction $method
|
||||||
|
* @param string $alias
|
||||||
|
* @param \ReflectionClass $class
|
||||||
|
* @param null $methodName
|
||||||
|
* @param array $interfaces
|
||||||
|
*/
|
||||||
|
public function __construct(\ReflectionFunction $method, $alias, $class, $methodName = null, $interfaces = array())
|
||||||
|
{
|
||||||
|
$this->method = $method;
|
||||||
|
$this->interfaces = $interfaces;
|
||||||
|
$this->name = $methodName ?: $method->name;
|
||||||
|
$this->namespace = $class->getNamespaceName();
|
||||||
|
|
||||||
|
//Create a DocBlock and serializer instance
|
||||||
|
$this->phpdoc = new DocBlock($method);
|
||||||
|
|
||||||
|
//Normalize the description and inherit the docs from parents/interfaces
|
||||||
|
try {
|
||||||
|
$this->normalizeParams($this->phpdoc);
|
||||||
|
$this->normalizeReturn($this->phpdoc);
|
||||||
|
$this->normalizeDescription($this->phpdoc);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get the parameters, including formatted default values
|
||||||
|
$this->getParameters($method);
|
||||||
|
|
||||||
|
//Make the method static
|
||||||
|
$this->phpdoc->appendTag(Tag::createInstance('@static', $this->phpdoc));
|
||||||
|
|
||||||
|
//Reference the 'real' function in the declaringclass
|
||||||
|
$this->declaringClassName = '\\' . ltrim($class->name, '\\');
|
||||||
|
$this->root = '\\' . ltrim($class->getName(), '\\');
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user