Static Analysis on Python source code using Jedi, CodeQL and Treesitter.
Project description
A Python Static Analysis Toolkit (and Library)
A comprehensive static analysis tool for Python source code that provides symbol table generation, call graph analysis, and semantic analysis using Jedi, CodeQL, and Tree-sitter.
Installation
This project uses uv for dependency management.
Prerequisites
- uv installed
- Python 3.12 or higher. You can use
uvto install Python if it's not already installed:uv python install 3.12
System Package Requirements
The tool creates virtual environments internally using Python's built-in venv module.
Ubuntu/Debian systems:
sudo apt update
sudo apt install python3.12-venv python3-dev build-essential
Fedora/RHEL/CentOS systems:
sudo dnf group install "Development Tools"
sudo dnf install python3-pip python3-venv python3-devel
or on older versions:
sudo yum groupinstall "Development Tools"
sudo yum install python3-pip python3-venv python3-devel
macOS systems:
# Install Xcode Command Line Tools (for compilation)
xcode-select --install
# If using Homebrew Python (recommended)
brew install python@3.12
# If using pyenv (popular Python version manager)
# First ensure pyenv is properly installed and configured
pyenv install 3.12.0 # or latest 3.12.x version
pyenv global 3.12.0 # or pyenv local 3.12.0 for project-specific
# If using system Python, you may need to install certificates
/Applications/Python\ 3.12/Install\ Certificates.command
Note: These packages are required as the tool uses Python's built-in
venvmodule to create isolated environments for analysis.
Setup
-
Clone the repository:
git clone https://github.com/codellm-devkit/codeanalyzer-python cd codeanalyzer-python
-
Install dependencies using uv:
uv sync --all-groups
This will install all dependencies including development and test dependencies.
Usage
The codeanalyzer provides a command-line interface for performing static analysis on Python projects.
Basic Usage
uv run codeanalyzer --input /path/to/python/project
Command Line Options
To view the available options and commands, run uv run codeanalyzer --help. You should see output similar to the following:
❯ uv run codeanalyzer --help
Usage: codeanalyzer [OPTIONS] COMMAND [ARGS]...
Static Analysis on Python source code using Jedi, CodeQL and Tree sitter.
╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ * --input -i PATH Path to the project root directory. [default: None] [required] │
│ --output -o PATH Output directory for artifacts. [default: None] │
│ --analysis-level -a INTEGER 1: symbol table, 2: call graph. [default: 1] │
│ --codeql --no-codeql Enable CodeQL-based analysis. [default: no-codeql] │
│ --eager --lazy Enable eager or lazy analysis. Defaults to lazy. [default: lazy] │
│ --cache-dir -c PATH Directory to store analysis cache. [default: None] │
│ --clear-cache --keep-cache Clear cache after analysis. [default: clear-cache] │
│ -v INTEGER Increase verbosity: -v, -vv, -vvv [default: 0] │
│ --help Show this message and exit. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Examples
-
Basic analysis with symbol table:
uv run codeanalyzer --input ./my-python-project
This will print the symbol table to stdout in JSON format to the standard output. If you want to save the output, you can use the
--outputoption.uv run codeanalyzer --input ./my-python-project --output /path/to/analysis-results
Now, you can find the analysis results in
analysis.jsonin the specified directory. -
Toggle analysis levels with
--analysis-level:uv run codeanalyzer --input ./my-python-project --analysis-level 1 # Symbol table only
Call graph analysis can be enabled by setting the level to
2:uv run codeanalyzer --input ./my-python-project --analysis-level 2 # Symbol table + Call graph
Note: The
--analysis-level=2is not yet implemented in this version. -
Analysis with CodeQL enabled:
uv run codeanalyzer --input ./my-python-project --codeql
This will perform CodeQL-based analysis in addition to the standard symbol table generation.
Note: Not yet fully implemented. Please refrain from using this option until further notice.
-
Eager analysis with custom cache directory:
uv run codeanalyzer --input ./my-python-project --eager --cache-dir /path/to/custom-cache
This will rebuild the analysis cache at every run and store it in
/path/to/custom-cache/.codeanalyzer. The cache will be cleared by default after analysis unless you specify--keep-cache.If you provide --cache-dir, the cache will be stored in that directory. If not specified, it defaults to
.codeanalyzerin the current working directory ($PWD). -
Quiet mode (minimal output):
uv run codeanalyzer --input /path/to/my-python-project --quiet
Output
By default, analysis results are printed to stdout in JSON format. When using the --output option, results are saved to analysis.json in the specified directory.
Development
Running Tests
uv run pytest --pspec -s
Development Dependencies
The project includes additional dependency groups for development:
- test: pytest and related testing tools
- dev: development tools like ipdb
Install all groups with:
uv sync --all-groups
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file codeanalyzer_python-0.1.3.tar.gz.
File metadata
- Download URL: codeanalyzer_python-0.1.3.tar.gz
- Upload date:
- Size: 27.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.7.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09f8c803caff8d54eaccf7ea7fcd63337928d1fabcfa7f4b242f17e526edda15
|
|
| MD5 |
a661cc9db9d28437549ce368a9604907
|
|
| BLAKE2b-256 |
966061bf4988bc3fb053351c503f5a5b3942ba351cd69fe1aab679fcf217c0d9
|
File details
Details for the file codeanalyzer_python-0.1.3-py3-none-any.whl.
File metadata
- Download URL: codeanalyzer_python-0.1.3-py3-none-any.whl
- Upload date:
- Size: 34.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.7.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6899c302ead5e0f5201a0140a0c8a19c2c3bcea40e251e7af8ccba0073052c86
|
|
| MD5 |
b40ddce3090195d430d7b9655ff0075e
|
|
| BLAKE2b-256 |
f752cc0580b993860bc5d72e75c89b548428f6a44fbf0521995cdb255b3f19c0
|