tsufeki/tenkawa-php-language-server

PHP 语言的代码服务器,具有强大的静态分析和类型推断功能


README

Tenkawa

Tenkawa 是一个 PHP 的语言服务器,具有强大的静态分析和从 PHPStan 中借用而不询问的类型推断引擎。

目前处于实验阶段,但应该可以使用。欢迎任何错误报告、功能请求、建议和问题。

安装

需要 PHP >= 7.1 且包含 pdo_sqlite 扩展。

有关 Visual Studio Code 扩展,请参阅 这里

可以通过 composer create-project 命令(~ 目录是一个示例)

$ cd ~
$ composer create-project --no-dev --keep-vcs \
    tsufeki/tenkawa-php-language-server tenkawa/

或者通过克隆仓库

$ cd ~
$ git clone https://github.com/tsufeki/tenkawa-php-language-server.git tenkawa/
$ cd tenkawa/
$ composer install --no-dev
$ cd ..

构建标准库索引

$ php ~/tenkawa/bin/tenkawa.php --build-index

现在配置您的客户端,使用以下命令启动服务器以使用 stdio

php ~/tenkawa/bin/tenkawa.php

或者连接到 TCP 套接字

php ~/tenkawa/bin/tenkawa.php --socket=tcp://127.0.0.1:12345

功能

  • ✔ 自动完成
    • ✔ 类/函数(还包括自动导入和文档注释内)
    • ✔ 类成员
    • ✔ 局部变量
  • ✔ 诊断
  • ✔ 转到定义
  • ✔ 转到实现
  • ✔ 悬停信息
  • ✔ 签名帮助
  • ✔ 引用
  • ✔ 文档符号
  • ✔ 工作区符号
    • ✔ 类/函数/常量
    • ✘ 类成员(尚未实现)
  • ✔ 代码操作
    • ✔ 导入类/函数
    • ✔ 修复错误的自动加载类/命名空间名称
    • ✘ 更多即将推出...
  • ✔ 多根工作区
  • ✔ 代码片段
    • ✔ 类/接口/特性
  • ✔ 动态配置

未实现(尚无?)

  • ✘ 转到类型定义
  • ✘ 转到声明
  • ✘ 文档高亮
  • ✘ 文档链接
  • ✘ 代码透镜
  • ✘ 格式化
    • ✘ 文档
    • ✘ 范围
    • ✘ 在类型上
  • ✘ 重命名
  • ✘ 折叠范围

已知问题

  • 许多功能在 traits 中不起作用。这是由 PHPStan 的设计引起的。
  • 重构可能不是百分之百无懈可击的。
  • 性能和长索引时间。

命令行选项

  • --socket=<socket> - 连接到套接字而不是通过 STDIO 进行通信。允许的格式:`tcp://127.0.0.1:12345` 或 `unix:///path/to/socket`。
  • --log-stderr - 将日志记录到 stderr。
  • --log-file=<file> - 将日志记录到指定的文件。
  • --log-client - 使用 `window/logMessage` 协议方法记录日志。
  • --log-level=<level> - 仅记录给定级别及以上的消息。`<level>` 可以是以下之一:`emergency`、`alert`、`critical`、`error`、`warning`、`notice`、`info`、`debug`。默认为 `info`。
  • --build-index - 构建标准库索引而不是启动服务器。
  • --config-json=<json> - 默认选项,见 配置。示例:`--config-json={"completion":{"autoImport":false}}`。

配置

您可以通过 `initialize` 协议方法的 `initializationOptions` 参数或将 `workspace/configuration` 请求实现并从客户端发送 `workspace/didChangeConfiguration` 通知来将配置选项传递给服务器。

识别的选项

{
  "tenkawaphp": {
    "diagnostics": {
      "phpstan": {
        // Enable PHPStan diagnostics.
        "enabled": true
      }
    },
    "completion": {
      // Enable automatic import (use) of completed classes.
      "autoImport": true,
      // By default, only some PHP extensions are used for autocompletion.
      // Additional ones can be enabled here.
      "extensions": ["mysqli", "redis"]
    },
    "index": {
      // Additional stubs directories
      "stubs": ["/path/to/stubs/dir"]
    }
  }
}

许可

版权所有 (c) 2017 tsufeki

本程序是自由软件:您可以按照自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它,许可证版本可以是3或(根据您的选择)任何更新的版本。

本程序的分发是希望它会有用,但没有任何保证;甚至不保证其可销售性或适用于特定目的。有关更多详细信息,请参阅GNU通用公共许可证。

您应该已经随本程序收到了一份GNU通用公共许可证的副本。如果没有,请参阅https://gnu.ac.cn/licenses/