| import os |
|
|
| import escodegen |
| import esprima |
|
|
|
|
| def find_files(directory): |
| files_list = [] |
| for root, dirs, files in os.walk(directory): |
| for file in files: |
| if file.endswith('.js'): |
| files_list.append(os.path.join(root, file)) |
| return files_list |
|
|
|
|
| def extract_functions(file_path): |
| with open(file_path, 'r') as file: |
| source_code = file.read() |
| functions = {} |
| tree = esprima.parseScript(source_code) |
| for node in tree.body: |
| if node.type == 'FunctionDeclaration': |
| func_name = node.id.name if node.id else '<anonymous>' |
| functions[func_name] = escodegen.generate(node) |
| elif node.type == 'VariableDeclaration': |
| for declaration in node.declarations: |
| if declaration.init and declaration.init.type == 'FunctionExpression': |
| func_name = declaration.id.name if declaration.id else '<anonymous>' |
| functions[func_name] = escodegen.generate(declaration.init) |
| elif node.type == 'ClassDeclaration': |
| for subnode in node.body.body: |
| if subnode.type == 'MethodDefinition': |
| func_name = subnode.key.name |
| functions[func_name] = escodegen.generate(subnode.value) |
| elif subnode.type == 'VariableDeclaration': |
| for declaration in subnode.declarations: |
| if declaration.init and declaration.init.type == 'FunctionExpression': |
| func_name = declaration.id.name if declaration.id else '<anonymous>' |
| functions[func_name] = escodegen.generate(declaration.init) |
| return functions |
|
|
|
|
| def extract_classes(file_path): |
| with open(file_path, 'r') as file: |
| source_code = file.read() |
| classes = {} |
| tree = esprima.parseScript(source_code) |
| for node in tree.body: |
| if node.type == 'ClassDeclaration': |
| class_name = node.id.name |
| function_names = [] |
| for subnode in node.body.body: |
| if subnode.type == 'MethodDefinition': |
| function_names.append(subnode.key.name) |
| classes[class_name] = ", ".join(function_names) |
| return classes |
|
|
|
|
| def extract_functions_and_classes(directory): |
| files = find_files(directory) |
| functions_dict = {} |
| classes_dict = {} |
| for file in files: |
| functions = extract_functions(file) |
| if functions: |
| functions_dict[file] = functions |
| classes = extract_classes(file) |
| if classes: |
| classes_dict[file] = classes |
| return functions_dict, classes_dict |
|
|