Simple formatter for Kconfig files
Project description
✨ kconfigstyle
A simple style linter + formatter for Kconfig files, with support for Zephyr and ESP-IDF style conventions.
Example:
❯ uvx kconfigstyle --write --reflow-help --consolidate-empty-lines --max-line-length 80 Kconfig
Before:
# incorrect and inconsistent indentation, spare newline, and unwrapped help text
config MY_OPTION
bool "Enable my option" if ANOTHER_OPTION
help
Extra long bit of help text that should be reflowed to fit within the maximum line length specified by the style guide.
This is the second line of the help text.
After:
# properly indented, consolidated newlines, and wrapped help text
config MY_OPTION
bool "Enable my option" if ANOTHER_OPTION
help
Extra long bit of help text that should be reflowed to fit within the
maximum line length specified by the style guide.
This is the second line of the help text.
Background
The "Kconfig language" is defined here:
There's several extensions used in practice by Zephyr + ESP-IDF; both projects maintain their own forks of the original kconfiglib library:
- https://github.com/zephyrproject-rtos/Kconfiglib (actively maintained fork used by Zephyr, original library here)
Espressif has an excellent documentation page here about their fork of Kconfiglib:
Which includes a parser here, however, that is intended to be used on a complete Kconfig setup, not on a per-file basis (i.e. it wants to be able to load in sourced files etc). For the purposes of basic formatting, it's only necessary to parse individual files, so I've implemented a standalone parser for this use case.
Espressif also provides a tool called
kconfcheck
to check Kconfig syntax/formatting, but it is not very configurable and does not
support auto-formatting. kconfigstyle aims to provide a more flexible and
user-friendly alternative.
Finally, see here for references on Zephyr and ESP-IDF Kconfig styles:
- https://docs.zephyrproject.org/latest/contribute/style/kconfig.html
- https://docs.espressif.com/projects/esp-idf-kconfig/en/latest/kconfcheck/index.html#kconfig-format-rules
Installation
Run without installing with uv:
uvx kconfigstyle [options] <kconfig_files>
Or install and run:
pip install kconfigstyle
kconfigstyle [options] <kconfig_files>
Command Line Options
See kconfigstyle --help for a full list of options. Some notable options
include:
-
--preset {zephyr,espidf}Use a style preset (individual options override preset values) -
--write, -wWrite formatted output back to files (format mode) -
--use-spacesUse spaces instead of tabs for indentation -
--primary-indent PRIMARY_INDENTNumber of spaces for primary indentation (default: 4), only applies when--use-spacesis set -
--help-indent HELP_INDENTNumber of extra spaces for help text indentation (default: 2) -
--max-line-length MAX_LINE_LENGTHMaximum line length (default: 100 for Zephyr, 120 for ESP-IDF) -
--max-option-length MAX_OPTION_LENGTHMaximum config option name length (default: 50) -
--uppercase-configsRequire config names to be uppercase -
--min-prefix-length MIN_PREFIX_LENGTHMinimum prefix length for config names (default: 3 for ESP-IDF) -
--indent-sub-itemsUse hierarchical indentation for sub-items (ESP-IDF style) -
--consolidate-empty-linesConsolidate multiple consecutive empty lines into one -
--reflow-helpReflow help text to fit within max line length
License
See LICENSE file for details.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kconfigstyle-0.6.3.tar.gz.
File metadata
- Download URL: kconfigstyle-0.6.3.tar.gz
- Upload date:
- Size: 15.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61fb4131713955156ea5fbfc89e59817aa9c4256ebe117c80fe071af55ca9851
|
|
| MD5 |
18f8cb7d67d91cc6cae1229430d5c08b
|
|
| BLAKE2b-256 |
66c439252c9131b01fc5bbab19e1599d1de5b9e2cf9129ff52fe22cf6fdba2ed
|
File details
Details for the file kconfigstyle-0.6.3-py3-none-any.whl.
File metadata
- Download URL: kconfigstyle-0.6.3-py3-none-any.whl
- Upload date:
- Size: 16.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d2951069544eaa3dc46ed31ef849fff2104226e890c09a7998bb91fdc8d3678
|
|
| MD5 |
38b4d63767a4b1957d08d7f5276dfb9b
|
|
| BLAKE2b-256 |
44d164f1e0524859094c2da9d2c5c6a02a39b0917d769da9ea875487a07f8767
|