TheSmuks/pike-language-server

GitHub: TheSmuks/pike-language-server

为 Pike 语言提供基于编译器的 IDE 级语言服务器,支持诊断、补全、导航、重构与 Roxen WebServer 开箱即用集成。

Stars: 0 | Forks: 0

Pike Language Server logo # Pike Language Server **在 Visual Studio Code 中为 [Pike](https://pike.lysator.liu.se/) 提供丰富的、IDE 级别的语言支持** — 包括诊断、补全、导航、重构和格式化,由 Pike 编译器本身提供支持。 [![Marketplace](https://img.shields.io/github/v/release/TheSmuks/pike-language-server?label=marketplace&logo=visualstudiocode&color=0066b8)](https://marketplace.visualstudio.com/items?itemName=thesmuks.pike-language-server) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/TheSmuks/pike-language-server/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/TheSmuks/pike-language-server/blob/main/LICENSE) [安装](#installation) · [功能](#features) · [配置](#configuration) · [故障排除](#troubleshooting) · [贡献](./CONTRIBUTING.md)
## 为什么选择它 Pike 是一门强大的语言,但其工具链生态相对匮乏。本扩展通过**使用 `pike` 本身作为语义核心**,为 `.pike`、`.pmod` 和 `.mmod` 文件带来了现代化的编辑体验 —— 诊断、类型和符号解析均来自真实的编译器,而非基于推断;同时由 [tree-sitter-pike](https://github.com/TheSmuks/tree-sitter-pike) 提供快速、增量的语法解析。 它还开箱即用地理解 **[Roxen WebServer](https://www.roxen.com/)** 的源代码,并内置了 Roxen 6.1 索引,因此即使在没有安装 Roxen 的机器上,也能解析其常量和 API。 该扩展会自动捆绑并管理语言服务器。安装它,打开一个 Pike 文件,它就能直接运行。 ## 安装 **前置条件** - **Pike 8.0+** — 从 [pike.lysator.liu.se](https://pike.lysator.liu.se/) 安装,并确保 `pike` 位于您的 `PATH` 中(或设置 [`pike.languageServer.path`](#configuration))。 - **VS Code 1.85+** **安装** 从 Marketplace 获取 **[Pike Language Server](https://marketplace.visualstudio.com/items?itemName=thesmuks.pike-language-server)**,或者通过命令行: ``` code --install-extension thesmuks.pike-language-server ``` 打开任意 `.pike`、`.pmod` 或 `.mmod` 文件,服务器会自动启动。状态栏图标(右下角)会显示其状态 —— 点击它可打开输出通道。 **其他编辑器** 该服务器通过 stdio 使用标准的 LSP 进行通信,可以在 VS Code 之外运行: - **Helix** — 详细的[安装指南](./docs/helix-installation.md) - **Neovim** 以及任何其他 LSP 客户端 — 请参阅 [docs/other-editors.md](./docs/other-editors.md) ## 功能 一套全面的 LSP 功能集,全部基于真实的编译器信息: **诊断** - 直接来自 `pike` 的实时编译错误和警告,在您输入时进行了防抖处理 - 三种模式:`realtime`、`saveOnly` 或 `off`,支持版本控制的取代机制和跨文件传播 **导航** - 转到定义和查找引用,支持工作区范围以及跨 `inherit`/`import` 链 - 针对继承符号的转到实现 - 文档与工作区符号、文档高亮、折叠区域 - 调用层次结构和类型层次结构 **补全** - 具备作用域感知的本地补全,并带有优先级排序 - 通过多级继承实现的成员补全,同时支持基于类型推断的 `->` 和 `.` 访问 - 链式调用解析 (`getContainer()->getItem()->…`) - **5,500+ 标准库符号** (Stdio, Gtk2, Sql, Protocols, …) 和 **283 个预定义内置项**,并提供自动导入建议 - 带有参数占位符和提交字符的代码片段补全 **重构与编辑** - 具备作用域感知、跨文件、类型感知的**重命名** - **代码操作** — 移除未使用的变量、添加缺失的 import、生成 getter/setter、生成 AutoDoc - 带有活动参数跟踪的**签名帮助** - **格式化** — 支持全文档和输入时格式化,可选的运算符空格 - **代码透镜** (引用计数)、**文档链接** (`#include` 路径)、**内联提示** (推断出的类型) **信息** - **悬停** — 类型、AutoDoc、标准库签名、跨文件解析 - 用于精确高亮的 **语义 token** - 智能的、具备作用域感知的选中范围 **Roxen WebServer** - Roxen 源码就是 Pike,但 `#include ` 和其他 Roxen 头文件永远无法自行解析。扩展会自动检测本地安装(顺序依次为:显式设置、然后是 `pike.json`、接着是工作区祖先目录、最后是 `/usr/local/roxen*`),并将其模块、include 和程序路径整合进 Pike 的路径中。 - 服务器随附了一个生成的 **Roxen 6.1** 索引(212 个常量,1694 个 Roxen/RXML/模块原型符号),因此即使**完全没有安装 Roxen**,悬停和补全也能正常工作。如果检测到了本地安装,它将被优先使用,并额外提供对真实源码的“转到定义”功能。 - Roxen 模式是**按文件**决定的 —— 依据 Roxen 头文件的 include、`inherit "module"`、或 `constant module_type = MODULE_*`,并为辅助文件提供目录继承。在混合工作区中的普通 Pike 文件永远不会被提供 Roxen 符号。可以使用 `pike.roxen.mode` 进行覆盖。 ## 配置 在 **Settings → Extensions → Pike Language Server** 下,或在 `settings.json` 中进行配置。最常见的设置: | 设置 | 默认值 | 描述 | |---------|---------|-------------| | `pike.languageServer.path` | `"pike"` | Pike 二进制文件的路径。必须是 Pike 8.0 或更高版本。 | | `pike.languageServer.pikeHome` | `""` | Pike 安装根目录(例如 `/usr/local/pike/8.0.1116`)。设置后覆盖自动检测。 | | `pike.languageServer.modulePaths` | `[]` | 额外的模块搜索路径 (`-M`)。 | | `pike.languageServer.includePaths` | `[]` | 额外的 include 搜索路径 (`-I`)。 | | `pike.languageServer.diagnosticMode` | `"realtime"` | 何时报告诊断信息:`realtime`、`saveOnly` 或 `off`。 | | `pike.languageServer.diagnosticDebounceMs` | `500` | 实时诊断的防抖时间,单位为毫秒 (100–5000)。 | | `pike.languageServer.maxNumberOfProblems` | `100` | 每个文件报告的最大诊断数量 (1–1000)。 | | `pike.languageServer.indexing.mode` | `"openFiles"` | 启动索引方式:`openFiles` (启动最快)、`full` (即时提供全局功能) 或 `auto`。 | | `pike.languageServer.format.operatorSpacing` | `false` | 格式化时在运算符周围添加空格。 | | `pike.languageServer.memory.budgetMb` | `512` | 堆内存预算 (MB),超过此值服务器将清理非必要的索引项。 | | `pike.languageServer.trace.server` | `"off"` | LSP 协议跟踪 (`off`/`messages`/`verbose`),用于调试。 | | `pike.roxen.mode` | `"auto"` | Roxen 支持:`auto` (按文件检测)、`on` 或 `off`。 | | `pike.roxen.path` | `""` | Roxen 安装根目录。设置后覆盖自动检测。 | 总共有 28 项设置 —— 包括 worker 生命周期、后台索引和休眠调优 —— 均可在 Settings UI 中查看。 ## 故障排除 **服务器无法启动** 1. 点击状态栏图标以打开 **Output → Pike Language Server**。 2. 确认 `pike --version` 在您的终端中能正常工作,并报告为 8.0 或更高版本。 3. 检查 `pike.languageServer.path` 是否指向有效的 Pike 二进制文件。 **诊断信息未出现** — 确保 `pike.languageServer.diagnosticMode` 设置为 `realtime` 或 `saveOnly`。 **状态栏显示警告图标** — 点击它以检查错误。常见原因:未找到 Pike、版本过旧或文件权限问题。 如需进行更深入的诊断,请将 `pike.languageServer.trace.server` 设置为 `verbose` 并检查输出通道。 ## 架构 一个 **Tier-3 LSP**:`pike` 作为语义核心,[tree-sitter-pike](https://github.com/TheSmuks/tree-sitter-pike) 作为语法解析器。服务器使用 TypeScript (`vscode-languageserver-node`) 编写,拆分为 137 个专注的模块,遵循严格的代码风格预算(500 行的文件、50 行的函数、显式的错误处理、有限的缓存),并在 CI 中强制执行。 正确性依赖于编译器:测试套件直接从 `pike` 本身派生所有预期结果 —— 不包含任何手写的预期 —— 覆盖了 **487 个 Pike (PUnit) 测试**、**2,480+ 个 TypeScript 测试**、一个包含 **91 个文件的语言语料库** 以及 VS Code 集成测试。 行为也通过实际运行服务器(而非仅仅通过理论推理)来进行审计。一套测试组件在工作区中针对每一个声明的定义和抽样的引用触发了所有已声明的能力,并根据 Pike 编译器对每个发现进行校验,从而确保*源码*中的缺陷绝不会被误报为服务器的缺陷。最近一次扫描对 Roxen 6.1 的所有 442 个 Pike 文件进行了 **200,936 次请求**,实现了**零崩溃和零超时**,并且语义语料库回应了**它所应承担的每一个请求** —— 7,874 个请求,没有出现任何空结果或错误结果。发现的问题和遗留的缺陷记录在 [docs/audits/](./docs/audits/) 中。 有关完整的设计,请参阅 **[docs/architecture.md](./docs/architecture.md)**;有关决策记录,请参阅 **[docs/decisions/](./docs/decisions/)**。 ## 链接 - [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=thesmuks.pike-language-server) - [更新日志](./CHANGELOG.md) · [许可证 (MIT)](./LICENSE) - [Pike 语言](https://pike.lysator.liu.se/) · [tree-sitter-pike](https://github.com/TheSmuks/tree-sitter-pike)
标签:Pike, SOC Prime, 云安全监控, 代码补全, 开发工具, 自动化攻击, 语法高亮, 语言服务器协议, 静态分析