如何将 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 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
着色为函数定义,即使它在注释中也是如此。)
我知道 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 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
着色为函数定义,即使它在注释中也是如此。)