|
|
- /**
- * @fileoverview Rule to disallow an empty pattern
- * @author Alberto Rodríguez
- */
- "use strict";
-
- const astUtils = require("./utils/ast-utils");
-
- //------------------------------------------------------------------------------
- // Rule Definition
- //------------------------------------------------------------------------------
-
- /** @type {import('../shared/types').Rule} */
- module.exports = {
- meta: {
- type: "problem",
-
- docs: {
- description: "Disallow empty destructuring patterns",
- recommended: true,
- url: "https://eslint.org/docs/latest/rules/no-empty-pattern"
- },
-
- schema: [
- {
- type: "object",
- properties: {
- allowObjectPatternsAsParameters: {
- type: "boolean",
- default: false
- }
- },
- additionalProperties: false
- }
- ],
-
- messages: {
- unexpected: "Unexpected empty {{type}} pattern."
- }
- },
-
- create(context) {
- const options = context.options[0] || {},
- allowObjectPatternsAsParameters = options.allowObjectPatternsAsParameters || false;
-
- return {
- ObjectPattern(node) {
-
- if (node.properties.length > 0) {
- return;
- }
-
- // Allow {} and {} = {} empty object patterns as parameters when allowObjectPatternsAsParameters is true
- if (
- allowObjectPatternsAsParameters &&
- (
- astUtils.isFunction(node.parent) ||
- (
- node.parent.type === "AssignmentPattern" &&
- astUtils.isFunction(node.parent.parent) &&
- node.parent.right.type === "ObjectExpression" &&
- node.parent.right.properties.length === 0
- )
- )
- ) {
- return;
- }
-
- context.report({ node, messageId: "unexpected", data: { type: "object" } });
- },
- ArrayPattern(node) {
- if (node.elements.length === 0) {
- context.report({ node, messageId: "unexpected", data: { type: "array" } });
- }
- }
- };
- }
- };
|