#javascript-parser #javascript #parser #ast #macro

bin+lib ecmascript

ECMAScript解析器的Rust实现

3个版本 (破坏性更新)

使用旧的Rust 2015

0.2.0 2018年9月29日
0.1.0 2018年6月30日
0.0.1 2018年6月28日

#2888解析实现

每月41次下载
2 个crate中使用(通过 atlas-coverage-core

MIT 许可证

6MB
56K SLoC

JavaScript 46K SLoC // 0.3% comments TypeScript 6.5K SLoC // 0.0% comments Rust 3.5K SLoC // 0.0% comments Python 39 SLoC // 0.0% comments Shell 17 SLoC // 0.1% comments

ecmascript Crates.io Crates.io docs 构建状态 codecov

这是一个Rust crate,可以帮助您处理ECMAScript 2017 v9.0。它提供了一个解析器和AST(抽象语法树)实现。我们还提供了一些宏来构建AST,以便您可以进行一些有趣的优化!

使用方法

将以下内容添加到您的 Cargo.toml

[dependencies]
ecmascript = "0.1"

然后将此内容放入您的crate根目录

extern crate ecmascript;

示例

此示例读取一个文件,解析它,然后打印出压缩版本。

文件读取来自std::fs::File 文档

extern crate ecmascript;

use std::fs::File;
use std::io::prelude::*;

fn main() -> std::io::Result<()> {
    // read foo.js
    let mut file = File::open("foo.js")?;
    let mut contents = String::new();
    file.read_to_string(&mut contents)?;

    // parse it
    let ast = ecmascript::parse(&contents).unwrap();
    println!("{:?}", ast);
}

API参考

文档托管在 docs.rs.

关于

ecmascript 用于解析JavaScript模块,并在其上执行一些操作。例如,将模块连接在一起,丑化变量名,格式化压缩代码等。

特性(计划中)

  • ECMAScript 2017 v9.0 支持(进行中)
    • 我们正在积极开发这个库,使其保持最新!
  • JSX 扩展支持(进行中)
    • JSX 旨在作为语言的一种附加扩展
  • AST 格式化打印器(进行中)
    • 这支持压缩选项,例如0空白
  • AST 重写规则(进行中)
    • 例如,常量折叠,转换为语言的老版本等。

测试

要测试一切,只需运行此命令

cargo test

或者要运行单个测试,

cargo test --test <test_name>

代码检查

要检查您的代码,请使用 clippy。一旦安装,只需运行一次即可!

cargo clippy

参考资料

许可证

MIT © Nick Dujay

依赖项

约2.4-3.5MB
约64K SLoC