| name | ets-lsp-check |
| description | 使用 ETS Language Server 对 .ets 文件进行 IDE 级别的实时诊断。通过 LSP 协议获取编译器真实诊断结果(等同于 DevEco Studio 的错误提示)。与静态分析互补,专注于语法和类型错误检测。触发词:LSP 检查、language server 诊断、IDE 诊断、编译器级别检查、ets 实时诊断。支持多文件和目录输入,自动递归查找 .ets 文件,输出错误/警告/信息及汇总统计。PostToolUse Hook 模式下会自动输出错误详情(行号、错误消息)并指示 Claude 自动修复。 |
ETS LSP 诊断工具
使用 ETS Language Server 对 .ets 文件进行 IDE 级别的实时语法和类型检查。
功能特性
- 获取编译器真实诊断结果(等同于 DevEco Studio)
- 检测语法错误和类型错误
- 输出错误、警告、信息级别的诊断结果
- 支持自定义 HarmonyOS SDK 路径
- 支持多文件输入:一次检查多个文件
- 支持目录输入:自动递归查找 .ets 文件
- 容错处理:文件不存在时跳过并警告,继续检查其他文件
- 汇总统计:输出整体检查结果统计
- 智能分组:按文件大小动态调整批处理策略,小文件优先处理
- 渐进式检查:当 LSP 完成处理后提前结束等待,无需等待超时
- 超大文件警告:自动检测 >1MB 文件并提示
智能分组策略
| 文件大小 | 批处理大小 | 超时/文件 | 说明 |
|---|
| < 10KB | 100 个 | 300ms | 极小文件,大批量 |
| 10-50KB | 50 个 | 500ms | 小文件 |
| 50-200KB | 20 个 | 1000ms | 中等文件 |
| 200-500KB | 1 个 | 5000ms | 大文件,单独处理 |
| > 1MB | 1 个 | 15000ms | 超大文件,警告提示 |
前置要求
安装 ETS Language Server
工具会在首次运行时自动检测并安装 ETS Language Server,无需手动安装。
如需手动安装:
npm install -g @arkts/language-server
npm install -g @arkts/language-service
验证安装:
which ets-language-server
配置 HarmonyOS SDK(可选)
export HARMONYOS_SDK_PATH="/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony"
使用方式
本 skill 支持多种输入方式:
- 单个
.ets 文件路径
- 多个文件路径(空格分隔)
- 目录路径(自动递归查找
.ets 文件)
- 混合输入(文件和目录同时使用)
执行步骤
- 解析所有输入路径,收集
.ets 文件
- 跳过不存在的路径并输出警告
- 检查 ETS Language Server 是否已安装
- 执行
scripts/ets-lsp-diagnose.js 进行诊断
- 输出每个文件的诊断结果
- 输出整体汇总统计
执行命令
node scripts/ets-lsp-diagnose.js /path/to/file.ets
node scripts/ets-lsp-diagnose.js file1.ets file2.ets file3.ets
node scripts/ets-lsp-diagnose.js /path/to/project/entry/src
node scripts/ets-lsp-diagnose.js file1.ets /path/to/dir file2.ets
环境变量
| 变量名 | 说明 | 默认值 |
|---|
HARMONYOS_SDK_PATH | HarmonyOS SDK 路径 | /Applications/DevEco-Studio.app/Contents/sdk/default/openharmony |
ETS_LSP_COMMAND | LSP 服务器命令 | ets-language-server |
ETS_LSP_BATCH_TIMEOUT | 批量超时时间(ms) | 60000 |
ETS_LSP_INCREMENTAL | 增量检查 true/false | true |
ETS_LSP_SKIP_HUGE | 跳过超大文件 (>1MB) | false |
输出示例
智能分组检查
════════════════════════════════════════════════════════════
ETS Language Server 诊断工具 (智能分组优化版)
════════════════════════════════════════════════════════════
项目根目录: /path/to/project
待检查文件: 82 个
SDK 路径: /Applications/DevEco-Studio.app/Contents/sdk/default/openharmony
增量检查: 启用
智能分组: 启用 (按文件大小动态调整批次)
🚀 初始化 ETS Language Server...
✓ LSP 初始化成功
支持能力: 22 个
📦 [极小文件] 81 个,分 1 批
批次 1/1 (81 文件)...
📦 [小文件] 1 个,分 1 批
批次 1/1 (1 文件)...
✓ 已处理 82 个文件
────────────────────────────────────────────────────────────
📄 JsonUtil.ets
────────────────────────────────────────────────────────────
❌ 错误 (1):
16:27 - No overload matches this call.
⚠️ 警告 (1):
23:5 - Unused variable 'temp'
✓ 81 个文件无错误
════════════════════════════════════════════════════════════
📊 检查结果汇总
════════════════════════════════════════════════════════════
文件总数: 82
有错误: 1
无错误: 81
❌ 错误: 1
⚠️ 警告: 1
ℹ️ 信息: 0
⏱️ 耗时: 10.4s
════════════════════════════════════════════════════════════
路径不存在时
⚠️ 以下路径不存在,已跳过:
/path/to/nonexistent.ets
📋 共发现 2 个 .ets 文件待检查
...
PostToolUse Hook 自动修复
本 skill 配置了 PostToolUse Hook,在 Claude 每次通过 Edit/Write 修改 .ets 文件后自动触发 LSP 检查。
工作流程
- Claude 使用 Edit/Write 工具修改
.ets 文件
- Hook 自动运行 LSP 诊断,输出所有错误详情(行号、错误消息)
- Claude 根据上下文判断哪些是本次改动引入的错误并自动修复
- 原有代码的问题保持现状,告知用户即可
additionalContext 输出格式
ETS LSP 检查发现 2 个错误:
文件: /path/to/file.ets
16:27 - No overload matches this call.
23:5 - Type 'string' is not assignable to type 'number'.
请只修复你本次改动引入的错误,原有代码的问题保持现状并告诉用户。
注意事项
- Hook 仅在检测到错误时触发(无错误时静默通过)
- 每次 Edit/Write 操作只检查被修改的单个文件
- 错误详情直接来自 LSP 编译器诊断,与 DevEco Studio 一致
常见问题
Q: 提示 "找不到 LSP 服务器"
npm install -g @arkts/language-server
npm install -g @arkts/language-service
ETS_LSP_COMMAND=/path/to/ets-language-server node scripts/ets-lsp-diagnose.js file.ets
Q: 提示 "SDK 路径不存在"
export HARMONYOS_SDK_PATH="/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony"
Q: 诊断超时
ETS_LSP_BATCH_TIMEOUT=120000 node scripts/ets-lsp-diagnose.js /path/to/project