Skip to content

waifuai/function-graph-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Function Graph Generator

Automatically generate function call graphs for Python code.

graph.py is a Python script that analyzes Python source code and generates visual function call graphs showing dependencies between functions.

Features

  • Supports Python
  • Configurable graph generation
  • Interactive visualization with matplotlib
  • Unit tested with sample code cases

Usage

1. Prepare Source Code

Create a file containing your Python source code. For example, you can combine multiple Python files into a single input file:

find ./src/ -name '*.py' -exec cat {} \; > input.txt

or

cat ./src/*.py > input.txt

2. Generate Call Graph

Run the script:

python3 graph.py

A window will display the interactive graph. You can zoom, pan, and inspect nodes.

Configuration

Modify the generator's configuration before generating the graph:

generator = CallGraphGenerator()
generator.config["allow_external_funcs"] = False  # Exclude functions called but not defined in the source
generator.config["allow_self_reference"] = False  # Hide recursive calls
generator.config["allow_childless_funcs"] = False  # Omit functions that do not call other functions
generator.generate_call_graph("input.txt")
Setting Default Description
allow_external_funcs True Show functions called but not defined in the source
allow_self_reference True Display edges for recursive calls
allow_childless_funcs True Include functions that don't call other functions

Testing

Unit tests verify function extraction and graph generation. Run tests with:

python3 -m unittest test.py

Dependencies

  • Python 3.6+
  • networkx
  • matplotlib

Install requirements:

pip install --user networkx matplotlib

How It Works

  1. Language Detection: Checks the first 10 lines for the Python-specific pattern:

    • Python: def keywords at the beginning of a line (allowing for leading spaces).
  2. Parsing: The Python parser extracts function definitions and calls.

  3. Graph Construction: Uses networkx to build a directed graph from call relationships.

  4. Visualization: Applies the spring layout algorithm and matplotlib for interactive display.

Notes

  • For large codebases, consider splitting into modules. The script processes all input as a single file.
  • The spring layout's appearance can be adjusted in create_and_visualize_graph().
  • Function detection uses basic pattern matching. Complex syntax may require parser improvements.

Example Output

Interact with the graph to:

  • Drag nodes to rearrange the layout
  • Zoom with the scroll wheel
  • Click nodes to highlight connections

About

Python static analysis tool generating function call dependency graphs. Extracts function definitions and calls from source code, renders interactive matplotlib visualizations with configurable filtering.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages