UNPKG

1.02 kBJavaScriptView Raw
1'use strict';
2const getDocumentationUrl = require('./utils/get-documentation-url');
3
4const messageId = 'throw-new-error';
5const customError = /^(?:[A-Z][\da-z]*)*Error$/;
6
7const selector = [
8 'ThrowStatement',
9 '>',
10 'CallExpression.argument',
11 `:matches(${
12 [
13 // `throw FooError()`
14 [
15 '[callee.type="Identifier"]',
16 `[callee.name=/${customError.source}/]`
17 ],
18 // `throw lib.FooError()`
19 [
20 '[callee.type="MemberExpression"]',
21 '[callee.computed=false]',
22 '[callee.property.type="Identifier"]',
23 `[callee.property.name=/${customError.source}/]`
24 ]
25 ].map(selector => selector.join('')).join(', ')
26 })`
27].join('');
28
29const create = context => ({
30 [selector]: node => {
31 context.report({
32 node,
33 messageId,
34 fix: fixer => fixer.insertTextBefore(node, 'new ')
35 });
36 }
37});
38
39module.exports = {
40 create,
41 meta: {
42 type: 'suggestion',
43 docs: {
44 url: getDocumentationUrl(__filename)
45 },
46 messages: {
47 [messageId]: 'Use `new` when throwing an error.'
48 },
49 fixable: 'code'
50 }
51};