mirror of
https://github.com/barryvdh/laravel-ide-helper.git
synced 2026-08-18 10:07:12 +00:00
Remove php parser (#1644)
* Remove php parser * composer fix-style --------- Co-authored-by: laravel-ide-helper <[email protected]>
This commit is contained in:
co-authored by
laravel-ide-helper
parent
e509790805
commit
9c6380da4a
+1
-2
@@ -27,8 +27,7 @@
|
|||||||
"illuminate/console": "^11.15",
|
"illuminate/console": "^11.15",
|
||||||
"illuminate/database": "^11.15",
|
"illuminate/database": "^11.15",
|
||||||
"illuminate/filesystem": "^11.15",
|
"illuminate/filesystem": "^11.15",
|
||||||
"illuminate/support": "^11.15",
|
"illuminate/support": "^11.15"
|
||||||
"nikic/php-parser": "^4.18 || ^5"
|
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"ext-pdo_sqlite": "*",
|
"ext-pdo_sqlite": "*",
|
||||||
|
|||||||
+2
-1
@@ -13,6 +13,7 @@ namespace Barryvdh\LaravelIdeHelper;
|
|||||||
|
|
||||||
use Barryvdh\Reflection\DocBlock;
|
use Barryvdh\Reflection\DocBlock;
|
||||||
use Barryvdh\Reflection\DocBlock\Context;
|
use Barryvdh\Reflection\DocBlock\Context;
|
||||||
|
use Barryvdh\Reflection\DocBlock\ContextFactory;
|
||||||
use Barryvdh\Reflection\DocBlock\Serializer as DocBlockSerializer;
|
use Barryvdh\Reflection\DocBlock\Serializer as DocBlockSerializer;
|
||||||
use Barryvdh\Reflection\DocBlock\Tag\MethodTag;
|
use Barryvdh\Reflection\DocBlock\Tag\MethodTag;
|
||||||
use Closure;
|
use Closure;
|
||||||
@@ -82,7 +83,7 @@ class Alias
|
|||||||
|
|
||||||
if (!empty($this->namespace)) {
|
if (!empty($this->namespace)) {
|
||||||
try {
|
try {
|
||||||
$this->classAliases = (new UsesResolver())->loadFromClass($this->root);
|
$this->classAliases = (new ContextFactory())->createFromReflector(new ReflectionClass($this->root))->getNamespaceAliases();
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
$this->classAliases = [];
|
$this->classAliases = [];
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-24
@@ -17,10 +17,6 @@ use Illuminate\Support\Collection;
|
|||||||
use Illuminate\Support\Facades\Facade;
|
use Illuminate\Support\Facades\Facade;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Support\Traits\Macroable;
|
use Illuminate\Support\Traits\Macroable;
|
||||||
use PhpParser\Lexer\Emulative;
|
|
||||||
use PhpParser\Node\Stmt\Class_;
|
|
||||||
use PhpParser\Node\Stmt\Namespace_;
|
|
||||||
use PhpParser\Parser\Php7;
|
|
||||||
use ReflectionClass;
|
use ReflectionClass;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
@@ -213,8 +209,10 @@ class Generator
|
|||||||
foreach ($realTimeFacadeFiles as $file) {
|
foreach ($realTimeFacadeFiles as $file) {
|
||||||
try {
|
try {
|
||||||
$name = $this->getFullyQualifiedClassNameInFile($file);
|
$name = $this->getFullyQualifiedClassNameInFile($file);
|
||||||
$facades[$name] = $name;
|
if ($name) {
|
||||||
} catch (\Exception $e) {
|
$facades[$name] = $name;
|
||||||
|
}
|
||||||
|
} catch (\Throwable $e) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -226,26 +224,17 @@ class Generator
|
|||||||
{
|
{
|
||||||
$contents = file_get_contents($path);
|
$contents = file_get_contents($path);
|
||||||
|
|
||||||
$parsers = new Php7(new Emulative());
|
// Match namespace
|
||||||
|
preg_match('/namespace\s+([^;]+);/', $contents, $namespaceMatch);
|
||||||
|
$namespace = isset($namespaceMatch[1]) ? $namespaceMatch[1] : '';
|
||||||
|
|
||||||
$parsed = collect($parsers->parse($contents) ?: []);
|
// Match class name
|
||||||
|
preg_match('/class\s+([a-zA-Z0-9_]+)/', $contents, $classMatch);
|
||||||
|
$className = isset($classMatch[1]) ? $classMatch[1] : '';
|
||||||
|
|
||||||
$namespace = $parsed->first(function ($node) {
|
// Combine namespace and class name
|
||||||
return $node instanceof Namespace_;
|
if ($namespace && $className) {
|
||||||
});
|
return $namespace . '\\' . $className;
|
||||||
|
|
||||||
if ($namespace) {
|
|
||||||
$name = $namespace->name->toString();
|
|
||||||
|
|
||||||
$class = collect($namespace->stmts)->first(function ($node) {
|
|
||||||
return $node instanceof Class_;
|
|
||||||
});
|
|
||||||
|
|
||||||
if ($class) {
|
|
||||||
$name .= '\\' . $class->name->toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $name;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,124 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Laravel IDE Helper Generator
|
|
||||||
*
|
|
||||||
* @author Barry vd. Heuvel <[email protected]>
|
|
||||||
* @copyright 2014 Barry vd. Heuvel / Fruitcake Studio (http://www.fruitcakestudio.nl)
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.php MIT
|
|
||||||
* @link https://github.com/barryvdh/laravel-ide-helper
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Barryvdh\LaravelIdeHelper;
|
|
||||||
|
|
||||||
use PhpParser\Node\Stmt\GroupUse;
|
|
||||||
use PhpParser\Node\Stmt\Namespace_;
|
|
||||||
use PhpParser\Node\Stmt\Use_;
|
|
||||||
use PhpParser\Node\Stmt\UseUse;
|
|
||||||
use PhpParser\ParserFactory;
|
|
||||||
|
|
||||||
class UsesResolver
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param string $classFQN
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function loadFromClass(string $classFQN): array
|
|
||||||
{
|
|
||||||
return $this->loadFromFile(
|
|
||||||
$classFQN,
|
|
||||||
(new \ReflectionClass($classFQN))->getFileName()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $classFQN
|
|
||||||
* @param string $filename
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function loadFromFile(string $classFQN, string $filename): array
|
|
||||||
{
|
|
||||||
return $this->loadFromCode(
|
|
||||||
$classFQN,
|
|
||||||
file_get_contents(
|
|
||||||
$filename
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $classFQN
|
|
||||||
* @param string $code
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function loadFromCode(string $classFQN, string $code): array
|
|
||||||
{
|
|
||||||
$classFQN = ltrim($classFQN, '\\');
|
|
||||||
|
|
||||||
$namespace = rtrim(
|
|
||||||
preg_replace(
|
|
||||||
'/([^\\\\]+)$/',
|
|
||||||
'',
|
|
||||||
$classFQN
|
|
||||||
),
|
|
||||||
'\\'
|
|
||||||
);
|
|
||||||
|
|
||||||
$parser = (new ParserFactory())->createForHostVersion();
|
|
||||||
$namespaceData = null;
|
|
||||||
|
|
||||||
foreach ($parser->parse($code) as $node) {
|
|
||||||
if ($node instanceof Namespace_ && $node->name->toCodeString() === $namespace) {
|
|
||||||
$namespaceData = $node;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($namespaceData === null) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @var Namespace_ $namespaceData */
|
|
||||||
|
|
||||||
$aliases = [];
|
|
||||||
|
|
||||||
foreach ($namespaceData->stmts as $stmt) {
|
|
||||||
if ($stmt instanceof Use_) {
|
|
||||||
if ($stmt->type !== Use_::TYPE_NORMAL) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($stmt->uses as $use) {
|
|
||||||
/** @var UseUse $use */
|
|
||||||
|
|
||||||
$alias = $use->alias ?
|
|
||||||
$use->alias->name :
|
|
||||||
self::classBasename($use->name->toCodeString());
|
|
||||||
|
|
||||||
$aliases[$alias] = '\\' . $use->name->toCodeString();
|
|
||||||
}
|
|
||||||
} elseif ($stmt instanceof GroupUse) {
|
|
||||||
foreach ($stmt->uses as $use) {
|
|
||||||
/** @var UseUse $use */
|
|
||||||
|
|
||||||
$alias = $use->alias ?
|
|
||||||
$use->alias->name :
|
|
||||||
self::classBasename($use->name->toCodeString());
|
|
||||||
|
|
||||||
$aliases[$alias] = '\\' . $stmt->prefix->toCodeString() . '\\' . $use->name->toCodeString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $aliases;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $classFQN
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected static function classBasename(string $classFQN): string
|
|
||||||
{
|
|
||||||
return preg_replace('/^.*\\\\([^\\\\]+)$/', '$1', $classFQN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Barryvdh\LaravelIdeHelper\Tests;
|
|
||||||
|
|
||||||
use Barryvdh\LaravelIdeHelper\UsesResolver;
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
|
|
||||||
class UsesResolverTest extends TestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Test that we can correctly load uses from supplied code
|
|
||||||
*/
|
|
||||||
public function testLoadFromCode()
|
|
||||||
{
|
|
||||||
$usesResolver = new UsesResolver();
|
|
||||||
|
|
||||||
$code = <<<'DOC'
|
|
||||||
<?php
|
|
||||||
namespace Barryvdh\LaravelIdeHelper\Tests;
|
|
||||||
|
|
||||||
use Barryvdh\LaravelIdeHelper\UsesResolver as MyUsesResolver;
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
|
|
||||||
class UsesResolverTest extends TestCase
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
DOC;
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
$usesResolver->loadFromCode('Barryvdh\\LaravelIdeHelper\\Tests\\UsesResolverTest', $code),
|
|
||||||
[
|
|
||||||
'MyUsesResolver' => '\\Barryvdh\\LaravelIdeHelper\\UsesResolver',
|
|
||||||
'TestCase' => '\\PHPUnit\Framework\TestCase',
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test that we can correctly load uses from a class
|
|
||||||
*/
|
|
||||||
public function testLoadFromClass()
|
|
||||||
{
|
|
||||||
$usesResolver = new UsesResolver();
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
$usesResolver->loadFromClass(self::class),
|
|
||||||
[
|
|
||||||
'UsesResolver' => '\\Barryvdh\\LaravelIdeHelper\\UsesResolver',
|
|
||||||
'TestCase' => '\\PHPUnit\Framework\TestCase',
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user