Skip to content

Million-mo/tree-sitter-arkts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

783 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ArkTS Tree-sitter 解析器

这是一个为华为ArkTS语言开发的Tree-sitter语法解析器,支持ArkTS语言的完整语法特性,包括装饰器、组件化语法、状态管理等核心特性。

🎯 解析能力持续提升

我们的 ArkTS 解析器在真实项目中的表现持续改进!在 hmosworld 大型生产项目的验证中,解析成功率从最初的 30% 跃升至 93.71%(175个文件中164个成功解析),实现了超过 3.1 倍的显著提升,达到生产可用级别!

📊 解析成功率发展历程

30.00% (初始版本) → 61.71% (v0.1.5) → 86.29% (v0.1.6) → 93.71% (v0.1.7 当前版本) 🎉

这一显著突破充分证明了本项目在处理实际代码复杂性方面的不断进化,已经能够支持绝大多数生产环境中的 ArkTS 代码,达到了生产可用级别。

📖 详细版本历史请查看: CHANGELOG.md

特性支持

✅ 已实现特性

核心语法

  • ✅ 完整 TypeScript 语法兼容
  • ✅ 装饰器语法(@Component@State@Prop@Link@Builder@Styles@Extend 等)
  • ✅ struct 组件定义与方法
  • build() 方法和 UI 描述语法
  • ✅ 泛型支持(类、函数、接口、类型参数)
  • ✅ 枚举声明(enum

类型系统

  • ✅ 接口和类型定义
  • ✅ 类型注解与函数类型
  • ✅ 类型断言(as
  • ✅ 对象类型(支持逗号/分号分隔符)

表达式与操作符

  • ✅ 箭头函数与函数表达式
  • ✅ 异步表达式(await
  • ✅ Nullish 合并操作符(??
  • ✅ 可选链操作符(?.
  • ✅ 修饰符链表达式(.modifier()

控制流

  • try/catch/finally/throw 异常处理
  • for/while/do-while 循环
  • break/continue 控制语句
  • if/else 条件分支

UI 组件

  • ✅ 基础组件(TextButtonImage 等)
  • ✅ 容器组件(ColumnRowStackFlex 等)
  • ✅ 响应式布局(GridRowGridCol
  • ForEach 循环渲染
  • ✅ 条件渲染

模块系统

  • ✅ 导入/导出声明
  • ✅ 动态 import() 表达式(ES2020+)- v0.1.7
    • 支持顶层调用:import('@ohos/module')
    • 支持 async/await:await import('./Module')
    • 支持 Promise 链式调用:import('./Module').then(...)
    • 支持动态路径变量:import(modulePath)
  • ✅ 装饰器函数导出(export @Builder function
  • ✅ 默认导出(export default interface/type/enum)- v0.1.8

🚧 开发中特性

  • 更多 UI 组件变体支持
  • 性能优化与增量解析
  • 语法高亮查询优化

📋 计划实现特性

  • 完整的语言服务器协议(LSP)集成
  • 更多语言绑定(C#、Java)
  • 代码格式化支持

安装使用

Node.js

npm install tree-sitter-arkts-open
const Parser = require('tree-sitter');
const ArkTS = require('tree-sitter-arkts');

const parser = new Parser();
parser.setLanguage(ArkTS);

const sourceCode = `
@Component
struct HelloWorld {
  @State message: string = 'Hello'
  
  build() {
    Text(this.message)
  }
}
`;

const tree = parser.parse(sourceCode);
console.log(tree.rootNode.toString());

Python

pip install tree-sitter-arkts-open
import tree_sitter_arkts as arkts
from tree_sitter import Language, Parser

ARKTS_LANGUAGE = Language(arkts.language())
parser = Parser(ARKTS_LANGUAGE)

source_code = '''
@Component  
struct MyComponent {
  build() {
    Text('Hello ArkTS')
  }
}
'''

tree = parser.parse(bytes(source_code, 'utf8'))
print(tree.root_node)

语法支持示例

组件定义

@Component
struct MyComponent {
  @State count: number = 0;
  @Prop title: string = 'Default';
  
  build() {
    Column() {
      Text(this.title)
      Button('Click')
        .onClick(() => {
          this.count++
        })
    }
  }
}

状态管理

@Component
struct StateExample {
  @State private items: string[] = [];
  @Link shared: boolean;
  
  build() {
    List() {
      ForEach(this.items, (item: string) => {
        ListItem() {
          Text(item)
        }
      })
    }
  }
}

开发

构建解析器

tree-sitter generate

测试

tree-sitter test

解析文件

tree-sitter parse example.ets

语言绑定

本解析器支持多种编程语言绑定:

  • Node.js: bindings/node/
  • Python: bindings/python/
  • Rust: bindings/rust/
  • Go: bindings/go/
  • Swift: bindings/swift/

贡献

欢迎提交Issues和Pull Requests!

开发环境

  • Tree-sitter CLI 0.25.3+
  • Node.js 18+
  • 支持的构建工具链

测试用例

测试用例位于 test/ 目录,包含:

  • 基础组件语法测试
  • 装饰器语法测试
  • 状态管理语法测试
  • 错误恢复测试

许可证

MIT License

相关链接

About

Arkts grammar for tree-sitter

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors