Skip to main content

High-performance dead code elimination analysis tool for Python.

Project description

CytoScnPy - High-Performance Python Static Analysis

CI License Version

A fast static analysis tool for Python codebases, powered by Rust with hybrid Python integration. Detects dead code, security vulnerabilities (including taint analysis), and code quality issues with extreme speed. Code quality metrics are also provided.

Why CytoScnPy?

  • Blazing Fast: Faster in dead code detection.
  • Memory Efficient: Uses less memory.
  • Comprehensive: Dead code, secrets, security, taint analysis, quality metrics
  • 🎯 Framework Aware: Flask, Django, FastAPI, Celery, Starlette, Pydantic, Azure Functions v2
  • Benchmarked: Continuous benchmarking with 126-item ground truth suite

Installation

pip install cytoscnpy

# Or install from source
git clone https://github.com/djinn09/CytoScnPy.git
cd CytoScnPy
pip install maturin
maturin develop -m cytoscnpy/Cargo.toml

MCP Server (for AI Assistants)

CytoScnPy includes an MCP server for AI assistant integration:

# Start MCP server (after pip install)
cytoscnpy mcp-server

For Claude Desktop, Cursor, or GitHub Copilot configuration, see the MCP Server Documentation.

Features

  • Dead Code Detection: Unused functions, classes, imports, and variables with cross-module tracking.
  • Security Analysis: Taint analysis (SQLi, XSS), secret scanning (API keys), and dangerous code patterns (eval, exec).
  • Code Quality Metrics: Cyclomatic complexity, Halstead metrics, Maintainability Index, and raw metrics (LOC, SLOC).
  • Framework Support: Native understanding of Flask, Django, FastAPI, Celery, Starlette, Pydantic, and Azure Functions v2 patterns.
  • Smart Heuristics: Handles dataclasses, __all__ exports, visitor patterns, and dynamic attributes intelligently.
  • Cross-File Detection: Tracks symbol usage across the entire codebase, including nested packages and complex import chains, to ensure code used in other modules is never incorrectly flagged.

Usage

Command Line

cytoscnpy [PATHS]... [OPTIONS]

Examples:

# Dead code analysis
cytoscnpy .                                     # Analyze current directory
cytoscnpy /path/to/project --json               # JSON output for CI/CD

# Security checks (--danger includes taint analysis)
cytoscnpy . --secrets --danger --quality

# Confidence threshold (0-100)
cytoscnpy . --confidence 80

# Path filtering
cytoscnpy . --exclude-folder venv --exclude-folder build
cytoscnpy . --include-folder specific_venv      # Override defaults
cytoscnpy . --include-tests

# Jupyter notebooks
cytoscnpy . --include-ipynb --ipynb-cells

# Generate HTML report
cytoscnpy . --html --secrets --danger --quality

Options:

Flag Description
-c, --confidence <N> Set confidence threshold (0-100)
--secrets Scan for API keys, tokens, credentials
--danger Scan for dangerous code + taint analysis
--quality Scan for code quality issues
--html Generate interactive HTML report
--json Output results as JSON
-v, --verbose Enable verbose output for debugging
-q, --quiet Quiet mode: summary only, no tables
--include-tests Include test files in analysis
--exclude-folder <DIR> Exclude specific folders
--include-folder <DIR> Force include folders
--include-ipynb Include Jupyter notebooks
--ipynb-cells Report findings per notebook cell

CI/CD Gate Options:

Flag Description
--fail-threshold <N> Exit code 1 if unused code % > N
--max-complexity <N> Exit code 1 if any function complexity > N
--min-mi <N> Exit code 1 if maintainability index < N
--fail-on-quality Exit code 1 if any quality issues found
--max-nesting <N> Exit code 1 if any block nesting > N
--max-args <N> Exit code 1 if any function has > N args
--max-lines <N> Exit code 1 if any function has > N lines

Full CLI Reference: See docs/CLI.md for complete command documentation.

Metric Subcommands

cytoscnpy raw .                    # Raw Metrics (LOC, SLOC, Comments)
cytoscnpy cc .                     # Cyclomatic Complexity
cytoscnpy hal .                    # Halstead Metrics
cytoscnpy mi .                     # Maintainability Index
cytoscnpy stats . --all            # Full project report (secrets, danger, quality)
cytoscnpy stats . --all -o report.md  # Save report to file
cytoscnpy files .                  # Per-file metrics table

