# Temeller - LuaLS

- **İngilizce aslı:** https://wiki.facepunch.com/gmod/LuaLanguageServer
- **Çeviri tarihi:** 2025-09-08

### LuaLS Nedir?

lua-language-server, yorum ek açıklamaları (comment annotations) kullanarak tür denetimine (type checking) olanak tanır. Bu, Dil Sunucusu Protokolünü (Language Server Protocol) destekleyen çoğu düzenleyicide kullanılabilir, ancak bu mini rehberde Visual Studio Code için nasıl kurulacağı gösterilmektedir. Diğer rehberlere [buradan](https://luals.github.io/#install) ulaşabilirsiniz.

Tür denetimi, tür uyuşmazlıkları nedeniyle oluşabilecek hataları meydana gelmeden önce bulmak için çok yararlı olabilir ve genellikle erken hata tespiti sağlar. Daha önce hiç `expected ? got nil` hatasıyla karşılaştınız mı? O zaman bu tam size göre!

### Kurulum

- `Lua` (sumneko tarafından) eklentisini [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=sumneko.lua)'ten yükleyin.
- [luttje/glua-api-snippets](https://github.com/luttje/glua-api-snippets)'i, README dosyasındaki rehberi takip ederek kurun.

> **NOT:** Lua Eklenti Yöneticisini (Lua Addon Manager) açmaya çalışırken bir hata penceresiyle karşılaşırsanız, büyük olasılıkla sisteminizde [git](https://git-scm.com/) eksiktir. Eklenti Yöneticisi ile ilgili başka sorunlar yaşarsanız, sorun giderme bölümüne bakın.

### Yapılandırma / Kullanıcı Ayarları

Her şey yüklendikten sonra, VS Code'da bir metin dosyası açın ve sağ alt köşeden dil modunu `Lua` olarak değiştirin. Alternatif olarak ctrl + k m klavye kısayolunu kullanın.

Ardından, ctrl + ⇧ shift + p ile komut paletini açın. `Open User Settings (JSON)` aratın ve enter'a basın. Bu, Lua ayarlarını eklemek için ayarlarınızı bir JSON dosyası olarak açacaktır. Sonrasında bu varsayılan ayarları eklemelisiniz.

```lua
"Lua.diagnostics.disable": [
	"undefined-global"
],
"Lua.runtime.special": {
	"include": "require",
	"IncludeCS": "require"
},
"Lua.runtime.nonstandardSymbol": [
	"continue",
	"&&",
	"||",
	"!=",
	"!",
	"//"
]
```

> **NOT:** Özellikle yeni başlarken veya türleri mevcut bir kod tabanına entegre ederken daha fazla tanıyı devre dışı bırakmak cazip gelebilir, ancak bu durum genellikle her şey düzgün bir şekilde türlendirildiğinde yararlı işlevselliği kaçırmanıza yol açar.

Her zaman türlerini yüklemek istediğiniz bir oyun modunuz (gamemode) / eklenti setiniz varsa, bunları `Lua.workspace.libary`'ye ekleyebilirsiniz. Bu, tür tanımlarını yeniden tanımlamaya / `require` etmeye gerek kalmadan diğer eklentilerde kullanabileceğiniz anlamına gelir.

```lua
"Lua.workspace.library": [
   "C:\Path\To\BaseDirectory"
]
```

### Temel Kullanım Örnekleri

İşte LuaLS'in farklı kullanım alanlarını gösteren bazı kısa örnekler.

#### Tür Denetimi

Burada, bir fonksiyonun iki farklı türde anahtar-değer tablosu döndürdüğü bir örneğimiz var. Daha sonra tablo üzerinde döngü kurup bu değerleri başka bir fonksiyona iletiyoruz. Fark etmiş olabilirsiniz veya olmayabilirsiniz, `PrintHealth` için anahtar ve değer argümanlarının yerleri değiştirilmiştir. Tablo ve fonksiyon argümanları için türleri belirttiğimizden, LuaLS bizi tür uyuşmazlıkları konusunda uyarıyor! Elbette bu örnek biraz bariz, ancak fonksiyon dönüşlerinin başka bir dosyadan geldiği durumlarda bu hayat kurtarıcı olabilir.

![type-checking.png](https://gmod.tr/api/uploads/wiki/71909e91fe4ccb1f03a3.png)

#### Otomatik Tamamlama

Burada `Player` üzerinde, bir Varlık (Entity) tablosu döndüren yeni bir `GetOwnedEntities` fonksiyonu tanımlıyoruz. (`Entity[]`, `table<integer, Entity>`'e eşdeğerdir; burada türün sıralı bir tablosudur). Bu yeni fonksiyon üzerindeki tür belgeleri sayesinde, döndürülen tablo üzerinde döngü kurduğumuzda `Entity` içindeki tüm fonksiyonların tam bir otomatik tamamlamasını görebiliriz.

![auto-completion.png](https://gmod.tr/api/uploads/wiki/eba6eed6e58c0acc6496.png)

#### Jenerik (Generic)

Jenerikler (Generics), kodun yeniden kullanılmasına izin verir ve bir tür için bir nevi "yer tutucu" görevi görürler. Bir türün "yakalanmasına" ve yeniden kullanılmasına olanak tanırlar; bu örnekte sadece değeri, türüyle birlikte neyse onu geri döndürüyoruz.

![image.png](https://gmod.tr/api/uploads/wiki/b4765ecb5c82ebcc6e46.png)

### Sorun Giderme

Bazen Lua Eklenti Yöneticisi (Lua Addon Manager), Gmod Snippets'i yükleyemeyebilir. Bu olursa, bunun yerine:

- [luttje/glua-api-snippets/releases](https://github.com/luttje/glua-api-snippets/releases) adresinden en son `*.lua.zip` dosyasını indirin.
- Sıkıştırılmış dosyadan çıkarılan dizin yolunu VS Kullanıcı Ayarlarınızdaki `Lua.workspace.libary`'ye ekleyin.

### Bağlantılar

- [LuaLS Github](https://github.com/LuaLS/lua-language-server).
- [LuaLS Wiki](https://luals.github.io/wiki/).

- [GMod Wiki ana sayfası](https://gmod.tr/wiki)

---

[Tüm sunucular](https://gmod.tr/) · [GmodTR Launcher](https://gmod.tr/launcher) · [Rehber](https://gmod.tr/rehber) · [GMod Wiki](https://gmod.tr/wiki) · [GmodTR nedir?](https://gmod.tr/hakkinda) · [Sunucu ekle](https://gmod.tr/sunucu-ekle) · [Discord](https://discord.gg/gmodtr)

Kaynak: https://gmod.tr/wiki/LuaLanguageServer
