Skip to content

Commit e73a692

Browse files
authored
Merge pull request #2256 from mateuszsokola/master
[fix] `jsx-props-no-multi-spaces`: support generic components (ts)
2 parents 8bd3837 + b5fc9bf commit e73a692

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

lib/rules/jsx-props-no-multi-spaces.js

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,37 @@ module.exports = {
5555
}
5656
}
5757

58+
function containsGenericType(node) {
59+
const containsTypeParams = typeof node.typeParameters !== 'undefined';
60+
return containsTypeParams && node.typeParameters.type === 'TSTypeParameterInstantiation';
61+
}
62+
63+
function getGenericNode(node) {
64+
const name = node.name;
65+
if (containsGenericType(node)) {
66+
const type = node.typeParameters;
67+
68+
return Object.assign(
69+
{},
70+
node,
71+
{
72+
range: [
73+
name.range[0],
74+
type.range[1]
75+
]
76+
}
77+
);
78+
}
79+
80+
return name;
81+
}
82+
5883
return {
5984
JSXOpeningElement: function (node) {
6085
node.attributes.reduce((prev, prop) => {
6186
checkSpacing(prev, prop);
6287
return prop;
63-
}, node.name);
88+
}, getGenericNode(node));
6489
}
6590
};
6691
}

tests/lib/rules/jsx-props-no-multi-spaces.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
const rule = require('../../../lib/rules/jsx-props-no-multi-spaces');
1212
const RuleTester = require('eslint').RuleTester;
1313

14+
const parsers = require('../../helpers/parsers');
15+
1416
const parserOptions = {
1517
ecmaVersion: 2018,
1618
sourceType: 'module',
@@ -58,6 +60,9 @@ ruleTester.run('jsx-props-no-multi-spaces', rule, {
5860
' foo {...test}',
5961
' bar />'
6062
].join('\n')
63+
}, {
64+
code: '<App<T> foo bar />',
65+
parser: parsers.TYPESCRIPT_ESLINT
6166
}, {
6267
code: '<Foo.Bar baz="quux" />'
6368
}, {

0 commit comments

Comments
 (0)