on 465cc1c help sign in
Idris-dev/CONTRIBUTING.md
160 lines 7.1 kB history raw
1# Contributing to Idris-Dev
3The Idris Community welcomes pull requests, bug reporting, and bug squashing!
4However, we cannot do it all ourself, and want to make it as easy as possible to contribute changes to get things working.
5Here are a few guidelines that we would like contributors to follow so that we can have a chance of keeping on top of things.
7## Getting Started
91. Make sure you are familiar with [Git](http://git-scm.com/book).
101. Make sure you have a [GitHub account](https://github.com/signup/free).
111. Make sure you are familiar with: [Idris](http://eb.host.cs.st-andrews.ac.uk/writings/idris-tutorial.pdf).
121. Make sure you can install Idris:
13 * [Mac OS X](https://github.com/idris-lang/Idris-dev/wiki/Idris-on-OS-X-using-Homebrew)
14 * [Ubuntu](https://github.com/idris-lang/Idris-dev/wiki/Idris-on-Ubuntu)
15 * [Debian](https://github.com/idris-lang/Idris-dev/wiki/Idris-on-Debian)
16 * [Windows](https://github.com/idris-lang/Idris-dev/wiki/Idris-on-Windows)
18## Issue Reporting
20Before you report an issue, or wish to add cool functionality please try and check to see if there are existing [issues](https://github.com/idris-lang/Idris-dev/issues) and [pull requests](https://github.com/idris-lang/Idris-dev/pulls).
21We do not want you wasting your time, duplicating somebody's work!
23## The Campsite Rule
25A basic rule when contributing to Idris is the **campsite rule**: leave the codebase in better condition than you found it.
26Please clean up any messes that you find, and don't leave behind new messes for the next contributor.
28## Contributing to the default libraries.
30Idris ships with a set of packages in `libs/` that is provided as a default library.
31These packages should not be seen as the *standard* as when working with dependent types we do not necessarily know how best to work with dependent types.
32These packages offer functionality that can be built on top of when constructing Idris programs.
34One major point to make is that everything in prelude will be imported automatically, unless given
35the `--noprelude` option.
36Likewise, the contents of base are available with no special options.
37The other two packages that ship with Idris, contrib and effects, require a the use of the `-p` command-line argument to bring their contents into the include path.
38New contributions should probably be sent to contrib first, so that they can get maintained with the Idris distribution.
39If they turn out to be widely applicable and useful, they may later be moved into base.
41As Idris is still being developed we are open to suggestions and changes that make improvements to these default packages.
42Major changes to the library (or Idris itself) should ideally be discussed first through the projects official channels of communication i.e. the mailing list, github wiki, or IRC, or as a [Dragon Egg](https://github.com/idris-lang/Idris-dev/wiki/Feature-proposals).
43Developers then seeking to add content to Idris's prelude and default library, should do so through a PR where more discussion's and refinements can be made.
45We do not want you wasting your time nor duplicating somebody's work!
47Of note: developers should be prepared to wait until their PR has been discussed and authorized prior to the PRs inclusion.
49## Making Changes
51Idris developers and hackers try to adhere to something similar to the [successful git branching model](http://nvie.com/posts/a-successful-git-branching-model/).
52The steps are straightforward.
54### New contributors
56For those new to the project:
581. Fork our [main development repository](https://github.com/idris-lang/Idris-dev) `idris-dev` on github e.g.
592. Clone your fork to your local machine:
61```
62$ git clone git@github.com/<your github user name>/Idris-dev.git
63```
653. Add `idris-lang/Idris-dev` as a remote upstream
67```
68$ git remote add upstream git@github.com:idris-lang/Idris-dev.git
69```
71### Existing Contributors
73For those already contributing to the project:
751. Ensure your existing clone is up-to-date with current `HEAD` e.g.
77```
78$ git fetch upstream
79$ git merge upstream/master
80```
82### Remaining Steps
84The remaining steps are the same for both new and existing contributors:
861. Create, and checkout onto, a topic branch on which to base you work.
87 * This is typically the master branch.
88 * For your own sanity, please avoid working on the `master` branch.
90```
91$ git branch fix/master/my_contrib master
92$ git checkout fix/master/my_contrib
93```
951. Make commits of logical units.
961. Check for unnecessary whitespace with
98```
99$ git diff --check
100```
1021. Make sure your commit messages are along the lines of:
104 Short (50 chars or less) summary of changes
106 More detailed explanatory text, if necessary. Wrap it to about 72
107 characters or so. In some contexts, the first line is treated as the
108 subject of an email and the rest of the text as the body. The blank
109 line separating the summary from the body is critical (unless you omit
110 the body entirely); tools like rebase can get confused if you run the
111 two together.
113 Further paragraphs come after blank lines.
115 - Bullet points are okay, too
117 - Typically a hyphen or asterisk is used for the bullet, preceded by a
118 single space, with blank lines in between, but conventions vary here
1201. Make sure you have added any necessary tests for your changes.
1211. Run all the tests to assure nothing else was accidentally broken.
123```
124$ make test
125```
1271. Push your changes to a topic branch in your fork of the repository.
129```
130$ git push origin fix/master/my_contrib
131```
1331. Go to GitHub and submit a pull request to `idris-dev`
135From there you will have to wait on one of the `idris-dev` committers to respond to the request.
136This response might be an accept or some changes/improvements/alternatives will be suggest.
137We do not guarantee that all requests will be accepted.
139## Increases chances of acceptance.
141To help increase the chance of your pull request being accepted:
1431. Run the tests.
1441. Update the documentation, the surrounding one, examples elsewhere, guides, whatever is affected by your contribution
1451. Use appropriate code formatting for both Idris and Haskell.
147## Additional Resources
149* [Idris Wiki](https://github.com/idris-lang/Idris-dev/wiki);
150* [Zen Of Idris](https://github.com/idris-lang/Idris-dev/wiki/The-Zen-of-Idris);
151* Idris FAQs: [Official](http://www.idris-lang.org/documentation/faq/); [Unofficial](https://github.com/idris-lang/Idris-dev/wiki/Unofficial-FAQ);
152* [Idris Manual](https://github.com/idris-lang/Idris-dev/wiki/Manual);
153* [Idris Tutorial](http://eb.host.cs.st-andrews.ac.uk/writings/idris-tutorial.pdf);
154* [Idris News](http://www.idris-lang.org/news/);
155* [other Idris docs](http://www.idris-lang.org/documentation/).
156* [Using Pull Requests](https://help.github.com/articles/using-pull-requests)
157* [General GitHub Documentation](https://help.github.com/).
160Adapted from the most excellent contributing files from the [Puppet project](https://github.com/puppetlabs/puppet) and [Factroy Girl Rails](https://github.com/thoughtbot/factory_girl_rails/blob/master/CONTRIBUTING.md)