Skip to content

Commit feca98d

Browse files
authored
Merge pull request #1578 from codeflash-ai/codeflash/optimize-pr1561-2026-02-20T05.27.21
⚡️ Speed up function `_node_contains_jsx` by 685% in PR #1561 (`add/support_react`)
2 parents 51b1379 + a947e43 commit feca98d

1 file changed

Lines changed: 11 additions & 16 deletions

File tree

codeflash/languages/javascript/frameworks/react/discovery.py

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919

2020
from codeflash.languages.javascript.treesitter import FunctionNode, TreeSitterAnalyzer
2121

22+
_JSX_TYPES = frozenset(
23+
("jsx_element", "jsx_self_closing_element", "jsx_fragment", "jsx_expression", "jsx_opening_element")
24+
)
25+
2226
logger = logging.getLogger(__name__)
2327

2428
PASCAL_CASE_RE = re.compile(r"^[A-Z][a-zA-Z0-9]*$")
@@ -177,22 +181,13 @@ def _function_returns_jsx(func: FunctionNode, source: str, analyzer: TreeSitterA
177181

178182
def _node_contains_jsx(node: Node) -> bool:
179183
"""Recursively check if a tree-sitter node contains JSX."""
180-
if node.type in (
181-
"jsx_element",
182-
"jsx_self_closing_element",
183-
"jsx_fragment",
184-
"jsx_expression",
185-
"jsx_opening_element",
186-
):
187-
return True
188-
189-
# Check return statements
190-
if node.type == "return_statement":
191-
for child in node.children:
192-
if _node_contains_jsx(child):
193-
return True
194-
195-
return any(_node_contains_jsx(child) for child in node.children)
184+
stack = [node]
185+
while stack:
186+
current = stack.pop()
187+
if current.type in _JSX_TYPES:
188+
return True
189+
stack.extend(current.children)
190+
return False
196191

197192

198193
HOOK_EXTRACT_RE = re.compile(r"\b(use[A-Z]\w*)\s*(?:<[^>]*>)?\s*\(")

0 commit comments

Comments
 (0)