mirror of
https://github.com/zebrajr/react.git
synced 2025-12-06 12:20:20 +01:00
[compiler] Handle empty list of eslint suppression rules (#34323)
--- [//]: # (BEGIN SAPLING FOOTER) Stack created with [Sapling](https://sapling-scm.com). Best reviewed with [ReviewStack](https://reviewstack.dev/facebook/react/pull/34323). * #34276 * __->__ #34323
This commit is contained in:
parent
294c33f34d
commit
3f2a42a5de
|
|
@ -135,7 +135,12 @@ export type PluginOptions = {
|
||||||
*/
|
*/
|
||||||
eslintSuppressionRules: Array<string> | null | undefined;
|
eslintSuppressionRules: Array<string> | null | undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to report "suppression" errors for Flow suppressions. If false, suppression errors
|
||||||
|
* are only emitted for ESLint suppressions
|
||||||
|
*/
|
||||||
flowSuppressions: boolean;
|
flowSuppressions: boolean;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ignore 'use no forget' annotations. Helpful during testing but should not be used in production.
|
* Ignore 'use no forget' annotations. Helpful during testing but should not be used in production.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -86,12 +86,18 @@ export function findProgramSuppressions(
|
||||||
let enableComment: t.Comment | null = null;
|
let enableComment: t.Comment | null = null;
|
||||||
let source: SuppressionSource | null = null;
|
let source: SuppressionSource | null = null;
|
||||||
|
|
||||||
const rulePattern = `(${ruleNames.join('|')})`;
|
let disableNextLinePattern: RegExp | null = null;
|
||||||
const disableNextLinePattern = new RegExp(
|
let disablePattern: RegExp | null = null;
|
||||||
`eslint-disable-next-line ${rulePattern}`,
|
let enablePattern: RegExp | null = null;
|
||||||
);
|
if (ruleNames.length !== 0) {
|
||||||
const disablePattern = new RegExp(`eslint-disable ${rulePattern}`);
|
const rulePattern = `(${ruleNames.join('|')})`;
|
||||||
const enablePattern = new RegExp(`eslint-enable ${rulePattern}`);
|
disableNextLinePattern = new RegExp(
|
||||||
|
`eslint-disable-next-line ${rulePattern}`,
|
||||||
|
);
|
||||||
|
disablePattern = new RegExp(`eslint-disable ${rulePattern}`);
|
||||||
|
enablePattern = new RegExp(`eslint-enable ${rulePattern}`);
|
||||||
|
}
|
||||||
|
|
||||||
const flowSuppressionPattern = new RegExp(
|
const flowSuppressionPattern = new RegExp(
|
||||||
'\\$(FlowFixMe\\w*|FlowExpectedError|FlowIssue)\\[react\\-rule',
|
'\\$(FlowFixMe\\w*|FlowExpectedError|FlowIssue)\\[react\\-rule',
|
||||||
);
|
);
|
||||||
|
|
@ -107,6 +113,7 @@ export function findProgramSuppressions(
|
||||||
* CommentLine within the block.
|
* CommentLine within the block.
|
||||||
*/
|
*/
|
||||||
disableComment == null &&
|
disableComment == null &&
|
||||||
|
disableNextLinePattern != null &&
|
||||||
disableNextLinePattern.test(comment.value)
|
disableNextLinePattern.test(comment.value)
|
||||||
) {
|
) {
|
||||||
disableComment = comment;
|
disableComment = comment;
|
||||||
|
|
@ -124,12 +131,16 @@ export function findProgramSuppressions(
|
||||||
source = 'Flow';
|
source = 'Flow';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disablePattern.test(comment.value)) {
|
if (disablePattern != null && disablePattern.test(comment.value)) {
|
||||||
disableComment = comment;
|
disableComment = comment;
|
||||||
source = 'Eslint';
|
source = 'Eslint';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enablePattern.test(comment.value) && source === 'Eslint') {
|
if (
|
||||||
|
enablePattern != null &&
|
||||||
|
enablePattern.test(comment.value) &&
|
||||||
|
source === 'Eslint'
|
||||||
|
) {
|
||||||
enableComment = comment;
|
enableComment = comment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
|
||||||
|
## Input
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// @eslintSuppressionRules:[]
|
||||||
|
|
||||||
|
// The suppression here shouldn't cause compilation to get skipped
|
||||||
|
// Previously we had a bug where an empty list of suppressions would
|
||||||
|
// create a regexp that matched any suppression
|
||||||
|
function Component(props) {
|
||||||
|
'use forget';
|
||||||
|
// eslint-disable-next-line foo/not-react-related
|
||||||
|
return <div>{props.text}</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const FIXTURE_ENTRYPOINT = {
|
||||||
|
fn: Component,
|
||||||
|
params: [{text: 'Hello'}],
|
||||||
|
};
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
import { c as _c } from "react/compiler-runtime"; // @eslintSuppressionRules:[]
|
||||||
|
|
||||||
|
// The suppression here shouldn't cause compilation to get skipped
|
||||||
|
// Previously we had a bug where an empty list of suppressions would
|
||||||
|
// create a regexp that matched any suppression
|
||||||
|
function Component(props) {
|
||||||
|
"use forget";
|
||||||
|
const $ = _c(2);
|
||||||
|
let t0;
|
||||||
|
if ($[0] !== props.text) {
|
||||||
|
t0 = <div>{props.text}</div>;
|
||||||
|
$[0] = props.text;
|
||||||
|
$[1] = t0;
|
||||||
|
} else {
|
||||||
|
t0 = $[1];
|
||||||
|
}
|
||||||
|
return t0;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const FIXTURE_ENTRYPOINT = {
|
||||||
|
fn: Component,
|
||||||
|
params: [{ text: "Hello" }],
|
||||||
|
};
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Eval output
|
||||||
|
(kind: ok) <div>Hello</div>
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
// @eslintSuppressionRules:[]
|
||||||
|
|
||||||
|
// The suppression here shouldn't cause compilation to get skipped
|
||||||
|
// Previously we had a bug where an empty list of suppressions would
|
||||||
|
// create a regexp that matched any suppression
|
||||||
|
function Component(props) {
|
||||||
|
'use forget';
|
||||||
|
// eslint-disable-next-line foo/not-react-related
|
||||||
|
return <div>{props.text}</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const FIXTURE_ENTRYPOINT = {
|
||||||
|
fn: Component,
|
||||||
|
params: [{text: 'Hello'}],
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue
Block a user