Skip to content

Commit d51bc61

Browse files
committed
[Fix] restore eslint < 4.15 compatibility
`messageId` wasn't added until v4.15, and we should never have added it unconditionally. This commit conditionally uses `messageId` only when supported.
1 parent 9799131 commit d51bc61

File tree

99 files changed

+987
-860
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+987
-860
lines changed

.github/workflows/node-4+.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ jobs:
3030
- 6
3131
- 5
3232
- 4
33+
- 4.14 # last version without messageId
34+
- 3
3335
babel-eslint:
3436
- 10
3537
- 9

lib/rules/boolean-prop-naming.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ const Components = require('../util/Components');
99
const propsUtil = require('../util/props');
1010
const docsUrl = require('../util/docsUrl');
1111
const propWrapperUtil = require('../util/propWrapper');
12+
const report = require('../util/report');
1213

1314
// ------------------------------------------------------------------------------
1415
// Rule Definition
1516
// ------------------------------------------------------------------------------
1617

17-
// Predefine message for use in context.report conditional.
18-
// messageId will still be usable in tests.
19-
const PATTERN_MISMATCH_MSG = 'Prop name ({{propName}}) doesn\'t match rule ({{pattern}})';
18+
const messages = {
19+
patternMismatch: 'Prop name ({{propName}}) doesn\'t match rule ({{pattern}})'
20+
};
2021

