Как написать разный код с подсветкой синтаксиса в Github - PullRequest
0 голосов
/ 05 ноября 2018

Github поддерживает подсветку синтаксиса следующим образом:

```javascript
let message = 'hello world!'
```

И поддерживает diff следующим образом: (но без подсветки синтаксиса)

```diff
-let message = 'hello world!'
+let message = 'hello stackoverflow!'
```

Как я могу получить оба 'syntax hightlight' И 'diff'?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Нет, в настоящее время эта функция не поддерживается.

GitHub документирует свою обработку облегченных языков разметки (включая Markdown, среди прочего) в github / markup . Примечание шаг 3:

  1. Подсветка синтаксиса выполняется для блоков кода. См. github / linguist для получения дополнительной информации о выделении синтаксиса.

Если мы перейдем по этой ссылке, мы найдем список грамматик , которые Linguist использует для подсветки синтаксиса в GitHub. Лингвист может применять только одну из грамматик в этом списке к блоку кода одновременно. Конечно, одна из грамматик - Diff. Однако эта грамматика ничего не знает о языке кода, который используется, поэтому вы не получите подсветку синтаксиса.

Конечно, есть и другие языки, которые часто объединяются. Например, HTML часто включается в язык шаблонов. Следовательно, в дополнение к грамматике HTML мы также находим грамматики для HTML+Django, HTML+ECR HTML+EEX, HTML+ERB и HTML+PHP. В каждом случае одна грамматика знает два языка. И конкретный язык шаблонов, и HTML, который вкраплен в шаблон.

Чтобы выполнить то же самое с помощью diff, вам потребуется отдельная грамматика "diff" для каждого из перечисленных языков. Другими словами, количество грамматик удвоится. Конечно, способ избежать этого может заключаться в том, чтобы трактовать diff по-другому. Если указано diff, они могут запустить блок через подсветку синтаксиса дважды, один раз для diff и один раз для исходного языка. Однако, по крайней мере, при обработке блоков кода на облегченных языках разметки они не реализовали такую ​​функцию.

И если бы они когда-нибудь внедрили такую ​​функцию в будущем, вероятно, было бы сложнее, чем просто выполнить блок кода дважды. В конце концов, каждая строка diff имеет специфический контент diff, который может запутать грамматику другого языка. Следовательно, каждая грамматика должна быть понятной, или каждая строка должна быть подана к грамматике отдельно с удаленными разделами различий. Проблема с последним состоит в том, что грамматика не имеет контекста каждой строки и, скорее всего, ошибется. Возможно ли такое решение - это не входит в этот ответ, но дело в том, что разумно ожидать, что такая функция будет иметь гораздо более низкий приоритет для поддержки из-за сложности.

Так почему же GitHub делает подсветку синтаксиса в других местах на своем сайте? Потому что, в этих случаях, он имеет доступ к двум исходным файлам, которые обрабатываются, и генерирует сам файл diff. Каждый источник сначала выделяется (избегая сложности, упомянутой выше), затем diff создается из двух выделенных исходных файлов. Однако diff, включенный в блок кода Markdown, уже является diff, когда GitHub впервые его видит. Для них нет возможности сначала выделить код предварительного сравнения. Другими словами, процесс, который они используют в настоящее время, не может быть перенесен на поддержку запрошенной функции.

0 голосов
/ 05 ноября 2018

Вам нужно будет постобработать вывод git diff, чтобы добавить подсветку синтаксиса для правильного языка файла, с которым производится диффузия.

Но так как вы запрашиваете GitHub, эта пост-обработка не находится под вашим контролем и не предоставляется GitHub на данный момент в ее GFM (GitHub Flavored Markdown Spec) .

Он поддерживается для исходных файлов, в регулярном diff, как этот или в PR : GitHub делает подсветку синтаксиса двух версий файла, а затем вычисляет разницу.

Он не поддерживается в обычном блоке кодированного огороженного кода , где + / - diff разгоняет механизм подсветки синтаксиса, учитывая, что операция "diff" не выполнена здесь (только автор пытается добавить diff + / - символов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...