Skip to content

Commit 1a8af56

Browse files
committed
Revert old implementation and replace by configurable flowVersion
1 parent deb3b61 commit 1a8af56

File tree

3 files changed

+54
-10
lines changed

3 files changed

+54
-10
lines changed

lib/rules/prop-types.js

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const has = require('has');
1111
const Components = require('../util/Components');
1212
const variable = require('../util/variable');
1313
const annotations = require('../util/annotations');
14+
const flowVersionUtil = require('../util/flowVersion');
1415

1516
// ------------------------------------------------------------------------------
1617
// Constants
@@ -173,7 +174,7 @@ module.exports = {
173174
*/
174175
function isSuperTypeParameterPropsDeclaration(node) {
175176
if (node && node.type === 'ClassDeclaration') {
176-
if (node.superTypeParameters && node.superTypeParameters.params.length >= 2) {
177+
if (node.superTypeParameters && node.superTypeParameters.params.length) {
177178
return true;
178179
}
179180
}
@@ -857,7 +858,13 @@ module.exports = {
857858
* @returns {ASTNode} The resolved type annotation for the node.
858859
*/
859860
function resolveSuperParameterPropsType(node) {
860-
let annotation = node.superTypeParameters.params[1];
861+
let annotation;
862+
if (flowVersionUtil.test(context, '0.53.0')) {
863+
annotation = node.superTypeParameters.params[0];
864+
} else {
865+
annotation = node.superTypeParameters.params[1];
866+
}
867+
861868
while (annotation && (annotation.type === 'TypeAnnotation' || annotation.type === 'NullableTypeAnnotation')) {
862869
annotation = annotation.typeAnnotation;
863870
}
@@ -917,12 +924,6 @@ module.exports = {
917924
}
918925
},
919926

920-
TypeParameterInstantiation: function(node) {
921-
if (node.params && node.params[0].type === 'GenericTypeAnnotation') {
922-
markPropTypesAsDeclared(node, resolveTypeAnnotation(node.params[0]));
923-
}
924-
},
925-
926927
VariableDeclarator: function(node) {
927928
const destructuring = node.init && node.id && node.id.type === 'ObjectPattern';
928929
// let {props: {firstname}} = this

lib/util/flowVersion.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @fileoverview Utility functions for Flow version configuration
3+
*/
4+
'use strict';
5+
6+
function getFromContext(context) {
7+
let confVer = '999.999.999';
8+
// .eslintrc shared settings (http://eslint.org/docs/user-guide/configuring#adding-shared-settings)
9+
if (context.settings.react && context.settings.react.flowVersion) {
10+
confVer = context.settings.react.flowVersion;
11+
}
12+
confVer = /^[0-9]+\.[0-9]+$/.test(confVer) ? `${confVer}.0` : confVer;
13+
return confVer.split('.').map(part => Number(part));
14+
}
15+
16+
function test(context, methodVer) {
17+
const confVer = getFromContext(context);
18+
methodVer = methodVer.split('.').map(part => Number(part));
19+
const higherMajor = methodVer[0] < confVer[0];
20+
const higherMinor = methodVer[0] === confVer[0] && methodVer[1] < confVer[1];
21+
const higherOrEqualPatch = methodVer[0] === confVer[0] && methodVer[1] === confVer[1] && methodVer[2] <= confVer[2];
22+
23+
return higherMajor || higherMinor || higherOrEqualPatch;
24+
}
25+
26+
module.exports = {
27+
test: test
28+
};

tests/lib/rules/prop-types.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1486,6 +1486,7 @@ ruleTester.run('prop-types', rule, {
14861486
' }',
14871487
'}'
14881488
].join('\n'),
1489+
settings: {react: {flowVersion: '0.52.0'}},
14891490
parser: 'babel-eslint'
14901491
}, {
14911492
code: [
@@ -1499,6 +1500,7 @@ ruleTester.run('prop-types', rule, {
14991500
' }',
15001501
'}'
15011502
].join('\n'),
1503+
settings: {react: {flowVersion: '0.52.0'}},
15021504
parser: 'babel-eslint'
15031505
}, {
15041506
code: [
@@ -1514,6 +1516,7 @@ ruleTester.run('prop-types', rule, {
15141516
' }',
15151517
'}'
15161518
].join('\n'),
1519+
settings: {react: {flowVersion: '0.52.0'}},
15171520
parser: 'babel-eslint'
15181521
}, {
15191522
code: [
@@ -1534,6 +1537,7 @@ ruleTester.run('prop-types', rule, {
15341537
' }',
15351538
'}'
15361539
].join('\n'),
1540+
settings: {react: {flowVersion: '0.52.0'}},
15371541
parser: 'babel-eslint'
15381542
}, {
15391543
code: [
@@ -1546,6 +1550,7 @@ ruleTester.run('prop-types', rule, {
15461550
' }',
15471551
'}'
15481552
].join('\n'),
1553+
settings: {react: {flowVersion: '0.52.0'}},
15491554
parser: 'babel-eslint'
15501555
}, {
15511556
code: [
@@ -1556,6 +1561,7 @@ ruleTester.run('prop-types', rule, {
15561561
' }',
15571562
'}'
15581563
].join('\n'),
1564+
settings: {react: {flowVersion: '0.52.0'}},
15591565
parser: 'babel-eslint'
15601566
},
15611567
{
@@ -1570,9 +1576,9 @@ ruleTester.run('prop-types', rule, {
15701576
}
15711577
}
15721578
`,
1579+
settings: {react: {flowVersion: '0.53.0'}},
15731580
parser: 'babel-eslint'
1574-
},
1575-
{
1581+
}, {
15761582
code: `
15771583
type FancyProps = {
15781584
foo: string,
@@ -1584,6 +1590,7 @@ ruleTester.run('prop-types', rule, {
15841590
}
15851591
}
15861592
`,
1593+
settings: {react: {flowVersion: '0.53.0'}},
15871594
parser: 'babel-eslint'
15881595
},
15891596
// issue #1288
@@ -2865,6 +2872,7 @@ ruleTester.run('prop-types', rule, {
28652872
column: 35,
28662873
type: 'Identifier'
28672874
}],
2875+
settings: {react: {flowVersion: '0.52.0'}},
28682876
parser: 'babel-eslint'
28692877
}, {
28702878
code: [
@@ -2884,6 +2892,7 @@ ruleTester.run('prop-types', rule, {
28842892
column: 13,
28852893
type: 'Property'
28862894
}],
2895+
settings: {react: {flowVersion: '0.52.0'}},
28872896
parser: 'babel-eslint'
28882897
}, {
28892898
code: [
@@ -2905,6 +2914,7 @@ ruleTester.run('prop-types', rule, {
29052914
column: 7,
29062915
type: 'Property'
29072916
}],
2917+
settings: {react: {flowVersion: '0.52.0'}},
29082918
parser: 'babel-eslint'
29092919
}, {
29102920
code: [
@@ -2921,6 +2931,7 @@ ruleTester.run('prop-types', rule, {
29212931
column: 40,
29222932
type: 'Identifier'
29232933
}],
2934+
settings: {react: {flowVersion: '0.52.0'}},
29242935
parser: 'babel-eslint'
29252936
}, {
29262937
code: [
@@ -2937,6 +2948,7 @@ ruleTester.run('prop-types', rule, {
29372948
column: 42,
29382949
type: 'Identifier'
29392950
}],
2951+
settings: {react: {flowVersion: '0.52.0'}},
29402952
parser: 'babel-eslint'
29412953
}, {
29422954
code: [
@@ -2955,6 +2967,7 @@ ruleTester.run('prop-types', rule, {
29552967
column: 42,
29562968
type: 'Identifier'
29572969
}],
2970+
settings: {react: {flowVersion: '0.52.0'}},
29582971
parser: 'babel-eslint'
29592972
}, {
29602973
code: `
@@ -2974,6 +2987,7 @@ ruleTester.run('prop-types', rule, {
29742987
column: 37,
29752988
type: 'Identifier'
29762989
}],
2990+
settings: {react: {flowVersion: '0.53.0'}},
29772991
parser: 'babel-eslint'
29782992
}, {
29792993
code: `
@@ -2993,6 +3007,7 @@ ruleTester.run('prop-types', rule, {
29933007
column: 37,
29943008
type: 'Identifier'
29953009
}],
3010+
settings: {react: {flowVersion: '0.53.0'}},
29963011
parser: 'babel-eslint'
29973012
}
29983013
]

0 commit comments

Comments
 (0)