使用 LSP 查询代码
先定位符号,再查询定义、引用、调用层级、诊断与代码动作。
配置并启用语言服务后,Qwen 通过统一 lsp 工具查询代码。返回质量取决于服务器能力、索引和项目编译配置。
先找准确位置
workspaceSymbol 用 query 搜索工作区,可加 limit;documentSymbol 返回某 filePath 中的符号。先用它们定位,再执行依赖位置的查询,不猜行列。
| 操作 | 必需位置或输入 |
|---|---|
| goToDefinition | filePath、line、character |
| findReferences | 同上,可选 includeDeclaration |
| goToImplementation | filePath、line、character |
| hover | filePath、line、character |
| prepareCallHierarchy | filePath、line、character |
Qwen 工具接口的 line、character 都从 1 开始,不应直接传其他客户端的零基位置。
调用层级
先 prepareCallHierarchy 取得 callHierarchyItem,再传给 incomingCalls 或 outgoingCalls。前者查谁调用当前函数,后者查当前函数调用谁。返回对象是后续请求的输入,不用仅凭名称重新拼装。
诊断与动作
diagnostics 需要 filePath;workspaceDiagnostics 可用 limit 控制数量。诊断为空可能是尚未索引、文件未保存或服务没连上,应结合 /lsp 状态判断。
codeActions 使用起始 line/character,可带 endLine/endCharacter,省略终点时使用起点;还可带 diagnostics 与 codeActionKinds。常用动作类型:
- quickfix:修复诊断。
- refactor、refactor.extract、refactor.inline:重构或抽取/内联。
- source、source.organizeImports、source.fixAll:源码级整理和可自动修复项。
获得代码动作列表不等于动作已应用;应检查后续实际修改和验证输出。
没有结果时
先保存文件并确认语言后缀映射,再等待索引。clangd 需要真实编译数据库或 flags;缺少 include 路径不能只靠增大超时补救。
同一文件类型可以配置多个服务,但每次操作只使用其中一个,先返回结果者胜出。不要假定结果是多个服务器诊断的完整并集。