shed
canonicalises Python code. Shed your legacy, stop bikeshedding, and move on. Black++
shed
is the maximally opinionated autoformatting tool. It's all about
convention over configuration,
and designed to be a single opinionated tool that fully canonicalises my
code - formatting, imports, updates, and every other fix I can possibly
automate.
There are no configuration options at all, but if the defaults aren't for you that's OK - you can still use the underlying tools directly and get most of the same effect... though you'll have to configure them yourself.
shed
must either be run in a git repo to auto-detect the files to format,
or explicitly passed a list of files to format on the command-line.
shed
...
- Runs
autoflake
, to remove unused imports and variables - Runs
pyupgrade
, with autodetected minimum version >= py36 - Runs
isort
, with autodetected first-party imports and--ca --profile=black
args - Runs
black
, with autodetected minimum version >= py36 - Formats code blocks in docstrings, markdown, and restructured text docs
(like
blacken-docs
). - If
shed --refactor
, also runspybetter
to fix style issues,teyit
to update deprecatedunittest
methods, andcom2ann
to convert type comments to annotations.
The version detection logic is provided by black
, with an extra step to discard
versions before Python 3.6.
If you run shed
in a Git repository, the name of the root directory is assumed to be a
first-party import. src
layout
packages are also automatically detected, i.e. the foo
in any paths like
.../src/foo/__init__.py
.
If you use pre-commit, you can use it with Shed by
adding the following to your .pre-commit-config.yaml
:
repos:
- repo: https://github.com/Zac-HD/shed
rev: 0.3.6
hooks:
- id: shed
This is often considerably faster for large projects, because pre-commit
can avoid running shed
on unchanged files.
Patch notes can be found in CHANGELOG.md
.