Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/disrupted/blackd-client
⬛ Faster Python code formatting using Black
https://github.com/disrupted/blackd-client
blackd formatter neovim python python-black rust
Last synced: 11 days ago
JSON representation
⬛ Faster Python code formatting using Black
- Host: GitHub
- URL: https://github.com/disrupted/blackd-client
- Owner: disrupted
- License: gpl-3.0
- Created: 2021-04-28T10:51:14.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-07-18T08:15:22.000Z (over 1 year ago)
- Last Synced: 2024-04-23T23:47:02.649Z (7 months ago)
- Topics: blackd, formatter, neovim, python, python-black, rust
- Language: Rust
- Homepage:
- Size: 164 KB
- Stars: 26
- Watchers: 2
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-blazingly-fast - blackd-client - ⬛ Blazing fast Python code formatting using Black (Rust)
README
# blackd-client
> Tiny HTTP client for the Black (`blackd`) Python code formatter
[Black](https://github.com/psf/black) is a brilliant, opinionated formatter for Python. However it can be quite slow when using an editor integration with format on save, since the process is cold-started every time you call it.
Luckily there's [blackd](https://black.readthedocs.io/en/stable/usage_and_configuration/black_as_a_server.html), which is a small HTTP server that keeps the Black process running in the background so that it can be called directly without the lenghty startup time.
**blackd-client** is a simple helper that provides a single executable to communicate with Black, mainly for me to learn Rust.
If you're using Black (or writing Python code in general) I recommend you to check it out!
## Install
1. Install Black
```sh
pip install black
```or using Homebrew on macOS (preferred)
```sh
brew install black
```2. Install blackd-client
- Download binary from https://github.com/disrupted/blackd-client/releases
- Rename to `blackd-client` and put it somewhere on your `PATH`Alternatively if you have Rust toolchain installed:
```sh
cargo install blackd-client
```3. Start blackd daemon
```sh
blackd
```or as a launchd service using Homebrew on macOS (preferred)
```sh
sudo brew services start black
```## Usage
pipe file contents to stdin, e.g.
```sh
cat main.py | blackd-client
```output is formatted using Black :sparkles:
## Benchmark comparison
Normal `black --fast`
```sh
❯ hyperfine 'cat subclean/core/parser.py | black --fast -'
Time (mean ± σ): 296.8 ms ± 41.3 ms [User: 228.7 ms, System: 51.1 ms]
Range (min … max): 260.7 ms … 403.6 ms 10 runs
```Using `blackd-client`
```sh
❯ hyperfine 'cat subclean/core/parser.py | blackd-client'
Time (mean ± σ): 23.7 ms ± 3.7 ms [User: 2.7 ms, System: 4.8 ms]
Range (min … max): 19.2 ms … 35.7 ms 84 runs
```**Result:** blackd is more than 10x faster! :rocket:
## Neovim integration
Editor integration for Neovim can be done using a general purpose language server.
There are two options to choose from:1. [null-ls](https://github.com/disrupted/dotfiles/blob/1f5d36a195a41b602ca68d7629360e54654e3db2/.config/nvim/lua/plugins/lsp.lua#L33) (what I use)
2. [EFM](https://github.com/disrupted/dotfiles/blob/253dc440ed954a4289a72dad885c71c16d0f90a4/.config/nvim/lua/efm/blackd.lua)