Extract and process code blocks from Markdown files.
Project description
codeblocks
Extract and process code blocks from Markdown files. Now you can keep code examples automatically:
- formatted (e.g. using black for Python)
- type checked
- unit tested
- linted
- up-to-date with
--help
- etc
Quick start
(if uv is available)
Try codeblocks
without installing:
uvx codeblocks --help
Install to PATH
:
uv tool install codeblocks
codeblocks --help
Install with Python package manager
With pip
:
pip install codeblocks
With uv
:
uv add codeblocks
With poetry
:
poetry add codeblocks
Usage
Usage: codeblocks [OPTIONS] LANGUAGE FILE [COMMAND]...
Extract or process LANGUAGE code blocks in Markdown FILE.
Extract Python code blocks:
codeblocks python README.md
Reformat Python code blocks with `black`, in place:
codeblocks python README.md -- black -
Options:
--wrap Wrap each code block in a function.
--check / --no-check Do not modify the file, just return the status. Return
code 0 means block matches COMMAND output. Return code
1 means block would be modified.
--version Show the version and exit.
--help Show this message and exit.
Examples
Extract Python code blocks:
codeblocks python README.md
Check formatting of Python code blocks with black:
codeblocks --check python README.md -- black -
Reformat Python code blocks with black, in place:
codeblocks python README.md -- black -
Type check Python code blocks with mypy (--wrap
puts each code block into its own function):
mypy somemodule anothermodule <(codeblocks python --wrap README.md)
Insert the output of codeblock --help
into usage
block in this README.md:
codeblocks usage README.md -- codeblocks --help
Check that usage
block in this README.md is up-to-date with --help
output:
codeblocks --check usage README.md -- codeblocks --help
Full type checking example
def plus(x: int, y: int) -> int:
return x + y
plus(1, '2')
$ mypy --pretty <(codeblocks python README.md)
/dev/fd/63:5: error: Argument 2 to "plus" has incompatible type "str"; expected "int" [arg-type]
plus(1, '2')
^~~
Found 1 error in 1 file (checked 1 source file)
Rationale
There are alternative tools, but none of them supported all of the cases above.
- prettier can reformat Markdown code blocks (PR), but it works only for supported languages like JavaScript. It does not support Python. No lint or unit test support.
- blacken-docs can reformat Python code blocks, but it does not support all black options. For example,
black --check
is not supported. No lint or unit test support. In addition,codeblocks
implementation is much simpler and is not coupled with black. - excode is very similar, but does not support in place modifications.
- gfm-code-blocks does not have command line interface.
- codedown does not support processing and separate code block extraction
- cog is fully generic, but requires writing scripts embedded in Markdown
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file codeblocks-0.3.1.tar.gz
.
File metadata
- Download URL: codeblocks-0.3.1.tar.gz
- Upload date:
- Size: 15.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3383ebfbad4285db2acfeec4c9e8c64f49d50d14f47ec08ab41f78b81b3a8bc0 |
|
MD5 | 073791acaad7965ff226e56b121298c6 |
|
BLAKE2b-256 | fa151b8a7434f23e3708b6b3642b38052d0a13a491d65837195955c3e5cfbc2d |
File details
Details for the file codeblocks-0.3.1-py3-none-any.whl
.
File metadata
- Download URL: codeblocks-0.3.1-py3-none-any.whl
- Upload date:
- Size: 8.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4f7f98c84f7986390dce8e4eb32c82be341e8bc292ea7e9e159bda6f4ed69186 |
|
MD5 | 08c7002c46bef1da61c0d311b077388c |
|
BLAKE2b-256 | b89868da4d7336de2ce9f468463629cc5cbdc60314cda716c7bb0ed90f4cb2d0 |