You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:06:25