deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Microsoft'un Type Server Protocol'ü, LSP'yi Python için JSON-RPC tip sorgularıyla genişletiyor

Microsoft, Language Server Protocol'ün JSON-RPC tabanlı bir genişletmesi olan Type Server Protocol'ü yayımladı. Protokol, Python tip analizini — anlık görüntüleri, import çözümlemesini ve tip sorgularını — typeServer/ istekleri üzerinden editörlere açıyor.

Microsoft'un Type Server Protocol'ü, LSP'yi Python için JSON-RPC tip sorgularıyla genişletiyor

Microsoft ne yayımladı

Microsoft, bir istemcinin bir "type server"dan Python analiz verisi istemesini sağlayan JSON-RPC tabanlı bir protokol olan Type Server Protocol (TSP) spesifikasyonunu yayımladı. Belge, şirketin GitHub'daki pylance-release deposunda yer alıyor ve Hacker News ana sayfasına ulaştı. Spesifikasyona göre bir type server, tüm bir workspace için tip-analiz durumunu tutuyor ve protokol sürümü, anlık görüntüler (snapshot), Python arama yolları, import çözümlemesi ile tip sorguları — hesaplanan, bildirilen ve beklenen tipler — konularını kapsayan istekleri yanıtlıyor.

Tasarım, işe yaradığı her yerde Language Server Protocol kurallarına yaslanıyor: TSP, LSP'nin Position ve Range veri biçimlerini yeniden kullanıyor ve URI'ları tıpkı LSP gibi string olarak temsil ederken, kendi metotlarının tümüne typeServer/ öneki veriyor. Otoritatif kabul edilen üç artefakt tanımlanıyor: arayüzleri ve istek tiplerini tanımlayan bir TypeScript dosyası, protokolün makine tarafından okunabilir bir JSON modeli ve bu modeli doğrulamak için bir JSON şeması.

Bir oturum nasıl işler

İstemci, sunucunun desteklediği bir taşıma katmanı üzerinden (stdio veya Node IPC gibi) bir type server başlatır ya da ona bağlanır; stdio kullanıldığında stdout, JSON-RPC mesajları için ayrılmıştır. İstemcilerin, sunucunun istekleri yanıtlayabilmesi için yeterli workspace ve belge durumunu sağlaması beklenir; spesifikasyon yaygın deseni şöyle anlatıyor: önce normal LSP başlatma ve belge senkronizasyonu işlemlerini yapın, ardından aynı JSON-RPC bağlantısı üzerinden typeServer/* isteklerini gönderin.

Tipik bir oturum sırayla ilerler. İstemci, paylaşılan durumu LSP initialize ve initialized mesajlarıyla başlatır, typeServer/getSupportedProtocolVersion çağırır ve dönen semver stringinin uyumlu olduğunu doğrular, sonra typeServer/getSnapshot çağırarak ilk anlık görüntü tanımlayıcısını elde eder. Bunun ardından, istek biçimi gerektirdiğinde güncel anlık görüntüyü taşıyan tip sorgusu, import çözümlemesi veya arama yolu istekleri gönderebilir. Önceki tip sonuçları geçersiz olmaya başladığında sunucu, typeServer/snapshotChanged bildirimini gönderir. Anlık görüntüler, belirli bir analiz durumunu tanımlayan negatif olmayan tam sayılardır.

Çoklu bağlantı modu

0.4.1 sürümünden itibaren TSP, isteğe bağlı ek salt-okunur bağlantıları da destekliyor. Ana bağlantı, durumu olan her şeyin sahipliğini elinde tutuyor — LSP yaşam döngüsü mesajları, workspace ve yapılandırma bildirimleri, belge senkronizasyonu, anlık görüntü bildirimleri ve typeServer/connection kontrol isteği — ek kanallar ise yalnızca sonuçları istemcinin sağladığı anlık görüntü için geçerli olan salt-okunur TSP isteklerini taşıyor.

Spesifikasyon bunu tamamen bir performans seçeneği olarak sunuyor; hedefi, ana bağlantıyı bloke etmemesi gereken yoğun hacimli tip sorguları veya arka plan işçileri. Destek, normal LSP initialize el sıkışması sırasında capabilities.experimental.typeServerMultiConnection üzerinden müzakere ediliyor ve mod, yalnızca her iki taraf da bu yeteneği bildirdiğinde ve taşıma listeleri örtüştüğünde etkinleşiyor; yerleşik tek ek-bağlantı taşıyıcısı IPC. Sunucular tek bağlantılı modda da doğru çalışmak zorunda ve çoklu bağlantı desteği protokol doğruluğu için gerekli olmamalı. Kanallar, argümanları ya tek bir tam-çift yönlü IPC uç noktası ya da yalnızca tek yönlü uç noktalar sunan platformlardaki bir girdi/çıktı çifti taşıyan bir typeServer/connection isteğiyle açılıp kapanıyor. Ek bir bağlantıya gelen LSP trafiğini, durum değiştiren bildirimleri ve müzakere edilen sürüm için izin verilmeyen herhangi bir TSP mesajını reddetmeleri söyleniyor sunuculara.

Sürümleme ve olgunluk

TSP, istemci ve sunucu uyumluluk kontrolleri için semantik sürüm stringleri kullanıyor ve açık bir uyarı içeriyor: protokol 0.x hattındayken, minor sürüm değişiklikleri kırıcı olabilir. Geçmiş, ilk 0.1.0'dan başlayıp sürerek ilerliyor: istek tipleri ve alanlar ekleyen 0.2.0; daha karmaşık tip biçimlerine geçen 0.3.0; bir Type union'a ve stub tabanlı tip yüklerine geçen 0.4.0; ve çoklu bağlantı müzakeresiyle bağlantı kontrol isteğini getiren 0.4.1.

Neden önemli

LSP, editörlerin tanılama, tamamlama ve diğer dil özelliklerini tüketme biçimini standartlaştırdı; ancak tip analizinin daha derin mekanizması çoğunlukla Pylance gibi bireysel uygulamaların özelinde kaldı. TSP, bu katman için hat seviyesinde bir standart öneriyor: JSON-RPC konuşan herhangi bir editör veya araç, uygulamaya özgü API'lere bel bağlamak yerine, standartlara uyan bir sunucuya bir ifadenin hesaplanan tipini, bir sembolün bildirilen tipini veya bir import'un nasıl çözümlendiğini sorabilir. Yalnızca Python'u kapsayan kapsam ve 0.x sürümlemesi, bunun erken aşama bir çalışma olduğunu ve kırıcı değişikliklerin masada olduğunu açıkça gösteriyor. Yine de protokol halihazırda LSP'nin biçimlerini ve yaşam döngüsünü ödünç aldığı için LSP ekosisteminin doğal bir genişletmesi olarak konumlanıyor — ve diğer dil sunucuları aynı deseni benimserse, tip analizi LSP'nin zaten kapsadığı özellikler kadar taşınabilir hale gelebilir.

  • #microsoft
  • #language-server-protocol
  • #python
  • #developer-tools
  • #json-rpc

İlgili yazılar