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).
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).
Furthermore, prettier has a python plugin which does support tabs.
> 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.