자동 하이라이트가 비활성화되어 있음에도 코드 하이라이트가 나타납니다

우리 포럼에서 최근에 autohighlight all code가 꺼져 있고 highlighted languages가 비어 있음에도 불구하고 코드가 자동으로 하이라이트되고 있다는 사실을 발견했습니다. 우리는 지원되지 않는 언어로 된 코드가 많기 때문에 이렇게 설정했습니다. 하지만 이제 그 코드가 C#으로 감지되고 있습니다.

예시 게시물:

2개의 좋아요

다음 주에 이 문제를 재현할 수 있을까요, @tshenry?

2개의 좋아요

Try에서 재현할 수 있습니다. autohighlight_all_code 사이트 설정이 적용되지 않는 것 같습니다. 설정이 체크되어 있든 없든 해당 기능이 활성화된 것처럼 보입니다. highlighted languages 설정은 언어 감지에 영향을 주지만, 모든 항목을 제거하면 코드처럼 보이는 내용이 감지될 때 csharp로 기본값이 설정되는 것으로 보입니다.

구문 강조와 관련된 최근 코어 변경 사항은 @j.jaffeux의 리팩토링인 것 같습니다:

1개의 좋아요

내일 한번 살펴볼게요

3개의 좋아요

여기서 회귀(regression)가 발생했다고 생각하지 않습니다. 최악의 경우, 몇 주 전에 제가 여러 가지 수정을 하기 전에 이미 올바르게 작동하지 않고 있었을 뿐입니다.

여기서 일어나는 일은 기본적으로 항상 auto와 nohighlight를 허용되는 코드 클래스 목록에 추가한다는 것입니다. 코드 블록을 정의할 때 언어를 지정하지 않으면 default_code_lang의 값이 사용되며, 이는 기본적으로 auto입니다. 이 값을 nohighlight로 설정하면 예상된 결과를 얻을 수 있습니다. 참고로 게시물의 HTML을 다시 빌드해야 합니다. 또한 highlighted_languages를 비울 필요도 없습니다. nohighlight를 선택하면 이 설정에는 아무런 영향이 없기 때문입니다.

4개의 좋아요

이것은 완전히 새로운 게시물에서 발생하고 있으므로, 분명 무언가가 변경되었습니다.

(그리고 네, 빈 언어 목록이 필요 없다는 걸 깨달았습니다. 가끔 JS나 Python 코드가 올라오기도 하니까, 누군가가 코드를 추가하면 하이라이팅되도록 두는 게 좋겠네요.)

이것은 나에게 다음을 보여줍니다:

기대했던 대로 작동하지 않는 부분이 무엇인가요?

문제는 "모든 코드 자동 하이라이트"가 선택되지 않은 경우에도 태그가 없는 코드 블록이 여전히 자동 하이라이트되는 것입니다.

아니요, 그렇지 않습니다. 그리고 OP에서 보고한 버그도 아닙니다.

1개의 좋아요
2개의 좋아요

오오. 음… 왜 차이가 있는 거죠? 그리고 그걸 바꿀 수 있을까요?

그리고 Discourse에서 뭔가 변경된 것 같아요. 왜냐하면 예전에는 펜스 코드 블록(fenced code blocks)이 자동으로 하이라이트되지 않았거든요. 저희는 Discourse 포럼을 거의 2년째 운영해 왔는데, 최근 업데이트 전까지는 펜스 코드 블록이 자동으로 하이라이트되지 않았어요.

이것을 변경할 수 있나요? 네, “모든 코드 자동 하이라이트” 설정을 통해 두 가지 유형의 코드 블록 모두에서 동작이 일관되도록 할 수 있습니다.

언어가 명시적으로 지정된 경우를 제외하고 자동 하이라이트를 원하지 않는다면,

네, 그럴 수도 있지만, 제가 말했듯이 지금은 기대대로 작동하지 않는 부분이 보이지 않으므로, 제 추측으로는 이전에 오류로 인해 제대로 작동하지 않던 부분이 있었고, 여러분은 그 동작에 의존하고 있었던 것 같습니다.

제 추측으로는 특정 언어로 감지되었지만 해당 언어가 제대로 로드되지 않아, 결국 블록이 하이라이트되지 않는 상황이 된 것이 아닌가 싶습니다.

2개의 좋아요

음, 알겠습니다. 그렇다면 ‘모든 코드 자동 하이라이트’ 설정의 설명(그리고 이름까지)을 더 정확하게 만들어 달라는 요청으로 변경할 수 있을까요? 이름을 '들여 쓴 코드 자동 하이라이트’로, 설명을 '언어가 명시적으로 지정되지 않은 경우에도 들여 쓴 코드 블록에 코드 하이라이트를 적용합니다.'로 변경할 수 있을까요?

1개의 좋아요

네, 자유롭게 PR을 만들어 주세요.

또한, 문제를 발견하시면 수정하는 것도 기꺼이 도와드리겠습니다.

2개의 좋아요

콘솔을 살펴보니 저도 의심스러운 것을 발견했습니다:

이것은 이미 알려진 문제이지만, 우리가 주입한 nohighlight 값이 잘못되었고 no-highlight여야 한다고 생각합니다. 이는 제가 추측한 내용, 즉 코드로 감지되었지만 찾지 못해 no-highlight로 폴백된 것에 대한 근거를 더 강화해 줍니다. 변경 사항을 적용하겠습니다.

3개의 좋아요

설명을 변경하기 위한 PR을 만들겠습니다.

한 가지 의문이 남습니다: 강조할 언어 목록이 비어 있는 상태에서 csharp가 어떻게 옵션으로 제시되었을까요? 빈 설정은 기본 목록이 있는 것처럼 동작하는 건가요?

1개의 좋아요

네, 저도 같은 생각을 하고 있었습니다.

제 이해로는 이 라인에서: https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/lib/highlight-syntax.js#L42

이 클래스를 제거한 후 highlightjs에게 코드 블록을 하이라이트하도록 요청하면, 더 이상 마크다운에 의존하지 않게 되며, 이는 클라이언트 측 변경 사항이므로 클래스의 제한 사항이 더 이상 적용되지 않는다는 것입니다.

요약하면 다음과 같습니다:

  • not auto → 생성된 마크업에 highlightjs가 사용하는 목록의 클래스를 추가합니다.
  • auto → 생성된 마크업에 lang-auto를 추가한 후, 런타임에서 이를 제거하여 highlightjs가 하이라이트 방식을 결정하도록 합니다.

음. 그러면 유용성이 다소 제한되겠네요. 설명에 도움이 될 만한 명확한 내용을 찾아보겠습니다.

다른 데이터 포인트로, 우리는 기본값으로 text를 사용하는데, 이는 nohighlight의 별칭이며 이를 통해 좋은 결과를 얻었습니다.

가끔씩 버그가 발생하는 것을 확인했지만, 전반적으로 우리에게 가장 좋은 접근 방식이었으며, 예를 들어 raw보다 더 잘 보입니다:

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

다음과 같은 결과를 생성합니다:

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

컴포저에서도 기본 text 펜스 코드 블록을 위한 사용자 지정 아이콘을 가지고 있습니다.

4개의 좋아요