GitHub Copilot ekibimiz için günlük geliştirme akışının ayrılmaz bir parçası hâline geldi. Ancak başlangıçtaki coşkudan sonra, gerçek dünya kullanımının beraberinde getirdiği bir dizi tuhaf davranış ile karşılaştık. Bu yazı, AIOR ekibi olarak çoğunlukla VS Code + JetBrains kombinasyonunda gözlemlediğimiz problemleri ve onlara karşı geliştirdiğimiz pratik çözüm yollarını içeriyor.
1) Hayalet öneriler ve tekrarlayan döngüler
Aynı imleç pozisyonunda art arda Tab tuşuna bastığınızda Copilot bazen ilk öneriden farklı bir varyant üretir — bu beklenen davranıştır. Ancak bazen aynı kod bloğunu sonsuz döngü hâlinde tekrar tekrar üretir; özellikle döngü gövdesi ve try/catch yapıları içinde yaygındır. Çözüm: imleci bir satır yukarı/aşağı kaydırıp tekrar Tab basın, böylece bağlam yeniden hesaplanır. Alternatif olarak Ctrl+Enter ile alternatif önerileri açın ve farklı bir varyantı seçin.
2) Hayali kütüphaneler
Copilot bazen var olmayan paketleri ("@aior/easy-cache") veya yanlış imzalı fonksiyonlar ("axios.fetchJson") önerir. Pakete inanmadan önce npm/PyPI'da varlığını doğrulamak şart. Hızlı bir alışkanlık olarak öneri kabul edildikten sonra import satırının doğruluğunu kontrol etmek için terminalde npm ls paketadi çalıştırın.
3) Lisans uyumluluğu uyarıları
Bazı düzenleyici eklenti kullanımında GPL kodlarına benzeyen büyük blokları önerme olasılığı uyarıları görüldü. Çözüm: Copilot ayarlarında "public code" filtresini aktifleştirin. Bu, halka açık tam eşleşen önerilerin bloklanmasını sağlar; takım için ortak bir politika hâline getirin.
4) Türkçe yorumlar ve karakter sorunları
TR yorumlu dosyalarda Copilot ara sıra UTF-8 BOM ekler veya Türkçe karakterleri bozar. Çözüm: editor.renderControlCharacters ayarını aktif edin, kaydetmeden önce "Encoding: UTF-8 (without BOM)" kontrolü yapın. JetBrains tarafında ise dosya başlığındaki File Encoding ipucuna güvenmek yerine File > File Encoding menüsünü kullanın.
5) Büyük dosyalarda yavaşlama
2.000 satırı geçen dosyalarda Copilot'un yanıt süresi belirgin biçimde uzar. Çözüm üç katmanlıdır: dosyayı modüllere bölün, "github.copilot.advanced.length" ayarını manuel olarak küçültün ve gerekirse o dosya için Copilot'u geçici devre dışı bırakın.
6) Test yazımında hatalı varsayımlar
Copilot, bir fonksiyonun davranışını dışarıdan görmeden var olmayan davranışlar için test üretebiliyor. Özellikle async/await ve mocking konularında "toHaveBeenCalledWith" tahminleri sıklıkla yanlış. Çözüm: testi otomatik kabul etmeyin, her zaman karşı çalıştırma yapın; CI'da koruyucu doğrulama ekleyin.
7) Gizli bilgilerin sızması
Dosya içine commit edilmiş bir parolayı ya da API anahtarını Copilot bazen benzer bağlamlarda yeniden önerir. Bu nedenle .env, secret klasörleri ve config dosyaları için Copilot'u devre dışı bırakın: workspace ayarlarına "github.copilot.enable": { "plaintext": false, "env": false } ekleyin.
8) Faydalandığımız pratikler
- Önerileri her zaman gözden geçirin; özellikle güvenlik, doğrulama ve yetkilendirme bağlamlarında.
- Dosya başlığına projenin domain notlarını ekleyin; Copilot bağlamı zenginleştirildikçe daha tutarlı çıktı verir.
- Test ve dokümantasyon için Copilot'u taslak üretici olarak görün, otoriter kaynak olarak değil.
Bu önlemlerle Copilot'un üretkenlik getirisi yüksek kalırken tuhaf sürprizler önemli ölçüde azalır. AIOR olarak iç dokümantasyonumuza bu notları ekledik ve yeni ekip üyelerine onboarding sırasında paylaşıyoruz.
GitHub Copilot has become a part of our daily flow, but the honeymoon was followed by a long list of strange behaviours we hit when using it in real engineering work. These are the issues the AIOR team has run into across VS Code and JetBrains plus the workarounds we adopted as a team.
1) Ghost suggestions and feedback loops
Tabbing repeatedly at the same cursor position sometimes cycles Copilot to a different variant — that is expected. Less expected is when Copilot regurgitates the same block forever, especially inside loop bodies and try/catch frames. The fix is to move the caret one line up or down so the context is recomputed, or invoke Ctrl+Enter to open the multi-suggestion list and pick a different variant explicitly.
2) Imaginary libraries
Copilot occasionally invents packages ("@aior/easy-cache") or hallucinates function signatures ("axios.fetchJson"). Verifying the package on npm or PyPI before accepting the import line should be automatic. A useful habit: after accepting a suggestion, run npm ls package-name in the terminal to confirm it is real.
3) Public-code licence warnings
Some editor extensions surface warnings when Copilot is about to reproduce large blocks matching GPL projects. The fix is to enable the "public code" filter in Copilot settings, which blocks suggestions that exactly match public sources. We treat this as a team-wide policy, not a personal preference.
4) Turkish comments and encoding glitches
On files with Turkish comments, Copilot sometimes prepends a UTF-8 BOM or corrupts diacritics. The remedy is to enable editor.renderControlCharacters, verify the encoding is "UTF-8 (without BOM)" before saving, and in JetBrains use File > File Encoding explicitly instead of trusting the status-bar hint.
5) Slowdowns on large files
Beyond ~2,000 lines, Copilot's response time grows visibly. Our three-layer answer is: split the file into modules, reduce "github.copilot.advanced.length" manually, and disable Copilot for that file when it becomes a hot path.
6) Wrong assumptions in tests
Copilot is willing to write tests for behaviour that does not exist, especially around async/await and mocking. The "toHaveBeenCalledWith" inferences are particularly unreliable. Rule of thumb: never accept a test auto-suggestion without running it; CI should fail loudly when reality and the test diverge.
7) Secret leakage
A password or API key once committed into a file can be replayed by Copilot in similar contexts. We disable Copilot for .env files, secret folders and config files by adding "github.copilot.enable": { "plaintext": false, "env": false } to the workspace settings.
8) Practices we adopted
- Always review suggestions, especially around security, validation and authorisation.
- Add a comment header summarising the domain context — Copilot's coherence improves visibly with more context.
- Treat Copilot as a draft generator for tests and docs, not the authoritative source.
With these guardrails Copilot's productivity benefit stays high while the strange surprises drop considerably. We've codified these notes into our internal documentation and walk new engineers through them during onboarding.
Last edited: