.. _contributing:

Contributing to OrganiserPro
============================

Thank you for your interest in contributing to OrganiserPro! We welcome contributions from everyone, whether you're a developer, designer, writer, or just someone with a good idea.

Ways to Contribute
-----------------

There are many ways to contribute to OrganiserPro:

- **Code contributions**: Fix bugs, implement new features, or improve existing code
- **Documentation**: Improve documentation, fix typos, or add examples
- **Bug reports**: Report bugs you find while using OrganiserPro
- **Feature requests**: Suggest new features or improvements
- **Testing**: Help test the software and report issues
- **Community**: Help answer questions on issue trackers or forums

Getting Started
--------------

1. **Fork the repository** on GitHub
2. **Clone your fork** locally:

   .. code-block:: bash

      git clone https://github.com/your-username/OrganiserPro.git
      cd OrganiserPro

3. **Set up the development environment**:

   .. code-block:: bash

      # Create and activate a virtual environment (recommended)
      python -m venv venv
      source venv/bin/activate  # On Windows: venv\Scripts\activate

      # Install the package in development mode with all dependencies
      pip install -e .[dev]

4. **Create a new branch** for your changes:

   .. code-block:: bash

      git checkout -b your-feature-branch

5. **Make your changes** and ensure tests pass:

   .. code-block:: bash

      # Run tests
      pytest

      # Check code style
      black OrganiserPro tests
      isort OrganiserPro tests
      flake8 OrganiserPro tests

6. **Commit your changes** with a clear message:

   .. code-block:: bash

      git commit -m "Add your commit message here"

7. **Push to your fork** and submit a pull request

Coding Standards
---------------

- Follow `PEP 8`_ style guidelines
- Use type hints for all functions and methods
- Write docstrings for all public functions, classes, and modules
- Keep lines under 88 characters (Black's default line length)
- Write tests for new features and bug fixes
- Document all new features and changes

.. _PEP 8: https://www.python.org/dev/peps/pep-0008/

Commit Message Guidelines
-----------------------

- Use the present tense ("Add feature" not "Added feature")
- Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
- Limit the first line to 72 characters or less
- Reference issues and pull requests liberally after the first line
- Consider starting the commit message with an applicable emoji:
  - :bug: `:bug:` when fixing a bug
  - :sparkles: `:sparkles:` when adding a new feature
  - :memo: `:memo:` when writing docs
  - :art: `:art:` when improving the format/structure
  - :zap: `:zap:` when improving performance
  - :white_check_mark: `:white_check_mark:` when adding tests
  - :wrench: `:wrench:` when updating configuration
  - :recycle: `:recycle:` when refactoring code
  - :fire: `:fire:` when removing code or files
  - :lock: `:lock:` when dealing with security
  - :arrow_up: `:arrow_up:` when upgrading dependencies
  - :arrow_down: `:arrow_down:` when downgrading dependencies

Testing
------

We use pytest_ for testing. To run the tests:

.. code-block:: bash

   # Run all tests
   pytest

   # Run tests with coverage
   pytest --cov=OrganiserPro

   # Run a specific test file
   pytest tests/test_something.py -v

   # Run a specific test function
   pytest tests/test_something.py::test_function_name -v

.. _pytest: https://docs.pytest.org/

Documentation
------------

We use Sphinx_ for documentation. To build the documentation:

.. code-block:: bash

   # Install documentation dependencies
   pip install -e .[docs]

   # Build the documentation
   cd docs
   make html

   # Open the documentation in your browser
   open _build/html/index.html

.. _Sphinx: https://www.sphinx-doc.org/

Code Review Process
------------------

1. Create a pull request (PR) with your changes
2. Ensure all CI checks pass
3. A maintainer will review your PR and provide feedback
4. Address any feedback and update your PR
5. Once approved, a maintainer will merge your PR

Code of Conduct
--------------

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See :doc:`code_of_conduct` for more information.

License
------
By contributing to OrganiserPro, you agree that your contributions will be licensed under the MIT License.
