Sha256: d76f260057f8bfe9b2ba748230b9329dce90fc1c0d271a60dbedc6e300675f3e

Contents?: true

Size: 1.49 KB

Versions: 43

Compression:

Stored size: 1.49 KB

Contents

/**
 * @fileoverview Enforce no duplicate props
 * @author Markus Ånöstam
 */

'use strict';

const has = require('has');
const docsUrl = require('../util/docsUrl');

// ------------------------------------------------------------------------------
// Rule Definition
// ------------------------------------------------------------------------------

module.exports = {
  meta: {
    docs: {
      description: 'Enforce no duplicate props',
      category: 'Possible Errors',
      recommended: true,
      url: docsUrl('jsx-no-duplicate-props')
    },

    schema: [{
      type: 'object',
      properties: {
        ignoreCase: {
          type: 'boolean'
        }
      },
      additionalProperties: false
    }]
  },

  create: function (context) {
    const configuration = context.options[0] || {};
    const ignoreCase = configuration.ignoreCase || false;

    return {
      JSXOpeningElement: function (node) {
        const props = {};

        node.attributes.forEach(decl => {
          if (decl.type === 'JSXSpreadAttribute') {
            return;
          }

          let name = decl.name.name;

          if (typeof name !== 'string') {
            return;
          }

          if (ignoreCase) {
            name = name.toLowerCase();
          }

          if (has(props, name)) {
            context.report({
              node: decl,
              message: 'No duplicate props allowed'
            });
          } else {
            props[name] = 1;
          }
        });
      }
    };
  }
};

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
govuk_publishing_components-18.0.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.21.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.20.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.19.1 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.19.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.18.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.17.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.16.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.15.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.14.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.13.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.12.2 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.12.1 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.12.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.11.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.10.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.9.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.8.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.7.0 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js
govuk_publishing_components-17.6.1 node_modules/eslint-plugin-react/lib/rules/jsx-no-duplicate-props.js