Este documento explica como adicionar um novo exercício de prática.
A maneira mais simples de ver quais exercícios de prática ainda não foram implementados é acessar a página de build da track (por exemplo, https://exercism.org/tracks/csharp/build) e conferir a seção "Practice Exercises".
Os dados na página de build são atualizados uma vez por dia.
Você pode criar rapidamente a estrutura inicial de um novo exercício de prática rodando o script bin/add-practice-exercise (fonte) a partir do diretório raiz da track:
bin/add-practice-exercise <exercise-slug>
Opcionalmente, você também pode informar a dificuldade do exercício (com -d) e/ou o nome de usuário no GitHub de quem escreveu o exercício (com -a):
bin/add-practice-exercise -d 3 -a foobar <exercise-slug>
Se você estiver trabalhando em um repositório de track sem esse arquivo, fique à vontade para copiá-lo para o seu repositório usando o link da fonte acima.
Depois que os arquivos da estrutura inicial forem criados, você vai precisar:
.meta/config.json do exercício:
authors
config.json da track:
practices (obrigatório apenas quando a track tem exercícios de conceito)prerequisites (obrigatório apenas quando a track tem exercícios de conceito)Uma parte essencial de adicionar um exercício é adicionar testes. De modo geral, há duas opções ao adicionar testes para um exercício de prática:
canonical-data.json do exercício, como encontrado no repositório problem-specifications.https://exercism.org/exercises/<slug> para ver quais tracks já implementaram um exercício específico).A segunda opção pode ser especialmente atraente, pois dá resultados rápido. Lembre-se, porém, de que você deve adaptar a implementação para que ela se encaixe o melhor possível na sua track. Por exemplo, algumas tracks não usam classes e trabalham apenas com funções. Mas, se a sua track costuma trabalhar com objetos, adapte a implementação ao que se encaixa melhor nela.
Algumas tracks usam um gerador de testes para (re)gerar automaticamente o(s) arquivo(s) de teste de um exercício. Confira a documentação da track para ver se existe um gerador de testes e, se existir, como usá-lo.
Para garantir que é possível escrever um código que passe nos testes, é preciso adicionar uma implementação de exemplo.
O código não precisa ser idiomático, só precisa passar nos testes.
Você pode verificar se a implementação de exemplo passa em todos os testes rodando o script bin/verify-exercises (fonte) a partir do diretório raiz da track:
bin/verify-exercises <exercise-slug>
Use a saída para confirmar que a implementação de exemplo passa em todos os testes.
Se você estiver trabalhando em um repositório de track sem esse arquivo, fique à vontade para copiá-lo para o seu repositório usando o link da fonte acima.
Por baixo dos panos, o script bin/verify-exercises faz várias coisas:
O(s) arquivo(s) de implementação stub servem como ponto de partida para os estudantes.
Recomendamos que os arquivos stub tenham a quantidade mínima de código de modo que:
Na prática, isso significa definir as funções/métodos que a suíte de testes testa. As tracks têm liberdade para organizar esse código como quiserem, desde que garantam que o código stub inicialmente falhe em todos os testes.
Python:
def two_fer(name):
pass
Kotlin:
fun twofer(name: String): String {
TODO("Implement the function to complete the task")
}
O passo final é rodar o linter para verificar se os arquivos (de configuração) da track estão estruturados corretamente, tanto sintática quanto semanticamente.
Primeiro, certifique-se de que você tem a versão mais recente do configlet rodando:
bin/fetch-configlet
Depois, rode o linter com:
bin/configlet lint
Use a saída para confirmar que está tudo certo.
Quando estiver tudo certo, você pode enviar um Pull Request para o repositório da track.
Antes de enviar, leia o Guia de Pull Request para contribuidores e o Guia de Pull Requests.
Garanta que a descrição do PR liste o exercício que está sendo adicionado.