Github bir projenin dilini nasıl anlar?


84

Geçenlerde hem JavaScript hem de C ++ 'da bir github projesi üzerinde çalışıyordum ve github'ın projeyi C ++ olarak etiketlediğini fark ettim. Tek bir dil seçmeniz gerekiyorsa, C ++ kodu bir JavaScript kitaplığı olarak derlendiğinden bu muhtemelen doğru tanımlamadır, ancak bu beni meraklandırdı ... github her projeyi hangi dili etiketleyeceğini nasıl anlar?


14
Kendinizi şanslı sayabilirsiniz. Ruby on Rails projesi yazıyorum ama Twitter Bootstrap kullandığım için Github

2
@davblayn github.com/github/linguist/blob/master/lib/linguist/vendor.yml'nin sorununuzu çözeceğini düşünüyorum . Ayrıca önyükleme için bir CDN kullanmak da işe yarayacaktır.
Eric Wilson

3
Bu soru, programlama ile ilgili olmadığı için konu dışı görünüyor. Burada , Yardım Merkezinde hangi konular hakkında soru sorabilirim konusuna bakın . Belki Web Apps Stack Exchange sormak için daha iyi bir yer olabilir.
jww

Dilbilimci için Github izleyicisindeki Yanlış Tanımlanmış Dil etiketine de bakın .
jww

1
İstatistik motorunun, sonucu uydurmak için dosya türleri hakkında yalan söylediğini söyleyebilirsiniz. Bkz stackoverflow.com/a/27099628/492
CAD that bloke

Yanıtlar:


81

Güncelleme Nisan 2013, tarafından nuclearsandwich (GitHub destek ekibi veya "supportocat"):

İstediğiniz dil sözdizimi vurgulamasını almıyorsa, eklemek için Dilbilimci kitaplığına katkıda bulunabilirsiniz.


(Orijinal cevap, Ekim 2012)

GitHub desteğindeki bu ileti dizisi bunu açıklıyor:

Yalnızca her uzantı için dosya boyutlarını özetler. En büyük olan "kazanır".

Her ikisi de süreci yavaşlatacağı için dosyaları açıp içeriklerini ayrıştırmaktan kaçınmak istiyoruz ... ancak bu, bunun gibi çatışmaları çözmenin tek yolu olabilir.

Bu% 100 doğru olmadığı için bazılarının şunu eklemesine neden oldu:

Ben de tahminin yanlış olduğu durumlar için basit bir manuel geçersiz kılma anahtarına oy verirdim.


Not: olarak işaretle Rushakoff bahsedildi onun cevabını (upvoted), tahmin daha iyi o zaman ile beri var dilbilimci projesi (Haziran 2011 tarihinden itibaren açık kaynaklı).
Yine de hala sorunlar olduğunu görebilirsiniz: GitHub Dilbilimci Sorunları .
Daha fazla ayrıntı için buraya bakın :

Dil tespit edildikten sonra, bu geçirilir Albino bir Pygments gerçek sözdizimi vurgulama yapar sarmalayıcı.

Ve bir .gitattributes dosyasına dilbilimci yönergeleri ekleyebilirsiniz .


2
Bilgi için teşekkürler. Sanırım dili manuel olarak değiştirmenin hala bir yolu yok.
noob

Artık durum böyle değil! Dilbilimci ile ilgili aşağıdaki cevaplar hedefe daha yakındır. Check My depo yanlış dil olarak işaretlenmiş ve Neden tanınan sevdiğim dil değil üzerinde help.github.com . Feragatname: GitHub'ın destek ekibinde çalışıyorum.
nüklearsandwich

@nuclearsandwich Mükemmel, düzenlemenizi tamamlayarak cevabı güncelledim. Not: 10 Mayıs Cuma GitHub genel merkezinde John Greet ve diğer destek kedilerle görüşeceğim :)
VonC

Depoyu işaretlememenin veya kullanıcının ana dili seçmesine izin vermemenin otomatik olarak tahmin etmekten çok daha uygun olacağını eklemek istiyorum, çünkü depom github.com/salda/file_scraper çoğunlukla C ++ ve biraz C ile işaretlendi, ancak 70 olarak işaretlendi. % Amaç-C.
Lukas Salich


