Skip to content

Commit d2bb5ab

Browse files
authored
Merge pull request #105 from codeflash-ai/helper_functions_fix_for_nested_stuff
prevent nested classes/ functions from showing up in code context
2 parents c8950f5 + 99189a7 commit d2bb5ab

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

codeflash/context/code_context_extractor.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,10 +410,12 @@ def get_function_sources_from_jedi(
410410
and definition.full_name
411411
and definition.type == "function"
412412
and not belongs_to_function_qualified(definition, qualified_function_name)
413+
# Avoid nested functions or classes. Only class.function is allowed
414+
and len((qualified_name := get_qualified_name(definition.module_name, definition.full_name)).split(".")) <= 2
413415
):
414416
function_source = FunctionSource(
415417
file_path=definition_path,
416-
qualified_name=get_qualified_name(definition.module_name, definition.full_name),
418+
qualified_name=qualified_name,
417419
fully_qualified_name=definition.full_name,
418420
only_function_name=definition.name,
419421
source_code=definition.get_line_code(),

tests/test_code_context_extractor.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ def innocent_bystander(self):
2323
def helper_method(self):
2424
return self.name
2525

26+
class NestedClass:
27+
def __init__(self, name):
28+
self.name = name
29+
30+
def nested_method(self):
31+
return self.name
2632

2733
def main_method():
2834
return "hello"
@@ -33,6 +39,7 @@ def __init__(self, name):
3339
self.name = name
3440

3541
def main_method(self):
42+
self.name = HelperClass.NestedClass("test").nested_method()
3643
return HelperClass(self.name).helper_method()
3744

3845

@@ -73,6 +80,8 @@ def test_code_replacement10() -> None:
7380
)
7481

7582
code_ctx = get_code_optimization_context(function_to_optimize=func_top_optimize, project_root_path=file_path.parent)
83+
qualified_names = {func.qualified_name for func in code_ctx.helper_functions}
84+
assert qualified_names == {"HelperClass.helper_method"} # Nested method should not be in here
7685
read_write_context, read_only_context = code_ctx.read_writable_code, code_ctx.read_only_context_code
7786

7887
expected_read_write_context = """
@@ -91,6 +100,7 @@ def __init__(self, name):
91100
self.name = name
92101
93102
def main_method(self):
103+
self.name = HelperClass.NestedClass("test").nested_method()
94104
return HelperClass(self.name).helper_method()
95105
"""
96106
expected_read_only_context = """

0 commit comments

Comments
 (0)