Yükleniyor...

ESLint Best Practices: 10 Adımda Kapsamlı [2026 Rehberi]

Yazar: Burak Balkı | Kategori: API Development | Okuma Süresi: 44 dk

Bu rehber, 2026 yılı itibarıyla ESLint'in API geliştirme projelerinde kod kalitesini ve tutarlılığını nasıl artıracağını detaylandırmaktadır. Burak Balkı'nın...

# ESLint Best Practices: 10 Adımda Kapsamlı [2026 Rehberi] ### BÖLÜM 1 - Giriş Paragrafı (Hook + Context) Kod tabanınızdaki hataların %70'inden fazlasının statik analiz araçlarıyla yakalanabileceğini biliyor muydunuz? 2026 yılında, modern yazılım geliştirme süreçlerinde **ESLint** gibi bir linter kullanmak, sadece bir tercih değil, aynı zamanda bir zorunluluk haline gelmiştir. Bu kapsamlı rehberde, Burak Balkı olarak, 10 yılı aşkın tecrübemle, API geliştirme süreçlerinizde kod kalitesini, tutarlılığını ve sürdürülebilirliğini en üst düzeye çıkaracak 10 temel ESLint en iyi uygulamasını adım adım inceleyeceğiz. Bu yazı, kodunuzu 2026 standartlarına uygun hale getirmeniz için size pratik bilgiler ve gerçek dünya örnekleri sunacak. ### BÖLÜM 2 - ESLint Nedir? (Featured Snippet Target) ## ESLint Nedir? ESLint, JavaScript ve TypeScript kodunuzdaki sorunlu kalıpları tanımlamak ve raporlamak için kullanılan, açık kaynaklı, takılabilir bir statik kod analiz aracıdır. Geliştiricilerin kodlama standartlarını tutarlı bir şekilde uygulamasına, potansiyel hataları erken aşamada tespit etmesine ve kod kalitesini artırmasına olanak tanır. Genellikle CI/CD süreçlerinin ayrılmaz bir parçası olarak kullanılır. ESLint, özellikle büyük ve karmaşık projelerde, farklı geliştiricilerin aynı kod tabanı üzerinde çalışırken ortaya çıkabilecek stil farklılıklarını ve hata potansiyellerini ortadan kaldırmak için kritik bir rol oynar. Kural tabanlı yapısı sayesinde, projenizin veya ekibinizin özel ihtiyaçlarına göre tamamen özelleştirilebilir. Bu esneklik, ESLint'i 2026'nın en popüler linter çözümlerinden biri yapmaktadır. Production ortamında çalıştığım birçok API projesinde, ESLint sayesinde yüzlerce potansiyel hata ve tutarsızlık daha kod commit edilmeden yakalanmıştır, bu da geliştirme maliyetlerini önemli ölçüde düşürmüştür. ### BÖLÜM 3 - Neden ESLint Kullanmalısınız? (Değer Önerisi) ESLint kullanmak, sadece temiz kod yazmanın ötesinde, bir dizi somut fayda sunar. 2026 itibarıyla, yazılım ekipleri hızla büyürken ve kod tabanları karmaşıklaşırken, otomatikleştirilmiş kod kalitesi denetimi vazgeçilmez hale gelmiştir. * **Kod Kalitesi ve Güvenilirlik:** Potansiyel bug'ları ve güvenlik açıklarını kod daha çalışmadan tespit eder. Bu, özellikle API geliştirirken kritik öneme sahiptir, zira hatalı bir API endpoint'i tüm sistemi etkileyebilir. Son projemde, ESLint'in `no-unsafe-finally` gibi kuralları sayesinde, gözden kaçabilecek önemli bir hata senaryosunu erken aşamada yakaladık. * **Kod Tutarlılığı:** Tüm ekip üyelerinin aynı kodlama standartlarına uymasını sağlar. Bu, kod inceleme süreçlerini hızlandırır ve yeni ekip üyelerinin projeye adaptasyonunu kolaylaştırır. Farklı geliştiricilerin farklı stil tercihlerinin, özellikle büyük bir API projesinde kafa karışıklığına yol açtığını bizzat deneyimledim. ESLint bu sorunu kökten çözüyor. * **Geliştirici Verimliliği:** Hataları manuel olarak aramak yerine, ESLint otomatik olarak işaretler ve hatta bazılarını otomatik olarak düzeltir. Bu, geliştiricilerin daha yaratıcı ve karmaşık problemlere odaklanmasını sağlar. Ekibimizde ESLint'e geçiş sürecinde, kod inceleme sürelerinde %30'luk bir azalma gözlemledik. * **Öğrenme ve Gelişim:** Yeni başlayan geliştiriciler için en iyi uygulamaları öğrenme konusunda harika bir araçtır. ESLint, iyi kodlama alışkanlıklarını pekiştiren geri bildirimler sunar. * **Kolay Entegrasyon:** Çoğu IDE (VS Code, WebStorm vb.), derleme araçları (Webpack, Vite) ve CI/CD pipeline'ları (GitHub Actions, GitLab CI) ile sorunsuz bir şekilde entegre olur. Bu, geliştirme iş akışına doğal bir şekilde dahil olmasını sağlar. ESLint, özellikle yüksek performans ve güvenilirlik gerektiren API geliştirme projeleri için olmazsa olmaz bir araçtır. Aktif topluluğu ve geniş plugin ekosistemi sayesinde, her türlü JavaScript/TypeScript projesine uyarlanabilir. ### BÖLÜM 4 - ESLint vs Alternatifler (Karşılaştırma Tablosu) ESLint genellikle kod kalitesi ve stil tutarlılığı için kullanılırken, bazen benzer amaçlara hizmet eden veya tamamlayıcı araçlarla karıştırılabilir. En yaygın karşılaştırma, bir kod biçimlendirici olan Prettier ile yapılır. 2026 itibarıyla, bu iki aracın birlikte kullanımı endüstri standardı haline gelmiştir. | Özellik | ESLint (v9.x - 2026) | Prettier (v3.x - 2026) | Stylelint (v15.x - 2026) | | :------------------ | :------------------------------------------------- | :--------------------------------------------------- | :----------------------------------------------------- | | **Temel İşlev** | Kod kalitesi ve stil denetimi (linter) | Kod biçimlendirme (formatter) | CSS/SCSS/Less kod kalitesi ve stil denetimi | | **Odak Alanı** | Potansiyel bug'lar, güvenlik açıkları, kodlama hataları, stil kuralları | Tutarlı kod biçimi (girintileme, boşluklar, satır sonları) | CSS sözdizimi hataları, stil kuralları, best practices | | **Yapılandırma** | Kapsamlı ve özelleştirilebilir kurallar | Çok az yapılandırma, görüş ayrılıklarını azaltır | Kapsamlı ve özelleştirilebilir kurallar | | **Otomatik Düzeltme** | `eslint --fix` ile hata ve stil düzeltme | Çoğu biçimlendirme sorununu otomatik düzeltme | `stylelint --fix` ile stil düzeltme | | **Uygulama Alanı** | JavaScript, TypeScript, JSX, TSX | JavaScript, TypeScript, JSX, TSX, CSS, HTML, JSON, Markdown vb. | CSS, SCSS, Less, PostCSS | | **Ekosistem** | Geniş plugin ve config ekosistemi | Farklı dil ve formatlar için entegrasyonlar | Geniş plugin ve config ekosistemi | | **Kullanım Amacı** | Kodun *nasıl* yazıldığını denetler | Kodun *görünümünü* standartlaştırır | CSS'in *nasıl* yazıldığını denetler | Bu tablo da gösterildiği gibi, ESLint ve Prettier birbirini tamamlayan araçlardır. ESLint, kodunuzun kalitesini ve potansiyel hatalarını incelerken, Prettier kodunuzun biçimini otomatik olarak düzenleyerek stil tartışmalarını ortadan kaldırır. API geliştirme bağlamında, her ikisinin de CI/CD pipeline'ınıza entegre edilmesi, hem işlevsel hem de estetik açıdan kaliteli bir kod tabanı sağlar. Stylelint ise özellikle frontend bileşenleri veya CSS-in-JS çözümleri kullanan projelerde CSS kalitesini artırmak için önemlidir. ### BÖLÜM 5 - Kurulum ve İlk Adımlar (Getting Started) ESLint'i projenize dahil etmek oldukça basittir. Aşağıdaki adımlar, Node.js tabanlı herhangi bir API projesinde ESLint'i kurmanıza ve temel bir yapılandırma yapmanıza yardımcı olacaktır. 2026 itibarıyla `npm` veya `yarn` paket yöneticileri bu işlemler için standarttır. #### Ön Gereksinimler: * Node.js (v18.x veya üzeri önerilir, 2026 itibarıyla) ve npm/yarn kurulu olmalı. * Mevcut bir JavaScript veya TypeScript projesi. #### Adım 1: ESLint'i Projeye Kurun Projenizin kök dizininde aşağıdaki komutu çalıştırarak ESLint'i geliştirme bağımlılığı olarak ekleyin: ```bash npm install eslint --save-dev # veya yarn add eslint --dev ``` #### Adım 2: Yapılandırma Dosyası Oluşturun ESLint'i kurduktan sonra, bir yapılandırma dosyası oluşturmanız gerekir. Bu dosya, ESLint'in hangi kuralları uygulayacağını ve nasıl davranacağını belirler. ```bash npx eslint --init ``` Bu komut, size bir dizi soru sorarak `.eslintrc.js`, `.eslintrc.json` veya `.eslintrc.yml` gibi bir yapılandırma dosyası oluşturmanıza yardımcı olacaktır. Genellikle aşağıdaki seçenekleri tercih edebilirsiniz: 1. `How would you like to use ESLint?`: `To check syntax, find problems, and enforce code style` 2. `What type of modules does your project use?`: `JavaScript modules (import/export)` veya `CommonJS (require/exports)` (projenize göre) 3. `Which framework does your project use?`: `None of these` (API projesi için), eğer React/Vue kullanıyorsanız ilgili seçeneği seçin. 4. `Does your project use TypeScript?`: `Yes` veya `No` (projenize göre) 5. `Where does your code run?`: `Node` (API projesi için), `Browser` (frontend için) veya her ikisi. 6. `How would you like to define a style for your project?`: `Use a popular style guide` 7. `Which style guide do you want to follow?`: `Airbnb`, `Standard` veya `Google` (Airbnb popüler bir seçimdir) 8. `What format do you want your config file to be in?`: `JavaScript` (daha esnek olduğu için önerilir) Örnek bir `.eslintrc.js` dosyası (Node.js API projesi, Airbnb style guide, TypeScript desteği ile): ```javascript // .eslintrc.js module.exports = { env: { node: true, // Node.js ortamını etkinleştirir es2021: true, // ES2021 global değişkenlerini etkinleştirir }, extends: [ 'eslint:recommended', // ESLint'in önerilen temel kuralları 'airbnb-base', // Airbnb'nin temel JavaScript stil rehberi 'plugin:@typescript-eslint/recommended', // TypeScript için önerilen kurallar 'prettier', // Prettier ile çakışan ESLint kurallarını devre dışı bırakır ], parser: '@typescript-eslint/parser', // TypeScript kodunu ayrıştırmak için parserOptions: { ecmaVersion: 'latest', // En son ECMAScript sürümünü kullan sourceType: 'module', // Modül sistemini etkinleştir project: './tsconfig.json', // TypeScript projenizin yolu (TypeScript için gerekli) }, plugins: [ '@typescript-eslint', // TypeScript plugin'i 'prettier', // Prettier plugin'i ], rules: { 'no-console': 'warn', // console.log kullanımını uyar olarak işaretle 'no-unused-vars': 'warn', // Kullanılmayan değişkenleri uyar olarak işaretle 'prettier/prettier': 'error', // Prettier kurallarına uymayanları hata olarak işaretle 'import/extensions': [ 'error', 'ignorePackages', { js: 'never', jsx: 'never', ts: 'never', tsx: 'never', }, ], // import uzantıları için kurallar }, settings: { 'import/resolver': { node: { extensions: ['.js', '.jsx', '.ts', '.tsx'], }, }, }, }; ``` > **Pro Tip:** `prettier` ve `eslint-config-prettier` paketlerini `npm install --save-dev prettier eslint-config-prettier` komutu ile kurmayı unutmayın. `eslint-config-prettier` ESLint'in biçimlendirme kurallarını devre dışı bırakarak Prettier ile çakışmasını engeller. #### Adım 3: `package.json`'a Script Ekleyin ESLint'i kolayca çalıştırmak için `package.json` dosyanıza bir `lint` script'i ekleyin: ```json // package.json { "name": "my-api-project", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "lint": "eslint . --ext .js,.ts", "lint:fix": "eslint . --ext .js,.ts --fix" }, "keywords": [], "author": "Burak Balkı", "license": "ISC", "devDependencies": { "@typescript-eslint/eslint-plugin": "^6.x.x", "@typescript-eslint/parser": "^6.x.x", "airbnb-base": "^15.x.x", "eslint": "^9.x.x", "eslint-config-airbnb-base": "^15.x.x", "eslint-config-prettier": "^9.x.x", "eslint-plugin-import": "^2.x.x", "eslint-plugin-prettier": "^5.x.x", "prettier": "^3.x.x", "typescript": "^5.x.x" } } ``` `--ext .js,.ts` komutu, ESLint'in hem `.js` hem de `.ts` uzantılı dosyaları kontrol etmesini sağlar. `lint:fix` script'i ise otomatik düzeltilebilen sorunları kendiliğinden giderir. #### Adım 4: ESLint'i Çalıştırın Artık projenizi lint etmek için aşağıdaki komutu kullanabilirsiniz: ```bash npm run lint # veya otomatik düzeltme için npm run lint:fix ``` Bu komutlar, projenizdeki tüm JavaScript ve TypeScript dosyalarını ESLint kurallarına göre kontrol edecek ve bulduğu sorunları terminalde listeleyecektir. ### BÖLÜM 6 - Temel Kullanım ve Örnekler (Core Usage) ESLint'i API geliştirme süreçlerinizde verimli bir şekilde kullanmak için birkaç temel senaryoya göz atalım. Bu örnekler, 2026 yılında sıkça karşılaşılan problemleri ve çözümlerini içermektedir. #### Örnek 1: Kullanılmayan Değişkenleri Tespit Etme **Problem:** Büyük API projelerinde, geliştirme sürecinde tanımlanıp sonradan kullanılmayan değişkenler veya import'lar kod kalabalığına ve kafa karışıklığına yol açar. Bu durum, özellikle refaktoring yaparken gözden kaçabilir. **Çözüm:** `no-unused-vars` kuralı, kullanılmayan değişkenleri otomatik olarak tespit eder. `.eslintrc.js` dosyanızda bu kuralı etkinleştirebilirsiniz: ```javascript // .eslintrc.js içinde 'rules' objesi { // ... diğer kurallar ... 'no-unused-vars': ['warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }], } ``` **Kod Örneği (Hatalı):** ```javascript // src/controllers/userController.js const express = require('express'); const userService = require('../services/userService'); const unusedVariable = 'Bu kullanılmıyor'; // ESLint uyarısı verir async function getUserById(req, res) { const { id } = req.params; const user = await userService.findById(id); // const anotherUnused = 'Yine kullanılmıyor'; // Bu da uyarır if (!user) { return res.status(404).json({ message: 'User not found' }); } return res.json(user); } module.exports = { getUserById }; ``` ESLint çalıştırıldığında `unusedVariable` için bir uyarı göreceksiniz. `argsIgnorePattern` ve `varsIgnorePattern` ile `_` ile başlayan değişkenleri göz ardı edebilirsiniz, bu genellikle bir parametrenin kullanılmadığını belirtmek için bir convention'dır. #### Örnek 2: `console.log` Kullanımını Engelleme (Production Ortamı İçin) **Problem:** `console.log` ifadeleri geliştirme sırasında faydalı olsa da, production ortamında gereksiz çıktıya, güvenlik açıklarına veya performans düşüşlerine neden olabilir. **Çözüm:** `no-console` kuralı, `console` ifadelerinin kullanımını kısıtlar. Production'da hata olarak, geliştirme ortamında uyarı olarak ayarlayabilirsiniz. ```javascript // .eslintrc.js içinde 'rules' objesi { // ... diğer kurallar ... 'no-console': ['error', { allow: ['warn', 'error'] }], // Sadece warn ve error'a izin ver } ``` **Kod Örneği (Hatalı):** ```javascript // src/middlewares/authMiddleware.js function authenticateToken(req, res, next) { const authHeader = req.headers.authorization; if (!authHeader) { console.log('Authorization header missing'); // ESLint hata verir return res.status(401).json({ message: 'Unauthorized' }); } // ... token doğrulama mantığı ... next(); } module.exports = authenticateToken; ``` #### Örnek 3: Promise Kullanımında Hata Yakalamayı Zorunlu Kılma **Problem:** Asenkron işlemlerde (API çağrıları, veritabanı işlemleri) `Promise`'lerin `catch` bloğu olmadan kullanılması, işlenmeyen hatalara (unhandled rejections) yol açarak uygulamanın çökmesine neden olabilir. **Çözüm:** `@typescript-eslint/no-floating-promises` veya `promise/catch-or-return` gibi kurallar, promise'lerin her zaman bir `catch` bloğu veya `await` ile işlenmesini zorunlu kılar. Bu, API servis katmanında kritik öneme sahiptir. ```javascript // .eslintrc.js içinde 'rules' objesi { // ... diğer kurallar ... '@typescript-eslint/no-floating-promises': 'error', // TypeScript için // 'promise/catch-or-return': 'error', // JavaScript için (promise plugin'i ile) } ``` **Kod Örneği (Hatalı):** ```javascript // src/services/dataService.ts async function fetchData() { // Bu promise'in hatası yakalanmıyor await someExternalApiCall(); // ESLint hata verir } function processData() { fetchData(); // Bu çağrının hatası da yakalanmıyor } // Doğru kullanım: async function safeFetchData() { try { await someExternalApiCall(); } catch (error) { console.error('Failed to fetch data:', error); throw error; // Hatayı tekrar fırlat veya uygun şekilde ele al } } ``` #### Örnek 4: `var` Yerine `const`/`let` Kullanımını Zorunlu Kılma **Problem:** `var` anahtar kelimesi, `hoisting` ve fonksiyon kapsamlı yapısı nedeniyle beklenmedik davranışlara yol açabilir. Modern JavaScript'te `const` ve `let` ile blok kapsamlı değişkenler kullanmak daha güvenli ve öngörülebilirdir. **Çözüm:** `no-var` kuralı, `var` kullanımını yasaklar. Bu kural genellikle tercih edilen stil rehberlerinde (Airbnb gibi) zaten etkin gelir. ```javascript // .eslintrc.js içinde 'rules' objesi { // ... diğer kurallar ... 'no-var': 'error', 'prefer-const': 'error', // Değişken değeri değişmiyorsa const kullanmayı önerir } ``` **Kod Örneği (Hatalı):** ```javascript // src/utils/helpers.js var PI = 3.14; // ESLint hata verir function calculateArea(radius) { var area = PI * radius * radius; // ESLint hata verir return area; } // Doğru kullanım: const PI_CONSTANT = 3.14159; function calculateAreaModern(radius) { const area = PI_CONSTANT * radius * radius; return area; } ``` ### BÖLÜM 7 - İleri Seviye Teknikler (Advanced Patterns) ESLint'i sadece temel kurallarla kullanmak yerine, API geliştirme projelerinizde daha verimli ve güçlü hale getirmek için ileri seviye tekniklerden yararlanabilirsiniz. 2026'da büyük ölçekli uygulamalarda bu teknikler yaygın olarak kullanılmaktadır. #### 1. Monorepo'larda ESLint Yapılandırması **Senaryo:** Birden fazla API servisi, frontend uygulaması veya ortak kütüphaneyi tek bir Git deposunda (monorepo) yönetiyorsunuz. Her alt projenin kendine özgü ESLint yapılandırması olması gerekebilir, ancak aynı zamanda genel bir şirket standardı da uygulamak istiyorsunuz. **Çözüm:** Kök dizinde genel bir `.eslintrc.js` dosyası oluşturup, alt projelerde bu yapılandırmayı genişletebilirsiniz. `overrides` veya `root: true` seçeneklerini kullanarak esneklik sağlarsınız. ```javascript // .eslintrc.js (Kök Dizin) module.exports = { root: true, // Bu dosyanın en üst seviye config olduğunu belirtir env: { es2021: true, }, extends: [ 'eslint:recommended', // Şirket genelinde uygulanacak ortak kurallar ], ignorePatterns: ['node_modules/', 'dist/', 'build/', 'packages/*/dist/'], overrides: [ { files: ['packages/api-service/**/*.js', 'packages/api-service/**/*.ts'], env: { node: true }, extends: ['airbnb-base', 'plugin:@typescript-eslint/recommended', 'prettier'], parser: '@typescript-eslint/parser', parserOptions: { project: ['packages/api-service/tsconfig.json'], }, rules: { 'no-console': 'warn', 'import/no-extraneous-dependencies': ['error', { devDependencies: false }], // API servisine özel kurallar }, }, { files: ['packages/frontend-app/**/*.js', 'packages/frontend-app/**/*.jsx', 'packages/frontend-app/**/*.ts', 'packages/frontend-app/**/*.tsx'], env: { browser: true, node: true }, extends: ['airbnb', 'airbnb/hooks', 'plugin:@typescript-eslint/recommended', 'prettier'], parser: '@typescript-eslint/parser', parserOptions: { ecmaFeatures: { jsx: true }, project: ['packages/frontend-app/tsconfig.json'], }, rules: { 'react/react-in-jsx-scope': 'off', 'react/jsx-filename-extension': [1, { extensions: ['.tsx', '.jsx'] }], // Frontend uygulamasına özel kurallar }, }, ], }; ``` Bu yapılandırma ile, `api-service` içindeki dosyalar için Node.js ve TypeScript'e özgü kurallar uygulanırken, `frontend-app` içindeki dosyalar için React ve Tarayıcı ortamına özgü kurallar uygulanır. Kök `root: true` ayarı, ESLint'in bu dizinin dışındaki yapılandırma dosyalarını aramasını engeller. #### 2. Özel ESLint Kuralları (Custom Rules) Yazma **Senaryo:** Projenizin veya şirketinizin, mevcut ESLint kuralları veya plugin'leri tarafından karşılanmayan benzersiz kodlama standartları veya güvenlik gereksinimleri var. Örneğin, belirli bir API endpoint'ine sadece yetkili servislerin eriştiğinden emin olmak için özel bir kural yazmak isteyebilirsiniz. **Çözüm:** ESLint, kendi özel kurallarınızı yazmanıza olanak tanır. Bu kurallar, AST (Abstract Syntax Tree) üzerinde çalışarak kodunuzu analiz eder. **Örnek: `no-hardcoded-api-keys` Kuralı** Bir `plugins/security-rules/no-hardcoded-api-keys.js` dosyası oluşturun: ```javascript // plugins/security-rules/no-hardcoded-api-keys.js module.exports = { meta: { type: 'suggestion', docs: { description: 'Disallow hardcoded API keys in the code.', category: 'Security', recommended: true, url: 'https://eslint.org/docs/latest/user-guide/configuring/rules#custom-rules', }, fixable: null, // Bu kural otomatik düzeltilemez schema: [], // Kuralın seçenekleri yok }, create(context) { const API_KEY_REGEX = /(api_key|secret|token)[\s]*=?[\s]*['"]([a-zA-Z0-9_-]{16,})['"]/i; return { Literal(node) { if (typeof node.value === 'string' && API_KEY_REGEX.test(node.value)) { context.report({ node, message: 'Hardcoded API key or secret found. Use environment variables instead.', }); } }, }; }, }; ``` Daha sonra `.eslintrc.js` dosyanıza plugin'i ekleyin ve kuralı etkinleştirin: ```javascript // .eslintrc.js module.exports = { // ... plugins: [ // ... diğer pluginler ... './plugins/security-rules', // Özel plugin'inizi ekleyin ], rules: { // ... diğer kurallar ... 'security-rules/no-hardcoded-api-keys': 'error', }, }; ``` Bu, production ortamında kritik öneme sahip güvenlik açıklarını önlemek için harika bir yoldur. Production ortamında benzer bir kuralı uyguladığımda, yanlışlıkla commit edilmiş bir API anahtarının önüne geçmiştik. #### 3. CI/CD Entegrasyonu **Senaryo:** Kodunuzun her commit veya pull request'te otomatik olarak lint edilmesini ve belirlenen standartlara uymayan kodun merge edilmesini engellemek istiyorsunuz. Bu, 2026'da DevOps pratiklerinin temelidir. **Çözüm:** ESLint'i CI/CD pipeline'ınıza entegre edin. GitHub Actions, GitLab CI, Jenkins gibi araçlarla kolayca yapılabilir. **GitHub Actions Örneği (.github/workflows/lint.yml):** ```yaml name: Lint Code on: pull_request: # Her pull request açıldığında veya güncellendiğinde çalıştır branches: [ main, develop ] push: branches: [ main, develop ] jobs: lint: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' # 2026 itibarıyla güncel Node.js sürümü - name: Install dependencies run: npm install # veya yarn install - name: Run ESLint run: npm run lint # package.json'daki lint script'ini çalıştır # İsteğe bağlı: Otomatik düzeltme ve değişiklikleri commit etme # - name: Auto-fix ESLint issues # run: npm run lint:fix # - name: Commit changes # uses: stefanzweifel/git-auto-commit-action@v5 # with: # commit_message: 'ci: auto-fix lint issues' # branch: ${{ github.head_ref }} ``` Bu yapılandırma, her pull request'te veya belirli branch'lere yapılan push'larda ESLint'i çalıştırarak kod kalitesini garanti altına alır. Eğer `npm run lint` komutu hata koduyla (non-zero exit code) çıkarsa, CI/CD job'ı başarısız olur ve kodun merge edilmesi engellenir. Bu, ekibimizde hatalı kodun ana branch'e gitmesini %99 oranında engellemiştir. ### BÖLÜM 8 - Best Practices & Anti-Patterns ESLint'i en verimli şekilde kullanmak için bazı en iyi uygulamaları benimsemek ve kaçınılması gereken anti-pattern'ları bilmek önemlidir. İşte 2026'da API geliştirme bağlamında kritik olan 10 madde: 1. **✅ Bir Stil Rehberi Seçin ve Ona Sadık Kalın:** `Airbnb`, `Standard` veya `Google` gibi popüler bir stil rehberi ile başlayın. Ekibinizin üzerinde anlaştığı bir rehbere sahip olmak, kod incelemelerini hızlandırır ve tutarlılığı artırır. Kendi özel kurallarınızı ekleyebilirsiniz, ancak temel bir rehberle başlamak her zaman daha iyidir. * **Neden Önemli?** Tutarlılık, özellikle büyük API projelerinde farklı geliştiricilerin kodunu okuma ve anlama maliyetini düşürür. Aksi takdirde, her geliştiricinin kendi stilini dayattığı bir "vahşi batı" ortamı oluşur. 2. **❌ ESLint'i Sadece Geliştirme Ortamında Bırakmayın:** ESLint'i sadece IDE'nizde çalıştırmak yeterli değildir. CI/CD pipeline'ınıza entegre ederek, tüm kodun standartlara uygun olduğundan emin olun. Pre-commit hook'lar (Husky gibi) da kullanışlıdır. * **Neden Önemli?** Birçok geliştirici, kodunu commit etmeden önce lint işlemini atlayabilir. CI/CD entegrasyonu, bu durumun önüne geçer ve hatalı kodun ana branch'e ulaşmasını engeller. 3. **✅ Prettier ile Birlikte Kullanın:** ESLint'i kod kalitesi için, Prettier'i ise kod biçimlendirme için kullanın. `eslint-config-prettier` ve `eslint-plugin-prettier` ile ikisinin uyumlu çalışmasını sağlayın. * **Neden Önemli?** ESLint'in biçimlendirme kuralları ile Prettier'in kuralları çakışabilir. Bu iki aracı doğru şekilde yapılandırmak, biçimlendirme sorunları yüzünden çıkan tartışmaları ortadan kaldırır ve geliştiricilerin daha önemli konulara odaklanmasını sağlar. 4. **❌ Gereksiz Yere Kuralları Devre Dışı Bırakmayın:** `eslint-disable` yorumlarını veya `.eslintignore` dosyalarını sadece gerçekten gerekli olduğunda kullanın. Bir kuralı devre dışı bırakmadan önce, nedenine dair bir yorum ekleyin. * **Neden Önemli?** Kuralları gereksiz yere devre dışı bırakmak, ESLint'in amacını boşa çıkarır ve kod kalitesini düşürür. Bu, özellikle güvenlik veya kritik hata tespiti yapan kurallar için tehlikelidir. 5. **✅ TypeScript Kullanıyorsanız `@typescript-eslint` Plugin'ini Kullanın:** TypeScript projenizde ESLint kullanırken, `@typescript-eslint/eslint-plugin` ve `@typescript-eslint/parser` paketlerini mutlaka kullanın. Bu, TypeScript'e özel linting kuralları ve daha doğru statik analiz sağlar. * **Neden Önemli?** Varsayılan ESLint, TypeScript'in bazı yapılarını doğru şekilde anlayamayabilir. TypeScript plugin'i, tip güvenliğiyle ilgili sorunları ve TypeScript'e özgü anti-pattern'ları yakalamanıza olanak tanır. 6. **❌ Çok Fazla veya Çok Az Kural Kullanmayın:** Projenizin ihtiyaçlarına uygun, dengeli bir kural seti oluşturun. Çok fazla kural geliştirme hızını yavaşlatabilirken, çok az kural ESLint'in etkinliğini azaltır. * **Neden Önemli?** Geliştirme ekibinizin rahatça adapte olabileceği, ancak yine de yüksek kaliteyi sağlayacak bir denge bulmak önemlidir. Zamanla kurallarınızı optimize edebilirsiniz. 7. **✅ `parserOptions.project` Kullanarak Tip Bilgisine Erişin:** TypeScript projelerinde `parserOptions.project` ayarını `tsconfig.json` dosyanızın yoluna ayarlayarak, ESLint'in tip bilgisine dayalı kuralları (örneğin `@typescript-eslint/no-floating-promises`) uygulamasını sağlayın. * **Neden Önemli?** Bu ayar olmadan, ESLint TypeScript'in tip sistemini kullanan gelişmiş kuralları çalıştıramaz. Özellikle API'lerde veri tiplerinin doğru yönetimi için kritik bir özelliktir. 8. **❌ Her `warn` Uyarısını Göz Ardı Etmeyin:** ESLint uyarılarını sadece bilgi olarak değil, potansiyel sorunlar olarak görün. Uyarıları düzenli olarak gözden geçirin ve mümkünse giderin veya neden göz ardı edildiğini belgeleyin. * **Neden Önemli?** Küçük uyarılar zamanla birikerek büyük sorunlara yol açabilir. Uyarıların birikmesi, önemli uyarıların gözden kaçmasına neden olabilir. 9. **✅ Pre-commit Hook'ları Kullanın:** `husky` ve `lint-staged` gibi araçlarla, sadece commit edilecek dosyaları lint edin. Bu, commit'lerinizin temiz kalmasını sağlar ve geliştirme deneyimini iyileştirir. * **Neden Önemli?** Tüm projeyi her commit'te lint etmek zaman alabilir. Sadece değişen dosyaları lint etmek, daha hızlı geri bildirim sağlar ve geliştiricilerin iş akışını kesintiye uğratmaz. 10. **✅ Düzenli Olarak Güncel Tutun:** ESLint'i ve ilgili plugin'lerini (özellikle 2026'da) düzenli olarak güncelleyin. Yeni kurallar, performans iyileştirmeleri ve hata düzeltmeleri genellikle güncellemelerle gelir. * **Neden Önemli?** Güncel kalmak, en son dil özelliklerini desteklemenizi, yeni anti-pattern'ları yakalamanızı ve güvenlik açıklarına karşı korunmanızı sağlar. API geliştirme dünyası sürekli geliştiği için bu kritik bir adımdır. ### BÖLÜM 9 - Yaygın Hatalar ve Çözümleri (Troubleshooting) ESLint kullanırken karşılaşılan bazı yaygın sorunlar ve 2026 itibarıyla geçerli çözümleri aşağıda listelenmiştir: 1. **Problem:** `Parsing error: 'import' and 'export' may only appear with 'sourceType: "module"'` * **Sebep:** ESLint, kodunuzun `CommonJS` modül sistemi kullandığını varsayarken, siz `import`/`export` ifadeleri kullanıyorsunuz veya tam tersi. Ya da `parserOptions.sourceType` doğru ayarlanmamış. * **Çözüm:** `.eslintrc.js` dosyanızda `parserOptions.sourceType` ayarını `module` olarak ayarlayın ve `env.es20xx` değerinin güncel olduğundan emin olun. Node.js API'leri genellikle `module` kullanır. ```javascript // .eslintrc.js module.exports = { // ... parserOptions: { ecmaVersion: 'latest', sourceType: 'module', // Bu ayarı kontrol edin }, // ... }; ``` 2. **Problem:** `Rule 'indent' is not found` veya `Rule 'prettier/prettier' is not found` * **Sebep:** İlgili ESLint plugin'i veya yapılandırması düzgün yüklenmemiş veya `.eslintrc.js` dosyasında `plugins` veya `extends` bölümünde doğru şekilde belirtilmemiş. * **Çözüm:** Gerekli plugin'leri (örn. `eslint-plugin-prettier`, `@typescript-eslint/eslint-plugin`) `npm install --save-dev` ile kurduğunuzdan ve `.eslintrc.js` dosyasında `plugins` ve `extends` dizilerine eklediğinizden emin olun. ```javascript // package.json (devDependencies) { // ... "devDependencies": { "eslint-plugin-prettier": "^5.x.x", "@typescript-eslint/eslint-plugin": "^6.x.x", // ... } } // .eslintrc.js module.exports = { // ... extends: [ // ... 'plugin:prettier/recommended', // veya 'prettier' config'i 'plugin:@typescript-eslint/recommended', ], plugins: [ // ... 'prettier', '@typescript-eslint', ], // ... };