Paksakan sintaks GitHub yang menyoroti bahasa pada file sumber

16

Saya memiliki beberapa file sumber C ++ di repositori GitHub yang memiliki ekstensi .C dan menggunakan penyorotan sintaksis C, yang tidak saya inginkan.

Bagaimana saya bisa mengatur GitHub untuk menerapkan penyorotan sintaks C ++ ke file-file ini?

Apakah ada metode bagaimana GitHub mengidentifikasi bahasa sumber untuk tujuan penyorotan sintaksis?

Sepertinya hanya menggunakan ekstensi file, tetapi apakah ada cara untuk memaksa bahasa tertentu?

nibot
sumber

Jawaban:

9

Saya bertanya [email protected]; ini jawaban mereka:

Kami menggunakan Pygments (http://pygments.org/) untuk melakukan penyorotan sintaks dan menentukan lexer mana yang digunakan berdasarkan ekstensi setiap file. Jadi sayangnya, sepertinya tidak ada cara untuk mendapatkan sorotan C ++ tanpa mengganti nama file dari * .c -> * .cpp dan * .h -> * .hpp.

Anda dapat melakukan ini tanpa kehilangan riwayat git file dengan menggunakan git mvperintah.

nibot
sumber
7

Deteksi bahasa GitHub dilakukan oleh modul Linguist , yang merupakan open source. Itu terutama bergantung pada ekstensi file untuk mendeteksi bahasa, meskipun itu bisa sedikit pintar untuk mendeteksi file yang ambigu (seperti .hfile). Seperti yang Anda lihat dari file konfigurasi , .cdidefinisikan dengan tegas sebagai file C. Mengingat jumlah file yang harus dinilai di GitHub, efisiensi adalah persyaratan utama, jika dengan biaya akurasi.

Sepertinya konfigurasi per repo telah dikesampingkan oleh pengembang, jadi satu-satunya cara Anda dapat membuat file sorotan sintaks sebagai C ++ adalah dengan menggunakan ekstensi C ++. Untuk mempertahankan ekstensi itu dan menyoroti, Anda mungkin harus mencoba layanan lain, atau meng-host kode sendiri di suatu tempat.

Pembaruan Oktober 2014 : GitHub tidak berdiri diam, pada tahun lalu mereka telah memperkenalkan beberapa heuristik dasar untuk membantu menentukan bahasa dalam file. Lebih spesifik untuk pertanyaan ini, .cfile sekarang diperiksa untuk melihat apakah mereka C, C ++ atau Objective-C.

Jawaban dukungan GitHub sedikit menarik, mereka memang menggunakan Pygments untuk menyorot dan lexer, tetapi aturannya ada dalam modul Linguist mereka sendiri. Yang Anda harapkan mereka tahu!

John C
sumber
3

Untuk file dengan Shebang , Shebang dianggap saat menentukan bahasa tetapi tampaknya ditimbang secara merata terhadap token lainnya . Ini tampaknya menjadi kesalahan besar karena Shebang harus secara definitif mendefinisikan bahasa file. Ini dapat menyebabkan masalah dengan penyorotan.

Sebagai solusinya, Anda dapat menambahkan token dummy dalam bentuk komentar ke "tip timbangan" yang mendukung bahasa yang benar. Ini eksperimental tapi saya beruntung dengan itu .

Steven Penny
sumber
1

Membagikan jawaban saya di sini saya temukan di tempat lain di SO .

Saya menemukan bahwa Anda dapat menambahkan vim atau emacs modeline per readme Linguist ke bagian atas file sumber Anda (sayangnya, diperlukan untuk setiap file) untuk memaksa highlight sintaks untuk Github.com. Berdasarkan pada file languages.yml , saya pikir Anda perlu menambahkan /* vim: syntax=C++ */ke file sumber Anda.

ryanjduffy
sumber
0

Anda sekarang dapat memaksakan bahasa file apa pun di repositori Anda menggunakan penggantian Linguist . Linguist adalah perpustakaan sumber terbuka yang mendeteksi bahasa file di github.com.

Untuk memaksa .cfile Anda disorot menggunakan tata bahasa C ++, Anda bisa menambahkan yang berikut ini di .gitattributesfile Anda :

*.c linguist-language=C++
pchaigno
sumber
Saya sudah mencoba ini *.S linguist-language=asmsia-sia ....
mckenzm
@ mckenzm Tampaknya pesan Anda terpotong. The .gitattributesgaris Anda diposting harus memaksa Linguist untuk mengenali semua .Sfile sebagai Majelis. Jika tidak berhasil, saya bisa melihat di repositori untuk mencoba melihat apa yang terjadi (apakah Anda memiliki tautan?).
pchaigno