Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

StraitJacket: Another Uncompromising Code Formatter for Python

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

Project/Repo:

MIT License Supported Python Versions PyCalVer v201904.0010-beta PyPI Version PyPI Downloads

Code Quality/CI:

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

sublack:

{

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

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

vscode python extension

{
    "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.

BlackPycharm

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 before keyword
    E272

Changelog for straitjacket

v201904.0010-beta

  • Update for release of black==19.3b0

v201812.0007-alpha

TLDR: more bugfixes and updated documentation

v201812.0006-alpha

TLDR: no major changes, just bug fixes.

  • Fixed #1: Disable right alignment of numbers when not preceded by a number.
  • Fixed #3: Disable alignment when preceded by a multiline string.
  • Fixed #4: Excessive whitespace in non aligned context.
  • Fixed #8: Double and single quotes around strings not consistent

v201810.0004-alpha

  • Initial release

Metadata

Release files for straitjacket 201904.10b0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for straitjacket 201904.10b0
File Size Uploaded
straitjacket-201904.10b0.tar.gz 17.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for straitjacket 201904.10b0
File Interpreter ABI Platform
straitjacket-201904.10b0-py36.py37-none-any.whl Python 3.7, Python 3.6 none any Details

Total release size: 29.8 kB

Release files / straitjacket-201904.10b0.tar.gz

Download URL straitjacket-201904.10b0.tar.gz
Size 17.3 kB
Tags Source
SHA-256 checksum
How to use checksums
52dd2096f7f0a444da103c4f38af592a28b4bbc3687389b5cf783cbc605a5b0c
BLAKE2b-256 checksum
How to use checksums
f486472dee16b0a3ece4d1f13d028c44589b68251392c01fd225e02d04035314
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.7

Release files / straitjacket-201904.10b0-py36.py37-none-any.whl

Download URL straitjacket-201904.10b0-py36.py37-none-any.whl
Size 12.5 kB
Tags Python 3.6 Python 3.7
SHA-256 checksum
How to use checksums
9541a00e391c7eeefd26fc986d7a43205300acf67e8c67439af88259c7e8a124
BLAKE2b-256 checksum
How to use checksums
ca3099ba3e25c0b3132f8197a1fa765657e55bcc652e601b1e7a94101a821a1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.7
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page