From 901c794a10a4317f4590eddbb6bd0927481ce8bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=89=E1=85=A1=E1=86=BC?= =?UTF-8?q?=E1=84=83=E1=85=AE?= Date: Tue, 5 Mar 2024 22:32:52 +0900 Subject: [PATCH] [Fix] `boolean-prop-naming`: detect TS interfaces --- CHANGELOG.md | 2 ++ lib/rules/boolean-prop-naming.js | 8 ++++++-- tests/lib/rules/boolean-prop-naming.js | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 826696a029..cb5e6fbbe6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange ### Fixed * [`jsx-no-leaked-render`]: prevent wrongly adding parens ([#3700][] @developer-bandi) +* [`boolean-prop-naming`]: detect TS interfaces ([#3701][] @developer-bandi) +[#3701]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3701 [#3700]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3700 ## [7.34.0] - 2024.03.03 diff --git a/lib/rules/boolean-prop-naming.js b/lib/rules/boolean-prop-naming.js index b5dd37b529..62b687b6a1 100644 --- a/lib/rules/boolean-prop-naming.js +++ b/lib/rules/boolean-prop-naming.js @@ -264,7 +264,7 @@ module.exports = { } function findAllTypeAnnotations(identifier, node) { - if (node.type === 'TSTypeLiteral' || node.type === 'ObjectTypeAnnotation') { + if (node.type === 'TSTypeLiteral' || node.type === 'ObjectTypeAnnotation' || node.type === 'TSInterfaceBody') { const currentNode = [].concat( objectTypeAnnotations.get(identifier.name) || [], node @@ -363,6 +363,10 @@ module.exports = { findAllTypeAnnotations(node.id, node.typeAnnotation); }, + TSInterfaceDeclaration(node) { + findAllTypeAnnotations(node.id, node.body); + }, + // eslint-disable-next-line object-shorthand 'Program:exit'() { if (!rule) { @@ -386,7 +390,7 @@ module.exports = { [].concat(propType).forEach((prop) => { validatePropNaming( component.node, - prop.properties || prop.members + prop.properties || prop.members || prop.body ); }); } diff --git a/tests/lib/rules/boolean-prop-naming.js b/tests/lib/rules/boolean-prop-naming.js index 2e2be01e5d..4cd01d6fc6 100644 --- a/tests/lib/rules/boolean-prop-naming.js +++ b/tests/lib/rules/boolean-prop-naming.js @@ -1239,5 +1239,20 @@ ruleTester.run('boolean-prop-naming', rule, { }, ], }, + { + code: ` + interface TestFNType { + enabled: boolean + } + const HelloNew = (props: TestFNType) => { return
}; + `, + options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], + features: ['ts', 'no-babel'], + errors: [ + { + message: 'Prop name (enabled) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)', + }, + ], + }, ]), });