PHP 原子文本编辑器的 hyperclick 包

PHP hyperclick package for atom text editor

Atom 编辑器有一个 hyperclick 包。

我正在尝试构建一个可以

当用户在文件中的 class 名称上按 Ctrl + left click 时打开文件。请参见 demo of hyperclick

我最初的想法是依赖composer。

我有点东西,

当前打开的文件路径,用户点击的字符串,行号。

例如:假设我们有一个 class 作为

<?php
namespace Model\Table;

use Cake\ORM\Table;

class ArticlesTable extends Table
{
    public function initialize(array $config)
    {
        $this->table('posts');
    }
}

并且用户点击 Table ,想法是在 composer findFile() 方法的帮助下从适当的位置打开 Cake/ORM/Table.php

<?php
$loader = require '/current/project/vendor/autoload.php';
$loader->findFile('Table');

然后我明白了 Table 不是 FQCN,所以我们需要得到 Cake\ORM\Table 的 FQCN。有什么办法可以从我现有的东西中获取 FQCN 吗?

我看过Reflection,但它也需要FQCN。我希望我们能少中继 3rd 方包。例如,有些人可能会建议查看 https://github.com/nikic/PHP-Parser。如果有任何其他方式 (easy pc ;) ) 让我知道。

谢谢

使用 token_get_all() 标记当前 PHP 文件。那么:

  • 发现点击的字符串是否是 FQCN(例如,当使用 new \a\b\Something(); 时,查看 T_NS_SEPARATORT_STRING 标记)
  • 找到 T_CLASS 标记之前的所有 T_USE 个标记,看看其中一个标记是否直接链接到 Table(例如 use a\b\Table;use a\b\c as Table;,另请参阅 T_AS)
  • 通过解析 T_NAMESPACE';'
  • 之间的所有 none-whitespace 标记来添加当前命名空间