Forza la sintassi di GitHub evidenziando la lingua sui file di origine


16

Ho alcuni file sorgente C ++ in un repository GitHub che hanno un'estensione di .C e stanno usando l'evidenziazione della sintassi C, che non voglio.

Come posso impostare GitHub per applicare l'evidenziazione della sintassi C ++ a questi file?

Esiste un metodo su come GitHub identifica la lingua di origine ai fini dell'evidenziazione della sintassi?

Sembra che usi solo l'estensione del file, ma c'è un modo per forzare una lingua particolare?

Risposte:


9

Ho chiesto a support@github.com; questa è la loro risposta:

Usiamo Pygments (http://pygments.org/) per evidenziare la sintassi e determinare quale lexer usare in base all'estensione di ciascun file. Quindi, sfortunatamente, non sembra che ci sia un modo per evidenziare C ++ senza rinominare i file da * .c -> * .cpp e * .h -> * .hpp.

Puoi farlo senza perdere la cronologia git di un file usando il git mvcomando.


7

Il rilevamento della lingua di GitHub viene eseguito dal modulo Linguist , che è convenientemente open source. Si basa principalmente sull'estensione del file per rilevare la lingua, anche se può essere un po 'intelligente rilevare file ambigui (come i .hfile). Come puoi vedere dal file di configurazione , .cè definito come un file C. Dato il numero di file che devono essere valutati su GitHub, l'efficienza è un requisito fondamentale, se a scapito di una certa precisione.

Sembra che lo sviluppatore abbia escluso le configurazioni per repository , quindi l'unico modo per evidenziare la sintassi dei file come C ++ sarebbe usare le estensioni C ++. Per mantenere quelle estensioni e evidenziarle, potrebbe essere necessario provare un altro servizio o ospitare il codice da qualche parte da soli.

Aggiornamento ottobre 2014 : GitHub non si è fermato, nell'ultimo anno hanno introdotto alcune euristiche di base per aiutare a determinare la lingua nel file. Più specifici a queste domande, i .cfile vengono ora controllati per vedere se sono C, C ++ o Objective-C.

La risposta del supporto di GitHub è un po 'interessante, usano Pygments per evidenziare e il lexer, ma i set di regole sono nel loro modulo linguistico. Che speri che sapessero!


3

Per i file con uno Shebang , lo Shebang viene preso in considerazione quando si determina la lingua ma sembra essere ponderato uniformemente rispetto ad altri token . Questo sembra essere un grosso errore perché Shebang dovrebbe definire definitivamente la lingua del file. Ciò può causare problemi con l'evidenziazione.

Per ovviare al problema, puoi aggiungere token fittizi sotto forma di un commento per "ribaltare le scale" a favore della lingua corretta. Questo è sperimentale ma ne ho avuto fortuna .


1

Condividendo la mia risposta qui ho scoperto altrove su SO .

Ho scoperto che puoi aggiungere una vim o emacs modeline per il readme di Linguist nella parte superiore del tuo file sorgente (purtroppo, necessario per ogni file) per forzare l'evidenziazione della sintassi per Github.com. Sulla base del file languages.yml , penso che dovresti aggiungere /* vim: syntax=C++ */al tuo file sorgente.


0

Ora puoi forzare la lingua di qualsiasi file nei tuoi repository usando le sostituzioni di Linguist . Linguist è la libreria open source che rileva la lingua dei file su github.com.

Per forzare l' .cevidenziazione dei tuoi file utilizzando la grammatica C ++, puoi aggiungere quanto segue nel tuo .gitattributesfile:

*.c linguist-language=C++

Ci ho provato *.S linguist-language=asmsenza
successo

@mckenzm Sembra che il tuo messaggio sia stato troncato. La .gitattributesriga che hai pubblicato dovrebbe forzare Linguist a riconoscere tutti i .Sfile come Assembly. Se non funziona, posso dare un'occhiata al repository per provare a vedere cosa sta succedendo (hai un link?).
pchaigno,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.