SuperAPI AI 工具集

checking-files-with-lsp

编程与开发

查看项目

更新于 10-16 02:18

技能介绍

用途

该技能用于在需要检查、验证、校验或理解文件(通常是代码相关文件或 Markdown)的代码或结构时,系统化地使用语言服务器和 linter 完成工作。核心原则是:让对应语言的合适工具执行验证工作,而不是手动检查;自动完成工具发现与选择。

何时使用

  • 检查代码文件的语法错误、类型问题或风格问题
  • 验证配置文件(YAML、TOML、JSON、KDL 等)
  • 理解陌生文件的结构或代码质量
  • 验证 Markdown 文件的格式/链接问题
  • 需要快速了解文件中存在哪些问题

何时不使用

  • 仅阅读文件以了解其内容(无需验证)
  • 运行完整测试套件(那属于测试,而非验证)
  • 分析代码行为(那属于调试,而非验证)

工作流程

第 1 步:检测文件类型

根据文件扩展名确定语言/类型:

  • .lua → lua
  • .ts/.tsx → typescript
  • .py → python
  • .go → go
  • .rs → rust
  • .md → markdown
  • .json → json
  • .yaml → yaml
  • .toml → toml
  • .kdl → kdl

如果扩展名不明确或缺失,检查文件 shebang 或内容模式。

第 2 步:在 Mise 中搜索 LSP/Linter

运行:mise search <filetype>

这会返回该语言所有可用的语言服务器、linter 和格式化工具。

示例输出:

mise search lua

  • lua-language-server(最流行)
  • stylua(格式化工具)

mise search python

  • pyright
  • pylance
  • python-language-server
  • black
  • ruff

第 3 步:智能选择

按工具类型优先排序:语言服务器(LSP)> Linter > 格式化工具。

LSP 提供最全面的验证。Linter 捕获风格/质量问题。格式化工具在验证用途中属于次要。

如果只有一个明显选择:

  • 自动选择它(例如 Lua 只有 lua-language-server)
  • 验证安装:mise list | grep <tool>(如果未列出,则安装)
  • 安装:mise install lua-language-server
  • 对文件运行它

如果有多个选择:

  • 按优先级过滤:先显示 LSP,其次 linter,跳过格式化工具
  • 按流行度排序:最常用的工具优先(以 GitHub stars 衡量,npm/PyPI 下载量作为平局决胜)
  • 向用户显示排序后的列表(含工具类型和简要描述)
  • 让用户按编号/字母选择
  • 验证并安装所选工具
  • 对文件运行它

如果未找到工具:

  • 明确告知用户:“mise 中没有适用于 [filetype] 的 LSP/linter”
  • 按顺序建议替代方案:
    1. 检查在线包管理器(npm、PyPI、cargo 等),如果 mise 中没有
    2. 寻找通用验证器(JSON 用 jq,YAML 用 yamllint 等)
    3. 基本语法检查(语言内置检查器)
    4. 使用结构化指导进行手动验证
  • 询问:“需要我帮你从其他来源安装吗?”

第 4 步:运行验证

对文件执行所选工具并返回结果:错误、警告、风格问题和建议。

快速参考

任务 操作
检测文件类型 以文件扩展名作为主要信号
查找工具 mise search <filetype>
安装明显选择 mise install <tool>(自动选择)
显示选项 呈现排序列表供用户选择
运行验证 使用文件路径执行工具

常见错误

  • 错误:跳过文件类型检测。 错误做法:“这是代码文件,任何语言服务器都行”。正确做法:文件类型决定适用哪个 LSP。错误的 LSP = 错误的错误。
  • 错误:存在多个时随机选一个 LSP。 错误做法:“我就试第一个”或“它们都一样”。正确做法:不同 LSP 检查不同方面。使用排序:最流行 > 较不常见。按类型过滤:LSP > Linter > 格式化工具。没有例外:存在多个时必须向用户呈现选项,不能猜测。
  • 错误:假设 LSP 已安装。 错误做法:“让我直接运行 lua-language-server...”。正确做法:始终先用 mise search 验证。安装前检查 mise list。需要时安装。
  • 错误:不检查系统要求。 错误做法:“安装 LSP 就能用”。正确做法:某些 LSP 需要运行时依赖(Python、Node 等)。报告结果前测试 LSP 能运行。
  • 错误:LSP 不可用时放弃。 错误做法:“这个语言没有工具,无法验证”。正确做法:按顺序探索替代方案:在线包管理器 → 通用验证器 → 语法检查 → 手动指导。
  • 错误:混合工具类别。 错误做法:验证时同等展示格式化工具和 linter。正确做法:优先 LSP > Linter > 格式化工具。以工具类型作为第一过滤器。

回退验证选项

当 mise 中没有 LSP/linter 时:

  1. 检查在线包管理器(npm、PyPI、cargo 等),如果 mise 中没有
  2. 寻找通用验证器——JSON 验证器、YAML 检查器可跨项目使用
  3. 基本语法检查——某些语言有内置语法检查器
  4. 手动验证——提供结构化审查指导
  5. 建议安装——“需要我帮你从其他来源安装吗?”

实施步骤

帮助用户检查文件时:

  1. 询问或确定:“我们在检查哪个文件?”
  2. 从扩展名检测文件类型
  3. 运行:mise search <filetype>
  4. 决定:明显选择还是显示排序选项?
  5. 验证安装:mise list | grep <tool>(检查是否已安装)
  6. 如需要则安装:mise install <selected-tool>
  7. 测试工具运行:验证 LSP/linter 执行无错误
  8. 运行:使用适当标志对文件执行工具
  9. 报告:向用户显示验证结果
  10. 提供后续步骤:“修复这些问题?”或“再次运行检查?”

故障排除

工具安装但无法运行:

  • 某些 LSP 需要运行时依赖(某些工具需要 Python,其他需要 Node)
  • 检查 LSP 文档了解运行时要求
  • 示例:python-language-server 需要安装 Python
  • 验证:mise exec <tool> -- <tool> --version

Mise search 无结果:

  • 该语言可能不在 mise 数据库中
  • 尝试替代包管理器:npm(JavaScript)、PyPI(Python)、cargo(Rust)
  • 或使用通用验证器:jq(JSON)、yamllint(YAML)

LSP 发现错误但工具不适合该任务:

  • 选错了工具(选了格式化工具而非 LSP)
  • 回到第 3 步,按类型优先级过滤(LSP > Linter)
  • 请用户从列表中选择其他选项

文件扩展名不常见:

  • 使用文件内容检查(shebang、头部)作为回退
  • 示例:可执行 shell 脚本通常没有 .sh 扩展名
  • 在搜索 mise 前检查内容以确认类型

实际影响

  • 快速验证:无需手动代码审查即可发现常见问题
  • 一致检查:每次使用相同工具、相同标准
  • 发现:找到手动检查会遗漏的问题
  • 自动化:可集成到工作流、CI/CD、pre-commit 钩子中
  • 语言无关:只要有可用 LSP,同一模式适用于任何语言