inclean
English | 简体中文
A C/C++ #include path normalizer.
Many legacy C/C++ libraries #include headers by bare filename
(#include "bar.h") even though the actual header lives several
directories deep (src/internal/bar.h). To consume such a library a
caller must add every internal directory to their -I list — which
pollutes their include namespace and breaks the library's
encapsulation.
inclean does a one-shot, source-level normalization. It scans every
source file in the library and rewrites each #include so it resolves
cleanly against a small, explicit set of allowed include directories.
After running inclean, consumers only -I the allowed directories.
Why inclean?
When using legacy libraries like some-old-lib, consumers often have to leak the library's internal directory structure into their own build configuration.
Without inclean:
You have to add internal library paths to your own -I search paths to compile successfully.
gcc main.c -o main -I third_party -I third_party/some-old-lib/internal
Using inclean:
inclean automatically cleans up and standardizes the #include paths inside some-old-lib. Consumers only need to include the top-level directory.
gcc main.c -o main -I third_party
Install
inclean is published to crates.io, PyPI, and as prebuilt
binaries on GitHub Releases. Pick whichever ecosystem you already
have on your machine.
Via PyPI (Python wheels — no Rust toolchain needed)
Three options:
uv tool install inclean # isolated, fastest
pipx install inclean # isolated
pip install inclean # into the current environment
The wheels ship the native binary built by maturin; inclean lands on
your PATH the same way ruff or uv do. Requires Python ≥ 3.8.
Via cargo
Two options:
cargo binstall inclean # prebuilt binary from GitHub Releases (no compilation)
cargo install inclean # build from crates.io
cargo binstall fetches inclean's binstall metadata from crates.io and downloads the
matching prebuilt archive from this repo's GitHub Releases (no
compilation).
cargo binstall is a third-party cargo subcommand — install it first
via cargo-bins/cargo-binstall
if you don't already have it.
cargo install downloads the source from crates.io and compiles it locally.
Prebuilt binaries (no package manager)
Download a tarball for your platform from the
latest GitHub Release
and put inclean (or inclean.exe) on your PATH.
From repo source
Clone this repo and build from source:
git clone https://github.com/inaku-Gyan/inclean.git
cd inclean
cargo install --path .
Quick start
inclean is driven by an inclean.toml placed at the root of the
library you want to clean up. A typical workflow:
inclean init # write a documented starter inclean.toml
$EDITOR inclean.toml # tell it where your headers live
inclean check # dry-run: report every proposed change
inclean diff # see the rewrites as a unified diff
inclean apply # write the rewrites in place
check / diff / apply optionally take [PATHS...] to restrict
which files are processed; with no paths they consider every source
file under the project root. -c PATH overrides the upward inclean.toml
walk; -j N sets the worker thread count.
Configuration at a glance
Each [[rule]] narrows down the includes it owns, then chooses what to do
with them.
file_pathsandfile_suffixesselect source files.include_formsandinclude_matchselect include lines.include_directoriesenables header lookup;include_resolved_matchfilters the resolved header path.actionrewrites, removes, comments out, keeps, or reports an error;trailing_commenthandles same-line comments.
Most projects only need include_match plus one action. Use
include_directories for path normalization, and look at macro_rewrite only
when you need to edit macro-based includes. For glob rules, macro include
behavior, conflict handling, copy semantics, and all fields, see the
configuration reference.
Example
A simple replace-action config that rewrites #include "foo.h" to
#include "lib/foo.h":
[project]
root = "."
version = "0.3.0"
min_inclean_version = "0.3.0"
[[rule]]
name = "lib-prefix"
file_paths = ["src/**/*"]
include_match = ["foo.h", "bar.h"]
action = { type = "replace", with = "lib/${original}" }
See tests/golden_tests/ for runnable end-to-end examples.
Editor support
inclean.toml ships with a JSON Schema for editor completion and
validation. Editors that understand the #:schema directive (VS Code
with Tombi
or Even Better TOML,
Helix, Zed) automatically pick it up:
#:schema https://raw.githubusercontent.com/inaku-Gyan/inclean/v0.4.1/schemas/inclean.toml.schema.json
[project]
root = "."
version = "0.4.1"
min_inclean_version = "0.4.0-alpha.3"
(The above version numbers are examples for this release line.)
inclean init writes both the #:schema line (for the editor) and the
[project].version + [project].min_inclean_version fields. version
tracks the CLI that generated the file; min_inclean_version tracks the
oldest CLI expected to parse that generated config. To upgrade schema
validation, edit the version segment in the URL to a newer release tag.
#:schema and the [project] version fields are independent. The
#:schema URL is purely for editor tooling; the CLI runs its own
two-direction compatibility check (CLI_COMPAT_MIN <= cfg.version AND
cfg.min_inclean_version <= CLI_CURRENT). inclean is pre-1.0 and does
not ship migration shims for breaking schema changes — see
CLAUDE.md.
You can also dump a local copy:
inclean config schema --output inclean.toml.schema.json
Documentation
- Configuration reference — field meanings, matching syntax, actions, copy semantics, constants, and examples.
- schemas/inclean.toml.schema.json — editor schema generated from the Rust config structs.
- tests/golden_tests/ — runnable examples for replacement, resolution, copy semantics, suppression, trailing comments, conflicts, and encoding preservation.
- CONTRIBUTING.md — toolchain, dev workflow, conventions, scope.
License
Metadata
Release files for inclean 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| inclean-0.4.1.tar.gz | 8.3 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| inclean-0.4.1-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| inclean-0.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| inclean-0.4.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| inclean-0.4.1-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| inclean-0.4.1-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 17.1 MB
Release files / inclean-0.4.1.tar.gz
| Download URL | inclean-0.4.1.tar.gz |
|---|---|
| Size | 8.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dfb08bc210cb0c157ca6514cea41d01804f55ea5e3e404a235ce6533fa398c3f
|
|
BLAKE2b-256 checksum How to use checksums |
fcbe1c7c660013add811014a88fa54f6870626bc6ad0eb466c167f8995c277d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency logRelease files / inclean-0.4.1-py3-none-win_amd64.whl
| Download URL | inclean-0.4.1-py3-none-win_amd64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
01a900d1d38982a7067b6467fd4f030bd2203ed623c1ea526525e76e4a58a2c3
|
|
BLAKE2b-256 checksum How to use checksums |
7f2496f006f8ba2bb44006956afcc72bc59ffe4ccd14d8fa7076d94c0719626e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency logRelease files / inclean-0.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | inclean-0.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
ee5945f9e5d1cf73a627122f9831acff7840b3ffe2cb7f1b5ef6cd31adc8cf23
|
|
BLAKE2b-256 checksum How to use checksums |
2540c2754e04f6fd8fd781c47d9c7cc8f290d1dc0810a1ad9fb4939cdd0bf3d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency logRelease files / inclean-0.4.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | inclean-0.4.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
fa771752eb79d454f78cd16cecc83a23aed06c565225c85bff923c57e1f0645c
|
|
BLAKE2b-256 checksum How to use checksums |
f1346a4cd9de4bc641a25dabde68d20a0743a3f19206451c3bab232dbeba7434
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency logRelease files / inclean-0.4.1-py3-none-macosx_11_0_arm64.whl
| Download URL | inclean-0.4.1-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7644f209b1137d0dd6874bac79bfb80f226e6905996abb84686cc4fc48e0a154
|
|
BLAKE2b-256 checksum How to use checksums |
a1c1afb7089ea3372d8bd7f95f1f6e5df368e43ea8e63c5e88b2a45b450bdf88
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency logRelease files / inclean-0.4.1-py3-none-macosx_10_12_x86_64.whl
| Download URL | inclean-0.4.1-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
ed5d7d2a24b70d9baadb1113cdc44812295a77cb5dff117e24cd2262669bf364
|
|
BLAKE2b-256 checksum How to use checksums |
b0326fc2eec57a26807daaea78c7f19ebaca8e1c40a4365cfbed0ccf1e04393f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency log