
Security News
New CVE Forecasting Tool Predicts 47,000 Disclosures in 2025
CVEForecast.org uses machine learning to project a record-breaking surge in vulnerability disclosures in 2025.
Pyrefact does advanced python refactoring, with the goal of simplifying complicated code, deleting dead code, and improving performance. Pyrefact is entirely rule-based.
if
/else
blocks before or after the if
/else
.continue
and return
statements.if
conditions with filter
.if
/else
to put the smaller block first.collections.defaultdict()
.black
.is
instead of ==
for comparisons to None
, True
and False
.sum
comprehensions and for loops with constant expressions. The symbolic algebra tool Sympy is used under the hood.sorted()[:n]
with heapq.nsmallest
, replace sorted()[0]
with min
.np.matmul()
and np.dot()
calls, for code that already depends on numpy._
._
, unless where that would cause a syntax error.sorted()
, set()
, tuple()
, reversed()
, iter()
and list()
.self
and cls
function arguments, and add @staticmethod
or @classmethod
.@staticmethod
outside of their class namespaces.if
, elif
and else
statements.from pathlib import *
) to normal imports (e.g. from pathlib import Path
)__init__.py
files, and files that define __all__
.Sequence
is used but never defined, it will insert from typing import Sequence
at the top of the file.Pyrefact supports pattern-matching analogous to Python's builtin re
library. The functions finditer
, findall
, sub
, subn
, search
, match
, fullmatch
and compile
are implemented:
>>> from pyrefact import pattern_matching
>>> source = """
... x = 1
... y = "asdf"
... """
>>> pattern = "x = 1"
>>> list(pattern_matching.finditer(pattern, source))
[Match(span=Range(start=1, end=6), source='\nx = 1\ny = "asdf"\n', groups=(<ast.Assign object at 0x1015f38e0>,))]
>>> pattern_matching.findall(pattern, source)
['x = 1']
>>> pattern_matching.sub(pattern, "x = 33 - x", source)
'\nx = 33 - x\ny = "asdf"\n'
>>> pattern_matching.search(pattern, source)
Match(span=Range(start=1, end=6), source='\nx = 1\ny = "asdf"\n', groups=(<ast.Assign object at 0x103acaf20>,))
Pattern-matching can also be used from the command-line:
pyrefind "x = {{value}}" /path/to/filename.py
pyreplace "x = {{value}}" "x = 1 - {{value}} ** 3" /path/to/filename.py
Pyrefact can be installed with pip, and works on Python 3.8 or newer:
pip install pyrefact
The --preserve
flag lets you define places where code is used. When this is set, pyrefact will try to keep these usages intact.
The --safe
flag will entirely prevent pyrefact from renaming or removing code.
The --from-stdin
flag will format code recieved from stdin, and output the result to stdout.
pip install pyrefact
pyrefact /path/to/filename.py --preserve /path/to/module/where/filename/is/used
pyrefact /path/to/filename.py --safe
cat /path/to/filename.py | pyrefact --from-stdin
It is possible to disable pyrefact for a given file by adding a comment with pyrefact: skip_file
anywhere in the file, as done here.
To contribute to Pyrefact, please view CONTRIBUTING.md
Pyrefact is also available as a VS Code extension, simply named Pyrefact
. The extension allows you to use pyrefact as your formatter, similar to how other formatting extensions work.
Pyrefact always runs with the --safe
flag when used through the VS Code extension.
The extension is published through the VS Code Marketplace, and the source code is available at pyrefact-vscode-extension.
Pyrefact is tested on CPython 3.8, 3.9, 3.10, 3.11 and 3.12, and on Windows, MacOS and Linux. Pyrefact is also tested on PyPy3.10.
PyPy tests may be removed in the future, see https://github.com/OlleLindgren/pyrefact/issues/25. I will add tests for new CPython versions when they enter alpha, and remove tests when they become EOL, along with any special logic in place to support those versions.
FAQs
Automated Python refactoring
We found that pyrefact demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
CVEForecast.org uses machine learning to project a record-breaking surge in vulnerability disclosures in 2025.
Security News
Browserslist-rs now uses static data to reduce binary size by over 1MB, improving memory use and performance for Rust-based frontend tools.
Research
Security News
Eight new malicious Firefox extensions impersonate games, steal OAuth tokens, hijack sessions, and exploit browser permissions to spy on users.