前端领域中最近一两年最热门的事情莫过于各种基于 Rust/Go 重写的工具或者框架。其中最有名的莫过于由 void zero 出品的 OXC,基于 Rust 实现的语法解析、代码格式化、代码规范检测工具。
A collection of high-performance JavaScript tools written in Rust.
其最具魅力的地方就在于兼容社区已有的工具链并且相较于其已有的工具链性能能够达到几倍甚至于几十倍的性能提升。
由于 ArkTS 本身是基于 TS 的超集,所以从理论上我们可以通过拓展 OXC 的实现来将 OXC 支持到 ArkTS 中,从而优化鸿蒙中的日常开发体验。
背景
鸿蒙的工程环境下整体基于 DevEco Studio 提供代码的开发、检测、编译等能力。其中有几个能力在现有的工具链中基本上无法使用:
- AST 解析能力。
- 代码格式化。支持格式化、但是自定义能力和性能以及脚手架工具支持性太差。
- 自定义 Lint 校验。完全不支持自定义校验。
以上能力无法满足的核心问题在于现有的工具链只支持 JS/TS 等官方语法,而 ArkTS 更偏向于方言,部分语法无法解析导致支持上存在一些问题。
因此基于 OXC 拓展对 ArkTS 支持成为了核心目标,在此基础之上提供与 oxfmt、oxlint 体验基本一致的上层工具链,OXC-ARK 由此诞生。
安装
目前支持 cargo 和 npm 安装,但是强烈建议使用 npm 进行安装。
bash
npm install @ohos-rs/oxk -g
安装完成之后可以通过oxk命令启动并且查看命令指南。

Format
Format 工具完全兼容 oxfmt 的配置文件以及配置项。通过 oxk format子命令启动。
bash
oxk format "**/*.{ets,mjs,js,ts,json5}" -t=10
支持 ETS、JSON5 等文件类型的格式化。
Lint
Lint 工具也是完全兼容 oxlint 的配置文件以及配置项,通过oxk lint子命令启动。
bash
oxk lint --config .oxlintrc.json "src/**/*.ets"
内建规则
由于 ArkTS 相较于 TS 存在较多的限制,因此 ArkTS 本身有很多代码限制,具体可以参考 从 TypeScript 到 ArkTS 的适配规则 。这部分规则目前已经基于 oxlint 的规范拓展实现为arkts插件内置到 lint 工具中,可以通过插件开启以及进行配置。
json
{
"plugins": ["arkts"],
"rules": {
"arkts/no-symbol": "error"
},
}
剩余的规则可以参考 ArkTS built-in lint 。

版本校验
另一个核心问题在于,目前 IDE 并没有提供 API 版本检测的能力,一个核心的场景:当我们配置的 App 最低支持 API 版本为 15,但是在代码中实际上调用到了 API20 提供的能力时,在开发阶段是无法发现的,只会在运行时出现。
因此我们提供了内置的 lint 规则来检测校验该问题,在配置文件中如下配置:
json
{
"plugins": ["arkts"],
"rules": {
"arkts/system-api-version": [
"error",
{
// 配置的App最低支持API版本
"minApiVersion": 11,
},
],
},
}
当我们代码中使用到高于 API15 的能力时,执行 lint 时将会出现报错。

注意:该能力目前仅依赖静态分析,对于太过于动态的逻辑无法进行调用链分析可能会导致分析不到。
总结
得益于社区开源项目的能力,我们能够快速的在新的生态中进行拓展和实现来丰富生态能力,我也寄希望于能够在此基础之上回馈到上游社区,在此感谢 OXC 团队的工作。