如何用Prettier对Markdown文件中的多语言代码分别格式化?
问题描述
我需要格式化包含JS和Rust代码的Markdown文件:
- JS代码按Prettier默认/StandardJS/Node.js规范,用2空格缩进
- Rust代码按rustfmt规则,用4空格缩进
待格式化的Markdown示例:
# I am a markdown file How about that. Here is some ts ```js const sayHello = () => { console.log(`Hello world`) }
And some Rust:
fn sayHello = () => { println!({}, "Hello world") }
That's all.
当前`.prettierrc`配置: ```json { "overrides": [ { "files": [ "*.rs" ], "options": { "tabWidth": 4 } } ] }
运行npx prettier *md后JS代码格式化正常,但Rust代码未被正确处理。
解决方案
1. 安装必要依赖
Prettier核心不支持Rust格式化,需要借助官方插件调用rustfmt:
- 先确保系统已安装
rustfmt:rustup component add rustfmt - 安装Prettier的Rust插件:
npm install --save-dev @prettier/plugin-rust
2. 调整Prettier配置
原配置仅针对.rs文件生效,但Markdown中的Rust代码块属于.md文件,需通过language字段指定规则:
{ "tabWidth": 2, "overrides": [ { "language": "rust", "options": { "tabWidth": 4 } } ] }
- 全局
tabWidth:2满足JS代码的缩进要求 - 针对
rust语言(包括单独.rs文件和Markdown中的Rust代码块)设置tabWidth:4
3. 修正Rust代码语法(关键)
示例中的Rust代码存在语法错误(比如用了JS风格的箭头函数、错误的println!参数顺序),rustfmt只能格式化语法正确的代码。修正后的代码如下:
fn say_hello() { println!("Hello world"); }
4. 重新运行格式化
npx prettier --write *.md
内容的提问来源于stack exchange,提问作者mikemaccana
相关产品推荐
相关产品推荐

