UNPKG

2.29 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const util_1 = require("../util");
4const utils_1 = require("@typescript-eslint/utils");
5exports.default = (0, util_1.createRule)({
6 name: 'default-param-last',
7 meta: {
8 type: 'suggestion',
9 docs: {
10 description: 'Enforce default parameters to be last',
11 recommended: false,
12 extendsBaseRule: true,
13 },
14 schema: [],
15 messages: {
16 shouldBeLast: 'Default parameters should be last.',
17 },
18 },
19 defaultOptions: [],
20 create(context) {
21 /**
22 * checks if node is optional parameter
23 * @param node the node to be evaluated
24 * @private
25 */
26 function isOptionalParam(node) {
27 return 'optional' in node && node.optional === true;
28 }
29 /**
30 * checks if node is plain parameter
31 * @param node the node to be evaluated
32 * @private
33 */
34 function isPlainParam(node) {
35 return !(node.type === utils_1.AST_NODE_TYPES.AssignmentPattern ||
36 node.type === utils_1.AST_NODE_TYPES.RestElement ||
37 isOptionalParam(node));
38 }
39 function checkDefaultParamLast(node) {
40 let hasSeenPlainParam = false;
41 for (let i = node.params.length - 1; i >= 0; i--) {
42 const current = node.params[i];
43 const param = current.type === utils_1.AST_NODE_TYPES.TSParameterProperty
44 ? current.parameter
45 : current;
46 if (isPlainParam(param)) {
47 hasSeenPlainParam = true;
48 continue;
49 }
50 if (hasSeenPlainParam &&
51 (isOptionalParam(param) ||
52 param.type === utils_1.AST_NODE_TYPES.AssignmentPattern)) {
53 context.report({ node: current, messageId: 'shouldBeLast' });
54 }
55 }
56 }
57 return {
58 ArrowFunctionExpression: checkDefaultParamLast,
59 FunctionDeclaration: checkDefaultParamLast,
60 FunctionExpression: checkDefaultParamLast,
61 };
62 },
63});
64//# sourceMappingURL=default-param-last.js.map
\No newline at end of file