Forçar sintaxe do GitHub destacando o idioma nos arquivos de origem

16

Eu tenho alguns arquivos de origem C ++ em um repositório GitHub que têm uma extensão .C e estão usando o realce da sintaxe C, que eu não quero.

Como definir o GitHub para aplicar o destaque da sintaxe C ++ a esses arquivos?

Existe um método para como o GitHub identifica o idioma de origem para fins de destaque de sintaxe?

Parece que ele usa apenas a extensão do arquivo, mas existe uma maneira de forçar um idioma específico?

nibot
fonte

Respostas:

9

Eu perguntei a [email protected]; esta é a resposta deles:

Usamos Pygments (http://pygments.org/) para destacar a sintaxe e determinar qual lexer usar com base na extensão de cada arquivo. Infelizmente, não parece haver uma maneira de destacar o C ++ sem renomear os arquivos de * .c -> * .cpp e * .h -> * .hpp.

Você pode fazer isso sem perder o histórico git de um arquivo usando o git mvcomando

nibot
fonte
7

A detecção de idioma do GitHub é feita pelo módulo Linguist , que é convenientemente de código aberto. Ele se baseia principalmente na extensão do arquivo para detectar o idioma, embora possa ser um pouco inteligente detectar arquivos ambíguos (como .harquivos). Como você pode ver no arquivo de configuração , .cestá firmemente definido como um arquivo C. Dado o número de arquivos que precisam ser avaliados no GitHub, a eficiência é um requisito essencial, se ao custo de alguma precisão.

Parece que as configurações por repo foram descartadas pelo desenvolvedor, portanto, a única maneira de destacar a sintaxe dos arquivos como C ++ seria usar extensões C ++. Para manter essas extensões e destacar, você pode precisar tentar outro serviço ou hospedar o código em algum lugar.

Atualização em outubro de 2014 : o GitHub não parou, no ano passado eles introduziram algumas heurísticas básicas para ajudar a determinar o idioma no arquivo. Mais específico para essas perguntas, os .carquivos agora são verificados para ver se são C, C ++ ou Objective-C.

A resposta do suporte ao GitHub é um pouco interessante, eles usam pigmentos para destacar e lexer, mas os conjuntos de regras estão em seu próprio módulo Linguista. O que você esperaria que eles soubessem!

John C
fonte
3

Para arquivos com um Shebang , o Shebang é considerado ao determinar o idioma, mas parece ser ponderado igualmente em relação a outros tokens . Este parece ser um grande erro, porque o Shebang deve definir definitivamente o idioma do arquivo. Isso pode causar problemas com o destaque.

Como solução alternativa, você pode adicionar tokens fictícios na forma de um comentário para "inclinar a balança" em favor do idioma correto. Isso é experimental, mas tive sorte com isso .

Steven Penny
fonte
1

Compartilhando minha resposta aqui, descobri em outro lugar no SO .

Descobri que você pode adicionar uma modelagem vim ou emacs de acordo com o leia - me do Linguist na parte superior do seu arquivo de origem (infelizmente, necessário para cada arquivo) para coagir o realce de sintaxe no Github.com. Com base no arquivo languages.yml , acho que você precisará adicionar /* vim: syntax=C++ */ao seu arquivo de origem.

ryanjduffy
fonte
0

Agora você pode forçar o idioma de qualquer arquivo em seus repositórios usando substituições do Linguist . Linguist é a biblioteca de código aberto que detecta o idioma dos arquivos no github.com.

Para forçar seus .carquivos a serem destacados usando a gramática C ++, você pode adicionar o seguinte no seu .gitattributesarquivo:

*.c linguist-language=C++
pchaigno
fonte
Eu tentei isso para *.S linguist-language=asmsem sucesso ....
mckenzm
@mckenzm Parece que sua mensagem foi truncada. A .gitattributeslinha que você postou deve forçar o Linguista a reconhecer todos os .Sarquivos como Assembly. Se não funcionar, posso dar uma olhada no repositório para tentar ver o que está acontecendo (você tem um link?).
Pchaigno