# arkts-lsp **Repository Path**: Duke_Bit/arkts-lsp ## Basic Information - **Project Name**: arkts-lsp - **Description**: 适配Opencode的ArkTS的LSP,同步Deveco的版本,仅跟最新的校验 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-16 - **Last Updated**: 2026-05-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ArkTS LSP for OpenCode 将 DevEco Studio 的 ArkTS 语言服务器(ace-server)集成到 OpenCode,为 `.ets` 文件提供 LSP 支持(诊断、补全、悬停等)。 ## 工作原理 ``` OpenCode (LSP 客户端) │ stdin/stdout ▼ lsp-wrapper.js ← npx @ai-arkts/arkts-lsp │ ├─ 1. 发现 DevEco Studio 路径(环境变量 / 自动搜索) ├─ 2. 推导 SDK、ace-server、工具链路径 ├─ 3. 运行 hvigor --sync(生成依赖映射) └─ 4. 启动中间层代理 → ace-server │ ▼ index.js (代理) ← 处理多客户端、心跳、消息排队 │ ▼ ace-server ← DevEco Studio 的 ArkTS LSP 引擎 │ ├── textDocument/didOpen → publishDiagnostics ├── textDocument/completion ├── textDocument/hover └── aceProject/* (ArkTS 扩展方法) ``` ## 前置条件 - **DevEco Studio** 已安装(ace-server 随 IDE 分发) - **Node.js** >= 18 ## 快速开始 ### 1. 设置环境变量 ```bash # Windows (cmd) set DEVECO_HOME=D:\Application\Huawei\DevEco Studio # Windows (PowerShell) $env:DEVECO_HOME = "D:\Application\Huawei\DevEco Studio" # macOS export DEVECO_HOME=/Applications/DevEco-Studio.app # Linux export DEVECO_HOME=/opt/DevEco-Studio ``` 不设置环境变量也可以——脚本会自动搜索各平台的默认安装路径。 ### 2. 配置 OpenCode 全局配置 编辑 OpenCode 全局配置文件(`~/.config/opencode.json` 或项目下的 `opencode.json`): ```json { "lsp": { "arkts": { "command": ["npx", "--yes", "@ai-arkts/arkts-lsp", "--stdio"], "extensions": [".ets", ".d.ets"], "env": { "DEVECO_HOME": "D:\\Application\\Huawei\\DevEco Studio" } } } } ``` > **env 可选**:不配置时自动搜索各平台默认安装路径(`C:\Program Files\Huawei\DevEco Studio`、`/Applications/DevEco-Studio.app`、`/opt/DevEco-Studio` 等)。 ### 3. 重启 OpenCode 打开任意 `.ets` 文件,LSP 会自动激活。首次激活时会执行 `hvigor --sync` 初始化项目(可能需要几分钟)。 ## 安装方式 ### 推荐:npx(零安装,开箱即用) 无需安装,`opencode.json` 中直接配置: ```json "command": ["npx", "--yes", "@ai-arkts/arkts-lsp", "--stdio"] ``` 首次使用时 npx 会自动从 npm 下载并缓存。 ### 全局安装 ```bash npm install -g @ai-arkts/arkts-lsp # 安装后直接用 arkts-lsp --stdio ``` ### 本地安装到项目 ```bash npm install --save-dev @ai-arkts/arkts-lsp ``` ## 跨平台支持 | 平台 | 默认安装路径 | 二进制名 | 说明 | |------|-------------|---------|------| | **Windows** | `D:\Application\Huawei\DevEco Studio`
`C:\Program Files\Huawei\DevEco Studio`
`%LOCALAPPDATA%\Huawei\DevecoStudio` | `node.exe`
`ohpm.bat` | 扁平目录结构 | | **macOS** | `/Applications/DevEco-Studio.app`
`~/Applications/DevEco-Studio.app` | `node`
`ohpm` | `.app` 包,自动处理 `Contents/` 层 | | **Linux`** | `/opt/DevEco-Studio`
`~/DevEco-Studio` | `node`
`ohpm` | 扁平目录结构 | ### macOS `.app` 包说明 DevEco Studio 在 macOS 上是一个 `.app` bundle,实际内容在 `Contents/` 下: ``` /Applications/DevEco-Studio.app └── Contents/ ├── plugins/openharmony/ace-server/out/index.js ← LSP 引擎 ├── sdk/default/sdk-pkg.json ← SDK └── tools/node/node ← 构建用 Node tools/hvigor/bin/hvigorw.js ← hvigor 构建工具 ``` 脚本自动检测 `.app` 后缀并补全 `Contents/`。用户设置 `DEVECO_HOME` 时只需填 `.app` 路径,无需手动加 `Contents`。 ## 初始化流程 ``` 1. 发现 DevEco Studio ↓ 2. 检验 SDK 完整性(检查 sdk/default/sdk-pkg.json) ↓ 3. 运行 hvigor --sync(10 分钟超时) 使用 DevEco 自带的 Node.js + hvigorw.js 生成 .hvigor/dependencyMap/dependencyMap.json5 ↓ 4. 启动中间层代理 (index.js) 传入项目根目录、SDK 路径、扩展路径 ↓ 5. 代理启动 ace-server 读取上一步生成的依赖映射 完成 LSP 初始化 ``` ## 环境变量 | 变量 | 必需 | 说明 | |------|------|------| | `DEVECO_HOME` | 推荐 | DevEco Studio 安装根目录。不设置时自动搜索默认路径 | ## 目录结构 ``` arkts-lsp-server/ ├── package.json ← npm 包定义(bin: arkts-lsp) ├── lsp-wrapper.js ← OpenCode 入口(跨平台、hvigor sync) ├── index.js ← 中间层代理(minified bundle,不动) ├── README.md ← 本文档 └── tests/ └── test-e2e.js ← E2E 测试套件 ``` ## 测试 ```bash node arkts-lsp-server/tests/test-e2e.js ``` 测试覆盖: - 平台检测逻辑(macOS/Linux/Windows) - DevEco Studio 路径自动搜索 - `Contents/` 层处理(macOS .app bundle) - 工具二进制名适配(node.exe vs node) - hvigor sync 参数验证 - LSP 协议初始化验证 - 错误处理 ## 常见问题 ### DevEco Studio not found 设置 `DEVECO_HOME` 环境变量指向 DevEco Studio 的安装目录。 ### hvigor sync 失败 确认项目是有效的 HarmonyOS 项目(有 `build-profile.json5` 和 `hvigorfile.ts`)。 hvigor sync 超时时间为 10 分钟,大型项目可能需要更长时间。 ### ace-server 不返回诊断 ace-server 需要 hvigor sync 生成的依赖映射。确保 sync 步骤成功完成。 如果项目已有 `.hvigor/dependencyMap/` 目录,说明 sync 已成功运行过。