Skip to content

Kodlama Standartları

Bu belge, Hatcher projesi için kodlama standartları ve konvansiyonlarını açıklar. Bu standartları takip etmek, tüm kod tabanında tutarlılık, sürdürülebilirlik ve yüksek kaliteli kod sağlar.

📊 Uyumluluk Durumu: Aralık 2024 itibariyle, kod tabanımız kapsamlı denetim ve kod iyileştirmelerinden sonra bu standartlara %100 uyumluluk sağlamaktadır.

Genel İlkeler

Kod Kalitesi

  • Zekice olmaktan çok açık olmak: Okumak ve anlamak kolay kod yazın
  • Tutarlılık: Kod tabanı boyunca yerleşik kalıpları takip edin
  • Sürdürülebilirlik: Değiştirmek ve genişletmek kolay kod yazın
  • Performans: Performans etkilerini göz önünde bulundurun, ancak önce okunabilirliği öncelendirin
  • Dokümantasyon: Tüm kod gerektiğinde açık yorumlarla kendi kendini belgeleyici olmalıdır

Dil Standartları

  • Sadece İngilizce: Tüm yorumlar, dokümantasyon ve değişken adları İngilizce olmalıdır
  • Açık İsimlendirme: Amacı açıkça belirten tanımlayıcı isimler kullanın
  • Kısaltma Yok: Yaygın olarak anlaşılanlar dışında kısaltmalardan kaçının (örn. API, URL)

Dosya Organizasyonu

  • Tek Sorumluluk: Her dosyanın tek, iyi tanımlanmış bir amacı olmalıdır
  • Mantıklı Gruplama: İlgili işlevselliği birlikte düzenleyin
  • Açık İsimlendirme: Amacı açıkça belirten tanımlayıcı isimler kullanın

Biçimlendirme Standartları

Kod Stili (ESLint tarafından zorlanır)

typescript
// ✅ İyi: Tek tırnak, noktalı virgül yok, 2 boşluk girinti
const message = 'Hello World'
const config = {
  apiUrl: 'https://api.hatche.rs',
  timeout: 5000,
}

// ❌ Kaçının: Çift tırnak, noktalı virgül, tutarsız girinti
const message = "Hello World";
const config = {
    apiUrl: "https://api.hatche.rs",
    timeout: 5000;
};

Hata İşleme

typescript
// ✅ İyi: Tanımlayıcı hata işleme
try {
  const result = await fetchUserData()
  return result
} catch (error) {
  console.error('Failed to fetch user data:', error)
  throw new Error(`User data fetch failed: ${error.message}`)
}

// ❌ Kaçının: Genel hata işleme
try {
  const result = await fetchUserData()
  return result
} catch (e) {
  console.error(e)
  throw e
}

TypeScript Standartları

Tip Tanımları

typescript
// ✅ İyi: Nesne şekilleri için interface kullanın
interface UserData {
  id: string
  name: string
  email: string
  isActive: boolean
}

// ❌ Kaçının: Basit nesne şekilleri için tip takma adları
type UserData = {
  id: string
  name: string
}

İsimlendirme Konvansiyonları

typescript
// ✅ İyi: Tipler, interface'ler, sınıflar için PascalCase
interface ApiResponse {}
class UserService {}
type ComponentProps = {}

// ✅ İyi: Değişkenler, fonksiyonlar, metotlar için camelCase
const userName = 'john'
function getUserData() {}
const handleClick = () => {}

// ✅ İyi: Sabitler için SCREAMING_SNAKE_CASE
const API_BASE_URL = 'https://api.hatche.rs'
const MAX_RETRY_ATTEMPTS = 3

Fonksiyon ve Metot Tasarımı

typescript
// ✅ İyi: Uygun tiplendirme ile açık fonksiyon imzaları
function processUserData(user: UserData): Promise<ProcessedUser> {
  // Uygulama
}

// ✅ İyi: Genel API'ler için JSDoc kullanın
/**
 * Görsel seçimlere dayalı kod değişiklikleri üretir
 * @param selection - Seçilen DOM elemanları
 * @param context - Mevcut proje bağlamı
 * @returns Üretilen koda çözümlenen Promise
 */
