diff --git a/lib/rules/jsx-props-no-multi-spaces.js b/lib/rules/jsx-props-no-multi-spaces.js index bd36dc6822..8ce2cb48ff 100644 --- a/lib/rules/jsx-props-no-multi-spaces.js +++ b/lib/rules/jsx-props-no-multi-spaces.js @@ -55,12 +55,37 @@ module.exports = { } } + function containsGenericType(node) { + const containsTypeParams = typeof node.typeParameters !== 'undefined'; + return containsTypeParams && node.typeParameters.type === 'TSTypeParameterInstantiation'; + } + + function getGenericNode(node) { + const name = node.name; + if (containsGenericType(node)) { + const type = node.typeParameters; + + return Object.assign( + {}, + node, + { + range: [ + name.range[0], + type.range[1] + ] + } + ); + } + + return name; + } + return { JSXOpeningElement: function (node) { node.attributes.reduce((prev, prop) => { checkSpacing(prev, prop); return prop; - }, node.name); + }, getGenericNode(node)); } }; } diff --git a/tests/lib/rules/jsx-props-no-multi-spaces.js b/tests/lib/rules/jsx-props-no-multi-spaces.js index 3b3cbd7aa1..ce1869d3eb 100644 --- a/tests/lib/rules/jsx-props-no-multi-spaces.js +++ b/tests/lib/rules/jsx-props-no-multi-spaces.js @@ -11,6 +11,8 @@ const rule = require('../../../lib/rules/jsx-props-no-multi-spaces'); const RuleTester = require('eslint').RuleTester; +const parsers = require('../../helpers/parsers'); + const parserOptions = { ecmaVersion: 2018, sourceType: 'module', @@ -58,6 +60,9 @@ ruleTester.run('jsx-props-no-multi-spaces', rule, { ' foo {...test}', ' bar />' ].join('\n') + }, { + code: ' foo bar />', + parser: parsers.TYPESCRIPT_ESLINT }, { code: '' }, {