CLI tool for managing linting, formatting and testing
Project description
🧹 Tidy CLI ✨
Keep your code clean and robust!
Platforms
Tidy CLI simplifies your development process by combining essential tools like ruff, mypy, pydoclint, and pytest into a single, easy-to-use command-line interface. Perfect for maintaining code quality and running tests across Python projects of any size.
✨ Key Features
- 🔧 Unified Linting: Combines ruff, mypy, and pydoclint in one command
- 🎨 Smart Formatting: Automatic code formatting with ruff
- 🧪 Integrated Testing: Run pytest with coverage reporting
- ⚡ Auto-fix: Automatically fix linting issues where possible
- 🔄 Interactive Mode: Review and apply fixes interactively
- 📊 Flexible Execution: Target specific files, directories, or entire projects
- ⚙️ Configurable: Skip tools, customize paths, and adapt to your workflow
🚀 Installation
With pip
# Using pip
pip install tidy-cli
With uv (recommended)
uv pip install tidy-cli
uv add tidy-cli
Requirements
- Python 3.10+
- Works on Linux, macOS, and Windows
🏃 Quick Start
1. Get a Feeling
# See what you are dealing with
tidy-cli
# Deep dive on what you are dealing with
tidy-cli --help
# Install auto-completion for easier usage
tidy-cli --install-completion
# Set up tidy-cli for your project
tidy-cli init
The settings are about:
- The Pytest folder path, just type
.if nochdiris made when running tests. - The location of the
pyproject.tomlfile relative to the Pytest folder path. - The default path to lint if no other path is passed (e.g.,
srcif one wants to lint the entiresrcfolder as default). - The path to the
pyproject.tomlrelative to thecwdwhen running thelintcommands.
2. Run Code Quality Checks
# Lint your entire project (i.e., on the default lint path)
tidy-cli lint run
# Auto-fix (fixable) issues
tidy-cli lint run --fix
3. Run Tests
# Run all tests with coverage
tidy-cli pytest run
That's it! Tidy CLI will handle the rest.
📖 Usage Guide
Code Quality & Linting Commands
# Run all linters (ruff, mypy, pydoclint)
tidy-cli lint run
# Target specific files or directories (relative to the default path/folder)
tidy-cli lint run src/my_module
tidy-cli lint run my_module/file.py # if src has been chosen as default path/folder
# Interactive mode (i.e., you are prompted if to run a specific linter/formatter/checker)
tidy-cli lint run --interactive
# Auto-fix issues where possible
tidy-cli lint run --fix
# Skip specific linters
tidy-cli lint run --skip-mypy
tidy-cli lint run --skip-pydoclint
Testing Commands
# Run all tests with coverage
tidy-cli pytest run
# Run specific test files
tidy-cli pytest run tests/test_example.py
# Show detailed test output on a path (logs can be displayed only on path runs)
tidy-cli pytest run tests/test_example.py --logs
CLI Configuration
# Initialize settings for all tools
tidy-cli init
# Initialize specific tool settings
tidy-cli lint init
tidy-cli pytest init
# Show current version
tidy-cli version
⚙️ Configuration
Tidy CLI stores settings in local/cli_settings.json with sensible defaults:
{
"lint_default_path": "src",
"lint_config_path": "pyproject.toml",
"pytest_default_path": "tests",
"pytest_config_path": "pyproject.toml"
}
Tool Configuration
Configure the underlying tools in your pyproject.toml:
[tool.ruff]
lint.select = [
"I",
"E",
"F",
"W",
"C90",
"N",
"D",
]
[tool.mypy]
python_version = "3.11"
ignore_missing_imports = true
[tool.pydoclint]
style = "sphinx"
[tool.coverage.run]
omit = [
"tests/*",
]
🤝 Contributing
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Run the tests:
tidy-cli pytest run - Run the linters:
tidy-cli lint run --fix - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
Development Setup
git clone https://github.com/alfredo-cinelli/tidy-cli.git
cd tidy-cli
uv venv .venv --python=3.12
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv sync --group dev
uv pip install -e .
📋 Changelog
See CHANGELOG.md for a detailed history of changes.
🐛 Issues & Support
- Bug Reports: GitHub Issues
- Documentation: GitHub Wiki
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Ruff - Fast Python linter and formatter
- MyPy - Static type checker
- Pydoclint - Docstring linter
- Pytest - Testing framework
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
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 tidy_cli-0.1.2.tar.gz.
File metadata
- Download URL: tidy_cli-0.1.2.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23a907ada8b9b4adefa2d93e51caae54ed6bf3cd49841527c2cc94f65bb53683
|
|
| MD5 |
50f3a29438732f0b8121136d438c1fa1
|
|
| BLAKE2b-256 |
aea6afc5e835fb3ef07314358f06eb3fdf52b7e59b67b2fba502c82353116dbf
|
File details
Details for the file tidy_cli-0.1.2-py3-none-any.whl.
File metadata
- Download URL: tidy_cli-0.1.2-py3-none-any.whl
- Upload date:
- Size: 15.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eff3bf563a7119a1e7cd632e8ecd472bd0ebac555285530e176e7173b37e57d9
|
|
| MD5 |
fc72176371c6a7b4eca0926b0cec6bba
|
|
| BLAKE2b-256 |
87929092279da2f5cdd0c40db1bff8a9443ce5cdb844ec0093bd8c18292d29e3
|