Skip to main content

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

codeblocks-0.3.1.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

codeblocks-0.3.1-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

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

Hashes for codeblocks-0.3.1.tar.gz
Algorithm Hash digest
SHA256 3383ebfbad4285db2acfeec4c9e8c64f49d50d14f47ec08ab41f78b81b3a8bc0
MD5 073791acaad7965ff226e56b121298c6
BLAKE2b-256 fa151b8a7434f23e3708b6b3642b38052d0a13a491d65837195955c3e5cfbc2d

See more details on using hashes here.

File details

Details for the file codeblocks-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for codeblocks-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4f7f98c84f7986390dce8e4eb32c82be341e8bc292ea7e9e159bda6f4ed69186
MD5 08c7002c46bef1da61c0d311b077388c
BLAKE2b-256 b89868da4d7336de2ce9f468463629cc5cbdc60314cda716c7bb0ed90f4cb2d0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page