Metadata-Version: 2.1
Name: shed
Version: 0.3.8
Summary: `shed` canonicalises Python code.
Home-page: https://github.com/Zac-HD/shed
Author: Zac Hatfield-Dodds
Author-email: zac@zhd.dev
License: AGPL-3.0
Project-URL: Source, https://github.com/Zac-HD/shed/
Project-URL: Changelog, https://github.com/Zac-HD/shed/blob/master/CHANGELOG.md
Project-URL: Funding, https://github.com/sponsors/Zac-HD
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE

# 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](https://en.wikipedia.org/wiki/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`](https://pypi.org/project/autoflake/),
  to remove unused imports and variables
- Runs [`pyupgrade`](https://pypi.org/project/pyupgrade/),
  with autodetected minimum version >= py36
- Runs [`isort`](https://pypi.org/project/isort/),
  with autodetected first-party imports and `--ca --profile=black` args
- Runs [`black`](https://pypi.org/project/black/),
  with autodetected minimum version >= py36
- Formats code blocks in docstrings, markdown, and restructured text docs
  (like [`blacken-docs`](https://pypi.org/project/blacken-docs/)).
- If `shed --refactor`, also runs [`pybetter`](https://pypi.org/project/pybetter/)
  to fix style issues, [`teyit`](https://pypi.org/project/teyit/) to update
  deprecated `unittest` methods, and [`com2ann`](https://pypi.org/project/com2ann/)
  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](https://hynek.me/articles/testing-packaging/)
packages are also automatically detected, i.e. the `foo` in any paths like
`.../src/foo/__init__.py`.

## Using with pre-commit
If you use [pre-commit](https://pre-commit.com/), you can use it with Shed by
adding the following to your `.pre-commit-config.yaml`:

```yaml
repos:
- repo: https://github.com/Zac-HD/shed
  rev: 0.3.8
  hooks:
  - id: shed
```

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

## Changelog

Patch notes [can be found in `CHANGELOG.md`](https://github.com/Zac-HD/shed/blob/master/CHANGELOG.md).


