Formatter for pyproject.toml files.
This package enforces consistent formatting of pyproject.toml files, reducing merge request conflicts and saving time otherwise spent on manual formatting. It also contributes to a cleaner git history and more readable code; enhancing overall project organisation and maintainability. Experience a streamlined workflow, reduced errors, and improved code readability with pyprojectsort
.
- Alphanumerically sorts pyproject.toml by:
- section
- section key
- list value
- Reformats pyproject.toml to a standardised style
- line per list value
- double quotations
- trailing commas
- indentation
- end of file newline
pyprojectsort
is available via PyPI:
pip install pyprojectsort
Using pyprojectsort with pre-commit
To use as an automated git hook, add this to your .pre-commit-config.yaml
:
- repo: https://github.com/kieran-ryan/pyprojectsort
rev: v0.3.0
hooks:
- id: pyprojectsort
With the following pyproject.toml
:
[tool.ruff]
ignore = ["G004",
"T201",
"ANN"
]
[project]
name = 'pyprojectsort'
authors = [
{ name = "Kieran Ryan" },
"Author Name <[email protected]>",
{name="Author Name"}
]
[tool.radon]
show_mi = true
exclude = "tests/*,venv/*"
total_average = true
show_complexity = true
[build-system]
build-backend = "flit.buildapi"
requires = ["flit"]
Run the package from within its directory:
pyprojectsort
The configuration will be reformatted as follows:
[build-system]
build-backend = "flit.buildapi"
requires = [
"flit",
]
[project]
authors = [
"Author Name <[email protected]>",
{ name = "Author Name" },
{ name = "Kieran Ryan" },
]
name = "pyprojectsort"
[tool.radon]
exclude = "tests/*,venv/*"
show_complexity = true
show_mi = true
total_average = true
[tool.ruff]
ignore = [
"ANN",
"G004",
"T201",
]
The pyproject file path can alternatively be specified:
pyprojectsort ../pyproject.toml
The --check option can be used to determine whether your file would be reformatted.
pyprojectsort --check
If the file needs reformatting, the program exits with an error code. This is useful for pipeline integration as it prevents writing back changes so that a clean repository is maintained for subsequent jobs.
The --diff option provides similar functionality but also displays any changes that would be made.
pyprojectsort --diff
The diff of an alphabetically reordered array will appear as follows:
@@ -6,8 +6,8 @@
[project]
authors = [
+ { name = "Author Name" },
{ name = "Kieran Ryan" },
- { name = "Author Name" },
]
pyprojectsort
is licensed under the MIT License.