开放语言服务器协议的纯 PHP 实现。为任何 IDE 提供 PHP 静态代码分析。
使用出色的 Tolerant PHP 解析器、phpDocumentor 的 DocBlock 反射和并发事件循环。
目录
悬停请求返回声明行(用语言php
标记)和文档块的摘要。对于参数,它将返回@param
标记。
查询与符号的完全限定名称进行匹配,不区分大小写。
非标准:空查询将返回工作区中找到的所有符号。
PHP 解析错误被报告为错误,文档块的解析错误被报告为警告。来自vendor
目录的错误/警告将被忽略。
补全、类型解析等将使用标准 PHP 库和通用扩展。
全局可搜索的定义是:
const
关键字的常量在需要时及时解决定义:
use
语句尚不支持:
define()
常量命名空间在设计上不被视为声明,因为它们仅构成完全限定名称的一部分,并且不映射到一个唯一的声明。
定义/参考/悬停当前适用于
use
)use
语句implements
/ extends
后类似类instanceof
该语言服务器实现文件协议扩展。如果客户端通过ClientCapabilities.xfilesProvider
和ClientCapabilities.xcontentProvider
表示支持,服务器将通过客户端的请求来请求工作区中的文件和文件内容,而不会直接访问文件系统。这允许服务器在隔离环境(如容器)、远程工作空间或任何不同于file://
协议中运行。
初始化后,服务器将递归扫描项目目录中的 PHP 文件,解析它们并将所有定义和引用添加到内存索引中。这所需的时间取决于项目的规模。在撰写本文时,该项目包含 78 个文件 + 1560 个依赖文件,在 Surface Pro 3 上解析需要 97 秒并消耗 76 MB。语言服务器在索引时完全可操作,并且可以使用已索引的定义响应请求。后续请求几乎是即时的,因为索引保存在内存中。
启用 XDebug 会严重影响性能,如果max_nesting_level
设置太低,甚至可能导致服务器崩溃。
该项目在协议通信和命令行参数方面遵循semver,例如LSP的主要版本增加将导致PHP LS的主要版本增加。请求实现等新功能将产生新的次要版本。其他一切都将是补丁版本。所有类都被视为内部类,并且不受 semver 的约束。
推荐的安装方法是通过 Composer。只需运行
composer require felixfbecker/language-server
您将获得最新的稳定版本和所有依赖项。
运行composer update
会将服务器更新到最新的不间断版本。
安装语言服务器及其依赖项后,必须解析标准 PHP 符号的存根并保存索引以进行快速初始化。
composer run-script --working-dir=vendor/felixfbecker/language-server parse-stubs
启动语言服务器
php vendor/felixfbecker/language-server/bin/php-language-server.php
--tcp=host:port
(可选)使服务器使用 tcp 连接与语言客户端通信,而不是使用 STDIN/STDOUT。服务器将尝试连接到指定的地址。强烈建议在 Windows 上使用,因为它会阻止 STDIO。
例子:
php bin/php-language-server.php --tcp=127.0.0.1:12345
--tcp-server=host:port
(可选)使服务器使用 tcp 连接与语言客户端通信,而不是使用 STDIN/STDOUT。服务器将侦听给定地址的连接。如果 PCNTL 可用,将为每个连接创建一个子进程。如果不是,将只接受一个连接,并且连接一旦关闭就无法重新建立,而是生成一个新进程。
例子:
php bin/php-language-server.php --tcp-server=127.0.0.1:12345
--memory-limit=integer
(可选)设置语言服务器的内存限制。相当于内存限制 php.ini 指令。默认值为 4GB(远远超出所需)。
例子:
php bin/php-language-server.php --memory-limit=256M
您至少需要安装 PHP 7.0 和 Composer。克隆存储库并运行
composer install
安装依赖项。
运行测试
composer test
棉绒与
composer lint
该项目解析 PHPStorm 的 PHP 存根以获得对 PHP 内置函数的支持。它会在 Composer 处理后根据需要重新解析它们,但是在进行一些代码更改(例如涉及索引或解析的代码更改)后,您可能必须显式地重新解析它们:
composer run-script parse-stubs
要使用 xDebug 进行调试,请确保将此设置为环境变量
PHPLS_ALLOW_XDEBUG=1
这会告诉语言服务器如果检测到 XDebug 已启用(XDebug 对性能影响很大),则不要在没有 XDebug 的情况下重新启动。