EffortlessMetrics/perl-lsp

GitHub: EffortlessMetrics/perl-lsp

用 Rust 编写的快速原生 Perl 5 语言服务器,提供完整的 IDE 功能支持,无需 Perl 运行时依赖。

Stars: 0 | Forks: 0

perl-lsp logo

perl-lsp

一个用 Rust 编写的快速、原生 Perl 语言服务器 — 为 Perl 5 带来现代化的 IDE 功能。

CI crates.io docs.rs codecov License Rust Downloads

## 快速开始 ``` # 安装 cargo install perl-lsp # 验证安装 perl-lsp --health # should print: ok X.Y.Z # 配置编辑器 (VS Code) code --install-extension effortlessmetrics.perl-lsp-rs # 打开 Perl 文件 — 补全、诊断、悬停和导航立即生效。 ``` 刚接触语言服务器?请参阅 **[入门指南](docs/tutorials/GETTING_STARTED.md)** 获取完整的操作演示,包括特定编辑器的设置、可视化功能导览和故障排除提示。
Neovim / Emacs 设置 **Neovim** (nvim-lspconfig): ``` require('lspconfig').perl_ls.setup { cmd = { "perl-lsp", "--stdio" }, } ``` **Emacs** (eglot): ``` (add-to-list 'eglot-server-programs '(perl-mode "perl-lsp" "--stdio")) ```
## 功能 | 功能 | 描述 | |---------|-------------| | **补全** | 符号、关键字、模块、变量、代码片段、内置函数签名 | | **导航** | 转到定义、查找引用、工作区符号、文档符号 | | **悬停** | 文档和类型信息 | | **诊断** | 实时错误检测 | | **重构** | 重命名、代码操作、格式化 | | **调试适配器** | 通过 DAP 桥接实现断点、单步执行、变量检查 | | **快速** | 亚毫秒级增量解析、原生 Rust 二进制文件 | | **零 Perl 依赖** | 解析或 LSP 不需要 Perl 运行时 | | **跨文件导航** | 双索引工作区,覆盖范围广 | | **Unicode 安全** | 完整的 UTF-8/UTF-16 位置转换 | 完整的 LSP 覆盖:已实现所有 53 项宣传的功能(参见 [`features.toml`](features.toml))。 有关实时指标,请参见 [CURRENT_STATUS.md](docs/project/CURRENT_STATUS.md)。 ## 为什么选择 perl-lsp? | | perl-lsp | Perl::LanguageServer | PLS | |---|----------|---------------------|-----| | **语言** | Rust (原生二进制) | Perl | Perl | | **需要 Perl 运行时** | 否 | 是 | 是 | | **LSP 功能覆盖** | 53/53 项宣传功能 | 部分 | 部分 | | **增量解析** | 是 (亚毫秒级更新) | N/A | N/A | | **调试适配器** | 内置 (DAP bridge) | 内置 | 否 | | **供应链安全** | SBOM + SLSA Level 2 | N/A | N/A | ## 解析器覆盖范围 v3 解析器是一个原生递归下降实现,涵盖了广泛的 Perl 5 语法 (5.8 到 5.40),包括 heredocs、正则表达式、引用结构、格式等。 它针对现实世界的 Perl 代码持续测试,以推动覆盖率的提升: - **语料库测试套件** -- `tree-sitter-perl/test/corpus/` 中的 600+ 个测试部分,外加 70+ 个独立的 `.pl` 固定测试用例。 - **系统 Perl 语料库扫描** -- 对系统 Perl 安装中发现的所有 `.pm` 和 `.pl` 文件进行基准测试。当前的解析率在 [CURRENT_STATUS.md](docs/project/CURRENT_STATUS.md) 和基线文件 (`.ci/parser-corpus-baseline.json`) 中跟踪。 - **通用文件关卡** -- 一组精选的核心模块,必须在每个 PR 上以零错误解析 (`.ci/common-corpus-manifest.txt`)。 - **棘轮式 CI 关卡** -- 整体解析率只能上升,不能下降。回退会导致构建失败。 - **CPAN 前 1000 目标** -- 长期目标是让 90%+ 的下载量最高的 CPAN 发行版能够被干净地解析,从而推动解析器改进以适应现实世界的 Perl 惯用语。 有关详细的解析率和边缘情况路线图,请参见 [PARSER_EDGE_CASE_ROADMAP.md](docs/project/PARSER_EDGE_CASE_ROADMAP.md)。 ### 语料库命令 ``` just corpus-sweep # Sweep system Perl corpus and print results just corpus-sweep-check # Check against baseline (fails on regression) just corpus-sweep-update # Update baseline with current results just common-corpus-check # Check pinned modules parse cleanly (PR gate) ``` 有关最新计算的指标,请参见 [CURRENT_STATUS.md](docs/project/CURRENT_STATUS.md)。 ## 安装 ### 从 crates.io ``` cargo install perl-lsp perl-lsp --health # should print: ok X.Y.Z ``` ### 从源码 ``` git clone https://github.com/EffortlessMetrics/perl-lsp.git cd perl-lsp cargo install --path crates/perl-lsp perl-lsp --health # should print: ok X.Y.Z ``` ### 预编译二进制文件 从 [GitHub Releases](https://github.com/EffortlessMetrics/perl-lsp/releases) 下载。 ## 架构 ``` Editor / IDE | JSON-RPC (stdio) v perl-lsp (LSP server) | +-- LSP Providers (completion, hover, diagnostics, ...) +-- Workspace Index (dual-indexed symbol lookup) +-- perl-dap (Debug Adapter Protocol bridge) | perl-parser (v3 recursive-descent) | perl-lexer (mode-aware tokenizer) ``` 该工作区组织为一系列专注的 Rust crate (115+),每个 crate 都有 单一职责。这保持了快速的编译时间和清晰的边界。 有关完整的层级系统、架构决策记录和设计原理,请参见: - [LSP 实现指南](docs/reference/LSP_IMPLEMENTATION_GUIDE.md) - [架构决策记录](docs/adr/README.md) (微 crate 架构、双重索引、增量解析、供应链安全) - [CLAUDE.md](CLAUDE.md) 获取完整的开发者命令参考 ## 已发布的 Crate | Crate | 用途 | |-------|---------| | [`perl-lsp`](https://crates.io/crates/perl-lsp) | Language Server Protocol 二进制文件 | | [`perl-dap`](https://crates.io/crates/perl-dap) | Debug Adapter Protocol 二进制文件 | | [`perl-parser`](https://crates.io/crates/perl-parser) | 递归下降 Perl 解析器库 | | [`perl-lexer`](https://crates.io/crates/perl-lexer) | 上下文感知 Perl 分词器 | | [`perl-corpus`](https://crates.io/crates/perl-corpus) | 解析器和 LSP 测试语料库 | ## 开发 ``` cargo build --workspace # Build everything cargo test --workspace # Run all tests cargo clippy --workspace --lib # Lint cargo fmt --all # Format nix develop -c just ci-gate # Full local gate (required before push) ``` 参见 [CONTRIBUTING.md](CONTRIBUTING.md) 了解指南, [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) 了解社区标准, 以及 [SUPPORT.md](SUPPORT.md) 了解如何获取帮助。 ## 安全 发布产物包括 SBOM 生成 (SPDX 和 CycloneDX) 和 SLSA Level 2 来源证明。生产代码通过 CI 棘轮强制执行零 `unsafe`、零 `unwrap`/`expect` 和零 `panic!` 系列宏。路径遍历和命令注入 向量已加固。 详情请参见 [供应链安全](docs/reference/SUPPLY_CHAIN_SECURITY.md)。 ## 文档 | 资源 | 描述 | |----------|-------------| | **[入门指南](docs/tutorials/GETTING_STARTED.md)** | **安装、编辑器设置和首次运行演示** | | [书](book/) | 综合用户和开发者指南 | | [docs/](docs/README.md) | 文档索引 | | [features.toml](features.toml) | 权威 LSP 功能目录 | | [CURRENT_STATUS.md](docs/project/CURRENT_STATUS.md) | 实时项目指标 | | [ROADMAP.md](ROADMAP.md) | 版本里程碑和规划 | | [入门指南](docs/tutorials/GETTING_STARTED.md) | 安装和第一步 | | [稳定性策略](docs/reference/STABILITY.md) | API 版本控制和兼容性 | | [DAP 用户指南](docs/tutorials/DAP_USER_GUIDE.md) | 调试器设置和使用 | ## 历史 该项目于 2025 年 7 月作为 [tree-sitter-perl](https://github.com/tree-sitter-perl/tree-sitter-perl) 的分支开始。此后被重写为原生 Rust 递归下降解析器,并发展成为一个功能齐全的 LSP/DAP 工具包,包含超过 115 个 crate。 ## 许可证 根据 MIT 或 Apache-2.0 双重许可: - [LICENSE-MIT](LICENSE-MIT) - [LICENSE-APACHE](LICENSE-APACHE)
标签:Cargo, Emacs, IDE支持, LSP, Neovim, Perl, Perl 5, Rust, SOC Prime, tree-sitter, VS Code 扩展, 云安全监控, 代码补全, 原生高性能, 可视化界面, 开发工具, 网络流量审计, 解析器, 解析工具包, 语法诊断, 语言服务器, 通知系统, 静态分析