2122
module.exports = {
2223
meta: {
@@ -27,9 +28,7 @@ module.exports = {
2728
url: docsUrl('boolean-prop-naming')
2829
},
2930

30-
messages: {
31-
patternMismatch: PATTERN_MISMATCH_MSG
32-
},
31+
messages,
3332

3433
schema: [{
3534
additionalProperties: false,
@@ -211,14 +210,14 @@ module.exports = {
211210
function reportInvalidNaming(component) {
212211
component.invalidProps.forEach((propNode) => {
213212
const propName = getPropName(propNode);
214-
context.report(Object.assign({
213+
report(context, config.message || messages.patternMismatch, !config.message && 'patternMismatch', {
215214
node: propNode,
216215
data: {
217216
component: propName,
218217
propName,
219218
pattern: config.rule
220219
}
221-
}, config.message ? {message: config.message} : {messageId: 'patternMismatch'}));
220+
});
222221
});
223222
}
224223

lib/rules/button-has-type.js

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const getProp = require('jsx-ast-utils/getProp');
99
const getLiteralPropValue = require('jsx-ast-utils/getLiteralPropValue');
1010
const docsUrl = require('../util/docsUrl');
1111
const isCreateElement = require('../util/isCreateElement');
12+
const report = require('../util/report');
1213

1314
// ------------------------------------------------------------------------------
1415
// Rule Definition
@@ -20,6 +21,13 @@ const optionDefaults = {
2021
reset: true
2122
};
2223

24+
const messages = {
25+
missingType: 'Missing an explicit type attribute for button',
26+
complexType: 'The button type attribute must be specified by a static string or a trivial ternary expression',
27+
invalidValue: '"{{value}}" is an invalid value for button type attribute',
28+
forbiddenValue: '"{{value}}" is an invalid value for button type attribute'
29+
};
30+
2331
module.exports = {
2432
meta: {
2533
docs: {
@@ -29,12 +37,7 @@ module.exports = {
2937
url: docsUrl('button-has-type')
3038
},
3139

32-
messages: {
33-
missingType: 'Missing an explicit type attribute for button',
34-
complexType: 'The button type attribute must be specified by a static string or a trivial ternary expression',
35-
invalidValue: '"{{value}}" is an invalid value for button type attribute',
36-
forbiddenValue: '"{{value}}" is an invalid value for button type attribute'
37-
},
40+
messages,
3841

3942
schema: [{
4043
type: 'object',
@@ -60,32 +63,28 @@ module.exports = {
6063
const configuration = Object.assign({}, optionDefaults, context.options[0]);
6164

6265
function reportMissing(node) {
63-
context.report({
64-
node,
65-
messageId: 'missingType'
66+
report(context, messages.missingType, 'missingType', {
67+
node
6668
});
6769
}
6870

6971
function reportComplex(node) {
70-
context.report({
71-
node,
72-
messageId: 'complexType'
72+
report(context, messages.complexType, 'complexType', {
73+
node
7374
});
7475
}
7576

7677
function checkValue(node, value) {
7778
if (!(value in configuration)) {
78-
context.report({
79+
report(context, messages.invalidValue, 'invalidValue', {
7980
node,
80-
messageId: 'invalidValue',
8181
data: {
8282
value
8383
}
8484
});
8585
} else if (!configuration[value]) {
86-
context.report({
86+
report(context, messages.forbiddenValue, 'forbiddenValue', {
8787
node,
88-
messageId: 'forbiddenValue',
8988
data: {
9089
value
9190
}

lib/rules/default-props-match-prop-types.js

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,17 @@
88

99
const Components = require('../util/Components');
1010
const docsUrl = require('../util/docsUrl');
11+
const report = require('../util/report');
1112

1213
// ------------------------------------------------------------------------------
1314
// Rule Definition
1415
// ------------------------------------------------------------------------------
1516

17+
const messages = {
18+
requiredHasDefault: 'defaultProp "{{name}}" defined for isRequired propType.',
19+
defaultHasNoType: 'defaultProp "{{name}}" has no corresponding propTypes declaration.'
20+
};
21+
1622
module.exports = {
1723
meta: {
1824
docs: {
@@ -21,10 +27,7 @@ module.exports = {
2127
url: docsUrl('default-props-match-prop-types')
2228
},
2329

24-
messages: {
25-
requiredHasDefault: 'defaultProp "{{name}}" defined for isRequired propType.',
26-
defaultHasNoType: 'defaultProp "{{name}}" has no corresponding propTypes declaration.'
27-
},
30+
messages,
2831

2932
schema: [{
3033
type: 'object',
@@ -65,17 +68,15 @@ module.exports = {
6568
}
6669

6770
if (prop) {
68-
context.report({
71+
report(context, messages.requiredHasDefault, 'requiredHasDefault', {
6972
node: defaultProp.node,
70-
messageId: 'requiredHasDefault',
7173
data: {
7274
name: defaultPropName
7375
}
7476
});
7577
} else {
76-
context.report({
78+
report(context, messages.defaultHasNoType, 'defaultHasNoType', {
7779
node: defaultProp.node,
78-
messageId: 'defaultHasNoType',
7980
data: {
8081
name: defaultPropName
8182
}

lib/rules/destructuring-assignment.js

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
const Components = require('../util/Components');
88
const docsUrl = require('../util/docsUrl');
99
const isAssignmentLHS = require('../util/ast').isAssignmentLHS;
10+
const report = require('../util/report');
1011

1112
const DEFAULT_OPTION = 'always';
1213

@@ -44,6 +45,13 @@ function evalParams(params) {
4445
}));
4546
}
4647

48+
const messages = {
49+
noDestructPropsInSFCArg: 'Must never use destructuring props assignment in SFC argument',
50+
noDestructContextInSFCArg: 'Must never use destructuring context assignment in SFC argument',
51+
noDestructAssignment: 'Must never use destructuring {{type}} assignment',
52+
useDestructAssignment: 'Must use destructuring {{type}} assignment'
53+
};
54+
4755
module.exports = {
4856
meta: {
4957
docs: {
@@ -53,12 +61,7 @@ module.exports = {
5361
url: docsUrl('destructuring-assignment')
5462
},
5563

56-
messages: {
57-
noDestructPropsInSFCArg: 'Must never use destructuring props assignment in SFC argument',
58-
noDestructContextInSFCArg: 'Must never use destructuring context assignment in SFC argument',
59-
noDestructAssignment: 'Must never use destructuring {{type}} assignment',
60-
useDestructAssignment: 'Must use destructuring {{type}} assignment'
61-
},
64+
messages,
6265

6366
schema: [{
6467
type: 'string',
@@ -96,14 +99,12 @@ module.exports = {
9699
sfcParams.push(params);
97100

98101
if (params[0] && params[0].destructuring && components.get(node) && configuration === 'never') {
99-
context.report({
100-
node,
101-
messageId: 'noDestructPropsInSFCArg'
102+
report(context, messages.noDestructPropsInSFCArg, 'noDestructPropsInSFCArg', {
103+
node
102104
});
103105
} else if (params[1] && params[1].destructuring && components.get(node) && configuration === 'never') {
104-
context.report({
105-
node,
106-
messageId: 'noDestructContextInSFCArg'
106+
report(context, messages.noDestructContextInSFCArg, 'noDestructContextInSFCArg', {
107+
node
107108
});
108109
}
109110
}
@@ -125,9 +126,8 @@ module.exports = {
125126
)
126127
&& !isAssignmentLHS(node);
127128
if (isPropUsed && configuration === 'always') {
128-
context.report({
129+
report(context, messages.useDestructAssignment, 'useDestructAssignment', {
129130
node,
130-
messageId: 'useDestructAssignment',
131131
data: {
132132
type: node.object.name
133133
}
@@ -158,9 +158,8 @@ module.exports = {
158158
isPropUsed && configuration === 'always'
159159
&& !(ignoreClassFields && isInClassProperty(node))
160160
) {
161-
context.report({
161+
report(context, messages.useDestructAssignment, 'useDestructAssignment', {
162162
node,
163-
messageId: 'useDestructAssignment',
164163
data: {
165164
type: node.object.property.name
166165
}
@@ -206,9 +205,8 @@ module.exports = {
206205
);
207206

208207
if (SFCComponent && destructuringSFC && configuration === 'never') {
209-
context.report({
208+
report(context, messages.noDestructAssignment, 'noDestructAssignment', {
210209
node,
211-
messageId: 'noDestructAssignment',
212210
data: {
213211
type: node.init.name
214212
}
@@ -219,9 +217,8 @@ module.exports = {
219217
classComponent && destructuringClass && configuration === 'never'
220218
&& !(ignoreClassFields && node.parent.type === 'ClassProperty')
221219
) {
222-
context.report({
220+
report(context, messages.noDestructAssignment, 'noDestructAssignment', {
223221
node,
224-
messageId: 'noDestructAssignment',
225222
data: {
226223
type: node.init.property.name
227224
}

lib/rules/display-name.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,16 @@ const Components = require('../util/Components');
99
const astUtil = require('../util/ast');
1010
const docsUrl = require('../util/docsUrl');
1111
const propsUtil = require('../util/props');
12+
const report = require('../util/report');
1213

1314
// ------------------------------------------------------------------------------
1415
// Rule Definition
1516
// ------------------------------------------------------------------------------
1617

18+
const messages = {
19+
noDisplayName: 'Component definition is missing display name'
20+
};
21+
1722
module.exports = {
1823
meta: {
1924
docs: {
@@ -23,9 +28,7 @@ module.exports = {
2328
url: docsUrl('display-name')
2429
},
2530

26-
messages: {
27-
noDisplayName: 'Component definition is missing display name'
28-
},
31+
messages,
2932

3033
schema: [{
3134
type: 'object',
@@ -57,9 +60,8 @@ module.exports = {
5760
* @param {Object} component The component to process
5861
*/
5962
function reportMissingDisplayName(component) {
60-
context.report({
61-
node: component.node,
62-
messageId: 'noDisplayName'
63+
report(context, messages.noDisplayName, 'noDisplayName', {
64+
node: component.node
6365
});
6466
}
6567

lib/rules/forbid-component-props.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
'use strict';
77

88
const docsUrl = require('../util/docsUrl');
9+
const report = require('../util/report');
910

1011
// ------------------------------------------------------------------------------
1112
// Constants
@@ -17,6 +18,10 @@ const DEFAULTS = ['className', 'style'];
1718
// Rule Definition
1819
// ------------------------------------------------------------------------------
1920

21+
const messages = {
22+
propIsForbidden: 'Prop "{{prop}}" is forbidden on Components'
23+
};
24+
2025
module.exports = {
2126
meta: {
2227
docs: {
@@ -26,9 +31,7 @@ module.exports = {
2631
url: docsUrl('forbid-component-props')
2732
},
2833

29-
messages: {
30-
propIsForbidden: 'Prop "{{prop}}" is forbidden on Components'
31-
},
34+
messages,
3235

3336
schema: [{
3437
type: 'object',
@@ -99,12 +102,12 @@ module.exports = {
99102

100103
const customMessage = forbid.get(prop).message;
101104

102-
context.report(Object.assign({
105+
report(context, customMessage || messages.propIsForbidden, !customMessage && 'propIsForbidden', {
103106
node,
104107
data: {
105108
prop
106109
}
107-
}, customMessage ? {message: customMessage} : {messageId: 'propIsForbidden'}));
110+
});
108111
}
109112
};
110113
}

0 commit comments

Comments
 (0)