fix(linter): Rename react_perf/jsx_no_new_function_as_props to jsx_no_new_function_as_prop (#2175)

s/props/prop/

>
https://github.com/cvazac/eslint-plugin-react-perf/blob/master/docs/rules/jsx-no-new-function-as-prop.md

Sorry, I overlooked this in #2169 😨
This commit is contained in:
Yuji Sugiura 2024-01-26 12:06:50 +09:00 committed by GitHub
parent d5b378a891
commit 2e3153e16f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 77 additions and 9 deletions

View file

@ -170,7 +170,7 @@ mod react {
mod react_perf { mod react_perf {
pub mod jsx_no_jsx_as_prop; pub mod jsx_no_jsx_as_prop;
pub mod jsx_no_new_array_as_prop; pub mod jsx_no_new_array_as_prop;
pub mod jsx_no_new_function_as_props; pub mod jsx_no_new_function_as_prop;
pub mod jsx_no_new_object_as_prop; pub mod jsx_no_new_object_as_prop;
} }
@ -524,7 +524,7 @@ oxc_macros::declare_all_lint_rules! {
react::require_render_return, react::require_render_return,
react_perf::jsx_no_jsx_as_prop, react_perf::jsx_no_jsx_as_prop,
react_perf::jsx_no_new_array_as_prop, react_perf::jsx_no_new_array_as_prop,
react_perf::jsx_no_new_function_as_props, react_perf::jsx_no_new_function_as_prop,
react_perf::jsx_no_new_object_as_prop, react_perf::jsx_no_new_object_as_prop,
import::default, import::default,
import::no_named_as_default_member, import::no_named_as_default_member,

View file

@ -20,12 +20,12 @@ use crate::{
}; };
#[derive(Debug, Error, Diagnostic)] #[derive(Debug, Error, Diagnostic)]
#[error("eslint-plugin-react-perf(jsx-no-new-function-as-props): JSX attribute values should not contain functions created in the same scope.")] #[error("eslint-plugin-react-perf(jsx-no-new-function-as-prop): JSX attribute values should not contain functions created in the same scope.")]
#[diagnostic(severity(warning), help(r"simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array)."))] #[diagnostic(severity(warning), help(r"simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array)."))]
struct JsxNoNewFunctionAsPropsDiagnostic(#[label] pub Span); struct JsxNoNewFunctionAsPropDiagnostic(#[label] pub Span);
#[derive(Debug, Default, Clone)] #[derive(Debug, Default, Clone)]
pub struct JsxNoNewFunctionAsProps; pub struct JsxNoNewFunctionAsProp;
declare_oxc_lint!( declare_oxc_lint!(
/// ### What it does /// ### What it does
@ -40,11 +40,11 @@ declare_oxc_lint!(
/// // Good /// // Good
/// <Item callback={this.props.callback} /> /// <Item callback={this.props.callback} />
/// ``` /// ```
JsxNoNewFunctionAsProps, JsxNoNewFunctionAsProp,
correctness correctness
); );
impl Rule for JsxNoNewFunctionAsProps { impl Rule for JsxNoNewFunctionAsProp {
fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) { fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) {
if let AstKind::JSXElement(jsx_elem) = node.kind() { if let AstKind::JSXElement(jsx_elem) = node.kind() {
check_jsx_element(jsx_elem, ctx); check_jsx_element(jsx_elem, ctx);
@ -61,7 +61,7 @@ fn check_jsx_element<'a>(jsx_elem: &JSXElement<'a>, ctx: &LintContext<'a>) {
.. ..
})) => { })) => {
if let Some(span) = check_expression(expr) { if let Some(span) = check_expression(expr) {
ctx.diagnostic(JsxNoNewFunctionAsPropsDiagnostic(span)); ctx.diagnostic(JsxNoNewFunctionAsPropDiagnostic(span));
} }
} }
_ => {} _ => {}
@ -139,7 +139,7 @@ fn test() {
r"<Item prop={this.props.callback || (this.props.cb ? this.props.cb : function(){})} />", r"<Item prop={this.props.callback || (this.props.cb ? this.props.cb : function(){})} />",
]; ];
Tester::new(JsxNoNewFunctionAsProps::NAME, pass, fail) Tester::new(JsxNoNewFunctionAsProp::NAME, pass, fail)
.with_react_perf_plugin(true) .with_react_perf_plugin(true)
.test_and_snapshot(); .test_and_snapshot();
} }

View file

@ -0,0 +1,68 @@
---
source: crates/oxc_linter/src/tester.rs
expression: jsx_no_new_function_as_prop
---
⚠ eslint-plugin-react-perf(jsx-no-new-function-as-prop): JSX attribute values should not contain functions created in the same scope.
╭─[jsx_no_new_function_as_prop.tsx:1:1]
1 │ <Item prop={function(){return true}} />
· ───────────────────────
╰────
help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
⚠ eslint-plugin-react-perf(jsx-no-new-function-as-prop): JSX attribute values should not contain functions created in the same scope.
╭─[jsx_no_new_function_as_prop.tsx:1:1]
1 │ <Item prop={() => true} />
· ──────────
╰────
help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
⚠ eslint-plugin-react-perf(jsx-no-new-function-as-prop): JSX attribute values should not contain functions created in the same scope.
╭─[jsx_no_new_function_as_prop.tsx:1:1]
1 │ <Item prop={new Function('a', 'alert(a)')}/>
· ─────────────────────────────
╰────
help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
⚠ eslint-plugin-react-perf(jsx-no-new-function-as-prop): JSX attribute values should not contain functions created in the same scope.
╭─[jsx_no_new_function_as_prop.tsx:1:1]
1 │ <Item prop={Function()}/>
· ──────────
╰────
help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
⚠ eslint-plugin-react-perf(jsx-no-new-function-as-prop): JSX attribute values should not contain functions created in the same scope.
╭─[jsx_no_new_function_as_prop.tsx:1:1]
1 │ <Item onClick={this.clickHandler.bind(this)} />
· ────────────────────────────
╰────
help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
⚠ eslint-plugin-react-perf(jsx-no-new-function-as-prop): JSX attribute values should not contain functions created in the same scope.
╭─[jsx_no_new_function_as_prop.tsx:1:1]
1 │ <Item callback={this.props.callback || function() {}} />
· ─────────────
╰────
help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
⚠ eslint-plugin-react-perf(jsx-no-new-function-as-prop): JSX attribute values should not contain functions created in the same scope.
╭─[jsx_no_new_function_as_prop.tsx:1:1]
1 │ <Item callback={this.props.callback ? this.props.callback : function() {}} />
· ─────────────
╰────
help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
⚠ eslint-plugin-react-perf(jsx-no-new-function-as-prop): JSX attribute values should not contain functions created in the same scope.
╭─[jsx_no_new_function_as_prop.tsx:1:1]
1 │ <Item prop={this.props.callback || this.props.callback ? this.props.callback : function(){}} />
· ────────────
╰────
help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
⚠ eslint-plugin-react-perf(jsx-no-new-function-as-prop): JSX attribute values should not contain functions created in the same scope.
╭─[jsx_no_new_function_as_prop.tsx:1:1]
1 │ <Item prop={this.props.callback || (this.props.cb ? this.props.cb : function(){})} />
· ────────────
╰────
help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).