Skip to main content

Static Analysis on Python source code using Jedi, CodeQL and Treesitter.

Project description

logo

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

pip install codeanalyzer-python

Prerequisites

  • Python 3.12 or higher

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 venv module to create isolated environments for analysis.

Usage

The codeanalyzer provides a command-line interface for performing static analysis on Python projects.

Basic Usage

codeanalyzer --input /path/to/python/project

Command Line Options

To view the available options and commands, run codeanalyzer --help. You should see output similar to the following:

 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

  1. Basic analysis with symbol table:

    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 --output option.

    codeanalyzer --input ./my-python-project --output /path/to/analysis-results
    

    Now, you can find the analysis results in analysis.json in the specified directory.

  2. Toggle analysis levels with --analysis-level:

    codeanalyzer --input ./my-python-project --analysis-level 1 # Symbol table only
    

    Call graph analysis can be enabled by setting the level to 2:

    codeanalyzer --input ./my-python-project --analysis-level 2 # Symbol table + Call graph
    

    Note: The --analysis-level=2 is not yet implemented in this version.

  3. Analysis with CodeQL enabled:

    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.

  4. Eager analysis with custom cache directory:

    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 .codeanalyzer in the current working directory ($PWD).

  5. Quiet mode (minimal output):

    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

This project uses uv for dependency management during development.

Development Setup

  1. Install uv

  2. Clone the repository:

    git clone https://github.com/codellm-devkit/codeanalyzer-python
    cd codeanalyzer-python
    
  3. Install dependencies using uv:

    uv sync --all-groups
    

    This will install all dependencies including development and test dependencies.

Running from Source

When developing, you can run the tool directly from source:

uv run codeanalyzer --input /path/to/python/project

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

codeanalyzer_python-0.1.4.tar.gz (27.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

codeanalyzer_python-0.1.4-py3-none-any.whl (33.9 kB view details)

Uploaded Python 3

File details

Details for the file codeanalyzer_python-0.1.4.tar.gz.

File metadata

  • Download URL: codeanalyzer_python-0.1.4.tar.gz
  • Upload date:
  • Size: 27.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.7.20

File hashes

Hashes for codeanalyzer_python-0.1.4.tar.gz
Algorithm Hash digest
SHA256 c5fefa8ca332e91380832690ea9d638e61a6037c3a2ec92be83ddb9ce0613840
MD5 59fed025fbde5e17e67a9abeb3697f38
BLAKE2b-256 c6692844ec15e62c69bfba9a999ef3406dc4db64e058396a2f2a130fa814cd7e

See more details on using hashes here.

File details

Details for the file codeanalyzer_python-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for codeanalyzer_python-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 af090a47e1e639205c96e8cea4c502286054edf8aae01a96c34ebc488a6f389b
MD5 21f3c8a7ef6e9f2a63d7108831beaaeb
BLAKE2b-256 a75dae1b3ab5b67c4ad93177d601fbe9174fd08cda84cabfda004b3d7de27411

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page