import os import ast from colorama import Fore, Style from Modules.submenu import build_submenu def search_for_word_in_file(file_path, search_term): """ Searches for a word in the titles and content of functions in a specified file. Returns a list of matching results with the file name. """ results = [] with open(file_path, "r") as file: try: tree = ast.parse(file.read()) for node in ast.walk(tree): if isinstance(node, ast.FunctionDef): # Look for function definitions for child in ast.iter_child_nodes(node): if isinstance(child, ast.Expr) and isinstance(child.value, ast.Str): # Extract docstring or title-like expressions docstring = child.value.s if search_term.lower() in docstring.lower(): results.append(f"{file_path} -> {node.name}: {docstring.strip()}") except Exception as e: print(f"Error reading {file_path}: {e}") return results def search_for_word_in_directory(directory, search_term): """ Searches through all `.py` files in a directory for a specific term. """ matches = [] for root, _, files in os.walk(directory): for file in files: if file.endswith(".py"): file_path = os.path.join(root, file) matches.extend(search_for_word_in_file(file_path, search_term)) return matches def create_search_submenu(search_results): """ Creates a dynamic submenu for search results. """ actions = {} for idx, result in enumerate(search_results, start=1): file_name, function_info = result.split(" -> ", 1) actions[str(idx)] = { "description": f"{file_name}: {function_info.split(':')[0]}", "function": lambda: print(f"\nViewing: {result}\n"), # Placeholder action } actions["ALL"] = { "description": "Display All Results", "function": lambda: print("\n".join(search_results)) } build_submenu("Search Results", actions)