1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
LanguagesLanguage-specific settings and settings for language servers are configured
in
|
| Key | Description |
|---|---|
name |
The name of the language |
scope |
A string like source.js that identifies the language. Currently, we strive to match the scope names used by popular TextMate grammars and by the Linguist library. Usually source.<name> or text.<name> in case of markup languages |
injection-regex |
regex pattern that will be tested against a language name in order to determine whether this language should be used for a potential language injection site. |
file-types |
The filetypes of the language, for example ["yml", "yaml"]. Extensions and full file names are supported. |
shebangs |
The interpreters from the shebang line, for example ["sh", "bash"] |
roots |
A set of marker files to look for when trying to find the workspace root. For example Cargo.lock, yarn.lock |
auto-format |
Whether to autoformat this language when saving |
diagnostic-severity |
Minimal severity of diagnostic for it to be displayed. (Allowed values: Error, Warning, Info, Hint) |
comment-token |
The token to use as a comment-token |
indent |
The indent to use. Has sub keys tab-width and unit |
language-server |
The Language Server to run. See the Language Server configuration section below. |
config |
Language Server configuration |
grammar |
The tree-sitter grammar to use (defaults to the value of name) |
Language Server configuration
The language-server field takes the following keys:
| Key | Description |
|---|---|
command |
The name of the language server binary to execute. Binaries must be in $PATH |
args |
A list of arguments to pass to the language server binary |
timeout |
The maximum time a request to the language server may take, in seconds. Defaults to 20 |
language-id |
The language name to pass to the language server. Some language servers support multiple languages and use this field to determine which one is being served in a buffer |
The top-level config field is used to configure the LSP initialization options. A format
sub-table within config can be used to pass extra formatting options to
Document Formatting Requests.
For example with typescript:
[[language]]
name = "typescript"
auto-format = true
# pass format options according to https://github.com/typescript-language-server/typescript-language-server#workspacedidchangeconfiguration omitting the "[language].format." prefix.
config = { format = { "semicolons" = "insert", "insertSpaceBeforeFunctionParenthesis" = true } }
Tree-sitter grammar configuration
The source for a language's tree-sitter grammar is specified in a [[grammar]]
section in languages.toml. For example:
[[grammar]]
name = "mylang"
source = { git = "https://github.com/example/mylang", rev = "a250c4582510ff34767ec3b7dcdd3c24e8c8aa68" }
Grammar configuration takes these keys:
| Key | Description |
|---|---|
name |
The name of the tree-sitter grammar |
source |
The method of fetching the grammar - a table with a schema defined below |
Where source is a table with either these keys when using a grammar from a
git repository:
| Key | Description |
|---|---|
git |
A git remote URL from which the grammar should be cloned |
rev |
The revision (commit hash or tag) which should be fetched |
subpath |
A path within the grammar directory which should be built. Some grammar repositories host multiple grammars (for example tree-sitter-typescript and tree-sitter-ocaml) in subdirectories. This key is used to point hx --grammar build to the correct path for compilation. When omitted, the root of repository is used |
Choosing grammars
You may use a top-level use-grammars key to control which grammars are
fetched and built when using hx --grammar fetch and hx --grammar build.
# Note: this key must come **before** the [[language]] and [[grammar]] sections
use-grammars = { only = [ "rust", "c", "cpp" ] }
# or
use-grammars = { except = [ "yaml", "json" ] }
When omitted, all grammars are fetched and built.