After installing tree-sitter, highlighting a Ruby file fails because there are no language grammars installed:
tree-sitter highlight example.rb
Warning: You have not configured any parser directories! Please run `tree-sitter init-config` and edit the resulting configuration file to indicate where we should look for language grammars. No language found for path `example.rb` If a language should be associated with this file extension, please ensure the path to `example.rb` is inside one of the following directories as specified by your 'config.json': If the directory that contains the relevant grammar for `example.rb` is not listed above, please add the directory to the list of directories in your config file, which you need to create by running `tree-sitter init-config`
To set up languages, the tree-sitter utility expects a configuration file. One can be created by executing
tree-sitter init-config
which generates a configuration file in a platform-specific location. The generated file defines a list of directories to search to find parser libraries, and a default theme for highlighting:
{
"parser-directories": [
"/Users/jeff/github",
"/Users/jeff/src",
"/Users/jeff/source"
],
"theme": {
"attribute": {
"italic": true,
"color": 124
},
"constant.builtin": {
"bold": true,
"color": 94
},
"keyword": 56,
"property": 124,
"operator": {
"bold": true,
"color": 239
},
"punctuation.bracket": 239,
"tag": 18,
"constant": 94,
"variable.parameter": {
"underline": true
},
"type": 23,
"variable.builtin": {
"bold": true
},
"punctuation.delimiter": 239,
"constructor": 136,
"function.builtin": {
"bold": true,
"color": 26
},
"number": {
"bold": true,
"color": 94
},
"string.special": 30,
"function": 26,
"module": 136,
"string": 28,
"embedded": null,
"type.builtin": {
"bold": true,
"color": 23
},
"comment": {
"color": 245,
"italic": true
}
}
}
Since tree-sitter version 0.22, a local configuration file can also be used. For example, this configuration file omits the theme but includes a single parser directory pointing to the current directory.
{
"parser-directories": ["."]
}
In this case, the current directory has a local of the tree-sitter Ruby grammar.
Tree-sitter searches each parser directory for sub directories with names starting with tree-sitter-1.
tree-sitter highlight --config-path config.json --html example.rb
<!doctype HTML>
<head>
<title>Tree-sitter Highlighting</title>
<style>
body {
font-family: monospace
}
.line-number {
user-select: none;
text-align: right;
color: rgba(27,31,35,.3);
padding: 0 10px;
}
.line {
white-space: pre;
}
</style>
</head>
<body>
<table>
<tr><td class=line-number>1</td><td class=line><span style='color: #5f00d7'>def</span> <span style='color: #005fd7'>main</span>
</td></tr>
<tr><td class=line-number>2</td><td class=line> <span style='color: #008700'>"hello, world"</span>
</td></tr>
<tr><td class=line-number>3</td><td class=line><span style='color: #5f00d7'>end</span>
</td></tr>
</table>
</body>
Use the
tree-sitter dump-languagesto ensure the grammars in the configuration file are loaded correctly:tree-sitter dump-languages --config-path config.json
scope: source.ruby parser: "/Users/jeff/tree-sitter-highlight/tree-sitter-ruby/" highlights: Some(["queries/highlights.scm"]) file_types: ["rb"] content_regex: None injection_regex: Some(Regex("ruby"))↩︎