Skip to main content

`shed` canonicalises Python code.

Project description

shed

shed canonicalises Python code. Shed your legacy, stop bikeshedding, and move on. Black++

What does it do?

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.

Features

shed...

  • Runs autoflake, to remove unused imports and variables
  • Runs pyupgrade, with autodetected minimum version >= py37
  • Runs isort, with autodetected first-party imports and --ca --profile=black args
  • Runs black, with autodetected minimum version >= py37
  • Formats code blocks in docstrings, markdown, and restructured text docs (like blacken-docs).
  • If shed --refactor, also runs com2ann and custom refactoring logic using libcst.

The version detection logic is provided by black. Because shed supports the same versions of Python as upstream, it assumes that the minimum version is Python 3.7.

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.

Jupyter Notebook support

We recommend using jupytext to save your notebooks in .py or .md files, in which case shed supports them natively. For a quick-and-dirty workflow, you can use nbqa shed notebook.ipynb - nbqa works for any linter or formatter.

Using shed in your editor

We recommend using black in your editor instead of shed, since it provides our core formatting logic and shed's extra smarts can be counterproductive while you're actively editing code - for example, removing an "unused" import just after you add it!

Then, when you're done editing, you can run shed from the command-line, pre-commit hooks, and your CI system.

Using shed with pre-commit

If you use pre-commit, you can use it with Shed by adding the following to your .pre-commit-config.yaml:

minimum_pre_commit_version: '2.9.0'
repos:
- repo: https://github.com/Zac-HD/shed
  rev: 0.10.0
  hooks:
    - id: shed
      # args: [--refactor, --py39-plus]
      types_or: [python, markdown, rst]

This is often considerably faster for large projects, because pre-commit can avoid running shed on unchanged files.

See also

shed inherits pyupgrade's careful approach to converting string formatting code. If you want a more aggressive refactoring tool and don't mind checking for breaking changes, check out flynt.

For Django upgrades, see django-codemod or django-upgrade.

Changelog

Patch notes can be found in CHANGELOG.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shed-0.10.0.tar.gz (26.6 kB view details)

Uploaded Source

Built Distribution

shed-0.10.0-py3-none-any.whl (26.2 kB view details)

Uploaded Python 3

File details

Details for the file shed-0.10.0.tar.gz.

File metadata

  • Download URL: shed-0.10.0.tar.gz
  • Upload date:
  • Size: 26.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.12

File hashes

Hashes for shed-0.10.0.tar.gz
Algorithm Hash digest
SHA256 1f36d2ee138dbbf258270ea8fc30719e7bb641b0976a057623191d8c7211fa88
MD5 c25b67b576be35ebcfad5595a6066f60
BLAKE2b-256 0ac1973be54e76dc6c1bb8dd22fee5cb1b413d43b1bf29f710fd82838c59497d

See more details on using hashes here.

Provenance

File details

Details for the file shed-0.10.0-py3-none-any.whl.

File metadata

  • Download URL: shed-0.10.0-py3-none-any.whl
  • Upload date:
  • Size: 26.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.12

File hashes

Hashes for shed-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e4dc606bd8f0c67afd8e529cd4886a52c405ada1f1281254a42286092650ad68
MD5 28f73f0b5d266da07b5e37acf90d2582
BLAKE2b-256 4f952c67f932cfa0bb8a16b2d0276453b5f9528ac79a428b8545777786203a9e

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page