Как я могу использовать файл YAML языков, чтобы определить, какие ключевые слова подходят для данного языка?

В справке GitHub есть страница, описывающая, как использовать выделенные синтаксисом блоки кода. На этой странице есть инструкции, описывающие, как сопоставить языки с их ключевыми словами:

Мы используем Linguist для определения языка и выделения синтаксиса. Вы можете узнать, какие ключевые слова действительны в файле YAML языков.

Тем не менее, в YAML содержится много данных, и я не совсем понимаю, как именно их можно использовать, чтобы определить, какие ключевые слова подходят для данного языка.

Я написал простой загрузочный скрипт, чтобы попытаться проанализировать этот YAML для более удобочитаемого сопоставления файла JSON для каждого языка и его списка допустимых ключевых слов:

curl https://raw.githubusercontent.com/github/linguist/f75c5707a62a3d66501993116826f4e64c3ca4dd/lib/linguist/languages.yml | ./languages.boot > languages.json

Но я совсем не уверен, что это правильно. Например, многие ключевые слова, которые генерирует мой скрипт, содержат пробелы, и у меня сложилось впечатление, что они не будут работать:

Содержимое ограждения кода обрабатывается как буквальный текст, а не как встроенные. Первое слово информационной строки обычно используется для указания языка примера кода и отображается в class атрибут code тег.

Что я ищу, так это понимание "схемы" этого файла YAML, поскольку оно связано с подсветкой синтаксиса в GitHub Markdown. В идеале я хотел бы использовать это понимание для написания программы, которая использует языковой файл YAML и генерирует что-то вроде списка языковых кодов для подсветки синтаксиса Stack Exchange, но для Markdown на GitHub. Как я могу написать такую ​​программу?

1 ответ

Решение

То, что я ищу, это понимание "схемы" этого файла YAML.

Для каждого языка в languages.yml файл, вы можете использовать в качестве спецификаторов:

  1. название языка;
  2. любой язык aliases;
  3. любой язык interpreters;
  4. любое из расширений файлов, с или без лидирующих .,

Пробелы должны быть заменены тире (например, emacs-lisp один спецификатор для Emacs Lisp). Языки с tm_scope: none запись не имеет определенной грамматики и не будет выделена на github.com.

Как я могу написать такую ​​программу?

На самом деле, кто-то уже написал такую ​​программу. В github / linguist # 2278, jmm подробно описывает результаты своего исследования и получил подтверждение от одного из инженеров GitHub (та же тема). Он также дает ссылку на свою собственную программу для вычисления идентификаторов и вики-страницу с результатами (которые могут быть не актуальными).

Другие вопросы по тегам