Forzar lenguaje de resaltado de sintaxis de GitHub en archivos fuente

16

Tengo algunos archivos fuente de C ++ en un repositorio de GitHub que tienen una extensión de .C y están usando el resaltado de sintaxis de C, que no quiero.

¿Cómo puedo configurar GitHub para aplicar el resaltado de sintaxis de C ++ a estos archivos?

¿Existe algún método para identificar GitHub en el idioma de origen con fines de resaltado de sintaxis?

Parece que solo usa la extensión de archivo, pero ¿hay alguna manera de forzar un idioma en particular?

nibot
fuente

Respuestas:

9

Le pregunté a [email protected]; Esta es su respuesta:

Usamos Pygments (http://pygments.org/) para resaltar la sintaxis y determinar qué lexer usar según la extensión de cada archivo. Desafortunadamente, no parece que haya una manera de obtener resaltado de C ++ sin cambiar el nombre de los archivos de * .c -> * .cpp y * .h -> * .hpp.

Puede hacer esto sin perder el historial de git de un archivo utilizando el git mvcomando

nibot
fuente
7

La detección de idioma de GitHub se realiza mediante el módulo Linguist , que es convenientemente de código abierto. Se basa principalmente en la extensión de archivo para detectar el idioma, aunque puede ser un poco inteligente detectar archivos ambiguos (como .harchivos). Como puede ver en el archivo de configuración , .cestá firmemente definido como un archivo C. Dado el número de archivos que deben evaluarse en GitHub, la eficiencia es un requisito clave, aunque a costa de cierta precisión.

Parece que el desarrollador descartó las configuraciones por repositorio , por lo que la única forma en que podría resaltar la sintaxis de los archivos como C ++ sería usar extensiones de C ++. Para mantener esas extensiones y resaltarlas, es posible que deba probar otro servicio u hospedar el código en alguna parte.

Actualización de octubre de 2014 : GitHub no se ha detenido, en el último año han introducido algunas heurísticas básicas para ayudar a determinar el idioma en el archivo. Más específicamente para estas preguntas, los .carchivos ahora se verifican para ver si son C, C ++ u Objective-C.

La respuesta del soporte de GitHub es un poco interesante, usan Pygments para resaltar y el lexer, pero los conjuntos de reglas están en su propio módulo Linguist. ¡Qué esperarías que supieran!

John C
fuente
3

Para los archivos con un Shebang , el Shebang se considera al determinar el idioma, pero parece estar equilibrado con otros tokens . Esto parece ser un gran error porque el Shebang debería definir definitivamente el idioma del archivo. Esto puede causar problemas con el resaltado.

Como solución alternativa, puede agregar tokens ficticios en forma de comentario para "inclinar la balanza" en favor del idioma correcto. Esto es experimental pero he tenido suerte con eso .

Steven Penny
fuente
1

Compartiendo mi respuesta aquí descubrí en otro lugar en SO .

Descubrí que puede agregar una línea de modelo vim o emacs según el léame de Linguist en la parte superior de su archivo fuente (desafortunadamente, requerido para cada archivo) para obligar a resaltar la sintaxis para Github.com. Basado en el archivo languages.yml , creo que necesitarías agregarlo /* vim: syntax=C++ */a tu archivo fuente.

ryanjduffy
fuente
0

Ahora puede forzar el idioma de cualquier archivo en sus repositorios utilizando las modificaciones de Linguist . Linguist es la biblioteca de código abierto que detecta el idioma de los archivos en github.com.

Para forzar que sus .carchivos se destaquen utilizando la gramática de C ++, puede agregar lo siguiente en su .gitattributesarchivo:

*.c linguist-language=C++
pchaigno
fuente
He intentado esto *.S linguist-language=asmen vano ...
mckenzm
@mckenzm Parece que su mensaje se truncó. La .gitattributeslínea que publicó debe obligar a Linguist a reconocer todos los .Sarchivos como ensamblados. Si no funciona, puedo echar un vistazo al repositorio para intentar ver qué sucede (¿tiene un enlace?).
pchaigno