mirror of
https://github.com/zebrajr/react.git
synced 2026-01-15 12:15:22 +00:00
Remove unused react-internal/invariant-args ESLint rule. (#22778)
This commit is contained in:
@@ -113,7 +113,6 @@ module.exports = {
|
||||
{isProductionUserAppCode: true},
|
||||
],
|
||||
'react-internal/no-to-warn-dev-within-to-throw': ERROR,
|
||||
'react-internal/invariant-args': ERROR,
|
||||
'react-internal/warning-args': ERROR,
|
||||
'react-internal/no-production-logging': ERROR,
|
||||
'react-internal/no-cross-fork-imports': ERROR,
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/* eslint-disable react-internal/invariant-args */
|
||||
|
||||
'use strict';
|
||||
|
||||
// Mock of the Native Hooks
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
* @flow strict-local
|
||||
*/
|
||||
|
||||
/* eslint-disable react-internal/invariant-args */
|
||||
|
||||
'use strict';
|
||||
|
||||
import type {
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/* eslint-disable react-internal/invariant-args */
|
||||
|
||||
'use strict';
|
||||
|
||||
// Mock of the Native Hooks
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @emails react-core
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const rule = require('../invariant-args');
|
||||
const {RuleTester} = require('eslint');
|
||||
const ruleTester = new RuleTester();
|
||||
|
||||
ruleTester.run('eslint-rules/invariant-args', rule, {
|
||||
valid: [
|
||||
'arbitraryFunction(a, b)',
|
||||
// These messages are in the error code map
|
||||
"invariant(false, 'Do not override existing functions.')",
|
||||
"invariant(false, 'createRoot(...): Target container is not a DOM element.')",
|
||||
],
|
||||
invalid: [
|
||||
{
|
||||
code: "invariant('hello, world');",
|
||||
errors: [
|
||||
{
|
||||
message: 'invariant takes at least two arguments',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
code: 'invariant(true, null);',
|
||||
errors: [
|
||||
{
|
||||
message: 'The second argument to invariant must be a string literal',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
code: 'var g = 5; invariant(true, g);',
|
||||
errors: [
|
||||
{
|
||||
message: 'The second argument to invariant must be a string literal',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
code: "invariant(true, 'error!');",
|
||||
errors: [
|
||||
{
|
||||
message:
|
||||
'The invariant format should be able to uniquely identify this ' +
|
||||
'invariant. Please, use a more descriptive format than: error!',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
code: "invariant(true, '%s %s, %s %s: %s (%s)', 1, 2, 3, 4, 5, 6);",
|
||||
errors: [
|
||||
{
|
||||
message:
|
||||
'The invariant format should be able to uniquely identify this ' +
|
||||
'invariant. Please, use a more descriptive format than: ' +
|
||||
'%s %s, %s %s: %s (%s)',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
code: "invariant(false, 'Not in error map')",
|
||||
errors: [
|
||||
{
|
||||
message:
|
||||
'Error message does not have a corresponding production error code.\n\n' +
|
||||
'Run `yarn extract-errors` to add the message to error code map, ' +
|
||||
'so it can be stripped from the production builds. ' +
|
||||
"Alternatively, if you're updating an existing error message, " +
|
||||
'you can modify `scripts/error-codes/codes.json` directly.',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
});
|
||||
@@ -5,7 +5,6 @@ module.exports = {
|
||||
'no-primitive-constructors': require('./no-primitive-constructors'),
|
||||
'no-to-warn-dev-within-to-throw': require('./no-to-warn-dev-within-to-throw'),
|
||||
'warning-args': require('./warning-args'),
|
||||
'invariant-args': require('./invariant-args'),
|
||||
'prod-error-codes': require('./prod-error-codes'),
|
||||
'no-production-logging': require('./no-production-logging'),
|
||||
'no-cross-fork-imports': require('./no-cross-fork-imports'),
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @emails react-core
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const existingErrorMap = JSON.parse(
|
||||
fs.readFileSync(path.resolve(__dirname, '../error-codes/codes.json'))
|
||||
);
|
||||
const messages = new Set();
|
||||
Object.keys(existingErrorMap).forEach(key =>
|
||||
messages.add(existingErrorMap[key])
|
||||
);
|
||||
|
||||
/**
|
||||
* The warning() and invariant() functions take format strings as their second
|
||||
* argument.
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
schema: [],
|
||||
},
|
||||
create(context) {
|
||||
// we also allow literal strings and concatenated literal strings
|
||||
function getLiteralString(node) {
|
||||
if (node.type === 'Literal' && typeof node.value === 'string') {
|
||||
return node.value;
|
||||
} else if (node.type === 'BinaryExpression' && node.operator === '+') {
|
||||
const l = getLiteralString(node.left);
|
||||
const r = getLiteralString(node.right);
|
||||
if (l !== null && r !== null) {
|
||||
return l + r;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
CallExpression: function(node) {
|
||||
// This could be a little smarter by checking context.getScope() to see
|
||||
// how warning/invariant was defined.
|
||||
const isInvariant =
|
||||
node.callee.type === 'Identifier' && node.callee.name === 'invariant';
|
||||
if (!isInvariant) {
|
||||
return;
|
||||
}
|
||||
if (node.arguments.length < 2) {
|
||||
context.report(node, '{{name}} takes at least two arguments', {
|
||||
name: node.callee.name,
|
||||
});
|
||||
return;
|
||||
}
|
||||
const format = getLiteralString(node.arguments[1]);
|
||||
if (format === null) {
|
||||
context.report(
|
||||
node,
|
||||
'The second argument to {{name}} must be a string literal',
|
||||
{name: node.callee.name}
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (format.length < 10 || /^[s\W]*$/.test(format)) {
|
||||
context.report(
|
||||
node,
|
||||
'The {{name}} format should be able to uniquely identify this ' +
|
||||
'{{name}}. Please, use a more descriptive format than: {{format}}',
|
||||
{name: node.callee.name, format: format}
|
||||
);
|
||||
return;
|
||||
}
|
||||
// count the number of formatting substitutions, plus the first two args
|
||||
const expectedNArgs = (format.match(/%s/g) || []).length + 2;
|
||||
if (node.arguments.length !== expectedNArgs) {
|
||||
context.report(
|
||||
node,
|
||||
'Expected {{expectedNArgs}} arguments in call to {{name}} based on ' +
|
||||
'the number of "%s" substitutions, but got {{length}}',
|
||||
{
|
||||
expectedNArgs: expectedNArgs,
|
||||
name: node.callee.name,
|
||||
length: node.arguments.length,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
if (!messages.has(format)) {
|
||||
context.report(
|
||||
node,
|
||||
'Error message does not have a corresponding production ' +
|
||||
'error code.\n\n' +
|
||||
'Run `yarn extract-errors` to add the message to error code ' +
|
||||
'map, so it can be stripped from the production builds. ' +
|
||||
"Alternatively, if you're updating an existing error " +
|
||||
'message, you can modify ' +
|
||||
'`scripts/error-codes/codes.json` directly.'
|
||||
);
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
};
|
||||
@@ -8,8 +8,6 @@
|
||||
* @flow strict-local
|
||||
*/
|
||||
|
||||
/* eslint-disable react-internal/invariant-args */
|
||||
|
||||
'use strict';
|
||||
|
||||
import {type ViewConfig} from './ReactNativeTypes';
|
||||
|
||||
Reference in New Issue
Block a user