rust - 是否可以使用 Rust 生成 jsx AST?

标签 rust jsx swc-compiler

我对 Rust 不熟悉,尝试使用 SWC 来替换 babel

但是我发现@swc/core没有提供生成代码AST的api,所以我想用rust写一个,是否可以生成jsx ast?

最佳答案

这是一个很好的起点:https://github.com/swc-project/swc/blob/main/crates/swc_ecma_parser/examples/typescript.rs 但链接可能会无效,所以我还粘贴了代码:

use swc_common::{
    self,
    errors::{ColorConfig, Handler},
    sync::Lrc,
    FileName, SourceMap,
};
use swc_ecma_parser::{lexer::Lexer, Capturing, Parser, StringInput, Syntax};

fn main() {
    let cm: Lrc<SourceMap> = Default::default();
    let handler = Handler::with_tty_emitter(ColorConfig::Auto, true, false, Some(cm.clone()));

    // Real usage
    // let fm = cm
    //     .load_file(Path::new("test.js"))
    //     .expect("failed to load test.js");

    let fm = cm.new_source_file(
        FileName::Custom("test.js".into()),
        "interface Foo {}".into(),
    );

    let lexer = Lexer::new(
        Syntax::Typescript(Default::default()),
        Default::default(),
        StringInput::from(&*fm),
        None,
    );

    let capturing = Capturing::new(lexer);

    let mut parser = Parser::new_from(capturing);

    for e in parser.take_errors() {
        e.into_diagnostic(&handler).emit();
    }

    let _module = parser
        .parse_typescript_module()
        .map_err(|e| e.into_diagnostic(&handler).emit())
        .expect("Failed to parse module.");

    println!("Tokens: {:?}", parser.input().take());
}

我从来没有真正工作或关心过这个。只需 5 分钟浏览存储库,所有资源都在那里,但如果您是 Rust 新手,我建议 the rust book首先。

关于rust - 是否可以使用 Rust 生成 jsx AST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71572548/

相关文章:

rust - 如何指定方法参数的生命周期必须比自身的生命周期长?

rust - 关于可变内部引用的 Rust 借用规则是什么?

javascript - Next.js 如何将 SWC 编译器与 Material UI 和 swc-plugin-transform-import 一起使用

swc-compiler - 在.ts中导入JSON文件并使用SWC进行编译

javascript - 使用 JavaScript 的 SWC : How to handle CSS imports and how to absolute imports?

rust - 抽象引用容器(Rc、Arc、Box、...)

callback - 奇怪的回调调用语法(需要解释)

node.js - 是否可以使用 JSX 进行 React 工作,无需 Node 服务器并使用 create-react-app

vue.js - Vue3 + Vite 使用 JSX 的推荐方式

javascript - 你如何在 JSX 模板文字中取消转义 '\'?