# Contributing to Bahasa Indonesia Auto Formalizer 🤝

Terima kasih atas minat Anda untuk berkontribusi! Kami sangat menghargai semua bentuk kontribusi untuk membuat tool ini lebih baik.

## 📋 Table of Contents

1. [Code of Conduct](#code-of-conduct)
2. [Cara Berkontribusi](#cara-berkontribusi)
3. [Menambah Mapping Kata](#menambah-mapping-kata)
4. [Development Setup](#development-setup)
5. [Submission Guidelines](#submission-guidelines)
6. [Style Guide](#style-guide)
7. [Community](#community)

## Code of Conduct

Proyek ini menganut prinsip inklusivitas dan saling menghormati. Kami berharap semua kontributor:

- Menggunakan bahasa yang sopan dan inklusif
- Menghormati sudut pandang dan pengalaman yang berbeda
- Menerima kritik konstruktif dengan baik
- Fokus pada apa yang terbaik untuk komunitas

## Cara Berkontribusi

### 🐛 Melaporkan Bug

1. Cek [Issues](https://github.com/codenamekii/id-auto-formalizer/issues) untuk memastikan bug belum dilaporkan
2. Buat issue baru dengan template:
   ```
   **Deskripsi Bug:**
   [Jelaskan bug dengan detail]
   
   **Langkah Reproduksi:**
   1. ...
   2. ...
   
   **Expected Behavior:**
   [Apa yang seharusnya terjadi]
   
   **Actual Behavior:**
   [Apa yang sebenarnya terjadi]
   
   **Environment:**
   - Node version: 
   - OS: 
   - Package version:
   ```

### 💡 Request Fitur

1. Cek [Issues](https://github.com/codenamekii/id-auto-formalizer/issues) untuk fitur serupa
2. Buat issue dengan label `enhancement`:
   ```
   **Fitur yang Diusulkan:**
   [Deskripsi fitur]
   
   **Use Case:**
   [Kapan/mengapa fitur ini berguna]
   
   **Implementasi yang Disarankan:**
   [Opsional - ide implementasi]
   ```

### 📝 Menambah Mapping Kata

Ini adalah kontribusi yang paling umum dan sangat kami apresiasi!

#### Guidelines untuk Mapping:

1. **Pastikan Akurat**: Mapping harus menghasilkan bahasa Indonesia formal yang benar
2. **Konteks Netral**: Pilih kata formal yang bisa digunakan di berbagai konteks
3. **Konsisten**: Ikuti pola mapping yang sudah ada
4. **Tidak Duplikat**: Cek apakah mapping sudah ada

#### Cara Menambah Mapping:

1. Fork repository
2. Edit `src/formalizer.js`
3. Temukan object `this.informalToFormal`
4. Tambahkan mapping baru (alphabetical order):

```javascript
this.informalToFormal = {
  // ...existing mappings...
  
  // Tambahkan di posisi alphabetical yang tepat
  'kata_informal_anda': 'kata_formal_pengganti',
  
  // Contoh:
  'ngoding': 'memprogram',
  'ngeprint': 'mencetak',
  'nyetir': 'mengemudi',
  
  // ...more mappings...
};
```

5. Test mapping baru:
```bash
npm test
# atau test manual
node -e "console.log(require('./src').formalize('test ngoding'))"
```

6. Commit dengan message yang jelas:
```bash
git commit -m "feat: add mapping for ngoding -> memprogram"
```

### 🔧 Menambah Fitur

1. Diskusikan dulu di issue untuk fitur besar
2. Fork dan buat branch baru:
   ```bash
   git checkout -b feature/nama-fitur
   ```
3. Implementasi dengan test
4. Update dokumentasi
5. Submit PR

## Development Setup

### Prerequisites

- Node.js >= 14.0.0
- npm >= 6.0.0

### Setup Steps

```bash
# Clone fork Anda
git clone https://github.com/codenamekii/id-auto-formalizer.git
cd id-auto-formalizer

# Install dependencies
npm install

# Run tests
npm test

# Run linter
npm run lint

# Run dalam mode development
npm run dev
```

### Testing

Semua kontribusi HARUS disertai test:

```javascript
// test/formalizer.test.js
test('should formalize new mapping', () => {
  const formalizer = new IndonesianFormalizer();
  expect(formalizer.formalize('ngoding')).toBe('Memprogram.');
});
```

Run test:
```bash
npm test
npm test -- --watch
npm test -- --coverage
```

## Submission Guidelines

### Pull Request Process

1. Update README.md jika ada perubahan API
2. Update test untuk cover perubahan
3. Pastikan semua test pass
4. Pastikan code ter-lint dengan baik
5. PR title format: `type: description`

### PR Template

```markdown
## Deskripsi
[Jelaskan perubahan yang dilakukan]

## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update

## Testing
- [ ] Test ditambahkan
- [ ] Semua test pass
- [ ] Coverage tidak menurun

## Checklist
- [ ] Code mengikuti style guide
- [ ] Self-review sudah dilakukan
- [ ] Dokumentasi sudah diupdate
- [ ] Tidak ada warning dari linter
```

## Style Guide

### JavaScript Style

- ES6+ features
- 2 spaces indentation
- Single quotes
- Semicolon di akhir statement
- Max line length: 100 characters

### Naming Conventions

- camelCase untuk variables dan functions
- PascalCase untuk classes
- UPPER_SNAKE_CASE untuk constants

### Comment Style

```javascript
// Single line comment

/**
 * Multi-line comment
 * @param {string} text - Input text
 * @returns {string} Formalized text
 */
function formalize(text) {
  // Implementation
}
```

### Git Commit Messages

```
feat: add mapping for technical terms

- Add ngoding -> memprogram
- Add ngetest -> melakukan pengujian
- Add deploy -> meluncurkan

Fixes #123
```

## Community

### Getting Help

- 💬 [GitHub Discussions](https://github.com/codenamekii/id-auto-formalizer/discussions)
- 🐛 [Issue Tracker](https://github.com/codenamekii/id-auto-formalizer/issues)
- 📧 Email: maintainer@example.com

### Contributors

Lihat [Contributors page](https://github.com/codenamekii/id-auto-formalizer/graphs/contributors).

### Special Thanks

- KBBI
- Komunitas open source Indonesia
- Semua kontributor & reviewer

## 🎯 Priority Areas

1. Mapping kata gaul terkini
2. Konteks bisnis & startup
3. Akronim & singkatan
4. Ragam regional
5. Istilah teknis

## 📚 Resources

- [KBBI](https://kbbi.kemdikbud.go.id/)
- [PUEBI](https://puebi.js.org/)
- [Indonesian NLP Resources](https://github.com/louisowen6/NLP_bahasa_resources)

---

Terima kasih telah berkontribusi! 🙏