2011-03-15 19 views
76

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?¿Cómo averigua github el lenguaje de un proyecto?

+14

Puede considerarse afortunado. Estoy escribiendo un proyecto de Ruby on Rails, pero como uso Twitter Bootstrap, Github piensa que mi proyecto es Javascript, en lugar de Ruby –

+2

@davblayn, creo que https://github.com/github/linguist/blob/ master/lib/linguist/vendor.yml resolvería su problema. También usar un CDN para bootstrap funcionaría. –

+3

Esta pregunta parece estar fuera de tema porque no se trata de programación. Consulte [Qué temas puedo preguntar aquí] (http://stackoverflow.com/help/on-topic) en el Centro de ayuda. Tal vez [Web Apps Stack Exchange] (http://webapps.stackexchange.com/) sería un mejor lugar para preguntar. – jww

Respuesta

76

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

Si el idioma deseado no está recibiendo resaltado de sintaxis que puede contribuir a la biblioteca lingüista para añadirlo.


(Respuesta original, octubre de 2012)

Este thread on GitHub support 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.

Dado que este no es fiable al 100%, que había conducido a algunos a añadir:

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


Nota: como Mark Rushakoff menciones en his answer (upvoted), el adivinanzas mejoró desde entonces con el linguist project (desde junio 2011 de código abierto).
Puede ver que todavía hay problemas: GitHub Linguist Issues.
Ver here for more details:

Una vez que se ha detectado el idioma, se pasa a Albino, un envoltorio Pygments, lo que hace el resaltado de sintaxis real.

Y puede add linguist directives in a .gitattributes file.

+0

hilo de interés ... +1 por la información, gracias! –

+2

Gracias por la información. Supongo que todavía no hay forma de modificar el idioma manualmente. – noob

+0

¡Este ya no es el caso! Las respuestas a continuación con respecto al lingüista están más cerca de la marca. Consulte [Mi repositorio está marcado como el idioma incorrecto] (https://help.github.com/articles/my-repository-is-marked-as-the-wrong-language) y [¿Por qué no es mi idioma favorito? reconocido] (https://help.github.com/articles/why-isn-t-my-favorite-language-recognized) en http://help.github.com. Descargo de responsabilidad: trabajo en el equipo de soporte de GitHub. – nuclearsandwich

-1

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

+0

Por supuesto, pero ... mi proyecto contenía archivos '.js' y' .cc', entre otras extensiones. –

14

En la actualidad, Github's linguist project es lo que se usa para determinar las estadísticas del lenguaje, como se describe en this Github blog post (que apareció unos meses después de que esta pregunta se realizó originalmente).

+0

Excelente, no lo vi en el momento de mi respuesta. +1 – VonC

0

Después de algunos retoques con linguist I he notado esto.

Para los archivos con un Shebang, la Shebang se considera al determinar el idioma, pero parece ser uniformemente ponderado contra otra tokens. Esto parece ser un gran error porque el Shebang definitivamente debe definir el idioma del archivo.

Esto puede causar issues con resaltado.

+0

Esta respuesta tiene varios enlaces rotos. Esto también es cierto para esta respuesta, ya que aparece en el intercambio de pila: http://webapps.stackexchange.com/a/40110. ¡Una pena, ya que me gustaría ver esos enlaces! – shmim

2

En primer lugar, sepa que puede anular el idioma detectado para los archivos en su repositorio usando Linguist overrides.

Ahora, en pocas palabras,

  1. Cada depósito tiene una etiqueta con la primera lengua de estadísticas del lenguaje.
  2. Las estadísticas del lenguaje cuentan el tamaño total de los archivos para cada lenguaje de programación o marcado detectado. Vendored, documentación y archivos generados no se cuentan.
  3. El idioma de cada archivo es detectado por el proyecto de código abierto Linguist.

¿Cómo detecta lingüista idiomas?

Linguist se basa en el following strategies, en el orden, y devuelve el idioma tan pronto como encontró una combinación perfecta (estrategia con un solo idioma devuelto).

  1. Busque Emacs and Vim modelines.
  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 conflictivos (piense en C++, C y Objective-C para .h) se refinan mediante las estrategias posteriores.
  5. Un conjunto de heuristic rules. Por lo general, dependen de expresiones regulares sobre el contenido de los archivos para tratar de identificar el idioma (por ejemplo, ^[^#]+:- for Prolog).
  6. Un clasificador bayesiano ingenuo entrenado en sample files. Ú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 de documentación y no presentados?

Linguist considera que algunos archivos como tienen, lo que significa que no están incluidos en las estadísticas de idioma. Estos incluyen bibliotecas de terceros como jQuery y se definen en el archivo de configuración vendor.yml. También puede vender o deshacer archivos en su repositorio usando Linguist overrides.

De forma similar, los archivos de documentación se definen en documentation.yml y se pueden cambiar usando Linguist overrides.

¿Cómo se detectan los archivos generados?

Linguist se basa en simple rules para detectar archivos generados, usando las rutas de acceso y 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é ocurre con la programación y los lenguajes de marcado?

En lingüista, 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.

Cuestiones relacionadas