async function generateCodeFromSelection(
  selection: DOMSelection[],
  context: ProjectContext
): Promise<CodeModification[]> {
  // Uygulama
}

Vue.js Standartları

Bileşen Yapısı

vue
<!-- ✅ İyi: <script setup> ile Composition API kullanın -->
<script setup lang="ts">
interface Props {
  title: string
  isVisible?: boolean
}

interface Emits {
  close: []
  submit: [data: FormData]
}

const props = withDefaults(defineProps<Props>(), {
  isVisible: true,
})

const emit = defineEmits<Emits>()

// Composable'lar üstte
const { user } = useAuth()
const { theme } = useTheme()

// Reaktif veri
const isLoading = ref(false)
const formData = reactive({
  name: '',
  email: '',
})

// Hesaplanmış özellikler
const isFormValid = computed(() => {
  return formData.name.length > 0 && formData.email.includes('@')
})

// Metotlar
function handleSubmit() {
  if (!isFormValid.value) return

  isLoading.value = true
  emit('submit', formData)
}
</script>

<template>
  <div v-if="isVisible" class="modal">
    <h2>{{ title }}</h2>
    <form @submit.prevent="handleSubmit">
      <!-- Form içeriği -->
    </form>
  </div>
</template>

<style scoped>
.modal {
  /* Stiller */
}
</style>

Stil Standartları

CSS Mimarisi

scss
// ✅ İyi: Tema için CSS özel özelliklerini kullanın
:root {
  --hatcher-primary: #646cff;
  --hatcher-secondary: #42b883;
  --hatcher-background: #1a1a1a;
  --hatcher-text: #ffffff;

  --spacing-xs: 0.25rem;
  --spacing-sm: 0.5rem;
  --spacing-md: 1rem;
  --spacing-lg: 1.5rem;
  --spacing-xl: 2rem;
}

// ✅ İyi: Sınıf adları için BEM metodolojisi
.code-editor {
  /* Block */
}

.code-editor__toolbar {
  /* Element */
}

.code-editor__button {
  /* Element */
}

.code-editor__button--active {
  /* Modifier */
}

Test Standartları

Birim Testleri

typescript
// ✅ İyi: Tanımlayıcı test yapısı
describe('useVisualSelection', () => {
  describe('startSelection', () => {
    it('should set isSelecting to true', () => {
      const { isSelecting, startSelection } = useVisualSelection()

      startSelection()

      expect(isSelecting.value).toBe(true)
    })
  })
})

Dokümantasyon Standartları

Kod Yorumları

typescript
// ✅ İyi: NE değil NEDEN'i açıklayın
function calculateOptimalAIPrompt(context: ProjectContext): string {
  // AI modellerinde token taşmasını önlemek için bağlam boyutunu sınırlıyoruz
  // aynı zamanda doğru kod üretimi için yeterli bilgi sağlıyoruz
  const maxContextSize = 4000

  if (context.size > maxContextSize) {
    return compressContext(context, maxContextSize)
  }

  return buildPrompt(context)
}

Git Konvansiyonları

Commit Mesajları

Conventional Commits takip ediyoruz:

bash
# ✅ İyi: Açık, tanımlayıcı commit mesajları
feat: add visual element selection to code generation
fix: resolve memory leak in AI response processing
docs: update installation guide for macOS
style: improve code formatting in user service
refactor: extract common AI prompt logic

Uygulama

Bu standartlar şunlar tarafından uygulanır:

  • ESLint: Otomatik kod stili kontrolü
  • TypeScript: Tip güvenliği ve tutarlılık
  • Prettier: Kod biçimlendirme
  • Husky: Pre-commit hook'ları
  • CI/CD: Otomatik test ve linting

Yerel Geliştirme

bash
# Linting çalıştır
pnpm lint

# Otomatik düzeltilebilir sorunları düzelt
pnpm lint:fix

# Tip kontrolü
pnpm typecheck

# Testleri çalıştır
pnpm test

Bu standartlar, proje ve topluluk geri bildirimleriyle birlikte gelişen yaşayan belgelerdir.

Released under the MIT License. Built with ❤️ by Chriss Mejía and the Hatcher community.