Coder Social home page Coder Social logo

agucova / shed Goto Github PK

View Code? Open in Web Editor NEW

This project forked from zac-hd/shed

0.0 1.0 0.0 242 KB

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

Home Page: https://pypi.org/project/shed/

License: GNU Affero General Public License v3.0

Python 100.00%

shed's Introduction

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 (based on 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: 2023.5.1
  hooks:
    - id: shed
      # args: [--refactor, --py39-plus]
      types_or: [python, pyi, 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.

The ssort project sorts the contents of python modules so that statements are placed after the things they depend on, for easier navigation and consistency of design.

Semgrep supports some autofixes, with patterns for a wide variety of languages. This includes a variety of both security and style checks, with manual inspection of results recommended.

Changelog

Patch notes can be found in CHANGELOG.md.

shed's People

Contributors

zac-hd avatar cheukting avatar drmaciver avatar jakkdl avatar rudyardrichter avatar jacklee1792 avatar jtyliu avatar isidentical avatar daisylb avatar chaimjfishman avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.