0

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

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

public function truncate()

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

如果在宏定义之上写一个 doc 块,Sublime Text 会在goto_definition调用它时将其识别为符号,这将是惊人的。也许是这样的:

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

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

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

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

4

1 回答 1

1

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

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

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

然后,打开命令面板,输入OA: Open并选择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 文件,F12当你的插入符号在单词旁边时按下truncate,它会转到该@function truncate()行。truncate(即使它在注释中,您也会看到颜色为函数定义。)

@功能

于 2021-10-22T19:12:16.427 回答