Tip: Add --json for machine-readable output, --exclude-folder <DIR> to skip directories globally, or --ignore <PATTERN> for subcommand-specific glob filtering.

⚙️ Configuration

Create .cytoscnpy.toml (uses [cytoscnpy]) or add to pyproject.toml (uses [tool.cytoscnpy]):

.cytoscnpy.toml example:

[cytoscnpy]
# General Settings
confidence = 60  # Minimum confidence threshold (0-100)
exclude_folders = ["venv", ".tox", "build", "node_modules", ".git"]
include_folders = ["src", "tests"]  # Optional: whitelist folders
include_tests = false  # Note: include_ipynb is CLI-only (use --include-ipynb flag)

# Analysis Features
secrets = true
danger = true
quality = true

# Fail Threshold (exit code 1 if exceeded)
fail_threshold = 10.0  # Fail if >10% of code is unused
# fail_threshold = 0.0  # Zero tolerance: fail on any unused code

# Code Quality Thresholds
max_lines = 100       # Max lines per function
max_args = 5          # Max arguments per function
complexity = 10       # Max cyclomatic complexity
nesting = 4           # Max indentation depth
min_mi = 65.0         # Minimum Maintainability Index
ignore = ["R001"]     # Ignore specific rule IDs

# Advanced Secret Scanning
[cytoscnpy.secrets_config]
entropy_enabled = true
entropy_threshold = 4.5  # Higher = more random (API keys usually >4.0)
min_length = 16          # Min length to check for entropy
scan_comments = true     # Scan comments for secrets
skip_docstrings = false  # Skip docstrings in entropy scanning

# Custom Secret Patterns
[[cytoscnpy.secrets_config.patterns]]
name = "Slack Token"
regex = "xox[baprs]-([0-9a-zA-Z]{10,48})"
severity = "HIGH"

CI/CD Quality Gates

Configure quality gates for CI/CD pipelines. Set thresholds and the CLI exits with code 1 if exceeded.

CLI Flags:

# Unused code percentage gate
cytoscnpy . --fail-threshold 5  # Fail if >5% unused

# Complexity gate
cytoscnpy . --max-complexity 10  # Fail if any function >10

# Maintainability Index gate
cytoscnpy . --min-mi 40  # Fail if MI <40

# Quiet mode for clean CI output
cytoscnpy . --fail-threshold 5 --quiet

Priority: CLI flag > config file > environment variable > default

Environment Variable: CYTOSCNPY_FAIL_THRESHOLD=5.0

Performance

Accuracy (Benchmark Suite: 126 items)

Detection Type Precision Recall F1 Score
Classes 0.75 0.82 0.78
Functions 0.57 0.74 0.64
Methods 1.00 0.59 0.74
Imports 0.50 0.37 0.42
Variables 0.25 0.16 0.19
Overall 0.67 0.59 0.63

See benchmark/README.md for detailed comparison against Vulture, Flake8, Pylint, Ruff, and others.

Architecture

See cytoscnpy/README.md for detailed architecture and technology stack information.

Testing

See CONTRIBUTING.md for testing instructions.

Contributing

See CONTRIBUTING.md for development setup and guidelines.

License

Apache-2.0 License - see License file for details.

Links

References

CytoScnPy's design and implementation are inspired by:

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

cytoscnpy-1.1.3-cp314-cp314-manylinux_2_39_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.39+ x86-64

cytoscnpy-1.1.3-cp314-cp314-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

cytoscnpy-1.1.3-cp313-cp313-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.13Windows x86-64

cytoscnpy-1.1.3-cp313-cp313-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cytoscnpy-1.1.3-cp312-cp312-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.12Windows x86-64

cytoscnpy-1.1.3-cp312-cp312-manylinux_2_39_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

cytoscnpy-1.1.3-cp312-cp312-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cytoscnpy-1.1.3-cp311-cp311-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.11Windows x86-64

cytoscnpy-1.1.3-cp311-cp311-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cytoscnpy-1.1.3-cp310-cp310-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.10Windows x86-64

cytoscnpy-1.1.3-cp39-cp39-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.9Windows x86-64

File details

Details for the file cytoscnpy-1.1.3-cp314-cp314-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for cytoscnpy-1.1.3-cp314-cp314-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 e0ed69c10163ac0475deefa8813dd104173445f3149536196ca0061d82887d36
MD5 1241c09adc2ec958a1ead2d2a4f8dfc7
BLAKE2b-256 b41d2806a040d70add3d113c82a765056e0e56c3c1fd4cccabb690f5b0dee7a4

