68 - 《手写 prettier 插件》

发布于 2022年3月6日

prettier 虽内置了大量规则,但遇到特殊场景,还是有自定义的需求。比如 umi-next 仓库中的 schema 定义,https://shrtm.nu/lL14,包含大量配置,而由于量大,我希望这里是基于字母排序的。但是 1)手动排序费精力 2)多人协作时很容易忽视。

这类工作交给工具是比较合适的。有个可选项是 eslint,因为 eslint 有 sort-keys 的规则。但是风格类的我更希望交给 prettier,eslint 管质量类的就好。然后翻了下 prettier 是否有相关规则和插件,没有找到,于是只能手写 prettier 插件了。

prettier 插件包含两部分,parser 和 printer。parser 用于将源码转成 ast,printer 用于做 ast 的风格化。所以写插件其实有不少选择,在 parser.preprocess、parser.parse、printer.print 都可以实现需求。

1、比如 prettier-plugin-organize-imports 是在 parser.preprocess 里做的 import 排序。preprocess 里拿到源码,然后通过任意方式处理,比如正则、Babel、Typescript Language Service 均可。prettier-plugin-organize-imports 用 TypeScript Language Service 做的,因为 ts 里正好有 organizeImport 的实现。

2、比如 prettie

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。