Merci de votre intérêt à contribuer au projet algorith ! Ce guide vous aidera à comprendre comment participer efficacement au développement.
- Comment Contribuer
- Configuration de l'Environnement
- Standards de Code
- Tests
- Documentation
- Processus de Pull Request
- 🐛 Corrections de bugs
- ✨ Nouvelles fonctionnalités
- 📚 Améliorations de documentation
- 🔍 Tests supplémentaires
- 🚀 Optimisations de performance
- 💡 Suggestions d'améliorations
- Créez une issue décrivant la fonctionnalité
- Discutez l'approche avec les mainteneurs
- Attendez l'approbation avant de commencer le développement
- Suivez les standards établis
- Node.js >= 14.0.0
- npm >= 6.0.0
- Git
# Cloner le repository
git clone https://github.com/username/algorith.git
cd algorith
# Installer les dépendances
npm install
# Lancer les tests pour vérifier l'installation
npm testalgorith/
├── algorithms/ # Algorithmes de similarité
├── test/ # Tests unitaires
├── index.js # Point d'entrée principal
├── index.d.ts # Définitions TypeScript
├── README.md # Documentation principale
├── EXAMPLES.md # Exemples d'usage
└── CHANGELOG.md # Historique des versions
- Indentation : 2 espaces
- Quotes : Simple quotes (')
- Semicolons : Requis
- Nommage : camelCase pour variables et fonctions
- JSDoc : Documentez toutes les fonctions publiques
/**
* Calcule la similarité entre deux chaînes
* @param {string} str1 - Première chaîne
* @param {string} str2 - Seconde chaîne
* @param {Object} options - Options de configuration
* @returns {number} Score de similarité entre 0 et 1
*/
function calculateSimilarity(str1, str2, options = {}) {
// Validation des entrées
if (typeof str1 !== 'string' || typeof str2 !== 'string') {
throw new Error('Both parameters must be strings');
}
// Logique de l'algorithme
// ...
return similarity;
}- Algorithmes : descriptifs et précis (ex:
levenshteinDistance) - Variables : claires et explicites (ex:
normalizedScore) - Constants : UPPER_SNAKE_CASE (ex:
MAX_ITERATIONS) - Classes : PascalCase (ex:
RandomEngine)
Nous utilisons Mocha pour les tests unitaires.
const { expect } = require('chai');
const { yourFunction } = require('../index');
describe('YourFunction', () => {
it('should handle basic case correctly', () => {
const result = yourFunction('input1', 'input2');
expect(result).to.be.a('number');
expect(result).to.be.within(0, 1);
});
it('should handle edge cases', () => {
expect(yourFunction('', '')).to.equal(1);
expect(yourFunction('a', '')).to.equal(0);
});
it('should be deterministic', () => {
const result1 = yourFunction('test', 'test');
const result2 = yourFunction('test', 'test');
expect(result1).to.equal(result2);
});
});# Lancer tous les tests
npm test
# Tests en mode watch
npm run test:watch
# Coverage (si configuré)
npm run test:coverage- Couverture : Minimum 90%
- Cas limites : Toujours tester les edge cases
- Performance : Tests ne dépassant pas 100ms chacun
- Déterminisme : Tests reproductibles avec seeds fixes
- Clarté : Descriptions explicites des cas testés
Toutes les fonctions publiques doivent être documentées :
/**
* Description courte de la fonction
*
* Description détaillée si nécessaire, expliquant
* l'algorithme ou les cas d'usage particuliers.
*
* @param {string} param1 - Description du paramètre
* @param {Object} [options] - Options facultatives
* @param {boolean} [options.caseSensitive=false] - Sensibilité à la casse
* @returns {number} Description du retour
* @throws {Error} Conditions qui déclenchent une erreur
*
* @example
* // Exemple d'usage
* const result = myFunction('hello', 'world', { caseSensitive: true });
* console.log(result); // 0.2
*/- README.md : Pour changements d'API
- EXAMPLES.md : Pour nouveaux cas d'usage
- CHANGELOG.md : Pour toutes les modifications
- TypeScript : Mettre à jour
index.d.ts
- ✅ Tests passent :
npm testsans erreur - ✅ Code formaté selon les standards
- ✅ Documentation mise à jour
- ✅ CHANGELOG.md mis à jour
- ✅ Commits atomiques et bien décrits
## Type de Changement
- [ ] Bug fix
- [ ] Nouvelle fonctionnalité
- [ ] Breaking change
- [ ] Documentation
## Description
Décrivez clairement ce que fait ce PR.
## Tests
- [ ] Tests existants passent
- [ ] Nouveaux tests ajoutés
- [ ] Edge cases couverts
## Checklist
- [ ] Code suit les standards du projet
- [ ] Documentation mise à jour
- [ ] CHANGELOG.md mis à jour
- [ ] Tests ajoutés/mis à jour- Automated checks : Tests et linting
- Code review : Au moins 1 approbation
- Manual testing : Si nécessaire
- Merge : Squash and merge préféré
Utilisez le format Conventional Commits :
type(scope): description
feat(similarity): add new metaphone algorithm
fix(random): correct seed initialization bug
docs(readme): update API documentation
test(trigram): add edge case tests
perf(levenshtein): optimize distance calculation
refactor(random): simplify noise generation
feat: Nouvelle fonctionnalitéfix: Correction de bugdocs: Documentationtest: Testsrefactor: Refactoringperf: Optimisationchore: Maintenance
- Issues GitHub : Pour bugs et fonctionnalités
- Discussions : Pour questions générales
- Email : Pour contact direct
Merci de contribuer à algorith ! 🚀
Votre participation aide à créer de meilleurs outils pour la communauté des développeurs.