Принудительное использование языка подсветки синтаксиса GitHub в исходных файлах


16

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

Как настроить GitHub для применения подсветки синтаксиса C ++ к этим файлам?

Есть ли способ, как GitHub идентифицирует исходный язык для подсветки синтаксиса?

Похоже, он использует только расширение файла, но есть ли способ заставить определенный язык?

Ответы:


9

Я спросил support@github.com; это их ответ:

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

Вы можете сделать это, не теряя git-историю файла, используя git mvкоманду.


7

Определение языка в GitHub осуществляется модулем Linguist , который является удобным открытым исходным кодом. Он основан главным образом на расширении файла для определения языка, хотя он может быть немного умен для обнаружения неоднозначных файлов (таких как .hфайлы). Как вы можете видеть из файла конфигурации , .cон четко определен как файл C. Учитывая количество файлов, которые должны быть оценены на GitHub, эффективность является ключевым требованием, если за счет некоторой точности.

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

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

Ответ поддержки GitHub немного интересен, они используют Pygments для выделения и лексера, но наборы правил находятся в их собственном модуле Linguist. Что бы вы надеялись, что они узнают!


3

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

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


1

Делясь своим ответом здесь, я обнаружил в другом месте на SO .

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


0

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

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

*.c linguist-language=C++

Я пробовал это *.S linguist-language=asmбезрезультатно ....
mckenzm

@mckenzm Кажется, ваше сообщение обрезано. Размещенная .gitattributesвами строка должна заставить Linguist распознавать все .Sфайлы как сборку. Если это не работает, я могу взглянуть на хранилище, чтобы попытаться увидеть, что происходит (у вас есть ссылка?).
pchaigno
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.