LSP Code Navigation

🔍 IDE 级代码导航,终端原生体验

基于 Pyright 的持久化 LSP 守护进程,支持代码导航、类型检查、符号搜索等 IDE 级功能,替代 grep 的高效 Python 代码理解工具。

收藏
6.4k
安装
1.3k
版本
1.4.0
CLS 安全扫描中
预计需要 3 分钟...

使用说明

核心用法

lsp 是一个基于 Pyright 的 Language Server Protocol (LSP) 客户端,通过管理后台守护进程实现快速代码导航。用户通过 lsp-query 命令行工具执行各类 LSP 操作,守护进程在首次查询时自动启动,闲置 5 分钟后自动退出。

主要命令涵盖:

  • definition: 跳转到符号定义处
  • references: 查找全工作区符号引用
  • hover: 获取类型签名与文档字符串
  • symbols: 列出文件内所有类/函数/变量
  • workspace-symbols: 跨文件符号搜索
  • diagnostics: 静态类型错误检查
  • completions/signature: 代码补全与函数签名提示
  • rename: 重命名影响范围预览

使用前需设置 LSP_WORKSPACE 环境变量指向项目根目录,或依赖自动检测的 git 根目录。

显著优点

1. IDE 级导航体验: 提供精确的语义分析,远超文本搜索 (grep),理解继承关系、类型推导等复杂场景
2. 零配置启动: 守护进程自动管理,无需手动启停,首次查询冷启动约 1-2 秒,后续查询约 200ms

3. 纯 Python 实现: lsp-query.py 仅依赖标准库,无额外 pip 包,部署轻量

4. 人类友好输出: 行号列号采用 1-indexed,与编辑器显示一致

5. 灵活可配置: 支持自定义 LSP 服务器、超时时间、Unix socket 路径

潜在缺点与局限性

1. Python 专属: 仅支持 Python 3.10+,其他语言需更换 LSP 服务器
2. 依赖 Node.js 生态: 需要全局安装 pyright-langserver (npm install -g pyright)

3. 类型检查局限性: 诊断功能依赖当前 Python 环境的包安装状态,虚拟环境未激活时会产生误报的 import 错误

4. 内存占用: 持久化守护进程持续占用内存,虽会自动回收但需权衡

5. 符号索引范围: 大型代码库初次索引可能较慢,且切换分支后可能需要手动重启 (lsp-query shutdown)

适合人群

  • 代码审查者: 需要快速理解陌生代码库的结构与依赖关系
  • 重构开发者: 评估修改影响范围,进行安全的跨文件重构
  • 类型安全倡导者: 在运行前捕获类型错误,辅助渐进式类型注解
  • CLI 优先用户: 偏好终端工作流,不愿打开完整 IDE

常规风险

  • 守护进程残留: 异常退出可能导致 socket 文件残留,需手动清理 ~/.cache/lsp-query/
  • 路径遍历风险: 若 LSP_WORKSPACE 被恶意设置,可能暴露敏感文件内容(符号搜索范围)
  • 信息泄露: hover/references 等命令可能暴露代码库的完整结构与依赖关系
  • 命令注入: 虽 lsp-query.py 使用标准库 subprocess 但未显见过滤 LSP_SERVER 环境变量,自定义服务器命令时需谨慎
  • 竞争条件: 多并发查询对 Unix socket 的访问可能存在边界情况

LSP Code Navigation 内容

scripts文件夹
手动下载zip · 9.7 kB
lsp-query.pytext/plain
请选择文件