bat/doc/assets.md

3.5 KiB

Adding new builtin languages for syntax highlighting

Should you find that a particular syntax is not available within bat and think it should be included in bat by default, you can follow the instructions outlined below.

bat uses the excellent syntect library to highlight source code. As a basis, syntect uses Sublime Text syntax definitions in the .sublime-syntax format.

Important: Before proceeding, verify that the syntax you wish to add meets the criteria for inclusion.

  1. Find a Sublime Text syntax for the given language, preferably in a separate Git repository which can be included as a submodule (under assets/syntaxes).

  2. If the Sublime Text syntax is only available as a .tmLanguage file, open the file in Sublime Text and convert it to a .sublime-syntax file via Tools -> Developer -> New Syntax from XXX.tmLanguage.... Save the new file in the assets/syntaxes folder.

  3. Run the assets/create.sh script. It calls bat cache --build to parse all available .sublime-syntax files and serialize them to a syntaxes.bin file (in this folder).

  4. Re-compile bat. At compilation time, the syntaxes.bin file will be stored inside the bat binary.

  5. Use bat --list-languages to check if the new languages are available.

  6. If you send a pull request with your changes, please do not include the changed syntaxes.bin file. A new binary cache file will be created once before every new release of bat.

Troubleshooting

Make sure that the local cache does not interfere with the internally stored syntaxes and themes (bat cache --clear).

Criteria for inclusion of new syntaxes

  • More than 10,000 downloads on packagecontrol.io/

Manual modifications

The following files have been manually modified after converting from a .tmLanguage file:

  • Apache.sublime_syntax=> removed .conf and .CONF file types.
  • Dart.sublime-syntax => removed #regex.dart include.
  • INI.sublime-syntax => added .hgrc, hgrc, and desktop file types and support for comments after section headers
  • Org mode.sublime-syntax => removed task file type.
  • SML.sublime_syntax => removed ml file type.
  • Robot.sublime_syntax => changed name to "Robot Framework"

Non-submodule additions