Wymuś język podświetlania składni GitHub w plikach źródłowych

16

Mam kilka plików źródłowych C ++ w repozytorium GitHub, które mają rozszerzenie .C i używają podświetlania składni w C, czego nie chcę.

Jak ustawić GitHub, aby stosował podświetlanie składni C ++ do tych plików?

Czy istnieje metoda, w jaki sposób GitHub identyfikuje język źródłowy do celów podświetlania składni?

Wygląda na to, że używa tylko rozszerzenia pliku, ale czy istnieje sposób na wymuszenie określonego języka?

nibot
źródło

Odpowiedzi:

9

Zapytałem [email protected]; to jest ich odpowiedź:

Używamy Pygments (http://pygments.org/), aby wyróżniać składnię i określać, którego lexera użyć, na podstawie rozszerzenia każdego pliku. Niestety, nie wygląda na to, że istnieje sposób na wyróżnienie C ++ bez zmiany nazwy plików z * .c -> * .cpp i * .h -> * .hpp.

Możesz to zrobić bez utraty historii git pliku za pomocą git mvpolecenia.

nibot
źródło
7

Wykrywanie języka w GitHub odbywa się przez moduł Linguist , który jest dogodnie otwartym oprogramowaniem. Wykrywa język przede wszystkim na podstawie rozszerzenia pliku, chociaż wykrywanie niejednoznacznych plików (takich jak .hpliki) może być nieco sprytniejsze . Jak widać z pliku konfiguracyjnego , .cjest mocno zdefiniowany jako plik C. Biorąc pod uwagę liczbę plików, które należy ocenić w GitHub, wydajność jest kluczowym wymogiem, choć kosztem pewnej dokładności.

Wygląda na to , że programista wykluczył konfiguracje poszczególnych repozytoriów , więc jedynym sposobem na wyróżnienie składni plików jako C ++ byłoby użycie rozszerzeń C ++. Aby zachować te rozszerzenia i podświetlić, być może będziesz musiał wypróbować inną usługę lub hostować kod gdzieś sam.

Aktualizacja z października 2014 : GitHub nie stał w miejscu, w ostatnim roku wprowadzili podstawowe heurystyki, które pomagają określić język w pliku. Bardziej szczegółowo na te pytania, .cpliki są teraz sprawdzane pod kątem C, C ++ lub Objective-C.

Odpowiedź wsparcia GitHub jest trochę interesująca, używają Pygmentów do podświetlania i leksykonu, ale zestawy reguł znajdują się we własnym module Linguist. Które masz nadzieję, że będą wiedzieć!

John C.
źródło
3

W przypadku plików z Shebang , Shebang jest brany pod uwagę przy określaniu języka, ale wydaje się, że jest równomiernie porównywany z innymi tokenami . To wydaje się być dużym błędem, ponieważ Shebang powinien definitywnie zdefiniować język pliku. Może to powodować problemy z podświetlaniem.

Aby obejść ten problem, możesz dodać fałszywe tokeny w postaci komentarza, aby „przechylić szalę” na korzyść właściwego języka. To jest eksperymentalne, ale miałem z tym szczęście .

Steven Penny
źródło
1

Udostępniając moją odpowiedź tutaj, odkryłem gdzie indziej na SO .

Odkryłem, że możesz dodać model vim lub emacs do pliku Readme Linguist na górze pliku źródłowego (niestety wymagany dla każdego pliku), aby wymusić wyróżnianie składni dla Github.com. Na podstawie pliku languages.yml myślę, że musisz dodać /* vim: syntax=C++ */do pliku źródłowego.

ryanjduffy
źródło
0

Możesz teraz wymusić język dowolnego pliku w repozytoriach, używając przesłonięć Linguist . Linguist to biblioteka typu open source wykrywająca język plików w witrynie github.com.

Aby wymusić .cwyróżnianie plików za pomocą gramatyki C ++, możesz dodać w swoim .gitattributespliku:

*.c linguist-language=C++
pchaigno
źródło
Próbowałem tego *.S linguist-language=asmbezskutecznie ....
mckenzm,
@mckenzm Wygląda na to, że Twoja wiadomość została obcięta. Opublikowana .gitattributeslinia powinna zmusić językoznawcę do rozpoznania wszystkich .Splików jako asemblera. Jeśli to nie działa, mogę rzucić okiem na repozytorium, aby zobaczyć, co się dzieje (czy masz link?).
pchaigno