4

İlk olarak, Dilbilimci geçersiz kılmaları kullanarak arşivinizdeki dosyalar için tespit edilen dili geçersiz kılabileceğinizi bilin .

Şimdi kısaca,

  1. Her bir depo, dil istatistiklerinden birinci dil ile etiketlenir .
  2. Dil istatistikleri, tespit edilen her programlama veya biçimlendirme dili için dosyaların toplam boyutunu sayar . Sağlanan, belgeler ve oluşturulan dosyalar sayılmaz.
  3. Her dosyanın dili, açık kaynak projesi Linguist tarafından tespit edilir .

Dilbilimci dilleri nasıl algılar?

Dilbilimci , sırayla aşağıdaki stratejilere güvenir ve mükemmel bir eşleşme bulur bulmaz dili döndürür (tek bir dille strateji döndürülür).

  1. Arayın Emacs ve Vim kipsatırlarının .
  2. Bilinen dosya adı. Bazı dosya adları belirli dillerle ilişkilidir (düşünün Makefile).
  3. Bir mesele ara. Shebang içeren bir dosya#!/bin/bash Kabuk olarak sınıflandırılır.
  4. Bilinen dosya uzantısı. Dillerin kendileriyle ilişkili bir dizi uzantıları vardır. Bununla birlikte, bu strateji ile birçok çelişki var. Çelişkili sonuçlar (C ++, C ve Objective-C'yi düşünün .h) sonraki stratejiler tarafından iyileştirilir.
  5. Bir dizi sezgisel kural . Dili denemek ve tanımlamak için genellikle dosyaların içeriği üzerinde normal ifadelere güvenirler (örn., ^[^#]+:-Prolog için ).
  6. Örnek dosyalar üzerinde eğitilmiş saf bir Bayes sınıflandırıcı . Son strateji, en düşük doğruluk. Bayes sınıflandırıcı her zaman girdi olarak bir dil alt kümesini alır; tüm diller arasında sınıflandırılması amaçlanmamıştır. Sınıflandırıcı tarafından bulunan en iyi eşleşme döndürülür.

Sağlanmamış dosyalar ve belge dosyaları nelerdir?

Dilbilimci, bazı dosyaları satıcı olarak kabul eder , yani dil istatistiklerine dahil edilmemişlerdir. Bunlar, jQuery gibi üçüncü taraf kitaplıklarını içerir ve vendor.ymlyapılandırma dosyasında tanımlanır . Dilbilimci geçersiz kılmaları kullanarak deponuzdaki dosyaları satabilir veya kaldırabilirsiniz .

Benzer şekilde, dokümantasyon dosyaları da tanımlanır documentation.ymlve Dilbilimci geçersiz kılmalar kullanılarak değiştirilebilir .

Oluşturulan dosyalar nasıl tespit edilir?

Dilbilimci , oluşturulan dosyaları tespit etmek için dosyaların hem yollarını hem de içeriğini kullanarak basit kurallara güvenir . Oluşturulan dosyalar, dil istatistiklerinde sayılmaz ve github.com'daki farklarda gösterilmez.

Programlama ve biçimlendirme dilleri ne olacak?

Dilbilimci'de her dile bir tür verilir. Bu türler ana yapılandırma dosyasında bulunabilir languages.yml. İstatistiklerde yalnızca programlama ve biçimlendirme dilleri sayılır.


0

Dilbilimci ile biraz uğraştıktan sonra bunu fark ettim.

Shebang içeren dosyalar için, Shebang , dili belirlerken dikkate alınır, ancak diğer belirteçlere göre eşit ağırlıkta görünmektedir . Bu büyük bir hata gibi görünüyor çünkü Shebang dosyanın dilini kesin olarak tanımlamalıdır.

Bu, vurgulamayla ilgili sorunlara neden olabilir .


Bu cevabın birkaç kırık bağlantısı var. Bu, yığın değişiminde göründüğü şekliyle bu yanıt için de geçerlidir: webapps.stackexchange.com/a/40110 . Utanç verici, çünkü bu bağlantılara bakmak istiyorum!
04'te shmim

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.