Realce de código ocorrendo quando o realce automático não está habilitado

Em nosso fórum notamos recentemente que o código está sendo destacado automaticamente, mesmo com autohighlight all code desativado e highlighted languages vazio. Fizemos isso porque temos muito código em linguagens que não são suportadas. Mas agora ele está sendo detectado como C#.

Exemplo de post:

2 curtidas

Podemos reproduzir isso na próxima semana @tshenry?

2 curtidas

Consigo reproduzir no Try. Parece que a configuração do site autohighlight_all_code não está sendo respeitada. A funcionalidade parece estar ativada, independentemente de a configuração estar marcada ou não. A configuração highlighted languages afeta a detecção de linguagem, mas se tudo for removido, parece que o padrão é csharp quando detecta qualquer coisa semelhante a código.

A mudança mais recente no núcleo que envolveu realce de sintaxe parece ser a refatoração de @j.jaffeux:

1 curtida

Vou dar uma olhada amanhã.

3 curtidas

Acho que nada regrediu aqui; na melhor das hipóteses, funcionava de forma incorreta antes das várias correções que fiz algumas semanas atrás.

O que está acontecendo é que, por padrão, sempre adicionamos auto e nohighlight à lista de classes de código aceitáveis. Se você não definir nenhum idioma ao criar seu bloco de código, ele usará o valor de default_code_lang, que é auto por padrão. Se você defini-lo como nohighlight, deverá obter o resultado esperado. Observe que será necessário reconstruir o HTML das postagens. Além disso, você provavelmente não precisa esvaziar highlighted_languages, pois isso não tem efeito se você escolher nohighlight.

4 curtidas

Isso está acontecendo em postagens totalmente novas, então algo definitivamente mudou.

(E sim, percebi que não preciso de uma lista de idiomas vazia; ocasionalmente recebemos alguns códigos em JS e Python, então é melhor permitir que sejam destacados caso alguém adicione o código.)

está me dando:

O que não está funcionando como esperado?

O que não está funcionando é que, quando “autohighlight all code” não está selecionado, blocos de código sem marcação ainda são destacados automaticamente.

Não, esse não é o caso. E também não é o bug que você relatou no OP.

1 curtida

Blocos de código cercados (```) sempre recebem destaque automático; blocos de código indentados ( ) são o que essa configuração afeta.

2 curtidas

Oohh. Bem… por que há uma diferença? E isso pode ser alterado?

Algo mudou no Discourse, porque blocos de código com delimitadores não eram destacados automaticamente antes. Temos nosso fórum no Discourse há quase 2 anos. Até a atualização mais recente, os blocos de código com delimitadores não eram destacados automaticamente.

Isso pode ser alterado? Sim, a configuração “autohighlight all code” torna o comportamento consistente em ambos os tipos de blocos de código.

Se você nunca quiser a realce automático, exceto quando um idioma for especificado explicitamente,

Sim, talvez, mas como disse, não vejo nada que não esteja funcionando como esperado agora. Então, minha suposição até agora é que algo não estava funcionando por engano antes, e você estava contando com esse comportamento.

Minha suposição é que ele foi detectado como uma linguagem que não estava carregando corretamente e acabou não sendo realçado no bloco.

2 curtidas

Hmm, tudo bem. Podemos transformar isso em um pedido para que a descrição (e até o nome) da configuração “autohighlight all code” seja tornada mais precisa? Poderia ser alterada para “autohighlight indented code” com a descrição “Aplicar realce de sintaxe a blocos de código indentados, mesmo quando eles não especificaram explicitamente a linguagem.”?

1 curtida

Claro, fique à vontade para fazer um PR.

Também ficarei feliz em corrigir um problema se você encontrar um.

2 curtidas

Olhando meu console, também vi algo suspeito:

Isso ainda não é novidade, mas acho que nosso valor injetado de nohighlight está errado e deveria ser no-highlight. Isso também dá mais credibilidade à minha suposição de que o que você viu foi detectado como um código que não pôde ser encontrado e que teve como fallback no-highlight. Vou fazer a alteração.

3 curtidas

Vou criar um PR para alterar as descrições.

Uma pergunta permanece: como o C# era uma opção quando as linguagens destacadas estavam vazias? Uma configuração vazia age como se tivesse a lista padrão?

1 curtida

Sim, eu estava me perguntando a mesma coisa.

Minha compreensão é que, nesta linha: https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/lib/highlight-syntax.js#L42

Quando removemos essa classe e pedimos ao highlightjs para destacar o bloco de código, não dependemos mais do markdown. Como essa é uma alteração no lado do cliente, as limitações de classes não se aplicam mais.

Basicamente:

  • não auto → adicionará uma classe da lista no markup gerado, que é usada pelo highlightjs
  • auto → adicionará lang-auto no markup gerado, que será removido em tempo de execução e permitirá que o highlightjs decida a destacação

Hum. Isso limita um pouco sua utilidade. Vou ver se consigo elaborar uma explicação útil para a descrição.

Como outro ponto de dados, usamos text como padrão, que é um alias para nohighlight, e temos obtido bons resultados com isso.

Notamos alguns problemas de vez em quando, mas, no geral, essa tem sido a melhor abordagem para nós e fica melhor com raw, por exemplo:

```text
jtl_name=$(/usr/local/bin/kubectl exec -it --namespace=$namespace $master_pod -- bash -c "ls -tr /*.jtl" | awk '{sub(/\r$/, ""); print}')
```

Produzindo:

jtl_name=$(/usr/local/bin/kubectl exec -it --namespace=$namespace $master_pod -- bash -c "ls -tr /*.jtl" | awk '{sub(/\r$/, ""); print}')

Temos também um ícone personalizado para o bloco de código delimitado padrão text no editor.

4 curtidas