338 - 《dprint 源码阅读笔记》
发布于 2023年9月1日
1、实现了一个 Environment 的 trait,所有和物理环境的交互都基于此。真实项目用 real_environment,测试项目用 test_environment(即 memo fs)。能想到的一个好处是后续如果要产出 wasm 跑在浏览器里时会非常容易。
2、插件基于 wasm 实现。实现上用 wasmer(https://github.com/wasmerio/wasmer)挂载和执行。以 dprint-plugin-typescript 为例,插件需要依赖 dprint-core 并实现 SyncPluginHandler 或 AsyncPluginHandler,通常我们能在 generation/generate.rs 里找到 ast to code 的实现。
3、错误处理是 anyhow + thiserror。错误通过 anyhow::Result 层层往上传,最终在 main 层通过 eprintln 打印 AppError 并退出。