使用OXC加速你的鸿蒙项目

前端领域中最近一两年最热门的事情莫过于各种基于 Rust/Go 重写的工具或者框架。其中最有名的莫过于由 void zero 出品的 OXC,基于 Rust 实现的语法解析、代码格式化、代码规范检测工具。

A collection of high-performance JavaScript tools written in Rust.

其最具魅力的地方就在于兼容社区已有的工具链并且相较于其已有的工具链性能能够达到几倍甚至于几十倍的性能提升。

由于 ArkTS 本身是基于 TS 的超集,所以从理论上我们可以通过拓展 OXC 的实现来将 OXC 支持到 ArkTS 中,从而优化鸿蒙中的日常开发体验。

背景

鸿蒙的工程环境下整体基于 DevEco Studio 提供代码的开发、检测、编译等能力。其中有几个能力在现有的工具链中基本上无法使用:

  1. AST 解析能力。
  2. 代码格式化。支持格式化、但是自定义能力和性能以及脚手架工具支持性太差。
  3. 自定义 Lint 校验。完全不支持自定义校验。

以上能力无法满足的核心问题在于现有的工具链只支持 JS/TS 等官方语法,而 ArkTS 更偏向于方言,部分语法无法解析导致支持上存在一些问题。

因此基于 OXC 拓展对 ArkTS 支持成为了核心目标,在此基础之上提供与 oxfmt、oxlint 体验基本一致的上层工具链,OXC-ARK 由此诞生。

github.com/ohos-rs/oxc...

安装

目前支持 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 团队的工作。

相关推荐
坚果派·白晓明2 小时前
【鸿蒙PC三方库移植适配框架解读系列】第五篇:完整流程图与角色职责
c语言·c++·华为·harmonyos·鸿蒙
shaodong11234 小时前
HarmonyOS NEXT 数据持久化三剑客:Preferences、RelationalStore 与 KVDB 选型实战
华为·harmonyos
richard_yuu5 小时前
鸿蒙从零搭建参赛项目|心晴驿站:开发环境配置、技术选型与项目规范落地
华为·harmonyos
shaodong11235 小时前
鸿蒙自定义弹窗(CustomDialog)的 8 种封装姿势
华为·harmonyos
xmdy58666 小时前
Flutter + 开源鸿蒙跨端实战|基于空间地理信息的**城市全域智慧泊车调度与多维运维管理平台** Day1 项目架构基座与工程化环境搭建
flutter·开源·harmonyos
枫叶丹47 小时前
【HarmonyOS 6.0】状态栏扩展新特性:点击状态栏图标展开二级菜单的场景动效详解
开发语言·华为·harmonyos
想你依然心痛8 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与Face AR & Body AR的“灵犀筑境“——PC端沉浸式AR建筑空间评审系统
华为·ar·harmonyos·悬浮导航·沉浸光感
xmdy58669 小时前
Flutter+开源鸿蒙全域智慧泊车调度管理平台 Day4 订单全流程闭环+支付核验+会员权益+个人中心开发
flutter·开源·harmonyos
前端不太难9 小时前
鸿蒙 App 多端 UI 不一致的原因
ui·状态模式·harmonyos