Mu-*_*sai 5 eslint eslintrc typescript-eslint
我对 ESLint 还很陌生,我找不到满足我要求的规则。考虑以下代码:
if(someCondition)i++;
Run Code Online (Sandbox Code Playgroud)
我想在括号后强制使用一个空格,这样我们就应该有以下内容:
if(someCondition) i++;
Run Code Online (Sandbox Code Playgroud)
但我就是找不到这样的规则;它不是space-before-function-paren
(显然),keyword-spacing
(只影响 后面的间距if
)或space-before-blocks
(因为这是单行 if,所以没有块)。请帮忙。谢谢!
PS 同样的规则也应该适用于单行 while。
由于 ESLint 没有这样的规则,并且政策说他们将不再考虑此类提案,所以我最终编写了自己的规则,如下所示:
module.exports = {
"single-line-control-statement-spacing": {
meta: {
type: "layout",
docs: {
description: "Enforces consistent spacing in single-line control statements.",
},
fixable: "whitespace",
},
create(context) {
const sourceCode = context.getSourceCode();
function checkSpaceAfter(node) {
if(!node) return;
if(node.loc.start.line !== node.loc.end.line) return; // Not single-line
const body = node.consequent || node.body;
const token = sourceCode.getFirstToken(body);
const prev = sourceCode.getTokenBefore(token);
const start = prev.range[1];
const end = token.range[0];
if(start === end) {
context.report({
loc: {
start: sourceCode.getLocFromIndex(start),
end: sourceCode.getLocFromIndex(end),
},
message: "There should be a single space after control statements.",
fix(fixer) {
return fixer.replaceTextRange([start, end], " ");
},
});
}
}
return {
IfStatement: checkSpaceAfter,
DoWhileStatement: checkSpaceAfter,
ForInStatement: checkSpaceAfter,
ForOfStatement: checkSpaceAfter,
ForStatement: checkSpaceAfter,
WhileStatement: checkSpaceAfter,
};
},
},
};
Run Code Online (Sandbox Code Playgroud)
然后,我使用eslint-plugin-local-rules在我的项目中启用此规则。
归档时间: |
|
查看次数: |
1062 次 |
最近记录: |