Как github определяет язык проекта?



недавно я работал над проектом github как на JavaScript, так и на C++, и заметил, что github помечает проект как C++. Если вам нужно выбрать один язык, это, вероятно, правильное обозначение, так как код C++ компилируется как библиотека JavaScript, но это заставило меня задуматься... как github выясняет, на каком языке помечать каждый проект?

908   5  

5 ответов:

обновление апрель 2013, по nuclearsandwich (команда поддержки GitHub или "supportocat"):

Если нужный язык не получает подсветку синтаксиса вы можете внести свой вклад в библиотеку лингвиста, чтобы добавить его.


(оригинальный ответ, окт. 2012)

этой поток на поддержку GitHub объясняет это:

Он просто суммирует файл размеры для каждого расширения. Самый большой из них "выигрывает".

мы хотели бы избежать открытия файлов и разбора их содержимого, так как это замедлит процесс... но это может быть единственным способом разрешения подобных конфликтов.

Так как это не 100% точно, что привело некоторые добавить:

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


Примечание: в качестве Марк Rushakoff упоминает в ответ (upvoted), угадывание стало лучше с тех пор с проект лингвист (С открытым исходным кодом с июня 2011 года).
Вы можете видеть, что есть еще вопросы: Вопросы Лингвиста GitHub.
Смотрите здесь более подробно:

Как только язык был обнаружен, он передается в альбинос, a одном обертка, которая делает фактическая подсветка синтаксиса.

и добавить директивы лингвиста в a .gitattributes file.

в настоящее время на GitHub по проект лингвист используется для определения статистики языка, как описано в это сообщение в блоге Github (который вышел через несколько месяцев после того, как этот вопрос был первоначально задан).

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

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

  1. каждый репозиторий помечен первым языком из статистика язык.
  2. статистика языка подсчитывает общий размер файлов для каждого обнаруженного языка программирования или разметки. вендор, документация, и генерируется файлы не учитываются.
  3. язык каждого файла определяется проектом с открытым исходным кодом лингвист.

как лингвист обнаруживает языки?

лингвист полагается на следующие стратегии, по порядку, и возвращает язык, как только он нашел идеальное совпадение (стратегия с одним возвращенным языком).

  1. искать Emacs и vim modelines.
  2. известное имя файла. Некоторые имена файлов связаны с определенными языками (подумайте Makefile).
  3. ищите shebang. Файл с #!/bin/bash shebang будет классифицироваться как оболочка.
  4. известное расширение файла. Языки имеют набор расширений, связанных с ними. Однако есть много конфликтов с этой стратегией. Противоречивые результаты (подумайте C++, C и Objective-C для .h) уточняются последующими стратегиями.
  5. набор эвристические правила. Они обычно полагаются на регулярные выражения над содержимым файлов, чтобы попытаться идентифицировать язык (например,^[^#]+:- для Пролога).
  6. наивный байесовский классификатор, обученный на образец файлы. Последняя стратегия, самая низкая точность. Байесовский классификатор всегда принимает подмножество языков в качестве входных данных; он не предназначен для классификации среди всех языки. Возвращается лучшее соответствие, найденное классификатором.

Что такое файлы unvendored и documentation?

лингвист рассматривает некоторые файлы как проданы, что означает, что они не включены в языковую статистику. Они включают в себя сторонние библиотеки, такие как jQuery и определены в vendor.yml конфигурации. Вы также можете использовать файлы поставщика или unvendor в своем репозитории с помощью лингвист переопределяет.

аналогично, файлы документации определяются в documentation.yml и может быть изменен с помощью лингвист переопределяет.

как обнаруживаются сгенерированные файлы?

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

насчет языков программирования и разметки?

в лингвисте каждому языку дается свой тип. Эти типы можно найти в главном файле конфигурации, languages.yml. В статистике учитываются только языки программирования и разметки.

после некоторой возни с лингвист I я это заметил.

для файлы Shebang, Shebang учитывается при определении языка, но, кажется, равномерно утяжеленный против другого маркеры. Это кажется большой ошибкой, потому что Shebang должен окончательно определить язык файла.

Это может вызвать вопросы с подсветка.

расширения файлов-это первое, что приходит мне на ум.

Comments

    Ничего не найдено.