12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 'use strict';
- const {matches} = require('./selectors/index.js');
- const {switchCallExpressionToNewExpression} = require('./fix/index.js');
- const messageId = 'throw-new-error';
- const messages = {
- [messageId]: 'Use `new` when throwing an error.',
- };
- const customError = /^(?:[A-Z][\da-z]*)*Error$/;
- const selector = [
- 'ThrowStatement',
- ' > ',
- 'CallExpression.argument',
- matches([
- // `throw FooError()`
- [
- '[callee.type="Identifier"]',
- `[callee.name=/${customError.source}/]`,
- ].join(''),
- // `throw lib.FooError()`
- [
- '[callee.type="MemberExpression"]',
- '[callee.computed!=true]',
- '[callee.property.type="Identifier"]',
- `[callee.property.name=/${customError.source}/]`,
- ].join(''),
- ]),
- ].join('');
- /** @param {import('eslint').Rule.RuleContext} context */
- const create = context => ({
- [selector]: node => ({
- node,
- messageId,
- fix: fixer => switchCallExpressionToNewExpression(node, context.getSourceCode(), fixer),
- }),
- });
- /** @type {import('eslint').Rule.RuleModule} */
- module.exports = {
- create,
- meta: {
- type: 'suggestion',
- docs: {
- description: 'Require `new` when throwing an error.',
- },
- fixable: 'code',
- messages,
- },
- };
|