如何配置Prettier阻止空数组作为参数时强制换行
Prettier配置实现函数尾参数与前序参数闭合括号同行
问题表现
目标格式化效果:
const ids = models.reduce( (prev: number[], curr: Model) => { if (this.value === curr.value) prev.push(curr.id); return prev; }, [] // 空数组与前一个箭头函数的闭合花括号同行 );
Prettier默认格式化效果(空数组被强制折到新行):
const ids = models.reduce( (prev: number[], curr: Model) => { if (this.value === curr.value) prev.push(curr.id); return prev; }, [] );
解决方法
适用于Prettier 3.1及以上版本
在项目的.prettierrc配置文件中添加如下配置:
{ "experimentalLayout": "allAtOnce" }
旧版本Prettier对函数参数的折行逻辑是硬编码的:只要参数列表中存在任意一个跨多行的参数,就会强制所有参数单独占一行。allAtOnce是3.1版本新增的实验性布局模式,替换了这套旧折行逻辑,开启后只要行剩余长度足够,短参数会自动保留在上一个参数的收尾行,不会被强制折到新行。
配置完成后重启编辑器,重新格式化即可达到目标效果,默认printWidth(80字符)完全足够容纳, []的长度,不需要额外调整行宽。
适用于Prettier 2.x版本
2.x系列版本没有提供对应配置项修改上述硬编码折行规则,只能通过忽略注释对指定代码段跳过格式化:
// prettier-ignore const ids = models.reduce( (prev: number[], curr: Model) => { if (this.value === curr.value) prev.push(curr.id); return prev; }, [] );
// prettier-ignore注释会让Prettier跳过紧接其后的第一个代码节点的格式化,放在const声明上方即可保留手写的格式。
内容的提问来源于stack exchange,提问作者Starfish
相关产品推荐
相关产品推荐

