arkts-lsp-proxy 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -11
- package/dist/ace-server.d.ts +2 -1
- package/dist/ace-server.d.ts.map +1 -1
- package/dist/ace-server.js +60 -3
- package/dist/ace-server.js.map +1 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +12 -2
- package/dist/env.js.map +1 -1
- package/dist/hvigor.d.ts +25 -0
- package/dist/hvigor.d.ts.map +1 -1
- package/dist/hvigor.js +125 -17
- package/dist/hvigor.js.map +1 -1
- package/dist/index.js +15 -41
- package/dist/index.js.map +1 -1
- package/dist/project.d.ts +23 -4
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +331 -63
- package/dist/project.js.map +1 -1
- package/dist/proxy.d.ts +22 -5
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +774 -36
- package/dist/proxy.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -21,8 +21,8 @@ arkts-lsp-proxy (Node.js 进程)
|
|
|
21
21
|
├── 1. 发现 DevEco Studio(环境变量 / 自动搜索)
|
|
22
22
|
├── 2. 推导 SDK、ace-server、工具链路径
|
|
23
23
|
├── 3. 解析 build-profile.json5,构造 modules 参数
|
|
24
|
-
├── 4.
|
|
25
|
-
└── 5.
|
|
24
|
+
├── 4. 启动 ace-server,拦截 initialize 请求注入参数
|
|
25
|
+
└── 5. 后台按需运行 hvigor --sync(刷新依赖映射)
|
|
26
26
|
│
|
|
27
27
|
▼
|
|
28
28
|
ace-server (DevEco 官方语言服务)
|
|
@@ -33,7 +33,16 @@ arkts-lsp-proxy (Node.js 进程)
|
|
|
33
33
|
└── @Component/@State/@Prop 语义理解
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
代理不实现 ArkTS 语义分析,只做启动适配、消息转发、参数注入和必要的 LSP 结果归一化。比如 DevEco ace-server 会把 hover 内容包成私有 JSON 字符串,代理会转换成标准 Markdown hover,方便 Claude Code 直接消费类型信息。
|
|
37
|
+
|
|
38
|
+
## 当前支持的核心能力
|
|
39
|
+
|
|
40
|
+
- `textDocument/completion`
|
|
41
|
+
- `textDocument/hover`,包含类型信息和文档,已转换为标准 Markdown 内容
|
|
42
|
+
- `textDocument/definition`
|
|
43
|
+
- `textDocument/references`
|
|
44
|
+
- `textDocument/signatureHelp`
|
|
45
|
+
- diagnostics,来自 ace-server 的发布诊断
|
|
37
46
|
|
|
38
47
|
## 前置条件
|
|
39
48
|
|
|
@@ -77,15 +86,38 @@ export DEVECO_HOME=/opt/DevEco-Studio
|
|
|
77
86
|
|
|
78
87
|
## 使用
|
|
79
88
|
|
|
80
|
-
插件安装后,打开 `.ets` 文件时 LSP
|
|
89
|
+
插件安装后,打开 `.ets` 文件时 LSP 自动激活。代理会优先启动 LSP 并响应请求;`hvigor --sync` 只作为后台 metadata refresh,不会阻塞 LSP 初始化。
|
|
81
90
|
|
|
82
|
-
|
|
91
|
+
也可以手动运行(支持直接给出项目路径):
|
|
83
92
|
|
|
84
93
|
```bash
|
|
85
|
-
|
|
86
|
-
arkts-lsp-proxy
|
|
94
|
+
arkts-lsp-proxy --project-root /path/to/harmonyos/project
|
|
87
95
|
```
|
|
88
96
|
|
|
97
|
+
当从非鸿蒙目录启动时,默认不会立即校验项目;会等到 LSP 初始化请求到来后根据 `rootUri`/`workspaceFolders` 自动定位鸿蒙项目路径。
|
|
98
|
+
|
|
99
|
+
### Hvigor metadata sync
|
|
100
|
+
|
|
101
|
+
`arkts-lsp-proxy` 不会把 `hvigor --sync` 作为 LSP 启动前置条件。这个策略和 Claude Code 的其它 LSP 插件一致:插件负责启动 language server,工程 metadata / index refresh 属于 language server 内部增强流程。
|
|
102
|
+
|
|
103
|
+
环境变量:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# 默认:只有 metadata 缺失或过期时,后台运行 hvigor sync
|
|
107
|
+
export ARKTS_LSP_SYNC=auto
|
|
108
|
+
|
|
109
|
+
# 完全跳过 hvigor sync,启动最快
|
|
110
|
+
export ARKTS_LSP_SYNC=off
|
|
111
|
+
|
|
112
|
+
# 强制后台运行 hvigor sync,即使 metadata 看起来是新鲜的
|
|
113
|
+
export ARKTS_LSP_SYNC=force
|
|
114
|
+
|
|
115
|
+
# 后台 sync 超时,默认 15000
|
|
116
|
+
export ARKTS_LSP_SYNC_TIMEOUT_MS=15000
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
如果 sync 失败或超时,LSP 仍会继续运行。当前文件的 completion、hover、definition、references、diagnostics 应继续可用;跨模块、SDK、依赖相关结果可能降级,直到 metadata 刷新成功。
|
|
120
|
+
|
|
89
121
|
## 平台支持
|
|
90
122
|
|
|
91
123
|
| 平台 | 默认搜索路径 |
|
|
@@ -101,10 +133,10 @@ macOS 自动处理 `.app/Contents` 层,用户只需设置 `.app` 路径。
|
|
|
101
133
|
| 场景 | 行为 |
|
|
102
134
|
|------|------|
|
|
103
135
|
| DevEco Studio 未安装 | stderr 输出安装指引,exit(1) |
|
|
104
|
-
|
|
|
105
|
-
| hvigor sync
|
|
136
|
+
| 初始化请求未携带可定位路径或未检测到 `build-profile.json5` | 代理返回 LSP 初始化错误,需调整 `rootUri`/`workspaceFolders` |
|
|
137
|
+
| hvigor sync 失败或超时 | stderr 输出警告,LSP 继续以现有 metadata / degraded 模式运行 |
|
|
106
138
|
| ace-server 启动失败 | 输出错误信息,exit(1) |
|
|
107
|
-
| ace-server 运行时崩溃 |
|
|
139
|
+
| ace-server 运行时崩溃 | 代理将中断当前会话并回传错误 |
|
|
108
140
|
|
|
109
141
|
## 开发
|
|
110
142
|
|
|
@@ -128,7 +160,7 @@ npm link
|
|
|
128
160
|
src/
|
|
129
161
|
├── env.ts DevEco Studio 环境发现
|
|
130
162
|
├── project.ts HarmonyOS 项目解析 + findProjectRoot 向上搜索
|
|
131
|
-
├── hvigor.ts hvigor sync
|
|
163
|
+
├── hvigor.ts hvigor metadata 状态、sync 策略与后台执行
|
|
132
164
|
├── ace-server.ts ace-server 子进程生命周期管理(onExit 回调)
|
|
133
165
|
├── proxy.ts LSP 消息代理,拦截 initialize 注入参数
|
|
134
166
|
└── index.ts 入口,串联所有模块
|
|
@@ -138,6 +170,9 @@ plugins/
|
|
|
138
170
|
└── arkts-lsp/
|
|
139
171
|
├── .claude-plugin/
|
|
140
172
|
│ └── plugin.json 插件清单
|
|
173
|
+
├── hooks/
|
|
174
|
+
│ └── hooks.json SessionStart 自动安装 hook
|
|
175
|
+
├── package.json npm 依赖声明(供 hook 自动安装)
|
|
141
176
|
├── .lsp.json LSP 服务器配置
|
|
142
177
|
└── README.md 插件文档
|
|
143
178
|
test/
|
package/dist/ace-server.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { type ChildProcess } from 'child_process';
|
|
1
|
+
import { type ChildProcess } from 'node:child_process';
|
|
2
2
|
import type { DevEcoEnv } from './env';
|
|
3
3
|
export type ExitHandler = (code: number | null, signal: string | null) => void;
|
|
4
4
|
export interface AceServerHandle {
|
|
5
5
|
process: ChildProcess;
|
|
6
6
|
kill: () => void;
|
|
7
7
|
onExit: (handler: ExitHandler) => void;
|
|
8
|
+
dispose: () => void;
|
|
8
9
|
}
|
|
9
10
|
export declare function startAceServer(env: DevEcoEnv): AceServerHandle;
|
|
10
11
|
//# sourceMappingURL=ace-server.d.ts.map
|
package/dist/ace-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ace-server.d.ts","sourceRoot":"","sources":["../src/ace-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ace-server.d.ts","sourceRoot":"","sources":["../src/ace-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;AAE/E,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AASD,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,eAAe,CA6D9D"}
|
package/dist/ace-server.js
CHANGED
|
@@ -1,12 +1,64 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.startAceServer = startAceServer;
|
|
4
|
-
const
|
|
37
|
+
const node_child_process_1 = require("node:child_process");
|
|
38
|
+
const fs = __importStar(require("node:fs"));
|
|
39
|
+
const os = __importStar(require("node:os"));
|
|
40
|
+
const path = __importStar(require("node:path"));
|
|
41
|
+
function createLogDir() {
|
|
42
|
+
const baseDir = process.env.ARKTS_LSP_LOG_DIR || path.join(os.tmpdir(), 'arkts-lsp-proxy');
|
|
43
|
+
const logDir = path.join(baseDir, Date.now().toString());
|
|
44
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
45
|
+
return logDir;
|
|
46
|
+
}
|
|
5
47
|
function startAceServer(env) {
|
|
6
|
-
process.stderr.write(`[arkts-lsp] Starting ace-server: ${env.aceServerPath}\n`);
|
|
7
|
-
const
|
|
48
|
+
process.stderr.write(`[arkts-lsp] Starting ace-server (stdio): ${env.aceServerPath}\n`);
|
|
49
|
+
const logDir = createLogDir();
|
|
50
|
+
process.stderr.write(`[arkts-lsp] ace-server logs: ${logDir}\n`);
|
|
51
|
+
const child = (0, node_child_process_1.spawn)(env.nodeBin, [
|
|
52
|
+
'--max-old-space-size=8192',
|
|
53
|
+
'--expose-gc',
|
|
54
|
+
env.aceServerPath,
|
|
55
|
+
'--stdio',
|
|
56
|
+
`--logger-path=${logDir}`,
|
|
57
|
+
'--logger-level=INFO',
|
|
58
|
+
], {
|
|
8
59
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
9
60
|
windowsHide: true,
|
|
61
|
+
cwd: env.devecoHome,
|
|
10
62
|
env: {
|
|
11
63
|
...process.env,
|
|
12
64
|
DEVECO_SDK_HOME: env.sdkPath,
|
|
@@ -41,6 +93,11 @@ function startAceServer(env) {
|
|
|
41
93
|
onExit: (handler) => {
|
|
42
94
|
exitHandlers.push(handler);
|
|
43
95
|
},
|
|
96
|
+
dispose: () => {
|
|
97
|
+
if (child.exitCode === null) {
|
|
98
|
+
child.kill();
|
|
99
|
+
}
|
|
100
|
+
},
|
|
44
101
|
};
|
|
45
102
|
}
|
|
46
103
|
//# sourceMappingURL=ace-server.js.map
|
package/dist/ace-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ace-server.js","sourceRoot":"","sources":["../src/ace-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ace-server.js","sourceRoot":"","sources":["../src/ace-server.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAwED,wBAAgB,aAAa,IAAI,SAAS,GAAG,IAAI,CAgBhD"}
|
package/dist/env.js
CHANGED
|
@@ -57,6 +57,16 @@ const DEFAULT_PATHS = {
|
|
|
57
57
|
path.join(os.homedir(), 'AppData', 'Local', 'Huawei', 'DevecoStudio'),
|
|
58
58
|
],
|
|
59
59
|
};
|
|
60
|
+
const ENV_HINT_KEYS = ['ARKTS_DEVECO_HOME', 'ARKTS_DEVELOPER_PATH', 'DEVECO_HOME', 'DEVECO_PATH'];
|
|
61
|
+
function pickExplicitEnvHome() {
|
|
62
|
+
for (const key of ENV_HINT_KEYS) {
|
|
63
|
+
const candidate = process.env[key];
|
|
64
|
+
if (candidate && candidate.trim()) {
|
|
65
|
+
return candidate.trim();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
60
70
|
function resolveContentsPath(rawPath) {
|
|
61
71
|
const lower = rawPath.toLowerCase();
|
|
62
72
|
if (lower.endsWith('.app')) {
|
|
@@ -91,9 +101,9 @@ function validateDevEcoHome(candidate) {
|
|
|
91
101
|
};
|
|
92
102
|
}
|
|
93
103
|
function findDevEcoEnv() {
|
|
94
|
-
const envHome =
|
|
104
|
+
const envHome = pickExplicitEnvHome();
|
|
95
105
|
if (envHome) {
|
|
96
|
-
const result = validateDevEcoHome(envHome
|
|
106
|
+
const result = validateDevEcoHome(envHome);
|
|
97
107
|
if (result)
|
|
98
108
|
return result;
|
|
99
109
|
// When DEVECO_HOME is explicitly set but invalid, don't fall through to defaults
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|
package/dist/hvigor.d.ts
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
1
|
import type { DevEcoEnv } from './env';
|
|
2
|
+
export type HvigorMetadataStateName = 'fresh' | 'stale' | 'missing';
|
|
3
|
+
export type HvigorSyncMode = 'auto' | 'off' | 'force';
|
|
4
|
+
export type HvigorSyncStatus = 'skipped' | 'completed' | 'failed' | 'timeout';
|
|
5
|
+
export interface HvigorMetadataState {
|
|
6
|
+
state: HvigorMetadataStateName;
|
|
7
|
+
dependencyMapPath: string;
|
|
8
|
+
ageMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface HvigorSyncConfig {
|
|
11
|
+
mode: HvigorSyncMode;
|
|
12
|
+
timeoutMs: number;
|
|
13
|
+
metadataMaxAgeMs: number;
|
|
14
|
+
}
|
|
15
|
+
export interface HvigorSyncResult {
|
|
16
|
+
status: HvigorSyncStatus;
|
|
17
|
+
reason?: 'disabled' | 'fresh' | 'missing-tools' | 'exit-code' | 'spawn-error';
|
|
18
|
+
metadataBefore: HvigorMetadataState;
|
|
19
|
+
metadataAfter?: HvigorMetadataState;
|
|
20
|
+
elapsedMs: number;
|
|
21
|
+
exitCode?: number | null;
|
|
22
|
+
errorMessage?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function getHvigorMetadataState(projectRoot: string, maxAgeMs?: number): HvigorMetadataState;
|
|
25
|
+
export declare function parseHvigorSyncConfig(env?: NodeJS.ProcessEnv): HvigorSyncConfig;
|
|
26
|
+
export declare function runHvigorSyncAsync(env: DevEcoEnv, projectRoot: string, config?: HvigorSyncConfig): Promise<HvigorSyncResult>;
|
|
2
27
|
export declare function runHvigorSync(env: DevEcoEnv, projectRoot: string): boolean;
|
|
3
28
|
//# sourceMappingURL=hvigor.d.ts.map
|
package/dist/hvigor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hvigor.d.ts","sourceRoot":"","sources":["../src/hvigor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"hvigor.d.ts","sourceRoot":"","sources":["../src/hvigor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AACpE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AACtD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,eAAe,GAAG,WAAW,GAAG,aAAa,CAAC;IAC9E,cAAc,EAAE,mBAAmB,CAAC;IACpC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoBD,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,QAAQ,SAA8B,GACrC,mBAAmB,CAiBrB;AAED,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,CAY5F;AAYD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,mBAA0B,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAqF3B;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CA6C1E"}
|
package/dist/hvigor.js
CHANGED
|
@@ -33,11 +33,16 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getHvigorMetadataState = getHvigorMetadataState;
|
|
37
|
+
exports.parseHvigorSyncConfig = parseHvigorSyncConfig;
|
|
38
|
+
exports.runHvigorSyncAsync = runHvigorSyncAsync;
|
|
36
39
|
exports.runHvigorSync = runHvigorSync;
|
|
37
40
|
const path = __importStar(require("path"));
|
|
38
41
|
const fs = __importStar(require("fs"));
|
|
39
42
|
const child_process_1 = require("child_process");
|
|
40
|
-
const
|
|
43
|
+
const DEFAULT_METADATA_MAX_AGE_MS = 24 * 60 * 60 * 1000;
|
|
44
|
+
const DEFAULT_SYNC_TIMEOUT_MS = 15_000;
|
|
45
|
+
const LEGACY_HVIGOR_TIMEOUT_MS = 10 * 60 * 1000;
|
|
41
46
|
const HVIGOR_FLAGS = [
|
|
42
47
|
'--sync',
|
|
43
48
|
'-p', 'product=default',
|
|
@@ -47,37 +52,140 @@ const HVIGOR_FLAGS = [
|
|
|
47
52
|
'-p', 'enforce-ohpm=true',
|
|
48
53
|
'--daemonjs',
|
|
49
54
|
];
|
|
50
|
-
function
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
function getDependencyMapPath(projectRoot) {
|
|
56
|
+
return path.join(projectRoot, '.hvigor', 'dependencyMap', 'dependencyMap.json5');
|
|
57
|
+
}
|
|
58
|
+
function getHvigorMetadataState(projectRoot, maxAgeMs = DEFAULT_METADATA_MAX_AGE_MS) {
|
|
59
|
+
const dependencyMapPath = getDependencyMapPath(projectRoot);
|
|
60
|
+
if (!fs.existsSync(dependencyMapPath)) {
|
|
61
|
+
return { state: 'missing', dependencyMapPath };
|
|
62
|
+
}
|
|
54
63
|
try {
|
|
55
|
-
const stat = fs.statSync(
|
|
64
|
+
const stat = fs.statSync(dependencyMapPath);
|
|
56
65
|
const ageMs = Date.now() - stat.mtimeMs;
|
|
57
|
-
return
|
|
66
|
+
return {
|
|
67
|
+
state: ageMs < maxAgeMs ? 'fresh' : 'stale',
|
|
68
|
+
dependencyMapPath,
|
|
69
|
+
ageMs,
|
|
70
|
+
};
|
|
58
71
|
}
|
|
59
72
|
catch {
|
|
60
|
-
return
|
|
73
|
+
return { state: 'missing', dependencyMapPath };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function parseHvigorSyncConfig(env = process.env) {
|
|
77
|
+
const rawMode = env.ARKTS_LSP_SYNC;
|
|
78
|
+
const mode = rawMode === 'off' || rawMode === 'force' || rawMode === 'auto' ? rawMode : 'auto';
|
|
79
|
+
const parsedTimeout = Number(env.ARKTS_LSP_SYNC_TIMEOUT_MS);
|
|
80
|
+
const timeoutMs = Number.isFinite(parsedTimeout) && parsedTimeout > 0 ? parsedTimeout : DEFAULT_SYNC_TIMEOUT_MS;
|
|
81
|
+
return {
|
|
82
|
+
mode,
|
|
83
|
+
timeoutMs,
|
|
84
|
+
metadataMaxAgeMs: DEFAULT_METADATA_MAX_AGE_MS,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function getMissingToolsMessage(env) {
|
|
88
|
+
if (!fs.existsSync(env.nodeBin)) {
|
|
89
|
+
return `DevEco node not found at: ${env.nodeBin}`;
|
|
90
|
+
}
|
|
91
|
+
if (!fs.existsSync(env.hvigorPath)) {
|
|
92
|
+
return `hvigorw.js not found at: ${env.hvigorPath}`;
|
|
61
93
|
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
async function runHvigorSyncAsync(env, projectRoot, config = parseHvigorSyncConfig()) {
|
|
97
|
+
const startTime = Date.now();
|
|
98
|
+
const metadataBefore = getHvigorMetadataState(projectRoot, config.metadataMaxAgeMs);
|
|
99
|
+
if (config.mode === 'off') {
|
|
100
|
+
return { status: 'skipped', reason: 'disabled', metadataBefore, elapsedMs: 0 };
|
|
101
|
+
}
|
|
102
|
+
if (config.mode === 'auto' && metadataBefore.state === 'fresh') {
|
|
103
|
+
return { status: 'skipped', reason: 'fresh', metadataBefore, elapsedMs: 0 };
|
|
104
|
+
}
|
|
105
|
+
const missingToolsMessage = getMissingToolsMessage(env);
|
|
106
|
+
if (missingToolsMessage) {
|
|
107
|
+
return {
|
|
108
|
+
status: 'failed',
|
|
109
|
+
reason: 'missing-tools',
|
|
110
|
+
metadataBefore,
|
|
111
|
+
elapsedMs: Date.now() - startTime,
|
|
112
|
+
errorMessage: missingToolsMessage,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return new Promise((resolve) => {
|
|
116
|
+
let settled = false;
|
|
117
|
+
let stderr = '';
|
|
118
|
+
const child = (0, child_process_1.spawn)(env.nodeBin, [env.hvigorPath, ...HVIGOR_FLAGS], {
|
|
119
|
+
cwd: projectRoot,
|
|
120
|
+
windowsHide: true,
|
|
121
|
+
env: {
|
|
122
|
+
...process.env,
|
|
123
|
+
DEVECO_SDK_HOME: env.sdkPath,
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
function finish(result) {
|
|
127
|
+
if (settled) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
settled = true;
|
|
131
|
+
clearTimeout(timer);
|
|
132
|
+
resolve({
|
|
133
|
+
...result,
|
|
134
|
+
metadataBefore,
|
|
135
|
+
elapsedMs: Date.now() - startTime,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const timer = setTimeout(() => {
|
|
139
|
+
child.kill('SIGTERM');
|
|
140
|
+
finish({
|
|
141
|
+
status: 'timeout',
|
|
142
|
+
metadataAfter: getHvigorMetadataState(projectRoot, config.metadataMaxAgeMs),
|
|
143
|
+
errorMessage: `hvigor sync timed out after ${config.timeoutMs}ms`,
|
|
144
|
+
});
|
|
145
|
+
}, config.timeoutMs);
|
|
146
|
+
child.stderr?.on('data', (chunk) => {
|
|
147
|
+
stderr += chunk.toString();
|
|
148
|
+
});
|
|
149
|
+
child.on('error', (error) => {
|
|
150
|
+
finish({
|
|
151
|
+
status: 'failed',
|
|
152
|
+
reason: 'spawn-error',
|
|
153
|
+
metadataAfter: getHvigorMetadataState(projectRoot, config.metadataMaxAgeMs),
|
|
154
|
+
errorMessage: error.message,
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
child.on('exit', (code) => {
|
|
158
|
+
const metadataAfter = getHvigorMetadataState(projectRoot, config.metadataMaxAgeMs);
|
|
159
|
+
if (code === 0) {
|
|
160
|
+
finish({ status: 'completed', metadataAfter, exitCode: code });
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
finish({
|
|
164
|
+
status: 'failed',
|
|
165
|
+
reason: 'exit-code',
|
|
166
|
+
metadataAfter,
|
|
167
|
+
exitCode: code,
|
|
168
|
+
errorMessage: stderr.slice(-500),
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
});
|
|
62
172
|
}
|
|
63
173
|
function runHvigorSync(env, projectRoot) {
|
|
64
|
-
|
|
174
|
+
const metadata = getHvigorMetadataState(projectRoot);
|
|
175
|
+
if (metadata.state === 'fresh') {
|
|
65
176
|
process.stderr.write('[arkts-lsp] hvigor sync skipped (dependency map is fresh)\n');
|
|
66
177
|
return true;
|
|
67
178
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
if (!fs.existsSync(env.hvigorPath)) {
|
|
73
|
-
process.stderr.write(`[arkts-lsp] hvigorw.js not found at: ${env.hvigorPath}\n`);
|
|
179
|
+
const missingToolsMessage = getMissingToolsMessage(env);
|
|
180
|
+
if (missingToolsMessage) {
|
|
181
|
+
process.stderr.write(`[arkts-lsp] ${missingToolsMessage}\n`);
|
|
74
182
|
return false;
|
|
75
183
|
}
|
|
76
184
|
process.stderr.write('[arkts-lsp] hvigor sync starting...\n');
|
|
77
185
|
const startTime = Date.now();
|
|
78
186
|
const result = (0, child_process_1.spawnSync)(env.nodeBin, [env.hvigorPath, ...HVIGOR_FLAGS], {
|
|
79
187
|
cwd: projectRoot,
|
|
80
|
-
timeout:
|
|
188
|
+
timeout: LEGACY_HVIGOR_TIMEOUT_MS,
|
|
81
189
|
windowsHide: true,
|
|
82
190
|
encoding: 'utf8',
|
|
83
191
|
env: {
|
|
@@ -88,7 +196,7 @@ function runHvigorSync(env, projectRoot) {
|
|
|
88
196
|
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
89
197
|
if (result.error) {
|
|
90
198
|
if (result.error.code === 'ETIMEDOUT') {
|
|
91
|
-
process.stderr.write(`[arkts-lsp] hvigor sync timed out after ${
|
|
199
|
+
process.stderr.write(`[arkts-lsp] hvigor sync timed out after ${LEGACY_HVIGOR_TIMEOUT_MS / 1000}s\n`);
|
|
92
200
|
return false;
|
|
93
201
|
}
|
|
94
202
|
process.stderr.write(`[arkts-lsp] hvigor sync error: ${result.error.message}\n`);
|
package/dist/hvigor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hvigor.js","sourceRoot":"","sources":["../src/hvigor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"hvigor.js","sourceRoot":"","sources":["../src/hvigor.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,13 +2,21 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const env_1 = require("./env");
|
|
5
|
-
const project_1 = require("./project");
|
|
6
|
-
const hvigor_1 = require("./hvigor");
|
|
7
|
-
const ace_server_1 = require("./ace-server");
|
|
8
5
|
const proxy_1 = require("./proxy");
|
|
6
|
+
function parseProjectRootHint() {
|
|
7
|
+
const args = process.argv.slice(2);
|
|
8
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
9
|
+
if ((args[i] === '--project-root' || args[i] === '--root' || args[i] === '--cwd') && i + 1 < args.length) {
|
|
10
|
+
return args[i + 1];
|
|
11
|
+
}
|
|
12
|
+
if (args[i].startsWith('--project-root=')) {
|
|
13
|
+
return args[i].slice('--project-root='.length);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
9
18
|
function main() {
|
|
10
19
|
process.stderr.write('[arkts-lsp] Starting ArkTS LSP Proxy\n');
|
|
11
|
-
// Step 1: Find DevEco Studio
|
|
12
20
|
const env = (0, env_1.findDevEcoEnv)();
|
|
13
21
|
if (!env) {
|
|
14
22
|
process.stderr.write('==============================================\n');
|
|
@@ -19,38 +27,10 @@ function main() {
|
|
|
19
27
|
process.exit(1);
|
|
20
28
|
}
|
|
21
29
|
process.stderr.write(`[arkts-lsp] DevEco: ${env.devecoHome}\n`);
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
const projectRoot = (0, project_1.findProjectRoot)(cwd);
|
|
25
|
-
if (!projectRoot) {
|
|
26
|
-
process.stderr.write(`[arkts-lsp] No HarmonyOS project found at ${cwd}\n`);
|
|
27
|
-
process.stderr.write('[arkts-lsp] Expected build-profile.json5 in current or parent directory\n');
|
|
28
|
-
process.exit(1);
|
|
29
|
-
}
|
|
30
|
-
const project = (0, project_1.parseProject)(projectRoot, env.sdkPath);
|
|
31
|
-
if (!project) {
|
|
32
|
-
process.stderr.write(`[arkts-lsp] Failed to parse project at ${projectRoot}\n`);
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
process.stderr.write(`[arkts-lsp] Project: ${project.projectRoot}\n`);
|
|
36
|
-
process.stderr.write(`[arkts-lsp] Modules: ${project.modules.map(m => m.moduleName).join(', ')}\n`);
|
|
37
|
-
// Step 3: Run hvigor sync
|
|
38
|
-
const syncOk = (0, hvigor_1.runHvigorSync)(env, project.projectRoot);
|
|
39
|
-
if (!syncOk) {
|
|
40
|
-
process.stderr.write('[arkts-lsp] hvigor sync failed, continuing anyway\n');
|
|
41
|
-
}
|
|
42
|
-
// Step 4: Start ace-server
|
|
43
|
-
const ace = (0, ace_server_1.startAceServer)(env);
|
|
44
|
-
// Step 5: Set up LSP proxy
|
|
45
|
-
const proxy = (0, proxy_1.createProxy)(process.stdin, process.stdout, ace.process, {
|
|
46
|
-
rootUri: project.rootUri,
|
|
47
|
-
lspServerWorkspacePath: project.lspServerWorkspacePath,
|
|
48
|
-
modules: project.modules,
|
|
49
|
-
});
|
|
50
|
-
// Step 6: Handle cleanup
|
|
30
|
+
const projectRootHint = parseProjectRootHint();
|
|
31
|
+
const proxy = (0, proxy_1.createProxy)(process.stdin, process.stdout, env, { env, projectRootHint });
|
|
51
32
|
const cleanup = () => {
|
|
52
33
|
proxy.dispose();
|
|
53
|
-
ace.kill();
|
|
54
34
|
};
|
|
55
35
|
process.on('SIGINT', () => {
|
|
56
36
|
cleanup();
|
|
@@ -60,13 +40,7 @@ function main() {
|
|
|
60
40
|
cleanup();
|
|
61
41
|
process.exit(0);
|
|
62
42
|
});
|
|
63
|
-
process.stdin.on('end',
|
|
64
|
-
cleanup();
|
|
65
|
-
});
|
|
66
|
-
ace.onExit((code) => {
|
|
67
|
-
proxy.dispose();
|
|
68
|
-
process.exit(code ?? 1);
|
|
69
|
-
});
|
|
43
|
+
process.stdin.on('end', cleanup);
|
|
70
44
|
}
|
|
71
45
|
main();
|
|
72
46
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,+BAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,+BAAsC;AACtC,mCAAsC;AAEtC,SAAS,oBAAoB;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACzG,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,IAAI;IACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAE/D,MAAM,GAAG,GAAG,IAAA,mBAAa,GAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACjF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;IAEhE,MAAM,eAAe,GAAG,oBAAoB,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;IAExF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,IAAI,EAAE,CAAC"}
|