Thank you for your interest in contributing to TransformPlan! This document provides guidelines for contributing to the project.
-
Clone the repository:
git clone https://github.com/limebit/transformplan.git cd transformplan -
Install development dependencies:
make install-dev
This will:
- Create a virtual environment
- Install all dependencies including dev tools
- Set up pre-commit hooks
This project uses strict linting and type checking:
- Ruff for linting and formatting (line length: 88)
- Pyright for type checking (strict mode)
Before submitting code, ensure it passes all checks:
make lint # Run linting and type checking
make format # Auto-fix formatting issues- Follow PEP 8 conventions
- Use Google-style docstrings
- Add type annotations to all functions
- Keep functions focused and single-purpose
Run the test suite with:
make testTo run a specific test:
.venv/bin/pytest tests/test_file.py::test_function -vAll new features should include tests. Aim for high test coverage on critical paths.
-
Fork the repository and create a feature branch from
main -
Make your changes following the code style guidelines
-
Add tests for new functionality
-
Run checks before submitting:
make lint make test -
Submit a pull request with:
- Clear description of the changes
- Reference to any related issues
- Summary of testing performed
- Runtime dependencies:
uv add <package> - Dev dependencies:
uv add --group dev <package>
TransformPlan uses a mixin-based design:
TransformPlanBase(core.py) - Execution logic and operation registry- Operation mixins (ops/) - Column, math, row, string, datetime, and map operations
TransformPlan(plan.py) - Combines all mixins
Operations use deferred execution - they're registered via method chaining, then executed together via process(), validate(), or process_checked().
If you have questions, please open an issue for discussion.