【问题标题】:How can I add custom/dynamic/magic PHP function definitions to Sublime Text?如何将自定义/动态/魔术 PHP 函数定义添加到 Sublime Text?
【发布时间】:2021-12-07 13:12:44
【问题描述】:

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

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

public function truncate()

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

在宏定义上方写一个 doc 块,当调用 goto_definition 时,Sublime Text 会将其识别为符号,这将是惊人的。可能是这样的:

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

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

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

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

【问题讨论】:

    标签: php laravel sublimetext phpdoc sublimetext4


    【解决方案1】:

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

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

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

    然后,打开命令面板,输入OA: Open 并选择OverrideAudit: Open Resource。导航到 PHP。导航到PHP Source.sublime-syntax

    搜索# Annotations from PHPUnit,即https://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 着色为函数定义,即使它位于注释中。)

    【讨论】:

    • 太棒了!太感谢了。我一直在寻找这个很长一段时间。知道为什么在以相同方式定义时这对 @method truncate() 不起作用吗?
    猜你喜欢
    • 2014-08-03
    • 2013-04-15
    • 2014-01-07
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    相关资源
    最近更新 更多