Realce automático de código quebrado na visualização de código em tela cheia

Prioridade/Severidade:
Baixa
Plataforma:
Chrome 124, Ubuntu 22
Versão:
Discourse v3.3.0.beta2-dev
Descrição:
O Discourse realiza realce automático de código com hljs, mesmo quando nenhuma linguagem foi especificada. Este recurso funciona na visualização normal do tópico, mas não ao visualizar o código em tela cheia.
Passos para reproduzir:

  1. Crie um tópico com um bloco de código, sem especificar a linguagem
System.out.println("hello world");
  1. Visualize o tópico e veja que o hljs detectou uma linguagem e aplicou o realce.
  2. Clique no botão de tela cheia no canto superior direito do bloco de código.
  3. Veja que a detecção de linguagem do hljs falhou e nenhum realce foi aplicado

Aqui estão algumas capturas de tela em uma única imagem grande, devido às restrições para novos usuários :confused:.

3 curtidas

Obrigado pelo relatório, @oskar1, posso confirmar este bug localmente. (É mais difícil reproduzir isso no meta porque usamos text e não auto como default code lang no meta.)

Vamos analisar a correção em breve.

3 curtidas

Acho que o problema está aqui :thinking: :

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/highlight-syntax.js#L36-L52

Você tem o nome da classe lang-auto aplicado com código markdown e removido automaticamente aqui para que a biblioteca possa adivinhar o idioma.

No entanto, quando você entra em tela cheia, lang-auto não está mais no elemento, e você tem apenas o nome da classe language-<idioma-detectado-aqui>. Assim, lang é indefinido.

Uma possível correção poderia ser aqui – se lang-auto não for encontrado, procure por language-<...>.

const m = className.match(/^lang-(.+)$/);

const m = className.match(/^`(?:lang|language)-(.+)$/);

1 curtida

Feliz em revisar um PR se você quiser enviar um @Arkshine, você já fez uma boa parte do trabalho :wink:.

3 curtidas

Fiz um PR :+1: . Espero que os testes sejam bons o suficiente!

2 curtidas

Obrigado @Arkshine, a correção parece ótima, irei mesclá-la assim que os testes passarem no CI.

3 curtidas

Este tópico foi fechado automaticamente após 18 horas. Novas respostas não são mais permitidas.