tipos tag tab practices etiquetas crear commits best github github-linguist

github - tag - git versioning



¿Cómo averigua github el lenguaje de un proyecto? (5)

Actualización de abril de 2013, por nuclearsandwich (equipo de soporte de GitHub o "supportocat"):

Si su idioma deseado no está recibiendo resaltado de sintaxis, puede contribuir a la biblioteca de Linguist para agregarlo.

(Respuesta original, octubre de 2012)

Este hilo en el soporte de GitHub lo explica:

Simplemente resume los tamaños de archivo para cada extensión. El más grande "gana".

Nos gustaría evitar abrir archivos y analizar su contenido, ya que ambos ralentizarían el proceso ... pero ese podría ser el único método para resolver conflictos como este.

Como esto no es 100% exacto, eso llevó a algunos a agregar:

Yo también votaría por un simple interruptor de anulación manual para los casos donde la suposición es incorrecta.

Nota: como Mark Rushakoff menciona en su respuesta (upvoted), las conjeturas mejoraron desde entonces con el proyecto lingüístico (de código abierto desde junio de 2011).
Sin embargo, puedes ver que todavía hay problemas: Problemas con Lingüistas de GitHub .
Mira aquí para más detalles :

Una vez que se ha detectado el idioma, se pasa a Albino , un contenedor de Pygments , que hace resaltar la sintaxis real.

Y puede agregar directivas lingüísticas en un archivo .gitattributes .

Hace poco estuve trabajando en un proyecto github en JavaScript y C ++, y noté que github etiquetó el proyecto como C ++. Si tiene que elegir un solo idioma, esta es probablemente la designación correcta ya que el código de C ++ se compila como una biblioteca de JavaScript, pero esto me hizo preguntarme ... ¿cómo averigua Github qué idioma etiquetar cada proyecto?



Después de algunos retoques con el Linguist me he dado cuenta de esto.

Para los archivos con un Shebang , el Shebang se considera al determinar el idioma, pero parece estar equilibrado con respecto a otros tokens . Esto parece ser un gran error porque el Shebang definitivamente debe definir el idioma del archivo.

Esto puede causar issues con el resaltado.


En primer lugar, sepa que puede anular el idioma detectado para los archivos en su repositorio utilizando las anulaciones de Linguist .

Ahora, en pocas palabras,

  1. Cada repositorio está etiquetado con el primer idioma de las estadísticas del lenguaje .
  2. Las estadísticas de idioma cuentan el tamaño total de los archivos para cada programación o lenguaje de marcado detectado. Vendored, documentación y archivos generados no se cuentan.
  3. El lenguaje de cada archivo es detectado por el proyecto de código abierto Linguist .

¿Cómo detecta Lingüist los idiomas?

Linguist confía en las siguientes estrategias , en orden, y devuelve el lenguaje tan pronto como encuentra una combinación perfecta (estrategia con un solo idioma devuelto).

  1. Busque modelos de Emacs y Vim .
  2. Nombre de archivo conocido Algunos nombres de archivos están asociados a idiomas específicos (piense en Makefile ).
  3. Busque un shebang. Un archivo con #!/bin/bash shebang se clasificará como Shell.
  4. Extensión de archivo conocido. Los idiomas tienen un conjunto de extensiones asociadas. Sin embargo, hay muchos conflictos con esta estrategia. Los resultados contradictorios (piense C ++, C y Objective-C para .h ) se refinan con las estrategias posteriores.
  5. Un conjunto de reglas heurísticas . Por lo general, confían en expresiones regulares sobre el contenido de los archivos para tratar de identificar el idioma (por ejemplo, ^[^#]+:- para Prolog ).
  6. Un clasificador bayesiano ingenuo entrenado en archivos de muestra . Última estrategia, menor precisión. El clasificador bayesiano siempre toma un subconjunto de idiomas como entrada; no está destinado a clasificar entre todos los idiomas. Se devuelve la mejor coincidencia encontrada por el clasificador.

¿Qué son archivos sin editar y de documentación?

El lingüista considera que algunos archivos están incluidos, lo que significa que no están incluidos en las estadísticas del lenguaje. Estos incluyen bibliotecas de terceros como jQuery y se definen en el archivo de configuración github.com/github/linguist/blob/master/lib/linguist/vendor.yml . También puede vender o deshacer archivos en su repositorio usando modificaciones de Linguist .

Del mismo modo, los archivos de documentación se definen en documentation.yml y se pueden cambiar utilizando modificaciones de Linguist .

¿Cómo se detectan los archivos generados?

Linguist se basa en reglas simples para detectar archivos generados, utilizando tanto las rutas como el contenido de los archivos. Los archivos generados no se cuentan en las estadísticas del idioma y no se muestran en diffs en github.com.

¿Qué hay de la programación y los lenguajes de marcado?

En Lingüist, cada idioma recibe un tipo. Estos tipos se pueden encontrar en el archivo de configuración principal, languages.yml . Solo los lenguajes de programación y marcado se cuentan en las estadísticas.


Las extensiones de archivo es lo primero que me viene a la mente.