eslint-plugin-spaces
Version:
Plugin to Eslint which add more spaces options
41 lines (40 loc) • 1.57 kB
JavaScript
import { ESLintUtils } from "@typescript-eslint/utils";
import findTokenIndex from "../utils/findTokenIndex.js";
import checkSpaces from "../utils/checkSpaces.js";
import { messages } from "../utils/CommonData.js";
const createRule = ESLintUtils.RuleCreator(() => `https://github.com/Evolveye/eslint`);
export default createRule({
name: `space-in-constructors`,
meta: {
type: `layout`,
docs: {
description: `Require or disallow spacing inside parentheses of constructor calls`,
},
fixable: `whitespace`,
schema: [
{
type: `string`,
enum: [`always`, `never`],
},
],
messages: messages.messagesForParens,
},
defaultOptions: [`always`],
create(context, [option]) {
const insertSpaces = option === `always`;
const sourceCode = context.sourceCode;
return {
NewExpression(node) {
const tokens = sourceCode.getTokens(node);
if (node.callee.type === `ClassExpression`)
return;
const firstParenIndex = node.callee.type === `MemberExpression`
? findTokenIndex(`(`, tokens, tokens.indexOf(sourceCode.getTokenAfter(node.callee)))
: findTokenIndex(`(`, tokens, 1);
if (firstParenIndex === undefined)
return;
checkSpaces({ context, code: sourceCode, insertSpaces }, tokens, node.arguments, firstParenIndex);
},
};
},
});