Contributing to OneCite
=======================
Thank you for your interest in contributing to OneCite! This guide will help you get started.
Getting Started
---------------
1. Fork the Repository
~~~~~~~~~~~~~~~~~~~~~~
Click the "Fork" button on the GitHub repository page.
2. Clone Your Fork
~~~~~~~~~~~~~~~~~~
::
git clone https://github.com/your-username/OneCite.git
cd OneCite
3. Create a Branch
~~~~~~~~~~~~~~~~~~
::
git checkout -b feature/your-feature-name
# or for bug fixes
git checkout -b fix/issue-description
4. Set Up Development Environment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -e ".[dev]"
Development Workflow
--------------------
Code Style
~~~~~~~~~~
We follow PEP 8 style guidelines. Use ``black`` for formatting::
black onecite/ tests/
Linting
~~~~~~~
Use ``flake8`` to check code quality::
flake8 onecite/ tests/
Running Tests
~~~~~~~~~~~~~
Run the test suite::
pytest tests/
Check coverage::
pytest --cov=onecite tests/
Creating Commits
~~~~~~~~~~~~~~~~
Write clear, descriptive commit messages::
# Good
git commit -m "Add support for custom templates"
# Bad
git commit -m "Fix stuff"
Use the imperative mood: "Add feature" not "Added feature"
Types of Contributions
----------------------
Bug Reports
~~~~~~~~~~~
Before submitting a bug report:
1. Check existing issues to avoid duplicates
2. Include your Python and OneCite version
3. Provide a minimal code example to reproduce
4. Describe expected vs actual behavior
**Template:**
::
**Describe the bug**
[Description of the bug]
**To Reproduce**
[Steps to reproduce]
**Expected behavior**
[What should happen]
**Actual behavior**
[What actually happens]
**Environment**
- Python version: 3.x.x
- OneCite version: 0.x.x
- OS: Windows/macOS/Linux
Feature Requests
~~~~~~~~~~~~~~~~
Describe:
1. What problem it solves
2. How it would be used
3. Any alternative approaches
**Template:**
::
**Is your feature request related to a problem?**
[Describe the problem]
**Describe the solution**
[Describe the proposed solution]
**Describe alternatives considered**
[Alternative solutions or features]
Code Contributions
~~~~~~~~~~~~~~~~~~
1. Small Fixes
^^^^^^^^^^^^^^
For typos, documentation, or small bugs:
1. Create a branch
2. Make the change
3. Test thoroughly
4. Submit a PR with clear description
2. New Features
^^^^^^^^^^^^^^^
For larger features:
1. Open an issue first to discuss
2. Wait for feedback from maintainers
3. Once approved, implement
4. Include tests and documentation
5. Submit PR
3. Bug Fixes
^^^^^^^^^^^^
For bug fixes:
1. Open an issue describing the bug
2. Create a branch from the issue
3. Include a test that demonstrates the bug
4. Implement the fix
5. Ensure the test now passes
Documentation Improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~
Documentation is crucial! Contributions include:
- Fixing typos
- Clarifying explanations
- Adding examples
- Improving API documentation
- Translating documentation
Submit documentation changes as PRs to the repository.
Submitting a Pull Request
--------------------------
1. **Push to Your Fork**
::
git push origin feature/your-feature-name
2. **Create a Pull Request**
Go to GitHub and click "New Pull Request"
3. **PR Description**
Include:
- What change does it make?
- Why is this change needed?
- How has it been tested?
- Any breaking changes?
**Template:**
::
## Description
[Brief description of changes]
## Related Issues
Closes #123
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Documentation
- [ ] Other
## Testing
[Describe testing performed]
## Checklist
- [ ] Tests pass
- [ ] Code follows style guidelines
- [ ] Documentation updated
- [ ] No breaking changes
4. **Code Review**
A maintainer will review your PR. Be prepared to:
- Discuss implementation
- Address feedback
- Make requested changes
- Ensure tests pass
5. **Merge**
Once approved, a maintainer will merge your PR.
Testing Guidelines
------------------
Writing Tests
~~~~~~~~~~~~~
Tests should be:
- **Isolated** - Not dependent on other tests
- **Clear** - Easy to understand intent
- **Focused** - Test one thing
- **Fast** - Complete quickly
**Example:**
::
def test_process_references_with_doi():
result = process_references(
input_content="10.1038/nature14539",
input_type="txt"
)
assert result['processed_count'] == 1
assert '10.1038/nature14539' in result['output_content']
Running Tests
~~~~~~~~~~~~~
::
# Run all tests
pytest
# Run specific test file
pytest tests/test_cli.py
# Run specific test
pytest tests/test_cli.py::test_process_command
# Run with coverage
pytest --cov=onecite
Documentation Guidelines
-------------------------
Code Comments
~~~~~~~~~~~~~
- Add docstrings to all functions and classes
- Use Google-style docstrings
::
def process_references(input_content, input_type="txt"):
"""Process references and return formatted bibliography.
Args:
input_content (str): The reference content to process
input_type (str): Type of input - "txt" or "bib"
Returns:
dict: Dictionary with output_content, processed_count, etc.
Raises:
ValidationError: If input is invalid
ParseError: If parsing fails
"""
API Documentation
~~~~~~~~~~~~~~~~~
Update docstrings when changing:
- Function signatures
- Parameters
- Return values
- Exceptions
- Behavior
Release Process
---------------
Versioning
~~~~~~~~~~
OneCite follows `Semantic Versioning `_:
- **MAJOR.MINOR.PATCH** (e.g., 1.2.3)
- MAJOR: Breaking changes
- MINOR: New features (backward compatible)
- PATCH: Bug fixes
Community Standards
-------------------
Code of Conduct
~~~~~~~~~~~~~~~
- Be respectful
- Be inclusive
- Provide constructive feedback
- Accept criticism gracefully
- Report inappropriate behavior
Communication
~~~~~~~~~~~~~
- Use clear, professional language
- Be patient with new contributors
- Assume good intentions
- Help educate when needed
Project Leadership
~~~~~~~~~~~~~~~~~~
The OneCite Team:
- Makes final decisions on features and releases
- Reviews and merges PRs
- Maintains project standards
- Responds to issues and discussions
Getting Help
~~~~~~~~~~~~
- Check existing documentation
- Search closed issues and PRs
- Ask in GitHub Discussions
- Contact maintainers if needed
Additional Resources
--------------------
- `GitHub Flow Guide `_
- `PEP 8 Style Guide `_
- `Semantic Versioning `_
- `Conventional Commits `_
Recognition
-----------
Contributors are recognized in:
- Release notes
- README acknowledgments
- GitHub contributors page
Thank you for making OneCite better!
Next Steps
----------
- Check the issues page for `good first issues `_
- Read existing code and tests
- Start with documentation or small fixes
- Ask questions in discussions