Sponsors
Become a sponsor-
iPulse AI
Open Agentic Investment Research Platform. Inspect deep multi-agent market forecasts and stock picks.
Listed in editorial order, grouped by use case. Click a column header to re-sort the whole list.
Press / to search. Tags open their category. Click a row for details.
Search and filter
Results
| Row number | Tags | |||||
|---|---|---|---|---|---|---|
General 4 projects |
||||||
| 1 | import-linter General | 30,596,080 | 1,241 | General Code Analysis Developer Tools | ||
|
A linter that enforces architectural constraints on imports between Python modules.
|
||||||
| 2 | vulture General | 15,643,556 | 4,866 | General Code Analysis Developer Tools | ||
|
A tool for finding and analyzing dead Python code.
|
||||||
| 3 | complexipy General | 1,451,867 | 898 | General Code Analysis Developer Tools | ||
|
Cognitive complexity analysis for Python code, written in Rust.
|
||||||
| 4 | prospector General | 302,095 | 2,082 | General Code Analysis Developer Tools | ||
|
A tool to analyze Python code.
|
||||||
Git Hooks 1 project |
||||||
| 5 | pre-commit Git Hooks | 148,286,977 | 15,672 | Git Hooks Code Analysis Developer Tools | ||
|
A framework for managing and maintaining multi-language pre-commit hooks.
|
||||||
Linters and Formatters 6 projects |
||||||
| 6 | ruff Linters and Formatters | 370,811,586 | 50,331 | Linters and Formatters Code Analysis Developer Tools | ||
|
An extremely fast Python linter and code formatter.
|
||||||
| 7 | black Linters and Formatters | 119,048,240 | 42,071 | Linters and Formatters Code Analysis Developer Tools | ||
|
The uncompromising Python code formatter.
|
||||||
| 8 | isort Linters and Formatters | 93,955,350 | 6,962 | Linters and Formatters Code Analysis Developer Tools | ||
|
A Python utility / library to sort imports.
|
||||||
| 9 | pylint Linters and Formatters | 38,996,265 | 5,746 | Linters and Formatters Code Analysis Developer Tools | ||
|
A fully customizable source code analyzer.
|
||||||
| 10 | flake8 Linters and Formatters | 41,209,392 | 3,832 | Linters and Formatters Code Analysis Developer Tools | ||
|
A wrapper around
pycodestyle, pyflakes and McCabe. |
||||||
| 11 | bandit Linters and Formatters | 27,493,131 | 8,362 | Linters and Formatters Code Analysis Developer Tools | ||
|
A tool designed to find common security issues in Python code.
|
||||||
Refactoring 2 projects |
||||||
| 12 | rope Refactoring | 1,486,122 | 2,244 | Refactoring Code Analysis Developer Tools | ||
|
Rope is a Python refactoring library.
|
||||||
| 13 | ast-grep-cli Refactoring | 3,659,480 | 16,398 | Refactoring Code Analysis Developer Tools | ||
|
A CLI tool for structural code search, linting, and rewriting based on syntax trees.
|
||||||
Type Checkers 4 projects |
||||||
| 14 | mypy Type Checkers | 186,000,406 | 20,711 | Type Checkers Code Analysis Developer Tools | ||
|
A static type checker for Python.
|
||||||
| 15 | ty Type Checkers | 46,649,195 | 19,986 | Type Checkers Code Analysis Developer Tools | ||
|
An extremely fast Python type checker and language server.
|
||||||
| 16 | pyright Type Checkers | 47,081,982 | 15,717 | Type Checkers Code Analysis Developer Tools | ||
|
Full-featured static type checker for Python from Microsoft, the engine behind Pylance.
|
||||||
| 17 | pyrefly Type Checkers | 9,499,169 | 7,170 | Type Checkers Code Analysis Developer Tools | ||
|
A fast type checker and language server for Python.
|
||||||
No projects match your search.
Try a broader term, or .
Code Analysis guide
Ruff can replace Flake8, Black, and isort, plus dozens of Flake8 plugins. Its docs suggest you start with a small rule set, add one group at a time, and list them explicitly in select. Ruff is a linter, not a type checker, so run a type checker alongside it.
pre-commit installs and runs the hooks you list in .pre-commit-config.yaml, written in any language. Run pre-commit install first thing after you clone a repo that uses it, so the hooks run on every git commit, and add pre-commit run --all-files as a CI step.
Import Linter checks contracts on the imports between your modules: lint-imports fails when code breaks one. A layers contract lets higher layers import lower ones but not the other way around, and it counts chains of imports through other modules too.
Vulture finds unused code, and running it on your tests too shows you untested code.
complexipy measures cognitive complexity: how hard code is for people to understand. Unlike cyclomatic complexity, it counts nesting. Its docs recommend running it alongside Ruff, whose complexity rule measures something else.
Prospector runs Pylint and other analyzers together, and aims to be useful out of the box, with default profiles so you don't have to sort out which warnings matter. When your project uses Django, Flask, or Celery, it adapts its checks to that framework.
With Black, you give up control over hand-formatting, and in return, code looks the same in every project and diffs stay small. Its style options are deliberately limited. If you sort imports with isort, set the black profile so the two agree.
Pylint infers the actual values in your code instead of trusting its type hints. That makes it slower than other linters, but it finds more in code that isn't fully typed, and it's why Ruff isn't a drop-in replacement for Pylint. Because of that speed, run it in CI or a pre-push hook rather than on every commit.
Flake8 wraps pyflakes, pycodestyle, and McCabe in one command, and its plugins are much of its appeal. Keep it when you depend on a plugin of your own, since Ruff doesn't support custom lint rules.
Bandit finds common security issues in Python code. Scan a whole tree with bandit -r.
Rope is a refactoring library that many IDEs and editors use to rename, extract, and move code, and scripts can run the same refactorings through its library API.
ast-grep matches code by its syntax tree, with patterns you write like ordinary code. Start with a one-off rewrite on the command line: ast-grep run --pattern ... --rewrite ... shows you a diff of the changes. When the same code smell keeps coming back, its docs suggest you write a YAML rule and run all your rules with ast-grep scan.
mypy is designed for gradual typing: by default, it skips functions without annotations, so you can add type hints slowly. Check in one config file, run mypy in CI so new type errors don't land, and aim for --strict. Its plugins teach it libraries the standard type system can't describe.
Pyrefly is a type checker and language server with built-in support for Pydantic and Django, so those work without plugins. It reads an existing mypy or Pyright config, so you can try it alongside your current checker before you switch.
ty is a type checker and language server designed for adoption on partly typed code. Unlike mypy, it checks the bodies of unannotated functions, and it leaves missing-annotation checks to Ruff's ANN rules.
Pyright checks all code by default, annotated or not, which its language server features rely on. In VS Code, its docs recommend Pylance, which includes Pyright. Run it in CI to keep the project type clean, then turn on # pyright: strict file by file.
Pylint, Prospector, Import Linter, and ty all need to see your project's dependencies, so run them from the project's own environment, not a separate one. For more Python code analysis tools, see awesome-static-analysis.
Contribute
Know a project that belongs here?
Tell us what it does and why it stands out.