]> git.proxmox.com Git - pve-eslint.git/blame - eslint/lib/rules/handle-callback-err.js
bump version to 8.41.0-3
[pve-eslint.git] / eslint / lib / rules / handle-callback-err.js
CommitLineData
eb39fafa
DC
1/**
2 * @fileoverview Ensure handling of errors when we know they exist.
3 * @author Jamund Ferguson
609c276f 4 * @deprecated in ESLint v7.0.0
eb39fafa
DC
5 */
6
7"use strict";
8
9//------------------------------------------------------------------------------
10// Rule Definition
11//------------------------------------------------------------------------------
12
34eeec05 13/** @type {import('../shared/types').Rule} */
eb39fafa
DC
14module.exports = {
15 meta: {
56c4a2cb
DC
16 deprecated: true,
17
ebb53d86 18 replacedBy: [],
56c4a2cb 19
eb39fafa
DC
20 type: "suggestion",
21
22 docs: {
8f9d1d4d 23 description: "Require error handling in callbacks",
eb39fafa 24 recommended: false,
f2a92ac6 25 url: "https://eslint.org/docs/latest/rules/handle-callback-err"
eb39fafa
DC
26 },
27
28 schema: [
29 {
30 type: "string"
31 }
32 ],
33 messages: {
34 expected: "Expected error to be handled."
35 }
36 },
37
38 create(context) {
39
40 const errorArgument = context.options[0] || "err";
f2a92ac6 41 const sourceCode = context.sourceCode;
eb39fafa
DC
42
43 /**
44 * Checks if the given argument should be interpreted as a regexp pattern.
45 * @param {string} stringToCheck The string which should be checked.
46 * @returns {boolean} Whether or not the string should be interpreted as a pattern.
47 */
48 function isPattern(stringToCheck) {
49 const firstChar = stringToCheck[0];
50
51 return firstChar === "^";
52 }
53
54 /**
55 * Checks if the given name matches the configured error argument.
56 * @param {string} name The name which should be compared.
57 * @returns {boolean} Whether or not the given name matches the configured error variable name.
58 */
59 function matchesConfiguredErrorName(name) {
60 if (isPattern(errorArgument)) {
61 const regexp = new RegExp(errorArgument, "u");
62
63 return regexp.test(name);
64 }
65 return name === errorArgument;
66 }
67
68 /**
69 * Get the parameters of a given function scope.
70 * @param {Object} scope The function scope.
71 * @returns {Array} All parameters of the given scope.
72 */
73 function getParameters(scope) {
74 return scope.variables.filter(variable => variable.defs[0] && variable.defs[0].type === "Parameter");
75 }
76
77 /**
78 * Check to see if we're handling the error object properly.
79 * @param {ASTNode} node The AST node to check.
80 * @returns {void}
81 */
82 function checkForError(node) {
f2a92ac6 83 const scope = sourceCode.getScope(node),
eb39fafa
DC
84 parameters = getParameters(scope),
85 firstParameter = parameters[0];
86
87 if (firstParameter && matchesConfiguredErrorName(firstParameter.name)) {
88 if (firstParameter.references.length === 0) {
89 context.report({ node, messageId: "expected" });
90 }
91 }
92 }
93
94 return {
95 FunctionDeclaration: checkForError,
96 FunctionExpression: checkForError,
97 ArrowFunctionExpression: checkForError
98 };
99
100 }
101};