Skip to content

mbarkhau/straitjacket

Repository files navigation

logo

StraitJacket is a wrapper around black which implements post processing to perform automatic code alignment.

Project/Repo:

MIT License Supported Python Versions CalVer v202206.1026 PyPI Version PyPI Downloads

Code Quality/CI:

GitHub Build Status GitLab Build Status Type Checked with mypy Code Coverage Code Style: sjfmt

Name role since until
Manuel Barkhau (mbarkhau@gmail.com) author/maintainer 2018-10 -

Alignment

Example of automatic alignment.

class TokenType(enum.Enum):           # class TokenType(enum.Enum):

    INDENT    = 0                     #     INDENT = 0
    SEPARATOR = 1                     #     SEPARATOR = 1
    CODE      = 2                     #     CODE = 2


Indent      = str                     # Indent = str
RowIndex    = int                     # RowIndex = int
ColIndex    = int                     # ColIndex = int
OffsetWidth = int                     # OffsetWidth = int
TokenTable  = typ.List[TokenRow]      # TokenTable = typ.List[TokenRow]

Usage

Usage is exactly the same as for black, except that the command is named sjfmt.

$ pip install straitjacket
$ sjfmt --help
Usage: sjfmt [OPTIONS] [SRC]...

  Another uncompromising code formatter.

Options:
  -l, --line-length INTEGER       How many characters per line to allow.
                                  [default: 88]
  --py36                          Allow using Python 3.6-only syntax on all

Editor/Tooling Integration

Plugins for your editor usually support setting a custom path to black. You can simply point to sjfmt instead.

Unix

$ which sjfmt
/home/user/miniconda3/envs/py36/bin/sjfmt
$ which sjfmtd
/home/user/miniconda3/envs/py36/bin/sjfmtd

Windows

C:\Users\Username>where sjfmt
C:\Python37\Scripts\sjfmt.exe

or

PS C:\Users\Username> (gcm sjfmt).Path
C:\Python37\Scripts\sjfmt.exe
{

    "black_command": "C:/Python37/Scripts/sjfmt.exe",
    "black_line_length": 100,
    // ...
}

Document formatting can be triggered with Ctrl+Alt+F.

{
    "python.formatting.provider": "black",
    "python.formatting.blackPath": "C:\\Python37\\Scripts\\sjfmt.exe",
    "python.formatting.blackArgs": [
        "--line-length", "100",
        "--py36",
        "--skip-string-normalization"
    ],
}

Document formatting can be triggered with Shift+Alt+F.

Install the plugin black-pycharm, which can be found in Settings > Plugins > Brows Repositories. You may have to restart PyCharm for the plugin to load.

To configure the path, go to Settings > Tools > BlackPycharm Configuration and set Path to Black executable to the location of the sjfmt binary.

You can reformat your code using Ctrl + Shift + A to access the Find Action panel. The name of the action to format your code is Reformat code (BLACK). You may want to rebind this action, at least in my setup the default binding didn't seem to work.

Flake8

By the nature of this plugin, certain flake8 codes will be violated. This is an excerpt from what you might put in your setup.cfg to ignore these:

[flake8]
ignore =
    # No whitespace after paren open "("
    E201
    # No whitespace before paren ")"
    E202
    # Whitespace before ":"
    E203
    # Multiple spaces before operator
    E221
    # Multiple spaces after operand
    E222
    # Multiple spaces after ':'
    E241
    # Multiple spaces before keyword
    E272
    # Spaces around keyword/parameter equals
    E251