arkts-lsp 是一个面向 ArkTS/HarmonyOS 工程的轻量级 Language Server Protocol 实现,支持 28 项 LSP 能力,31/31 功能覆盖验证通过。
项目已实现 P0-P5 全部 23 个里程碑,具备完整的装饰器语义(25 个)、类型系统感知、跨文件组件/builder 解析、调用/类型层级等能力。通过 opencode 集成可在真实鸿蒙项目中稳定工作。
didOpen / didChange / didClose@Provide/@Consume 跨文档联动 + 文本级搜索@Provide/@Consume 联动this. 实例成员、import 路径、静态成员this.field.method() 链式调用any 检测、TODO 标记、组件 props 校验(未知/缺少必传)TODO / any 快速修复.ets/.ts 扫描、跨文件文档加载@kit.* / @ohos.* 最小解析parseArkTSIncremental()| 指标 | 数据 |
|---|---|
| 单元测试 | 33 文件 / 298 用例 ✅ |
| 集成覆盖 | 31/31 LSP 功能 ✅ |
| 装饰器 | V1(13) + V2(10) + 2 键名 = 25 |
| 构建 | npm run build + npm run check ✅ |
| opencode | 全局 + 项目级配置 + 启动脚本 |
| 测试项目 | test-fixture/ — 9 源文件鸿蒙工程 |
npm install -g @fe-essential/arkts-lsp
arkts-lsp --stdio
或使用 npx(免安装):
npx --yes --registry https://registry.npmjs.org/ @fe-essential/arkts-lsp --stdio
git clone <repo>
cd arkts-lsp
npm install
npm run build
npm run start -- --stdio
| 命令 | 用途 |
|---|---|
npm run build |
编译 TypeScript 到 dist/ |
npm run dev |
tsx 开发态服务 |
npm run start |
运行编译后服务 |
npm run check |
TypeScript 类型检查 |
npm test |
298 单元测试 |
node scripts/coverage-matrix.cjs |
31 项 LSP 全功能验证 |
node scripts/integration-test.cjs |
快速集成测试(8 项) |
parser、decorator metadata/hover/diagnostics、V2 约束、component props、builder resolver、workspace indexer、incremental parse、cross-file component、hierarchical symbols、call hierarchy、type hierarchy、type model、type inlay、CodeLens、completion、hover、code action、semantic tokens、inlay hint、project API、e2e protocol
scripts/integration-test.cjs — 符号/补全/跳转/hover/诊断(8 项)scripts/coverage-matrix.cjs — 全功能覆盖(31 项),使用 test-fixture/ 鸿蒙项目无需全局安装,opencode 启动时 npx 自动拉取最新版本:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"arkts-lsp": {
"command": ["npx", "--yes", "--registry", "https://registry.npmjs.org/", "@fe-essential/arkts-lsp"],
"extensions": [".ets"]
}
}
}
在鸿蒙工程中接管全部 .ets + .ts(禁用默认 TS LSP):
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": { "disabled": true },
"arkts-lsp": {
"command": ["npx", "--yes", "--registry", "https://registry.npmjs.org/", "@fe-essential/arkts-lsp"],
"extensions": [".ets", ".ts"],
"initialization": {
"projectMarkers": ["AppScope/app.json5", "hvigorfile.ts", "build-profile.json5", "oh-package.json5"]
}
}
}
}
配置文件放于项目根目录
opencode.json或全局~/.config/opencode/opencode.json。建议保留--yes与--registry https://registry.npmjs.org/,避免首次 npx 交互确认、镜像同步延迟或 OpenCode 初始化超时。
npm install -g @fe-essential/arkts-lsp
然后 opencode 直接引用命令名:
{
"lsp": {
"arkts-lsp": {
"command": ["arkts-lsp"],
"extensions": [".ets"]
}
}
}
参考示例:examples/opencode.global.json、examples/opencode.project.json