Як github визначає мову проекту?


84

Нещодавно я працював над проектом github як в JavaScript, так і на C ++, і помітив, що github позначив проект як C ++. Якщо вам потрібно вибрати одну мову, це, мабуть, правильне позначення, оскільки код С ++ скомпільований як бібліотека JavaScript, але це змусило мене задуматися ... як github з’ясовує, якою мовою позначати кожен проект?


14
Ви можете вважати, що вам пощастило. Я пишу проект Ruby on Rails, але оскільки я використовую Twitter Bootstrap, Github вважає, що моїм проектом є Javascript, а не передбачуваний Ruby

2
@davblayn Я думаю, що github.com/github/linguist/blob/master/lib/linguist/vendor.yml вирішить вашу проблему. Також використання CDN для завантаження буде працювати.
Ерік Вілсон,

3
Здається, це питання не є темою, оскільки мова не йде про програмування. Подивіться, які теми я можу запитати тут, у довідковому центрі. Можливо, кращим місцем для запитання буде веб-програма обміну стеками.
jww

Також см розпізнали мову мітки на Github трекер для Лінгвіст .
jww

1
Ви можете сказати бренд статистики про типи файлів, щоб підробити результат. Дивіться stackoverflow.com/a/27099628/492
CAD

Відповіді:


81

Оновлення, квітень 2013 р., NuclearSandwich (команда підтримки GitHub або "supportocat"):

Якщо ваша потрібна мова не отримує підсвічування синтаксису, ви можете внести її до бібліотеки Linguist, щоб додати її.


(Оригінальна відповідь, жовтень 2012 р.)

Це пояснює підтримка GitHub :

Це просто підсумовує розміри файлів для кожного розширення. Найбільший з них "виграє".

Ми хотіли б уникати відкриття файлів та аналізу їх вмісту, оскільки обидва вони уповільнюють процес ... але це може бути єдиним методом вирішення конфліктів, подібних до цього.

Оскільки це не є на 100% точним, це призвело до додавання:

Я теж проголосував би за простий перемикач ручного перевизначення випадків, коли припущення помиляється.


Примітка: як згадує Марк Рушаков у своїй відповіді (проти), з тих пір здогадки покращились завдяки проекту лінгвістів (відкрито з червня 2011 р.).
Ви бачите, що все ще існують проблеми: Проблеми з мовознавством GitHub .
Детальніше див. Тут :

Як тільки мова буде виявлена, вона передається Albino , обгортці Pygments , яка робить власне підсвічування синтаксису.

І ви можете додати лінгвістичні директиви у файл .gitattributes .


2
Дякую за інформацію. Я думаю, що досі немає можливості змінити мову вручну.
noob

Це вже не так! Наведені нижче відповіді щодо лінгвіста ближче до позначки. Перегляньте розділ Моє сховище позначено як неправильну мову та Чому мою улюблену мову не розпізнають на help.github.com . Застереження: я працюю в команді підтримки GitHub.
ядерний сандвіч

@nuclearsandwich Відмінно, я оновив відповідь, завершивши ваше редагування. Примітка: Я буду в штаб-квартирі GitHub у п’ятницю, 10 травня, на зустрічі з Джоном Грітом та іншими
супровідними котами

Я просто хочу додати, що не позначати сховище або дозволяти користувачеві вибирати основну мову було б набагато зручніше, ніж автоматично вгадувати , оскільки мій репозиторій github.com/salda/file_scraper в основному знаходиться на C ++ з трохи C, але позначений як 70 % Завдання-C.
Лукас Саліч

13

В даний час лінгвістичний проект Github - це те, що використовується для визначення мовної статистики, як описано в цій публікації в блозі Github (яка вийшла через кілька місяців після того, як це питання було спочатку поставлене).


Чудово, я не бачив цього під час моєї відповіді. +1
VonC

4

По-перше, знайте, що ви можете замінити мову, виявлену для файлів у вашому сховищі, використовуючи заміни Linguist .

Тепер, у двох словах,

  1. Кожне сховище позначено першою мовою з мовної статистики .
  2. Статистика мови підраховує загальний розмір файлів для кожної виявленої мови програмування або розмітки. Продані, документація та генеровані файли не враховуються.
  3. Мова кожного файлу визначається проектом з відкритим кодом Linguist .

Як лінгвіст виявляє мови?

Лінгвіст покладається на наступні стратегії по порядку і повертає мову, як тільки знаходить ідеальний збіг (повертається стратегія з однією мовою).

  1. Шукайте моделі Emacs та Vim .
  2. Відома назва файлу. Деякі імена файлів пов'язані з певними мовами (подумайте Makefile).
  3. Шукайте шебанга. Файл із #!/bin/bashшебангом буде класифікований як Shell.
  4. Відоме розширення файлу. Мови мають набір розширень, пов’язаних з ними. Однак із цією стратегією існує багато конфліктів. Суперечливі результати (думаю, C ++, C та Objective-C for .h) уточнюються наступними стратегіями.
  5. Набір евристичних правил . Зазвичай вони покладаються на регулярні вирази над вмістом файлів, щоб спробувати визначити мову (наприклад, ^[^#]+:-для Prolog ).
  6. Наївний байєсівський класифікатор, навчений на зразках файлів . Остання стратегія, найнижча точність. Байєсівський класифікатор завжди бере підмножину мов як вхідні дані; він не призначений для класифікації серед усіх мов. Повертається найкращий збіг, знайдений класифікатором.

Що таке файли без документів та документації?

Лінгвіст вважає деякі файли проданими , тобто вони не включені до мовної статистики. До них належать сторонні бібліотеки, такі як jQuery, і вони визначені у vendor.ymlфайлі конфігурації. Ви також можете продавати або видавати файли у своєму сховищі, використовуючи перевизначення Linguist .

Подібним чином, файли документації визначені в documentation.ymlі можуть бути змінені за допомогою перевизначень Linguist .

Як виявляються генеровані файли?

Лінгвіст покладається на прості правила для виявлення сформованих файлів, використовуючи як шляхи, так і вміст файлів. Створені файли не враховуються в мовній статистиці та не відображаються у відмінностях на github.com.

А як щодо мов програмування та розмітки?

У лінгвісті кожна мова має тип. Ці типи можуть бути знайдені в головному файлі конфігурації languages.yml. У статистиці враховуються лише мови програмування та розмітки.


0

Після деякої розмови з лінгвістом я це помітив.

Для файлів із Shebang , Shebang враховується при визначенні мови, але, здається, рівномірно зважений щодо інших лексем . Це, здається, велика помилка, оскільки Shebang повинен остаточно визначити мову файлу.

Це може спричинити проблеми із виділенням.


Ця відповідь має кілька непрацюючих посилань. Це також стосується цієї відповіді, оскільки вона з’являється на біржі стеків: webapps.stackexchange.com/a/40110 . Ганьба, бо я хотів би поглянути на ці посилання!
shmim

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.