Примушуйте мову виділення синтаксису GitHub у вихідних файлах


16

У репозиторії GitHub у мене є декілька вихідних файлів C ++, які мають розширення .C і використовують підсвічування синтаксису C, чого я не хочу.

Як я можу налаштувати GitHub застосовувати виділення синтаксису C ++ до цих файлів?

Чи існує спосіб, яким GitHub ідентифікує мову джерела для виділення синтаксису?

Схоже, він використовує лише розширення файлу, але чи є спосіб змусити певну мову?

Відповіді:


9

Я запитав support@github.com; це їх відповідь:

Ми використовуємо Пігменти (http://pygments.org/), щоб зробити підсвічування синтаксису та визначити, який лексер використовувати, базуючись на розширенні кожного файлу. Тож, на жаль, не схоже, що існує спосіб виділити C ++ без перейменування файлів із * .c -> * .cpp та * .h -> * .hpp.

Це можна зробити, не втрачаючи історії git файлу, використовуючи git mvкоманду.


7

Виявлення мови GitHub здійснюється модулем Linguist , який зручно відкритим кодом. Він розраховує насамперед на розширення файлу для виявлення мови, хоча виявити неоднозначні файли (наприклад, .hфайли) може бути трохи розумнішим . Як видно з конфігураційного файла , .cчітко визначено як файл C. Зважаючи на кількість файлів, які необхідно оцінити на GitHub, ефективність є ключовою вимогою, якщо ціною певної точності.

Схоже, що за конфігураціями repo розробник виключив , тому єдиним способом, яким ви могли б виділити синтаксис файлів як C ++, було б використовувати розширення C ++. Щоб зберегти ці розширення та виділити, можливо, вам доведеться спробувати іншу послугу або влаштувати код десь самостійно.

Оновлення жовтня 2014 року : GitHub не стояв на місці, останній рік вони запровадили основні евристики, щоб допомогти визначити мову у файлі. Більш специфічні для цих питань .cфайли тепер перевіряються, щоб перевірити, чи є вони C, C ++ або Objective-C.

Відповідь підтримки GitHub є трохи цікавою, вони використовують Pygmens для виділення та лексеми, але набори правил є у власному модулі Linguist. Що ви сподієтесь, що вони знають!


3

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

В якості вирішення можна додати фіктивні жетони у вигляді коментаря, щоб "підказати ваги" на користь правильної мови. Це експериментально, але мені пощастило .


1

Ділячись тут своєю відповіддю, я виявив в іншому місці SO .

Я виявив, що ви можете додати vim або emacs modeline для лінгвістичного режиму у верхній частині вихідного файлу (на жаль, необхідний для кожного файлу), щоб примусити виділення синтаксису для Github.com. На підставі файлу languages.yml , я думаю, вам потрібно буде додати його /* vim: syntax=C++ */до вихідного файлу.


0

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

Щоб змусити .cвиділити ваші файли за допомогою граматики C ++, ви можете додати у свій .gitattributesфайл таке:

*.c linguist-language=C++

Я намагався це *.S linguist-language=asmзробити безрезультатно ....
mckenzm

@mckenzm Здається, ваше повідомлення урізане. .gitattributesЛінії ви вивісили повинні змусити Лінгвіст розпізнавати всі .Sфайли в Асамблеї. Якщо це не працює, я можу переглянути сховище, щоб спробувати побачити, що відбувається (у вас є посилання?).
pchaigno
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.