[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-820":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":36,"readmeContent":37,"aiSummary":38,"trendingCount":16,"starSnapshotCount":16,"syncStatus":39,"lastSyncTime":40,"discoverSource":41},820,"ruff","astral-sh\u002Fruff","astral-sh","An extremely fast Python linter and code formatter, written in Rust.","https:\u002F\u002Fdocs.astral.sh\u002Fruff",null,"Rust",47933,2147,104,1662,0,29,122,462,121,45,"MIT License",false,"main",[26,27,28,29,5,30,31,32,33,34,35],"linter","pep8","python","python3","rust","rustpython","static-analysis","static-code-analysis","style-guide","styleguide","2026-06-12 02:00:19","\u003C!-- Begin section: Overview -->\n\n# Ruff\n\n[![Ruff](https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https:\u002F\u002Fraw.githubusercontent.com\u002Fastral-sh\u002Fruff\u002Fmain\u002Fassets\u002Fbadge\u002Fv2.json)](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff)\n[![image](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fruff.svg)](https:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fruff)\n[![image](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fl\u002Fruff.svg)](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Fblob\u002Fmain\u002FLICENSE)\n[![image](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fruff.svg)](https:\u002F\u002Fpypi.python.org\u002Fpypi\u002Fruff)\n[![Actions status](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Fworkflows\u002FCI\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Factions)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-%235865F2.svg?logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.com\u002Finvite\u002Fastral-sh)\n\n[**Docs**](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002F) | [**Playground**](https:\u002F\u002Fplay.ruff.rs\u002F)\n\nAn extremely fast Python linter and code formatter, written in Rust.\n\n\u003Cp align=\"center\">\n  \u003Cpicture align=\"center\">\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fuser-images.githubusercontent.com\u002F1309177\u002F232603514-c95e9b0f-6b31-43de-9a80-9e844173fd6a.svg\">\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fuser-images.githubusercontent.com\u002F1309177\u002F232603516-4fb4892d-585c-4b20-b810-3db9161831e4.svg\">\n    \u003Cimg alt=\"Shows a bar chart with benchmark results.\" src=\"https:\u002F\u002Fuser-images.githubusercontent.com\u002F1309177\u002F232603516-4fb4892d-585c-4b20-b810-3db9161831e4.svg\">\n  \u003C\u002Fpicture>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ci>Linting the CPython codebase from scratch.\u003C\u002Fi>\n\u003C\u002Fp>\n\n- ⚡️ 10-100x faster than existing linters (like Flake8) and formatters (like Black)\n- 🐍 Installable via `pip`\n- 🛠️ `pyproject.toml` support\n- 🤝 Python 3.14 compatibility\n- ⚖️ Drop-in parity with [Flake8](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Ffaq\u002F#how-does-ruffs-linter-compare-to-flake8), isort, and [Black](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Ffaq\u002F#how-does-ruffs-formatter-compare-to-black)\n- 📦 Built-in caching, to avoid re-analyzing unchanged files\n- 🔧 Fix support, for automatic error correction (e.g., automatically remove unused imports)\n- 📏 Over [900 built-in rules](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Frules\u002F), with native re-implementations\n    of popular Flake8 plugins, like flake8-bugbear\n- ⌨️ First-party [editor integrations](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Feditors) for [VS Code](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff-vscode) and [more](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Feditors\u002Fsetup)\n- 🌎 Monorepo-friendly, with [hierarchical and cascading configuration](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Fconfiguration\u002F#config-file-discovery)\n\nRuff aims to be orders of magnitude faster than alternative tools while integrating more\nfunctionality behind a single, common interface.\n\nRuff can be used to replace [Flake8](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8\u002F) (plus dozens of plugins),\n[Black](https:\u002F\u002Fgithub.com\u002Fpsf\u002Fblack), [isort](https:\u002F\u002Fpypi.org\u002Fproject\u002Fisort\u002F),\n[pydocstyle](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpydocstyle\u002F), [pyupgrade](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpyupgrade\u002F),\n[autoflake](https:\u002F\u002Fpypi.org\u002Fproject\u002Fautoflake\u002F), and more, all while executing tens or hundreds of\ntimes faster than any individual tool.\n\nRuff is extremely actively developed and used in major open-source projects like:\n\n- [Apache Airflow](https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow)\n- [Apache Superset](https:\u002F\u002Fgithub.com\u002Fapache\u002Fsuperset)\n- [FastAPI](https:\u002F\u002Fgithub.com\u002Ftiangolo\u002Ffastapi)\n- [Hugging Face](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftransformers)\n- [Pandas](https:\u002F\u002Fgithub.com\u002Fpandas-dev\u002Fpandas)\n- [SciPy](https:\u002F\u002Fgithub.com\u002Fscipy\u002Fscipy)\n\n...and [many more](#whos-using-ruff).\n\nRuff is backed by [Astral](https:\u002F\u002Fastral.sh), the creators of\n[uv](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fuv) and [ty](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fty).\n\nRead the [launch\npost](https:\u002F\u002Fastral.sh\u002Fblog\u002Fannouncing-astral-the-company-behind-ruff), or the\noriginal [project\nannouncement](https:\u002F\u002Fnotes.crmarsh.com\u002Fpython-tooling-could-be-much-much-faster).\n\n## Testimonials\n\n[**Sebastián Ramírez**](https:\u002F\u002Ftwitter.com\u002Ftiangolo\u002Fstatus\u002F1591912354882764802), creator\nof [FastAPI](https:\u002F\u002Fgithub.com\u002Ftiangolo\u002Ffastapi):\n\n> Ruff is so fast that sometimes I add an intentional bug in the code just to confirm it's actually\n> running and checking the code.\n\n[**Nick Schrock**](https:\u002F\u002Ftwitter.com\u002Fschrockn\u002Fstatus\u002F1612615862904827904), founder of [Elementl](https:\u002F\u002Fwww.elementl.com\u002F),\nco-creator of [GraphQL](https:\u002F\u002Fgraphql.org\u002F):\n\n> Why is Ruff a gamechanger? Primarily because it is nearly 1000x faster. Literally. Not a typo. On\n> our largest module (dagster itself, 250k LOC) pylint takes about 2.5 minutes, parallelized across 4\n> cores on my M1. Running ruff against our _entire_ codebase takes .4 seconds.\n\n[**Bryan Van de Ven**](https:\u002F\u002Fgithub.com\u002Fbokeh\u002Fbokeh\u002Fpull\u002F12605), co-creator\nof [Bokeh](https:\u002F\u002Fgithub.com\u002Fbokeh\u002Fbokeh\u002F), original author\nof [Conda](https:\u002F\u002Fdocs.conda.io\u002Fen\u002Flatest\u002F):\n\n> Ruff is ~150-200x faster than flake8 on my machine, scanning the whole repo takes ~0.2s instead of\n> ~20s. This is an enormous quality of life improvement for local dev. It's fast enough that I added\n> it as an actual commit hook, which is terrific.\n\n[**Timothy Crosley**](https:\u002F\u002Ftwitter.com\u002Ftimothycrosley\u002Fstatus\u002F1606420868514877440),\ncreator of [isort](https:\u002F\u002Fgithub.com\u002FPyCQA\u002Fisort):\n\n> Just switched my first project to Ruff. Only one downside so far: it's so fast I couldn't believe\n> it was working till I intentionally introduced some errors.\n\n[**Tim Abbott**](https:\u002F\u002Fgithub.com\u002Fzulip\u002Fzulip\u002Fpull\u002F23431#issuecomment-1302557034), lead developer of [Zulip](https:\u002F\u002Fgithub.com\u002Fzulip\u002Fzulip) (also [here](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Fissues\u002F465#issuecomment-1317400028)):\n\n> This is just ridiculously fast... `ruff` is amazing.\n\n\u003C!-- End section: Overview -->\n\n## Table of Contents\n\nFor more, see the [documentation](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002F).\n\n1. [Getting Started](#getting-started)\n1. [Configuration](#configuration)\n1. [Rules](#rules)\n1. [Contributing](#contributing)\n1. [Support](#support)\n1. [Acknowledgements](#acknowledgements)\n1. [Who's Using Ruff?](#whos-using-ruff)\n1. [License](#license)\n\n## Getting Started\u003Ca id=\"getting-started\">\u003C\u002Fa>\n\nFor more, see the [documentation](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002F).\n\n### Installation\n\nRuff is available as [`ruff`](https:\u002F\u002Fpypi.org\u002Fproject\u002Fruff\u002F) on PyPI.\n\nInvoke Ruff directly with [`uvx`](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F):\n\n```shell\nuvx ruff check   # Lint all files in the current directory.\nuvx ruff format  # Format all files in the current directory.\n```\n\nOr install Ruff with `uv` (recommended), `pip`, or `pipx`:\n\n```shell\n# With uv.\nuv tool install ruff@latest  # Install Ruff globally.\nuv add --dev ruff            # Or add Ruff to your project.\n\n# With pip.\npip install ruff\n\n# With pipx.\npipx install ruff\n```\n\nStarting with version `0.5.0`, Ruff can be installed with our standalone installers:\n\n```shell\n# On macOS and Linux.\ncurl -LsSf https:\u002F\u002Fastral.sh\u002Fruff\u002Finstall.sh | sh\n\n# On Windows.\npowershell -c \"irm https:\u002F\u002Fastral.sh\u002Fruff\u002Finstall.ps1 | iex\"\n\n# For a specific version.\ncurl -LsSf https:\u002F\u002Fastral.sh\u002Fruff\u002F0.15.12\u002Finstall.sh | sh\npowershell -c \"irm https:\u002F\u002Fastral.sh\u002Fruff\u002F0.15.12\u002Finstall.ps1 | iex\"\n```\n\nYou can also install Ruff via [Homebrew](https:\u002F\u002Fformulae.brew.sh\u002Fformula\u002Fruff), [Conda](https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fruff),\nand with [a variety of other package managers](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Finstallation\u002F).\n\n### Usage\n\nTo run Ruff as a linter, try any of the following:\n\n```shell\nruff check                          # Lint all files in the current directory (and any subdirectories).\nruff check path\u002Fto\u002Fcode\u002F            # Lint all files in `\u002Fpath\u002Fto\u002Fcode` (and any subdirectories).\nruff check path\u002Fto\u002Fcode\u002F*.py        # Lint all `.py` files in `\u002Fpath\u002Fto\u002Fcode`.\nruff check path\u002Fto\u002Fcode\u002Fto\u002Ffile.py  # Lint `file.py`.\nruff check @arguments.txt           # Lint using an input file, treating its contents as newline-delimited command-line arguments.\n```\n\nOr, to run Ruff as a formatter:\n\n```shell\nruff format                          # Format all files in the current directory (and any subdirectories).\nruff format path\u002Fto\u002Fcode\u002F            # Format all files in `\u002Fpath\u002Fto\u002Fcode` (and any subdirectories).\nruff format path\u002Fto\u002Fcode\u002F*.py        # Format all `.py` files in `\u002Fpath\u002Fto\u002Fcode`.\nruff format path\u002Fto\u002Fcode\u002Fto\u002Ffile.py  # Format `file.py`.\nruff format @arguments.txt           # Format using an input file, treating its contents as newline-delimited command-line arguments.\n```\n\nRuff can also be used as a [pre-commit](https:\u002F\u002Fpre-commit.com\u002F) hook via [`ruff-pre-commit`](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff-pre-commit):\n\n```yaml\n- repo: https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff-pre-commit\n  # Ruff version.\n  rev: v0.15.12\n  hooks:\n    # Run the linter.\n    - id: ruff-check\n      args: [ --fix ]\n    # Run the formatter.\n    - id: ruff-format\n```\n\nRuff can also be used as a [VS Code extension](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff-vscode) or with [various other editors](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Feditors\u002Fsetup).\n\nRuff can also be used as a [GitHub Action](https:\u002F\u002Fgithub.com\u002Ffeatures\u002Factions) via\n[`ruff-action`](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff-action):\n\n```yaml\nname: Ruff\non: [ push, pull_request ]\njobs:\n  ruff:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: astral-sh\u002Fruff-action@v3\n```\n\n### Configuration\u003Ca id=\"configuration\">\u003C\u002Fa>\n\nRuff can be configured through a `pyproject.toml`, `ruff.toml`, or `.ruff.toml` file (see:\n[_Configuration_](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Fconfiguration\u002F), or [_Settings_](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Fsettings\u002F)\nfor a complete list of all configuration options).\n\nIf left unspecified, Ruff's default configuration is equivalent to the following `ruff.toml` file:\n\n```toml\n# Exclude a variety of commonly ignored directories.\nexclude = [\n    \".bzr\",\n    \".direnv\",\n    \".eggs\",\n    \".git\",\n    \".git-rewrite\",\n    \".hg\",\n    \".ipynb_checkpoints\",\n    \".mypy_cache\",\n    \".nox\",\n    \".pants.d\",\n    \".pyenv\",\n    \".pytest_cache\",\n    \".pytype\",\n    \".ruff_cache\",\n    \".svn\",\n    \".tox\",\n    \".venv\",\n    \".vscode\",\n    \"__pypackages__\",\n    \"_build\",\n    \"buck-out\",\n    \"build\",\n    \"dist\",\n    \"node_modules\",\n    \"site-packages\",\n    \"venv\",\n]\n\n# Same as Black.\nline-length = 88\nindent-width = 4\n\n# Assume Python 3.10\ntarget-version = \"py310\"\n\n[lint]\n# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.\nselect = [\"E4\", \"E7\", \"E9\", \"F\"]\nignore = []\n\n# Allow fix for all enabled rules (when `--fix`) is provided.\nfixable = [\"ALL\"]\nunfixable = []\n\n# Allow unused variables when underscore-prefixed.\ndummy-variable-rgx = \"^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$\"\n\n[format]\n# Like Black, use double quotes for strings.\nquote-style = \"double\"\n\n# Like Black, indent with spaces, rather than tabs.\nindent-style = \"space\"\n\n# Like Black, respect magic trailing commas.\nskip-magic-trailing-comma = false\n\n# Like Black, automatically detect the appropriate line ending.\nline-ending = \"auto\"\n```\n\nNote that, in a `pyproject.toml`, each section header should be prefixed with `tool.ruff`. For\nexample, `[lint]` should be replaced with `[tool.ruff.lint]`.\n\nSome configuration options can be provided via dedicated command-line arguments, such as those\nrelated to rule enablement and disablement, file discovery, and logging level:\n\n```shell\nruff check --select F401 --select F403 --quiet\n```\n\nThe remaining configuration options can be provided through a catch-all `--config` argument:\n\n```shell\nruff check --config \"lint.per-file-ignores = {'some_file.py' = ['F841']}\"\n```\n\nTo opt in to the latest lint rules, formatter style changes, interface updates, and more, enable\n[preview mode](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Fpreview\u002F) by setting `preview = true` in your configuration\nfile or passing `--preview` on the command line. Preview mode enables a collection of unstable\nfeatures that may change prior to stabilization.\n\nSee `ruff help` for more on Ruff's top-level commands, or `ruff help check` and `ruff help format`\nfor more on the linting and formatting commands, respectively.\n\n## Rules\u003Ca id=\"rules\">\u003C\u002Fa>\n\n\u003C!-- Begin section: Rules -->\n\n**Ruff supports over 900 lint rules**, many of which are inspired by popular tools like Flake8,\nisort, pyupgrade, and others. Regardless of the rule's origin, Ruff re-implements every rule in\nRust as a first-party feature.\n\nBy default, Ruff enables Flake8's `F` rules, along with a subset of the `E` rules, omitting any\nstylistic rules that overlap with the use of a formatter, like `ruff format` or\n[Black](https:\u002F\u002Fgithub.com\u002Fpsf\u002Fblack).\n\nIf you're just getting started with Ruff, **the default rule set is a great place to start**: it\ncatches a wide variety of common errors (like unused imports) with zero configuration.\n\nIn [preview](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Fpreview\u002F), Ruff enables an expanded set of default rules\nthat includes rules from the `B`, `UP`, and `RUF` categories, as well as many more. If you give the\nnew defaults a try, feel free to leave feedback in the [GitHub\ndiscussion](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Fdiscussions\u002F23203), where you can also find the new\nrule set listed in full.\n\n\u003C!-- End section: Rules -->\n\nBeyond the defaults, Ruff re-implements some of the most popular Flake8 plugins and related code\nquality tools, including:\n\n- [autoflake](https:\u002F\u002Fpypi.org\u002Fproject\u002Fautoflake\u002F)\n- [eradicate](https:\u002F\u002Fpypi.org\u002Fproject\u002Feradicate\u002F)\n- [flake8-2020](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-2020\u002F)\n- [flake8-annotations](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-annotations\u002F)\n- [flake8-async](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-async)\n- [flake8-bandit](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-bandit\u002F) ([#1646](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Fissues\u002F1646))\n- [flake8-blind-except](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-blind-except\u002F)\n- [flake8-boolean-trap](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-boolean-trap\u002F)\n- [flake8-bugbear](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-bugbear\u002F)\n- [flake8-builtins](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-builtins\u002F)\n- [flake8-commas](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-commas\u002F)\n- [flake8-comprehensions](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-comprehensions\u002F)\n- [flake8-copyright](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-copyright\u002F)\n- [flake8-datetimez](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-datetimez\u002F)\n- [flake8-debugger](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-debugger\u002F)\n- [flake8-django](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-django\u002F)\n- [flake8-docstrings](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-docstrings\u002F)\n- [flake8-eradicate](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-eradicate\u002F)\n- [flake8-errmsg](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-errmsg\u002F)\n- [flake8-executable](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-executable\u002F)\n- [flake8-future-annotations](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-future-annotations\u002F)\n- [flake8-gettext](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-gettext\u002F)\n- [flake8-implicit-str-concat](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-implicit-str-concat\u002F)\n- [flake8-import-conventions](https:\u002F\u002Fgithub.com\u002Fjoaopalmeiro\u002Fflake8-import-conventions)\n- [flake8-logging](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-logging\u002F)\n- [flake8-logging-format](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-logging-format\u002F)\n- [flake8-no-pep420](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-no-pep420)\n- [flake8-pie](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-pie\u002F)\n- [flake8-print](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-print\u002F)\n- [flake8-pyi](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-pyi\u002F)\n- [flake8-pytest-style](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-pytest-style\u002F)\n- [flake8-quotes](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-quotes\u002F)\n- [flake8-raise](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-raise\u002F)\n- [flake8-return](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-return\u002F)\n- [flake8-self](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-self\u002F)\n- [flake8-simplify](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-simplify\u002F)\n- [flake8-slots](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-slots\u002F)\n- [flake8-super](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-super\u002F)\n- [flake8-tidy-imports](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-tidy-imports\u002F)\n- [flake8-todos](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-todos\u002F)\n- [flake8-type-checking](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-type-checking\u002F)\n- [flake8-use-pathlib](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflake8-use-pathlib\u002F)\n- [flynt](https:\u002F\u002Fpypi.org\u002Fproject\u002Fflynt\u002F) ([#2102](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Fissues\u002F2102))\n- [isort](https:\u002F\u002Fpypi.org\u002Fproject\u002Fisort\u002F)\n- [mccabe](https:\u002F\u002Fpypi.org\u002Fproject\u002Fmccabe\u002F)\n- [pandas-vet](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpandas-vet\u002F)\n- [pep8-naming](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpep8-naming\u002F)\n- [pydocstyle](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpydocstyle\u002F)\n- [pygrep-hooks](https:\u002F\u002Fgithub.com\u002Fpre-commit\u002Fpygrep-hooks)\n- [pylint-airflow](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpylint-airflow\u002F)\n- [pyupgrade](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpyupgrade\u002F)\n- [tryceratops](https:\u002F\u002Fpypi.org\u002Fproject\u002Ftryceratops\u002F)\n- [yesqa](https:\u002F\u002Fpypi.org\u002Fproject\u002Fyesqa\u002F)\n\nFor a complete enumeration of the supported rules, see [_Rules_](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Frules\u002F).\n\n## Contributing\u003Ca id=\"contributing\">\u003C\u002Fa>\n\nContributions are welcome and highly appreciated. To get started, check out the\n[**contributing guidelines**](https:\u002F\u002Fdocs.astral.sh\u002Fruff\u002Fcontributing\u002F).\n\nYou can also join us on [**Discord**](https:\u002F\u002Fdiscord.com\u002Finvite\u002Fastral-sh).\n\n## Support\u003Ca id=\"support\">\u003C\u002Fa>\n\nHaving trouble? Check out the existing issues on [**GitHub**](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Fissues),\nor feel free to [**open a new one**](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Fissues\u002Fnew).\n\nYou can also ask for help on [**Discord**](https:\u002F\u002Fdiscord.com\u002Finvite\u002Fastral-sh).\n\n## Acknowledgements\u003Ca id=\"acknowledgements\">\u003C\u002Fa>\n\nRuff's linter draws on both the APIs and implementation details of many other\ntools in the Python ecosystem, especially [Flake8](https:\u002F\u002Fgithub.com\u002FPyCQA\u002Fflake8), [Pyflakes](https:\u002F\u002Fgithub.com\u002FPyCQA\u002Fpyflakes),\n[pycodestyle](https:\u002F\u002Fgithub.com\u002FPyCQA\u002Fpycodestyle), [pydocstyle](https:\u002F\u002Fgithub.com\u002FPyCQA\u002Fpydocstyle),\n[pyupgrade](https:\u002F\u002Fgithub.com\u002Fasottile\u002Fpyupgrade), and [isort](https:\u002F\u002Fgithub.com\u002FPyCQA\u002Fisort).\n\nIn some cases, Ruff includes a \"direct\" Rust port of the corresponding tool.\nWe're grateful to the maintainers of these tools for their work, and for all\nthe value they've provided to the Python community.\n\nRuff's formatter is built on a fork of Rome's [`rome_formatter`](https:\u002F\u002Fgithub.com\u002Frome\u002Ftools\u002Ftree\u002Fmain\u002Fcrates\u002Frome_formatter),\nand again draws on both API and implementation details from [Rome](https:\u002F\u002Fgithub.com\u002Frome\u002Ftools),\n[Prettier](https:\u002F\u002Fgithub.com\u002Fprettier\u002Fprettier), and [Black](https:\u002F\u002Fgithub.com\u002Fpsf\u002Fblack).\n\nRuff's import resolver is based on the import resolution algorithm from [Pyright](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpyright).\n\nRuff is also influenced by a number of tools outside the Python ecosystem, like\n[Clippy](https:\u002F\u002Fgithub.com\u002Frust-lang\u002Frust-clippy) and [ESLint](https:\u002F\u002Fgithub.com\u002Feslint\u002Feslint).\n\nRuff is the beneficiary of a large number of [contributors](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Fgraphs\u002Fcontributors).\n\nRuff is released under the MIT license.\n\n## Who's Using Ruff?\u003Ca id=\"whos-using-ruff\">\u003C\u002Fa>\n\nRuff is used by a number of major open-source projects and companies, including:\n\n- [Albumentations](https:\u002F\u002Fgithub.com\u002Falbumentations-team\u002FAlbumentationsX)\n- Amazon ([AWS SAM](https:\u002F\u002Fgithub.com\u002Faws\u002Fserverless-application-model))\n- [Anki](https:\u002F\u002Fapps.ankiweb.net\u002F)\n- Anthropic ([Python SDK](https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fanthropic-sdk-python))\n- [Apache Airflow](https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow)\n- AstraZeneca ([Magnus](https:\u002F\u002Fgithub.com\u002FAstraZeneca\u002Fmagnus-core))\n- [Babel](https:\u002F\u002Fgithub.com\u002Fpython-babel\u002Fbabel)\n- Benchling ([Refac](https:\u002F\u002Fgithub.com\u002Fbenchling\u002Frefac))\n- [Bokeh](https:\u002F\u002Fgithub.com\u002Fbokeh\u002Fbokeh)\n- Capital One ([datacompy](https:\u002F\u002Fgithub.com\u002Fcapitalone\u002Fdatacompy))\n- CrowdCent ([NumerBlox](https:\u002F\u002Fgithub.com\u002Fcrowdcent\u002Fnumerblox)) \u003C!-- typos: ignore -->\n- [Cryptography (PyCA)](https:\u002F\u002Fgithub.com\u002Fpyca\u002Fcryptography)\n- CERN ([Indico](https:\u002F\u002Fgetindico.io\u002F))\n- [DVC](https:\u002F\u002Fgithub.com\u002Fiterative\u002Fdvc)\n- [Dagger](https:\u002F\u002Fgithub.com\u002Fdagger\u002Fdagger)\n- [Dagster](https:\u002F\u002Fgithub.com\u002Fdagster-io\u002Fdagster)\n- Databricks ([MLflow](https:\u002F\u002Fgithub.com\u002Fmlflow\u002Fmlflow))\n- [Dify](https:\u002F\u002Fgithub.com\u002Flanggenius\u002Fdify)\n- [FastAPI](https:\u002F\u002Fgithub.com\u002Ftiangolo\u002Ffastapi)\n- [Godot](https:\u002F\u002Fgithub.com\u002Fgodotengine\u002Fgodot)\n- [Gradio](https:\u002F\u002Fgithub.com\u002Fgradio-app\u002Fgradio)\n- [Great Expectations](https:\u002F\u002Fgithub.com\u002Fgreat-expectations\u002Fgreat_expectations)\n- [HTTPX](https:\u002F\u002Fgithub.com\u002Fencode\u002Fhttpx)\n- [Hatch](https:\u002F\u002Fgithub.com\u002Fpypa\u002Fhatch)\n- [Home Assistant](https:\u002F\u002Fgithub.com\u002Fhome-assistant\u002Fcore)\n- Hugging Face ([Transformers](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftransformers),\n    [Datasets](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Fdatasets),\n    [Diffusers](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Fdiffusers))\n- IBM ([Qiskit](https:\u002F\u002Fgithub.com\u002FQiskit\u002Fqiskit))\n- ING Bank ([popmon](https:\u002F\u002Fgithub.com\u002Fing-bank\u002Fpopmon), [probatus](https:\u002F\u002Fgithub.com\u002Fing-bank\u002Fprobatus))\n- [Ibis](https:\u002F\u002Fgithub.com\u002Fibis-project\u002Fibis)\n- [ivy](https:\u002F\u002Fgithub.com\u002Funifyai\u002Fivy)\n- [JAX](https:\u002F\u002Fgithub.com\u002Fjax-ml\u002Fjax)\n- [Jupyter](https:\u002F\u002Fgithub.com\u002Fjupyter-server\u002Fjupyter_server)\n- [Kraken Tech](https:\u002F\u002Fkraken.tech\u002F)\n- [LangChain](https:\u002F\u002Fgithub.com\u002Fhwchase17\u002Flangchain)\n- [Litestar](https:\u002F\u002Flitestar.dev\u002F)\n- [LlamaIndex](https:\u002F\u002Fgithub.com\u002Fjerryjliu\u002Fllama_index)\n- Matrix ([Synapse](https:\u002F\u002Fgithub.com\u002Fmatrix-org\u002Fsynapse))\n- [MegaLinter](https:\u002F\u002Fgithub.com\u002Foxsecurity\u002Fmegalinter)\n- Meltano ([Meltano CLI](https:\u002F\u002Fgithub.com\u002Fmeltano\u002Fmeltano), [Singer SDK](https:\u002F\u002Fgithub.com\u002Fmeltano\u002Fsdk))\n- Microsoft ([Semantic Kernel](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fsemantic-kernel),\n    [ONNX Runtime](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fonnxruntime),\n    [LightGBM](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FLightGBM))\n- Modern Treasury ([Python SDK](https:\u002F\u002Fgithub.com\u002FModern-Treasury\u002Fmodern-treasury-python))\n- Mozilla ([Firefox](https:\u002F\u002Fgithub.com\u002Fmozilla\u002Fgecko-dev))\n- [Mypy](https:\u002F\u002Fgithub.com\u002Fpython\u002Fmypy)\n- [Nautobot](https:\u002F\u002Fgithub.com\u002Fnautobot\u002Fnautobot)\n- Netflix ([Dispatch](https:\u002F\u002Fgithub.com\u002FNetflix\u002Fdispatch))\n- [Neon](https:\u002F\u002Fgithub.com\u002Fneondatabase\u002Fneon)\n- [Nokia](https:\u002F\u002Fnokia.com\u002F)\n- [NoneBot](https:\u002F\u002Fgithub.com\u002Fnonebot\u002Fnonebot2)\n- [NumPyro](https:\u002F\u002Fgithub.com\u002Fpyro-ppl\u002Fnumpyro)\n- [ONNX](https:\u002F\u002Fgithub.com\u002Fonnx\u002Fonnx)\n- [OpenBB](https:\u002F\u002Fgithub.com\u002FOpenBB-finance\u002FOpenBBTerminal)\n- [Open Wine Components](https:\u002F\u002Fgithub.com\u002FOpen-Wine-Components\u002Fumu-launcher)\n- [PDM](https:\u002F\u002Fgithub.com\u002Fpdm-project\u002Fpdm)\n- [PaddlePaddle](https:\u002F\u002Fgithub.com\u002FPaddlePaddle\u002FPaddle)\n- [Pandas](https:\u002F\u002Fgithub.com\u002Fpandas-dev\u002Fpandas)\n- [Pillow](https:\u002F\u002Fgithub.com\u002Fpython-pillow\u002FPillow)\n- [Poetry](https:\u002F\u002Fgithub.com\u002Fpython-poetry\u002Fpoetry)\n- [Polars](https:\u002F\u002Fgithub.com\u002Fpola-rs\u002Fpolars)\n- [PostHog](https:\u002F\u002Fgithub.com\u002FPostHog\u002Fposthog)\n- Prefect ([Python SDK](https:\u002F\u002Fgithub.com\u002FPrefectHQ\u002Fprefect), [Marvin](https:\u002F\u002Fgithub.com\u002FPrefectHQ\u002Fmarvin))\n- [PyInstaller](https:\u002F\u002Fgithub.com\u002Fpyinstaller\u002Fpyinstaller)\n- [PyMC](https:\u002F\u002Fgithub.com\u002Fpymc-devs\u002Fpymc\u002F)\n- [PyMC-Marketing](https:\u002F\u002Fgithub.com\u002Fpymc-labs\u002Fpymc-marketing)\n- [pytest](https:\u002F\u002Fgithub.com\u002Fpytest-dev\u002Fpytest)\n- [PyTorch](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Fpytorch)\n- [Pydantic](https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic)\n- [Pylint](https:\u002F\u002Fgithub.com\u002FPyCQA\u002Fpylint)\n- [PyScripter](https:\u002F\u002Fgithub.com\u002Fpyscripter\u002Fpyscripter)\n- [PyVista](https:\u002F\u002Fgithub.com\u002Fpyvista\u002Fpyvista)\n- [Reflex](https:\u002F\u002Fgithub.com\u002Freflex-dev\u002Freflex)\n- [River](https:\u002F\u002Fgithub.com\u002Fonline-ml\u002Friver)\n- [Rippling](https:\u002F\u002Frippling.com)\n- [Robyn](https:\u002F\u002Fgithub.com\u002Fsansyrox\u002Frobyn)\n- [Saleor](https:\u002F\u002Fgithub.com\u002Fsaleor\u002Fsaleor)\n- Scale AI ([Launch SDK](https:\u002F\u002Fgithub.com\u002Fscaleapi\u002Flaunch-python-client))\n- [SciPy](https:\u002F\u002Fgithub.com\u002Fscipy\u002Fscipy)\n- Snowflake ([SnowCLI](https:\u002F\u002Fgithub.com\u002FSnowflake-Labs\u002Fsnowcli))\n- [Sphinx](https:\u002F\u002Fgithub.com\u002Fsphinx-doc\u002Fsphinx)\n- [Stable Baselines3](https:\u002F\u002Fgithub.com\u002FDLR-RM\u002Fstable-baselines3)\n- [Starlette](https:\u002F\u002Fgithub.com\u002Fencode\u002Fstarlette)\n- [Streamlit](https:\u002F\u002Fgithub.com\u002Fstreamlit\u002Fstreamlit)\n- [The Algorithms](https:\u002F\u002Fgithub.com\u002FTheAlgorithms\u002FPython)\n- [Vega-Altair](https:\u002F\u002Fgithub.com\u002Faltair-viz\u002Faltair)\n- [Weblate](https:\u002F\u002Fweblate.org\u002F)\n- WordPress ([Openverse](https:\u002F\u002Fgithub.com\u002FWordPress\u002Fopenverse))\n- [ZenML](https:\u002F\u002Fgithub.com\u002Fzenml-io\u002Fzenml)\n- [Zulip](https:\u002F\u002Fgithub.com\u002Fzulip\u002Fzulip)\n- [build (PyPA)](https:\u002F\u002Fgithub.com\u002Fpypa\u002Fbuild)\n- [cibuildwheel (PyPA)](https:\u002F\u002Fgithub.com\u002Fpypa\u002Fcibuildwheel)\n- [delta-rs](https:\u002F\u002Fgithub.com\u002Fdelta-io\u002Fdelta-rs)\n- [featuretools](https:\u002F\u002Fgithub.com\u002Falteryx\u002Ffeaturetools)\n- [meson-python](https:\u002F\u002Fgithub.com\u002Fmesonbuild\u002Fmeson-python)\n- [nox](https:\u002F\u002Fgithub.com\u002Fwntrblm\u002Fnox)\n- [pip](https:\u002F\u002Fgithub.com\u002Fpypa\u002Fpip)\n\n### Show Your Support\n\nIf you're using Ruff, consider adding the Ruff badge to your project's `README.md`:\n\n```md\n[![Ruff](https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https:\u002F\u002Fraw.githubusercontent.com\u002Fastral-sh\u002Fruff\u002Fmain\u002Fassets\u002Fbadge\u002Fv2.json)](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff)\n```\n\n...or `README.rst`:\n\n```rst\n.. image:: https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https:\u002F\u002Fraw.githubusercontent.com\u002Fastral-sh\u002Fruff\u002Fmain\u002Fassets\u002Fbadge\u002Fv2.json\n    :target: https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\n    :alt: Ruff\n```\n\n...or, as HTML:\n\n```html\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https:\u002F\u002Fraw.githubusercontent.com\u002Fastral-sh\u002Fruff\u002Fmain\u002Fassets\u002Fbadge\u002Fv2.json\" alt=\"Ruff\" style=\"max-width:100%;\">\u003C\u002Fa>\n```\n\n## License\u003Ca id=\"license\">\u003C\u002Fa>\n\nThis repository is licensed under the [MIT License](https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\u002Fblob\u002Fmain\u002FLICENSE)\n\n\u003Cdiv align=\"center\">\n  \u003Ca target=\"_blank\" href=\"https:\u002F\u002Fastral.sh\" style=\"background:none\">\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fastral-sh\u002Fruff\u002Fmain\u002Fassets\u002Fsvg\u002FAstral.svg\" alt=\"Made by Astral\">\n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n","Ruff 是一个用 Rust 编写的极快速的 Python 代码检查工具和格式化器。它比现有的代码检查工具（如 Flake8）和格式化工具（如 Black）快 10 到 100 倍，并且支持通过 `pip` 安装、`pyproject.toml` 配置以及 Python 3.14 兼容性。Ruff 内置了超过 900 条规则，能够自动修复错误（例如删除未使用的导入），并且支持缓存以避免重复分析未更改的文件。此外，Ruff 还提供了与 VS Code 等编辑器的集成，非常适合用于大型项目或需要高效代码检查和格式化的开发环境。",2,"2026-06-11 02:39:33","top_all"]