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

如何让Prettier实现ESLint的space-in-parens效果?能否自定义规则?

实现Prettier模拟ESLint space-in-parens规则的方案

首先得明确:Prettier的核心设计是强制统一的格式化风格,本身不支持自定义规则扩展,官方也因为这个理念,不会为这类个性化空格需求添加配置项(你找到的2017年讨论帖也能看出这点)。不过有两种可行的实现思路:

1. 编写自定义Prettier插件

Prettier支持通过插件扩展格式化逻辑,你可以写一个简单的插件来处理括号内的空格:

  • 借助Prettier的AST遍历能力,定位到函数声明、函数调用、表达式等包含括号的节点
  • 对括号的内容进行修改,在左括号后、右括号前插入空格

以下是一个极简的插件示例(基于Prettier的API):

module.exports = {
  parsers: {
    babel: require("prettier/parser-babel").parsers.babel,
  },
  printers: {
    babel: {
      ...require("prettier/parser-babel").printers.babel,
      print(path, options, print) {
        const node = path.getValue();
        // 处理函数声明的参数括号
        if (node.type === "FunctionDeclaration") {
          const paramsDoc = path.call(print, "params");
          return [
            "function ",
            node.id.name,
            "( ",
            paramsDoc,
            " )",
            path.call(print, "body"),
          ];
        }
        // 处理函数调用的括号
        if (node.type === "CallExpression") {
          const calleeDoc = path.call(print, "callee");
          const argsDoc = path.call(print, "arguments");
          return [calleeDoc, "( ", argsDoc, " )"];
        }
        // 其他节点沿用默认逻辑
        return require("prettier/parser-babel").printers.babel.print(
          path,
          options,
          print
        );
      },
    },
  },
};

将这个插件保存为prettier-plugin-space-in-parens.js,然后在项目的.prettierrc中配置使用:

{
  "plugins": ["./prettier-plugin-space-in-parens.js"]
}

2. 结合Prettier与ESLint自动修复

如果不想写插件,可以采用"先Prettier格式化,再ESLint修复"的流程:

  • 正常配置Prettier处理大部分格式问题
  • 在ESLint中启用space-in-parens规则,并设置为["error", "always"]
  • 在项目的脚本中,先执行prettier --write,再执行eslint --fix,这样ESLint会自动给括号内加上空格

这种方法不需要额外开发,适合快速实现需求,但需要确保两者的规则不会冲突(Prettier处理的规则ESLint最好关闭,避免重复处理)。

内容的提问来源于stack exchange,提问作者Vicente Echo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:22:06