如何将 custom/dynamic/magic PHP 函数定义添加到 Sublime Text?

How can I add custom/dynamic/magic PHP function definitions to Sublime Text?

我知道 Sublime Text 不是 IDE,但这正是我喜欢它的地方。尽管如此,时不时地拥有某些 IDE 式的功能还是很不错的。

主要用于 Laravel,我希望 Sublime 能够找到未以标准 PHP 方式定义的符号定义,例如

public function truncate()

我定义了一个名为 truncate 的 Str 宏,但 Sublime(以及我尝试过的各种包)显然不能将其识别为符号。

如果在调用 Sublime Text goto_definition 时将其识别为符号的宏定义之上编写一个文档块,那就太棒了。也许是这样的:

    /**
     * @method Str::truncate()
     * ...or...
     * @function truncate()
     */
    Str::macro('truncate', fn() => '...');

相同的概念可以应用于使用 __call() 的魔术方法。我已经看到其他开发人员在 类 上的文档块中列出了魔法或继承的属性,可能是出于他们 editor/IDE 的选择,但这可能只是考虑到人类可读性的体贴的编码人员。

我假设 PHP Storm 和类似的东西足够聪明或针对这些 Laravel 概念量身定制来实现这一点,但我不确定如何为这个用例配置或扩展 Sublime .我在 Sublime 中看到了一些关于自定义符号识别的参考,但我记得它非常复杂,没有太多文档或示例。

我确信有多种方法可以实现这一点,但我还没有看到任何有希望的方法。有什么想法吗?

Sublime Text 依赖于语法定义分配给文本的范围。 Sublime 自动将匹配特定范围的文本添加到符号索引中。 (可以配置为包括其他范围。)

目前,PHP 语法定义不会将文档块中 @method@function 之后的文本限定为任何特殊内容。所以,我们需要纠正这一点。

首先,如果您还没有安装 https://packagecontrol.io/packages/OverrideAudit,它可以更容易地跟踪对包文件所做的更改。

然后,打开命令面板,然后键入 OA: Open 和 select OverrideAudit: Open Resource。导航到 PHP。导航至 PHP Source.sublime-syntax.

搜索 # Annotations from PHPUnithttps://github.com/sublimehq/Packages/blob/3de7248f8a27fc329f930dd5cb28e6f16b2c751e/PHP/PHP%20Source.sublime-syntax#L1685

在该行下,粘贴以下内容:

    - match: \@(function)\b
      scope: keyword.other.phpunit.php
      push:
        - match: \w+
          scope: entity.name.function.php
        - match: (?=\S)
          pop: true

缩进很重要,因此请确保 - 直接位于 # 下方。

保存文件。

然后,返回到您的 PHP 文件,当您的插入符号位于单词 truncate 旁边时按 F12,它将转到@function truncate() 行。 (您会看到 truncate 着色为函数定义,即使它在注释中也是如此。)