Skip to content

Commit

Permalink
[Fix] restore eslint < 4.15 compatibility
Browse files Browse the repository at this point in the history
`messageId` wasn't added until v4.15, and we should never have added it unconditionally.

This commit conditionally uses `messageId` only when supported.
  • Loading branch information
ljharb committed Sep 20, 2021
1 parent 9799131 commit d51bc61
Show file tree
Hide file tree
Showing 99 changed files with 987 additions and 860 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/node-4+.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ jobs:
- 6
- 5
- 4
- 4.14 # last version without messageId
- 3
babel-eslint:
- 10
- 9
Expand Down
15 changes: 7 additions & 8 deletions lib/rules/boolean-prop-naming.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ const Components = require('../util/Components');
const propsUtil = require('../util/props');
const docsUrl = require('../util/docsUrl');
const propWrapperUtil = require('../util/propWrapper');
const report = require('../util/report');

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

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

module.exports = {
meta: {
Expand All @@ -27,9 +28,7 @@ module.exports = {
url: docsUrl('boolean-prop-naming')
},

messages: {
patternMismatch: PATTERN_MISMATCH_MSG
},
messages,

schema: [{
additionalProperties: false,
Expand Down Expand Up @@ -211,14 +210,14 @@ module.exports = {
function reportInvalidNaming(component) {
component.invalidProps.forEach((propNode) => {
const propName = getPropName(propNode);
context.report(Object.assign({
report(context, config.message || messages.patternMismatch, !config.message && 'patternMismatch', {
node: propNode,
data: {
component: propName,
propName,
pattern: config.rule
}
}, config.message ? {message: config.message} : {messageId: 'patternMismatch'}));
});
});
}

Expand Down
31 changes: 15 additions & 16 deletions lib/rules/button-has-type.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const getProp = require('jsx-ast-utils/getProp');
const getLiteralPropValue = require('jsx-ast-utils/getLiteralPropValue');
const docsUrl = require('../util/docsUrl');
const isCreateElement = require('../util/isCreateElement');
const report = require('../util/report');

// ------------------------------------------------------------------------------
// Rule Definition
Expand All @@ -20,6 +21,13 @@ const optionDefaults = {
reset: true
};

const messages = {
missingType: 'Missing an explicit type attribute for button',
complexType: 'The button type attribute must be specified by a static string or a trivial ternary expression',
invalidValue: '"{{value}}" is an invalid value for button type attribute',
forbiddenValue: '"{{value}}" is an invalid value for button type attribute'
};

module.exports = {
meta: {
docs: {
Expand All @@ -29,12 +37,7 @@ module.exports = {
url: docsUrl('button-has-type')
},

messages: {
missingType: 'Missing an explicit type attribute for button',
complexType: 'The button type attribute must be specified by a static string or a trivial ternary expression',
invalidValue: '"{{value}}" is an invalid value for button type attribute',
forbiddenValue: '"{{value}}" is an invalid value for button type attribute'
},
messages,

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

function reportMissing(node) {
context.report({
node,
messageId: 'missingType'
report(context, messages.missingType, 'missingType', {
node
});
}

function reportComplex(node) {
context.report({
node,
messageId: 'complexType'
report(context, messages.complexType, 'complexType', {
node
});
}

function checkValue(node, value) {
if (!(value in configuration)) {
context.report({
report(context, messages.invalidValue, 'invalidValue', {
node,
messageId: 'invalidValue',
data: {
value
}
});
} else if (!configuration[value]) {
context.report({
report(context, messages.forbiddenValue, 'forbiddenValue', {
node,
messageId: 'forbiddenValue',
data: {
value
}
Expand Down
17 changes: 9 additions & 8 deletions lib/rules/default-props-match-prop-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,17 @@

const Components = require('../util/Components');
const docsUrl = require('../util/docsUrl');
const report = require('../util/report');

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

const messages = {
requiredHasDefault: 'defaultProp "{{name}}" defined for isRequired propType.',
defaultHasNoType: 'defaultProp "{{name}}" has no corresponding propTypes declaration.'
};

module.exports = {
meta: {
docs: {
Expand All @@ -21,10 +27,7 @@ module.exports = {
url: docsUrl('default-props-match-prop-types')
},

messages: {
requiredHasDefault: 'defaultProp "{{name}}" defined for isRequired propType.',
defaultHasNoType: 'defaultProp "{{name}}" has no corresponding propTypes declaration.'
},
messages,

schema: [{
type: 'object',
Expand Down Expand Up @@ -65,17 +68,15 @@ module.exports = {
}

if (prop) {
context.report({
report(context, messages.requiredHasDefault, 'requiredHasDefault', {
node: defaultProp.node,
messageId: 'requiredHasDefault',
data: {
name: defaultPropName
}
});
} else {
context.report({
report(context, messages.defaultHasNoType, 'defaultHasNoType', {
node: defaultProp.node,
messageId: 'defaultHasNoType',
data: {
name: defaultPropName
}
Expand Down
37 changes: 17 additions & 20 deletions lib/rules/destructuring-assignment.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
const Components = require('../util/Components');
const docsUrl = require('../util/docsUrl');
const isAssignmentLHS = require('../util/ast').isAssignmentLHS;
const report = require('../util/report');

const DEFAULT_OPTION = 'always';

Expand Down Expand Up @@ -44,6 +45,13 @@ function evalParams(params) {
}));
}

const messages = {
noDestructPropsInSFCArg: 'Must never use destructuring props assignment in SFC argument',
noDestructContextInSFCArg: 'Must never use destructuring context assignment in SFC argument',
noDestructAssignment: 'Must never use destructuring {{type}} assignment',
useDestructAssignment: 'Must use destructuring {{type}} assignment'
};

module.exports = {
meta: {
docs: {
Expand All @@ -53,12 +61,7 @@ module.exports = {
url: docsUrl('destructuring-assignment')
},

messages: {
noDestructPropsInSFCArg: 'Must never use destructuring props assignment in SFC argument',
noDestructContextInSFCArg: 'Must never use destructuring context assignment in SFC argument',
noDestructAssignment: 'Must never use destructuring {{type}} assignment',
useDestructAssignment: 'Must use destructuring {{type}} assignment'
},
messages,

schema: [{
type: 'string',
Expand Down Expand Up @@ -96,14 +99,12 @@ module.exports = {
sfcParams.push(params);

if (params[0] && params[0].destructuring && components.get(node) && configuration === 'never') {
context.report({
node,
messageId: 'noDestructPropsInSFCArg'
report(context, messages.noDestructPropsInSFCArg, 'noDestructPropsInSFCArg', {
node
});
} else if (params[1] && params[1].destructuring && components.get(node) && configuration === 'never') {
context.report({
node,
messageId: 'noDestructContextInSFCArg'
report(context, messages.noDestructContextInSFCArg, 'noDestructContextInSFCArg', {
node
});
}
}
Expand All @@ -125,9 +126,8 @@ module.exports = {
)
&& !isAssignmentLHS(node);
if (isPropUsed && configuration === 'always') {
context.report({
report(context, messages.useDestructAssignment, 'useDestructAssignment', {
node,
messageId: 'useDestructAssignment',
data: {
type: node.object.name
}
Expand Down Expand Up @@ -158,9 +158,8 @@ module.exports = {
isPropUsed && configuration === 'always'
&& !(ignoreClassFields && isInClassProperty(node))
) {
context.report({
report(context, messages.useDestructAssignment, 'useDestructAssignment', {
node,
messageId: 'useDestructAssignment',
data: {
type: node.object.property.name
}
Expand Down Expand Up @@ -206,9 +205,8 @@ module.exports = {
);

if (SFCComponent && destructuringSFC && configuration === 'never') {
context.report({
report(context, messages.noDestructAssignment, 'noDestructAssignment', {
node,
messageId: 'noDestructAssignment',
data: {
type: node.init.name
}
Expand All @@ -219,9 +217,8 @@ module.exports = {
classComponent && destructuringClass && configuration === 'never'
&& !(ignoreClassFields && node.parent.type === 'ClassProperty')
) {
context.report({
report(context, messages.noDestructAssignment, 'noDestructAssignment', {
node,
messageId: 'noDestructAssignment',
data: {
type: node.init.property.name
}
Expand Down
14 changes: 8 additions & 6 deletions lib/rules/display-name.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,16 @@ const Components = require('../util/Components');
const astUtil = require('../util/ast');
const docsUrl = require('../util/docsUrl');
const propsUtil = require('../util/props');
const report = require('../util/report');

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

const messages = {
noDisplayName: 'Component definition is missing display name'
};

module.exports = {
meta: {
docs: {
Expand All @@ -23,9 +28,7 @@ module.exports = {
url: docsUrl('display-name')
},

messages: {
noDisplayName: 'Component definition is missing display name'
},
messages,

schema: [{
type: 'object',
Expand Down Expand Up @@ -57,9 +60,8 @@ module.exports = {
* @param {Object} component The component to process
*/
function reportMissingDisplayName(component) {
context.report({
node: component.node,
messageId: 'noDisplayName'
report(context, messages.noDisplayName, 'noDisplayName', {
node: component.node
});
}

Expand Down
13 changes: 8 additions & 5 deletions lib/rules/forbid-component-props.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
'use strict';

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

// ------------------------------------------------------------------------------
// Constants
Expand All @@ -17,6 +18,10 @@ const DEFAULTS = ['className', 'style'];
// Rule Definition
// ------------------------------------------------------------------------------

const messages = {
propIsForbidden: 'Prop "{{prop}}" is forbidden on Components'
};

module.exports = {
meta: {
docs: {
Expand All @@ -26,9 +31,7 @@ module.exports = {
url: docsUrl('forbid-component-props')
},

messages: {
propIsForbidden: 'Prop "{{prop}}" is forbidden on Components'
},
messages,

schema: [{
type: 'object',
Expand Down Expand Up @@ -99,12 +102,12 @@ module.exports = {

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

context.report(Object.assign({
report(context, customMessage || messages.propIsForbidden, !customMessage && 'propIsForbidden', {
node,
data: {
prop
}
}, customMessage ? {message: customMessage} : {messageId: 'propIsForbidden'}));
});
}
};
}
Expand Down
Loading

0 comments on commit d51bc61

Please sign in to comment.