如何在ESLint中兼顾链式方法缩进与装饰器成员对齐需求?
解决ESLint缩进规则同时兼容链式调用和装饰器对齐的问题
我懂你的痛点——既要让链式调用的成员方法保持清爽的缩进,又要让属性装饰器和对应的成员变量对齐,之前的配置顾此失彼确实闹心。
你当前的"indent": ["error", "tab", { "MemberExpression": 1 }]配置已经搞定了链式调用的缩进需求,但问题出在ESLint默认会对装饰器应用缩进检查,导致装饰器被错误缩进。要同时满足两种需求,只需要给indent规则添加忽略装饰器节点缩进检查的配置即可:
"indent": [ "error", "tab", { "MemberExpression": 1, "ignoredNodes": ["Decorator"] } ]
为什么这个配置能解决问题?
"MemberExpression": 1维持了你想要的链式调用缩进逻辑:类/实例后的成员方法(比如.findOne、.populate)会缩进1个tab,让链式代码的层级结构一目了然。"ignoredNodes": ["Decorator"]告诉ESLint跳过对装饰器节点的缩进检查,这样你就能让@prop()装饰器和下面的password: string;保持同一缩进级别,完全符合你的预期。
验证效果
调整配置后,你的两段示例代码都能顺利通过ESLint检查:
链式调用代码(保持正确缩进)
await PostModel .findOne({ author: user.user, _id: id, }) .populate('tickets', 'title status');
装饰器代码(保持对齐)
@prop({ type: String, required: true }) password: string;
如果之后你需要对类装饰器的缩进做特殊处理,还可以细化ignoredNodes的范围(比如用"Decorator > ClassDeclaration"来忽略类装饰器,保留属性装饰器的检查),但目前这个配置已经完美解决你提到的两个需求啦。
内容的提问来源于stack exchange,提问作者user776686
相关产品推荐
相关产品推荐

