felixfbecker / language-server
PHP实现Visual Studio Code语言服务器协议
Requires
- php: ^7.0
- composer/xdebug-handler: ^1.0
- felixfbecker/advanced-json-rpc: ^3.0.0
- felixfbecker/language-server-protocol: ^1.0.1
- jetbrains/phpstorm-stubs: dev-master
- microsoft/tolerant-php-parser: 0.0.*
- netresearch/jsonmapper: ^1.0
- phpdocumentor/reflection-docblock: ^4.0.0
- psr/log: ^1.0
- sabre/event: ^5.0
- sabre/uri: ^2.0
- webmozart/glob: ^4.1
- webmozart/path-util: ^2.3
Requires (Dev)
- phpunit/phpunit: ^6.3
- squizlabs/php_codesniffer: ^3.1
- dev-master
- v5.4.6
- v5.4.5
- v5.4.4
- v5.4.3
- v5.4.2
- v5.4.1
- v5.4.0
- v5.3.7
- v5.3.6
- v5.3.5
- v5.3.4
- v5.3.3
- v5.3.2
- v5.3.1
- v5.3.0
- v5.2.0
- v5.1.2
- v5.1.1
- v5.1.0
- v5.0.2
- v5.0.1
- v5.0.0
- v4.6.4
- v4.6.3
- v4.6.2
- v4.6.1
- v4.6.0
- v4.5.3
- v4.5.2
- v4.5.1
- v4.5.0
- v4.4.1
- v4.4.0
- v4.3.5
- v4.3.4
- v4.3.3
- v4.3.2
- v4.3.1
- v4.3.0
- v4.2.4
- v4.2.3
- v4.2.2
- v4.2.1
- v4.2.0
- v4.1.2
- v4.1.1
- v4.1.0
- v4.0.0
- v3.1.0
- v3.0.1
- v3.0.0
- v2.3.1
- v2.3.0
- v2.2.1
- v2.2.0
- v2.1.1
- v2.1.0
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.0.0
- dev-prettier
- dev-semantic-release-14.0.0-120.1.0
- dev-semantic-release-13.0.0-103.1.0
- dev-semantic-release-12.0.0-77.1.0
- dev-@semantic-release/github-3.0.0-69.1.0
- dev-curl-error
- dev-semantic-release-11.0.0-38.1.0
- dev-@semantic-release/last-release-git-tag-2.0.0-38.1.0
- dev-@semantic-release/github-2.0.0-38.1.0
- dev-autocomplet-speedup
- dev-semantic-release-ten
- dev-ci-benchmarks
- dev-multi-root
- dev-squizlabs/php_codesniffer-3.0.0-#3.0.0
- dev-type-hover
- dev-nullable-types
- dev-abort-traversal
- dev-observables
- dev-namespace-refs-for-qualified-names
- dev-tcp-server
- dev-define-constants
- dev-constructor
This package is auto-updated.
Last update: 2024-09-13 04:36:59 UTC
README
一个纯PHP实现的开放语言服务器协议。为任何IDE提供PHP静态代码分析。
使用优秀的Tolerant PHP解析器、phpDocumentor的DocBlock反射和事件循环以支持并发。
目录
特性
完成
签名帮助
转到定义
查找引用
悬停
悬停请求返回声明行(标记为语言php
)和docblock的摘要。对于参数,它将返回@param
标签。
文档符号
工作区符号
查询不区分大小写地与符号的完全限定名进行匹配。
非标准:空查询将返回工作区中找到的所有符号。
通过发布诊断进行错误报告
PHP解析错误报告为错误,docblock的解析错误报告为警告。来自vendor
目录的错误/警告将被忽略。
PHP内置函数的存根
完成、类型解析等将使用标准PHP库和常见扩展。
什么是定义?
全局可搜索的定义包括
- 类
- 接口
- 特性
- 属性
- 方法
- 类常量
- 使用
const
关键字定义的常量
当需要时即时解析定义
- 变量赋值
- 参数
- 闭包
use
语句
尚未支持
- 使用
define()
定义的常量
由于命名空间仅构成完全限定名的一部分,并且不映射到唯一声明,因此设计上不考虑命名空间为声明。
什么是引用?
定义/引用/悬停当前适用于
- 类实例化
- 静态方法调用
- 类常量访问
- 静态属性访问
- 参数类型提示
- 返回类型提示
- 方法调用,如果变量在同一作用域中分配给了新对象
- 属性访问,如果变量在同一作用域中分配给了新对象
- 变量
- 参数
- 导入的闭包变量(
use
) - 类、常量和函数的
use
语句 - 在
implements
/extends
之后的类样 - 函数调用
- 常量访问
instanceof
检查- 重新分配的变量
- 返回值、属性、数组访问的嵌套访问/调用
协议扩展
此语言服务器实现了文件协议扩展。如果客户端通过ClientCapabilities.xfilesProvider
和ClientCapabilities.xcontentProvider
表达支持,则服务器将通过客户端的请求请求工作区中的文件和文件内容,而不会直接访问文件系统。这允许服务器在容器、远程工作区或任何不同于file://
的协议的独立环境中运行。
性能
初始化时,服务器将递归扫描项目目录中的PHP文件,解析它们并将所有定义和引用添加到内存索引中。这需要的时间取决于项目的大小。截至撰写时,此项目包含78个文件和1560个依赖项文件,解析和消耗了76MB,耗时97秒,使用Surface Pro 3。语言服务器在索引期间完全运行,可以响应对已索引定义的请求。后续请求几乎瞬间完成,因为索引保存在内存中。
启用XDebug会严重影响性能,如果max_nesting_level
设置太低,甚至可能导致服务器崩溃。
版本
此项目遵循semver进行协议通信和命令行参数,例如,LSP的重大版本增加将导致PHP LS的重大版本增加。新功能(如请求实现)将导致新的小版本。所有其他都将是一个补丁版本。所有类都被视为内部类,不受semver约束。
安装
建议通过Composer进行安装。只需运行
composer require felixfbecker/language-server
即可获得最新稳定版本及其所有依赖项。
运行composer update
将更新服务器到最新非破坏性版本。
在安装语言服务器及其依赖项后,您必须解析标准PHP符号的stubs并保存索引以实现快速初始化。
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指令中的memory-limit
。默认为4GB(远远超过所需)。
示例
php bin/php-language-server.php --memory-limit=256M
使用
- VS Code PHP IntelliSense
- Eclipse Che
- Eclipse IDE(LSP4E-PHP)
- NeoVim:LanguageServer-php-neovim与LanguageClient neovim
- Atom:ide-php
贡献
您至少需要PHP 7.0和Composer。克隆存储库并运行
composer install
以安装依赖项。
使用以下命令运行测试
composer test
使用以下命令进行代码审查
composer lint
项目解析PHPStorm的PHP stubs以支持PHP内置函数。在Composer处理后,它会根据需要重新解析它们,但在一些代码更改(如涉及索引或解析的更改)之后,您可能需要显式重新解析它们
composer run-script parse-stubs
要使用XDebug进行调试,请确保已将其设置为环境变量
PHPLS_ALLOW_XDEBUG=1
这告诉语言服务器,如果检测到XDebug已启用(XDebug对性能有较大影响),则不要在没有XDebug的情况下重启。