UNPKG

1.27 kBJavaScriptView Raw
1'use strict';
2const getDocumentationUrl = require('./utils/get-documentation-url');
3const builtins = require('./utils/builtins');
4const isShadowed = require('./utils/is-shadowed');
5
6const messages = {
7 enforce: 'Use `new {{name}}()` instead of `{{name}}()`.',
8 disallow: 'Use `{{name}}()` instead of `new {{name}}()`.'
9};
10
11const enforceNew = new Set(builtins.enforceNew);
12const disallowNew = new Set(builtins.disallowNew);
13
14const create = context => {
15 return {
16 CallExpression: node => {
17 const {callee} = node;
18 const {name} = callee;
19
20 if (enforceNew.has(name) && !isShadowed(context.getScope(), callee)) {
21 context.report({
22 node,
23 messageId: 'enforce',
24 data: {name},
25 fix: fixer => fixer.insertTextBefore(node, 'new ')
26 });
27 }
28 },
29 NewExpression: node => {
30 const {callee} = node;
31 const {name} = callee;
32
33 if (disallowNew.has(name) && !isShadowed(context.getScope(), callee)) {
34 context.report({
35 node,
36 messageId: 'disallow',
37 data: {name},
38 fix: fixer => fixer.removeRange([
39 node.range[0],
40 node.callee.range[0]
41 ])
42 });
43 }
44 }
45 };
46};
47
48module.exports = {
49 create,
50 meta: {
51 type: 'suggestion',
52 docs: {
53 url: getDocumentationUrl(__filename)
54 },
55 fixable: 'code',
56 messages
57 }
58};