/** * @fileoverview A rule to disallow calls to the Object constructor * @author Matt DuVall * @deprecated in ESLint v8.50.0 */ 'use strict'; //------------------------------------------------------------------------------ // Requirements //------------------------------------------------------------------------------ const astUtils = require('./utils/ast-utils'); //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ /** @type {import('../types').Rule.RuleModule} */ module.exports = { meta: { type: 'suggestion', docs: { description: 'Disallow `Object` constructors', recommended: false, url: 'https://eslint.org/docs/latest/rules/no-new-object', }, deprecated: { message: 'The new rule flags more situations where object literal syntax can be used, and it does not report a problem when the `Object` constructor is invoked with an argument.', url: 'https://eslint.org/blog/2023/09/eslint-v8.50.0-released/', deprecatedSince: '8.50.0', availableUntil: null, replacedBy: [ { rule: { name: 'no-object-constructor', url: 'https://eslint.org/docs/rules/no-object-constructor', }, }, ], }, schema: [], messages: { preferLiteral: 'The object literal notation {} is preferable.', }, }, create(context) { const sourceCode = context.sourceCode; return { NewExpression(node) { const variable = astUtils.getVariableByName( sourceCode.getScope(node), node.callee.name ); if (variable && variable.identifiers.length > 0) { return; } if (node.callee.name === 'Object') { context.report({ node, messageId: 'preferLiteral', }); } }, }; }, };