Contributing to Recursivist¶
Thank you for your interest in contributing to Recursivist! This document provides guidelines and instructions for contributing to this project.
Table of Contents¶
- Code of Conduct
- Getting Started
- Setting Up Your Development Environment
- Understanding the Project Structure
- Development Workflow
- Creating a Branch
- Making Changes
- Testing Your Changes
- Submitting a Pull Request
- Coding Standards
- Code Style
- Documentation
- Type Annotations
- Testing
- Running Tests
- Writing Tests
- Bug Reports and Feature Requests
- Reporting Bugs
- Suggesting Features
- Release Process
- Community
Code of Conduct¶
By participating in this project, you agree to abide by our Code of Conduct. Please be respectful, inclusive, and considerate when interacting with other contributors.
Getting Started¶
Setting Up Your Development Environment¶
-
Fork the repository:
-
Visit the Recursivist repository and click the "Fork" button to create your own copy.
-
Clone your fork:
- Set up the upstream remote:
- Create a virtual environment:
python -m venv venv
# Activate the virtual environment
# On Windows
venv\Scripts\activate
# On macOS/Linux
source venv/bin/activate
- Install development dependencies:
Development Workflow¶
Creating a Branch¶
- Make sure your fork is up to date:
- Create a new branch for your feature or bugfix:
Making Changes¶
-
Make your changes to the codebase according to our coding standards.
-
Commit your changes with clear and descriptive commit messages:
- Keep your branch updated with the upstream repository:
Testing Your Changes¶
- Run the tests to make sure your changes don't break existing functionality:
- Test the CLI to verify it works as expected:
Submitting a Pull Request¶
- Push your branch to your fork:
-
Create a Pull Request from your fork to the main repository:
-
Go to the Recursivist repository
- Click "Pull Requests" > "New Pull Request"
- Select "compare across forks" and choose your fork and branch
-
Click "Create Pull Request"
-
Describe your changes in the PR:
-
What problem does it solve?
- How can it be tested?
-
Any dependencies or breaking changes?
-
Address review feedback if requested by maintainers.
Coding Standards¶
Code Style¶
We follow PEP 8 and use the following tools to maintain code quality:
- Black for code formatting:
- Flake8 for linting:
- isort for import sorting:
- mypy for type checking:
Documentation¶
- Write docstrings for all public modules, functions, classes, and methods.
- Follow the Google docstring style as shown in existing code.
Example docstring:
def function(arg1: str, arg2: int) -> bool:
"""A short description of the function.
A more detailed description explaining the behavior, edge cases, and implementation details if relevant.
Args:
arg1: Description of the first argument
arg2: Description of the second argument
Returns:
Description of the return value
Raises:
ValueError: When the input is invalid
"""
Type Annotations¶
We use Python type hints for better code quality and IDE support:
from typing import Dict, List, Optional, Set
def process_data(data: Dict[str, List[str]],
options: Optional[Set[str]] = None) -> bool:
# Function implementation
return True
Testing¶
Running Tests¶
We use pytest for testing:
# Run all tests
pytest
# Run with coverage report
pytest --cov=recursivist
# Run tests from a specific file
pytest tests/test_core.py
Writing Tests¶
- Write tests for all new features and bug fixes.
- Place tests in the
tests/
directory with a name that matches the module being tested. - Follow the test style used in existing tests.
Example test:
# tests/test_core.py
from recursivist.core import generate_color_for_extension
def test_generate_color_for_extension():
# Given
extension = ".py"
# When
color = generate_color_for_extension(extension)
# Then
assert isinstance(color, str)
assert color.startswith("#")
assert len(color) == 7
Bug Reports and Feature Requests¶
Reporting Bugs¶
Please report bugs by opening an issue on GitHub with the following information:
- A clear and descriptive title
- Steps to reproduce the issue
- Expected behavior
- Actual behavior
- Environment details (OS, Python version, etc.)
- Any relevant logs or screenshots
Suggesting Features¶
We welcome feature requests! Please open an issue with:
- A clear and descriptive title
- A detailed description of the proposed feature
- Any relevant examples or use cases
- Information about why this feature would be useful
Release Process¶
-
Version bump:
-
Update version in
__init__.py
andpyproject.toml
-
Update the changelog
-
Create a release commit:
- Build and publish:
Community¶
- GitHub Discussions: Use this for questions and general discussion.
- Issues: Bug reports and feature requests.
- Pull Requests: Submit changes to the codebase.
Thank you for contributing to Recursivist! Your efforts help make this project better for everyone.