See more details on using hashes here.

File details

Details for the file cytoscnpy-1.1.3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cytoscnpy-1.1.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9ef3dc3003a5b29ab405e11fb734397c18eb3a8335e9a1fd925e2ff00bdbb9f1
MD5 6050c34b3050622edbc2dc82d65d50a6
BLAKE2b-256 21c5e8a98385a04e321d2e53be9d4aaf44bee541b0a0a99ae1eda1cf2ed2f4c7

See more details on using hashes here.

File details

Details for the file cytoscnpy-1.1.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: cytoscnpy-1.1.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cytoscnpy-1.1.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fe7c8643a9ddd8ed19d56725468b9d04ca54f1d2aeeee1e3cc4146d6ae03cb55
MD5 133c868da9591b6ac7908e0fe212fb37
BLAKE2b-256 3b5cf9dfcf39b449f2766571bee893c93806f7b04daad3e1a718ca4c9bf94ee4

See more details on using hashes here.

File details

Details for the file cytoscnpy-1.1.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cytoscnpy-1.1.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 199df9d1714124015c8b2ac668dadceee6ab615c83ad52d200a3a92413d460fb
MD5 903df3846199d8efd3331029f217c623
BLAKE2b-256 19c213cd54312932195e241e86debcf756de39e3451e3093e3ef99e4db0eee55

See more details on using hashes here.

File details

Details for the file cytoscnpy-1.1.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: cytoscnpy-1.1.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cytoscnpy-1.1.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 418fea35f86321a5f253ac0c45c1a875765a71f43bb1de9ee2718eabf2b6cbc6
MD5 3d3083a9a03530f76d56652a51985f47
BLAKE2b-256 f3cb34d72f19976c741ae69896a646abe137635bfb7c879e1351b06f24d35418

See more details on using hashes here.

File details

Details for the file cytoscnpy-1.1.3-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for cytoscnpy-1.1.3-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 40a7e1df0bd088b905fe4a57afe85d8cfb66cd3078943bf7e6a07816774eeb72
MD5 05a1850adec709f3cde272869bdddc09
BLAKE2b-256 89e05f04bea1ca37b1755a03fdae3666adb6cca8d6ba194b08a045fc3b955f6b

See more details on using hashes here.

File details

Details for the file cytoscnpy-1.1.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cytoscnpy-1.1.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b218c1fa3ff22171dc8b3e0553f3cefa98be6dd0403128e004b3cee0f554a6b
MD5 f36c5407b064ea5a17b0b9d03f74a5aa
BLAKE2b-256 004cebb1c702d55b7bb921c4d593726c917757ecd0fa2c85d7646f63f59f2b2f

See more details on using hashes here.

File details

Details for the file cytoscnpy-1.1.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: cytoscnpy-1.1.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cytoscnpy-1.1.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1ffeeefc58dad517ce204406cd8f2363f0c45e1ac0c628dc8d56a76cfe7f1aba
MD5 89d6d56e0956f672cb67524a776e864f
BLAKE2b-256 938cfcd764babf0a0ae45b596bb1a16ed73b6963405bc297a88f70ca70a4d0cc

See more details on using hashes here.

File details

Details for the file cytoscnpy-1.1.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cytoscnpy-1.1.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 60e58b2917d054f201c2aaa1140fbb47525f4b5e723f7650753bb2d8881835bf
MD5 4ab00475626ed0cf3961d3dbbc0563b7
BLAKE2b-256 baf63260c4c6ba1aa912d88151a4eed2fb40d62da4687a587e72bec1996b370c

See more details on using hashes here.

File details

Details for the file cytoscnpy-1.1.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: cytoscnpy-1.1.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cytoscnpy-1.1.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a9e88a70a984c17f09f2037975ab4ea47ac622603bb6b9587b1a405d1a86bfa4
MD5 7a7d9fe407d404af8c95351b96053579
BLAKE2b-256 26fecc8e17b38e856c42cab2e7e4ec5bde9e39386ae38283a4d156cf1cf16b00

See more details on using hashes here.

File details

Details for the file cytoscnpy-1.1.3-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: cytoscnpy-1.1.3-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cytoscnpy-1.1.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a9f630b73919f734b3141cbf042cb9b9e3dfea1daac4761e19ae6be6733279df
MD5 748b6b420ac6d6284837914bac5197c1
BLAKE2b-256 6cb355b59f726c523e6c4f77d0bf4a559029e11efb3a31a12abe84be462c3a64

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