I tried to PR a --use-tabs flag but the PR was rejected without comments. Had to fork Black to be able to use it. Tan is a drop-in replacement that allows --use-tabs (and use-tabs = true in pyproject.toml).
Furthermore, prettier has a python plugin which does support tabs.
It's not like they can be effective at their job either without the ability to read 3rd party code, which overwhelmingly will be space indented.
https://www.emacswiki.org/emacs/redshift-indent.el
(Haven't tried the above, but I've done fairly extensive display hacks with emacs in the distant past, so I have a fair amount of confidence that it's not hard).
> Differences from Black
> - The default line length is 99 instead of 88 (configurable with --line-length).
> - Single quoted strings are preferred (configurable with --string-normalization none/single/double).
> - Empty lines between classes and defs are treated no differently from other code. The old behavior, which sometimes inserts double empty lines between them, remains available via --special-case-def-empty-lines.
> - The Vim plugin configuration variable for line length is named g:lavender_line_length instead of g:lavender_linelength, for consistency with the other configuration variable names.
https://black.readthedocs.io/en/stable/the_black_code_style....
I personally love black though.
Rust's "cargo fmt" tool is similarly good.