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: Understands Flask, Django, FastAPI patterns
  • 📊 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, and FastAPI 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

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
--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

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

Tip: Add --json for machine-readable output, --exclude-folder <DIR> to skip directories.

⚙️ Configuration

Create .cytoscnpy.toml or add to pyproject.toml:

[tool.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

# 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

# CI/CD Integration
fail_threshold = 5.0  # Exit with code 1 if unused code % exceeds this

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

# Custom Secret Patterns
[[tool.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.2-cp314-cp314-manylinux_2_39_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.39+ x86-64

cytoscnpy-1.1.2-cp314-cp314-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

cytoscnpy-1.1.2-cp313-cp313-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.13Windows x86-64

cytoscnpy-1.1.2-cp313-cp313-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cytoscnpy-1.1.2-cp312-cp312-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.12Windows x86-64

cytoscnpy-1.1.2-cp312-cp312-manylinux_2_39_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

cytoscnpy-1.1.2-cp312-cp312-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cytoscnpy-1.1.2-cp311-cp311-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.11Windows x86-64

cytoscnpy-1.1.2-cp311-cp311-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cytoscnpy-1.1.2-cp310-cp310-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.10Windows x86-64

cytoscnpy-1.1.2-cp39-cp39-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.9Windows x86-64

File details

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

File metadata

File hashes

Hashes for cytoscnpy-1.1.2-cp314-cp314-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 844a02da62beb360110db914d96d7231117e969a32a95ef6d868a8356735d3ba
MD5 a0f52be616acfbc4c63bedf51dfaaf7c
BLAKE2b-256 0bd79ae85536c21e0521c0cbeb4b1d7e52ce8787722af99420bbad32f811d808

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cytoscnpy-1.1.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 08bcf20e7d52b5538dfad35840f1a9c914390f67c153a82c68b578f30a0f05e4
MD5 346a2b03df6ae7985bdaf3d21c0dd634
BLAKE2b-256 b94d71c62de44a86c0c04c7d29f60087cafaf4114e2970b9922a16a441620b76

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cytoscnpy-1.1.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.6 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.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e1cffb72e76a7ff6504b82e32284bd76ba2b37eb929d5425acf74198a4515a47
MD5 e97ef0619a114fd288657125d119b947
BLAKE2b-256 4881ceca5320b0053e507407369d109bb56501e8ac5e80e1cfed38c271536535

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cytoscnpy-1.1.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e80ddf8fd84cbaf4ce822fdcda4d05452dd99d8566e3632f867d728cf7f2161e
MD5 6c11e4bdb3b46cb8b88faf653ae8e084
BLAKE2b-256 ecabfe715e3aa552e1f069ad1b8649f2e371c9cdebcfc9a873f4acfa1718fa6d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cytoscnpy-1.1.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.6 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.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 aa3b31077cd3926af7c895421be37dc6744c9af8bc7b62a455e6dab6dba80318
MD5 29f2504843faef3a185b774c25ffc689
BLAKE2b-256 c2a834d83fb1039555f273a1d6058f3bdea3b8c1ddd471b9d51f05dd51d06a92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cytoscnpy-1.1.2-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 27c001a361acefd63892c5867d277f130ab20b76ea49210777df0f5337a5062d
MD5 e0ea38bebb32a164d27e50160921d81e
BLAKE2b-256 b5bdbc187ee61c4b2c339c9cb7d3061b2bd479f7228e2231d6632bfe698185ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cytoscnpy-1.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 90fe12b93ec3c74e1ffb8937cf6b82e6c9f3cc17a7d89437e34f721359769c4c
MD5 d7ddd264feab6858329fcf3fd9435312
BLAKE2b-256 7fc049257732d026323d54ecbf55330b86e8e4c2fdf0ebd97fdb1850f073584a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cytoscnpy-1.1.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.6 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.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e3d4c378fe62a91ad1012549bfa150ca47f915800a7d5c9784265b73184ea230
MD5 c006bceeeb9ce1d25c22654c9df7323e
BLAKE2b-256 af1ff9f65c0e33ac4591d3f596b3ae9e1351b7c046697c9ba7d6cf6560ae7642

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cytoscnpy-1.1.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6d2f569b8ddf4c283543ca2bb03541ea7a51f6cca54b219ee77fbfe6289d4f38
MD5 d6dfdd0a864174daaaa85ca5232a199b
BLAKE2b-256 19d350da9d39214e667822882874ca8b36295dcfa9bd522bd6393659e099d25c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cytoscnpy-1.1.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.6 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.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 13fb009137358c3ef58c7b681d99298c5ff7c037732b79235bdf2f165d4b6c3f
MD5 f5391ac03f198060c08afbb1d6ad25fb
BLAKE2b-256 fd69922a9d91f6535609ed7fab702871222df648631888dbf17edc980bde13a6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cytoscnpy-1.1.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 2.6 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.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 dbce94de58899b7154f79bf2313518c9b594de1b9740710a89dc66348bbb0294
MD5 1dc2dba3d8c13ef46ae057a1621eb3a8
BLAKE2b-256 eda34c666ce9ed29400f0788634953280267563d0ceedd9bcc0a89320f314b19

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