# Contributing to Open Location Code

The Open Location Code project strongly encourages technical contributions.

We hope you'll become an ongoing participant in our open source community, but we also welcome one-off contributions for the issues you're particularly passionate about.

- [Contributing to Open Location Code](#contributing-to-open-location-code)
  - [Filing issues](#filing-issues)
    - [Bugs](#bugs)
    - [Suggestions](#suggestions)
  - [Contributing code](#contributing-code)
  - [Contributing a new implementation](#contributing-a-new-implementation)
  - [Contributor License Agreement](#contributor-license-agreement)
  - [Ongoing participation](#ongoing-participation)
    - [Discussion channels](#discussion-channels)

## Filing issues

### Bugs

If you find a bug in an Open Location Code library, please [file an issue](https://github.com/google/open-location-code/issues/new).
Members of the community are regularly monitoring issues and will try to fix open bugs quickly.

The best bug reports provide a detailed description of the issue, step-by-step instructions for predictably reproducing the issue, and possibly even a working example that demonstrates the issue.

Please note that questions about how to use Open Location Code or other general questions should be asked on the [Open Location Code Google Group](https://groups.google.com/forum/#!forum/open-location-code)<!-- Uncomment if this becomes sensible --><!-- or [Stack Overflow under the Open Location Code tag](http://stackoverflow.com/questions/tagged/open-location-code) -->
instead of filing an issue here.

### Suggestions

The Open Location Code project is meant to evolve with feedback.
The project and its users appreciate your thoughts on ways to improve the design or features or creative ways to use the codes.

To make a suggestion [file an issue](https://github.com/google/open-location-code/issues/new).

If you are intending to implement, please see the [Contributing code](#contributing-code) section below for next steps.

If you are adding the Open Location Code library to your project, please contact the [Open Location Code Google Group](https://groups.google.com/forum/#!forum/open-location-code) so we can suggest how you can make the most of the codes.

## Contributing code

The Open Location Code project accepts and greatly appreciates code contributions!

A few things to note:

* The Open Location Code project follows the [fork & pull](https://help.github.com/articles/using-pull-requests/#fork--pull) model for accepting contributions.
* We follow [Google's JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html).
  More generally make sure to follow the same comment and coding style as the rest of the project.
* Do not try to address multiple issues in a single pull request.
  In some cases, you might even resolve a single issue with multiple PRs (e.g. if you are changing multiple implementations).
* Include [tests](TESTING.md) when contributing code.
  There are tests that you can use as examples.

## Contributing a new implementation

If you have an implementation in your own repository, that's great!
Unfortunately we can't accept implementations in languages we're not familiar with as we won't be able to maintain or test them.
You can add a link to it in our [list of external implementations](Documentation/External_Implementations.md).

* Look at the existing implementations, to get an idea of the usage and how much work is involved.
* If you copy the code structure and algorithms from an existing implementation, you'll have a much shorter review cycle.
* [Create a new GitHub issue](https://github.com/google/open-location-code/issues/new) to start discussion of the new feature.
* Follow the guidelines for [Contributing code](#contributing-code) described above.
* Don't forget to add tests!

## Contributor License Agreement

The Open Location Code project hosted at GitHub requires all contributors to sign a Contributor License Agreement ([individual](https://developers.google.com/open-source/cla/individual) or [corporation](https://developers.google.com/open-source/cla/corporate)) in order to protect contributors, users and Google in issues of intellectual property.

When you create a Pull Request, a check will be run to ensure that you have signed the CLA.
Make sure that you sign the CLA with the same email address you associate with your commits (likely via the `user.email` Git config as described on GitHub's [Set up Git](https://help.github.com/articles/set-up-git/) page).

## Ongoing participation

We actively encourage ongoing participation by community members.

### Discussion channels

Technical issues, designs, etc. are discussed on [GitHub issues](https://github.com/google/open-location-code/issues) and [pull requests](https://github.com/google/open-location-code/pulls),
or the [Open Location Code Google Group](https://groups.google.com/forum/#!forum/open-location-code)<!-- Uncomment if this becomes sensible --><!-- and [Stack Overflow under the Open Location Code tag](http://stackoverflow.com/questions/tagged/open-location-code) -->.

