LSP Code Navigation

🔍 Python 智能代码导航与类型分析

基于 pyright 的持久化 LSP 守护进程,提供代码导航、类型检查与智能补全,替代 grep 的精准代码理解工具

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

使用说明

核心用法

lsp skill 是一个基于 pyright 的 Language Server Protocol 客户端,通过后台守护进程为 Python 代码库提供 IDE 级导航能力。核心工作流:

1. 环境配置:设置 LSP_WORKSPACE 指向仓库根目录,或依赖自动检测(git root/cwd)
2. 守护进程管理:首次查询自动启动后台 pyright 服务,5 分钟空闲后自动关闭

3. 命令行交互:通过 lsp-query 脚本发起各类 LSP 请求

关键命令矩阵

| 场景 | 命令 | 输出 |
|------|------|------|
| 跳转到定义 | `definition <file> <line> <col>` | 符号源文件位置 |
| 查找引用 | `references <file> <line> <col>` | 全工作区调用点列表 |
| 类型信息 | `hover <file> <line> <col>` | 签名+文档字符串 |
| 文件结构 | `symbols <file>` | 类/函数/变量层级树 |
| 全局搜索 | `workspace-symbols "Name"` | 跨文件符号匹配 |
| 类型诊断 | `diagnostics <file>` | 错误/警告/提示 |
| 代码补全 | `completions <file> <line> <col>` | 可用成员列表 |
| 参数提示 | `signature <file> <line> <col>` | 函数形参详情 |
| 重构预览 | `rename <file> <line> <col> <new>` | 影响范围清单 |

显著优点

  • 精准语义:基于 AST 和类型信息,远超文本搜索(grep)的准确性,能识别同名不同义的符号
  • 零配置启动:自动检测工作区、自管理守护进程,无需编写 LSP 配置
  • 低延迟交互:热守护进程响应约 200ms,支持快速迭代探索
  • 全功能覆盖:从定义跳转、引用查找、类型推断到重构预览,覆盖日常代码理解 90% 场景
  • 编辑器无关:纯 CLI 输出,可集成任意工作流(终端、脚本、编辑器插件)

潜在缺点与局限性

  • Python 专属:底层依赖 pyright,仅支持 Python 代码库
  • 环境敏感:诊断结果受当前 Python 环境包安装状态影响,缺失依赖会导致误报 import 错误
  • Node 依赖链:需 npm 安装 pyright,在部分沙箱环境可能受限
  • 守护进程状态:大幅代码变更(如切换分支)后可能返回陈旧结果,需手动 shutdown 刷新
  • 1-indexed 坐标:与 LSP 标准 0-indexed 不同,虽"人类友好"但与其他工具集成时需转换
  • 无持久缓存:每次守护进程重启需重新索引大仓库,冷启动 1-2 秒

适合人群

  • AI 助手/Agent:需要在无 GUI 环境下精准理解代码结构、追踪调用链
  • 终端优先开发者:偏好 Vim/Emacs 等编辑器,需要 IDE 级代码导航能力
  • 代码审查者:快速评估变更影响范围(rename preview + references)
  • 大型 Python 项目维护者:FineWebEduGPT 等复杂仓库的全局符号搜索

常规风险

  • 文件系统持久化:在 ~/.cache/lsp-query/ 创建 Unix socket 和日志,多用户环境需注意权限
  • 资源占用:后台 pyright 进程持续占用内存(典型 200-500MB),大仓库可能更高
  • 命令注入边界LSP_SERVER 环境变量允许自定义服务器命令,若从不可信输入构造存在注入可能
  • 跨仓库污染:同一 socket 可能被不同 LSP_WORKSPACE 复用,导致符号解析上下文混乱
  • 依赖版本漂移:pyright 版本更新可能改变类型推断行为,影响诊断一致性

LSP Code Navigation 内容

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