Thank you so much for contributing! 🎉
We welcome pull requests that provide fixes and improvements to existing exercises. If you're unsure, then go ahead and open a GitHub issue, and we'll discuss the change.
Please keep the following in mind:
-
Please start by reading the general Exercism contributing guide.
-
Pull requests should be focused on a single exercise, issue, or change.
-
We welcome changes to code style, and wording. Please open a separate PR for these changes if possible.
-
Please open an issue before creating a PR that makes significant (breaking) changes to an existing exercise or makes changes across many exercises. It is best to discuss these changes before doing the work.
-
Follow the coding standards found in The Elixir Style Guide.
-
Watch out for trailing spaces, extra blank lines, and spaces in blank lines.
-
Each exercise must stand on its own. Do not reference files outside the exercise directory. They will not be included when the user fetches the exercise.
-
Each problem should have a test suite, an example solution, and a template file for the real implementation. The example solution should be named
example.exs. -
Use typespecs in the example and template files as described here.
-
Each test file should have a
test_helper.exswith code like the following at the top of the file. This allows the tests to be run on CI and configures tests to be skipped with the:pendingflag.ExUnit.start ExUnit.configure exclude: :pending, trace: true
-
All but the initial test for each exercise should be tagged
:pending.@tag :pending test "shouting" do assert Bob.hey("WATCH OUT!") == "Whoa, chill out!" end
All the tests for Exercism Elixir Track exercises can be run from the top level of the repo
with $ ./bin/test_exercises.sh. Please run this command before submitting your PR. Watch out
for and correct any compiler warnings you may have introduced.