我对 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/