-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add documentation for language injection
- Loading branch information
Showing
2 changed files
with
58 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# Adding Injection Queries | ||
|
||
Writing language injection queries allows one to highlight a specific node as a different language. | ||
In addition to the [standard](upstream-docs) language injection options used by tree-sitter, there | ||
are a few Helix specific extensions that allow for more control. | ||
|
||
And example of a simple query that would highligh all strings as bash in Nix: | ||
```scm | ||
((string_expression (string_fragment) @injection.content) | ||
(#set! injection.language "bash")) | ||
``` | ||
|
||
## Capture Types | ||
|
||
- `@injection.language` (standard): | ||
The captured node may contain the language name used to highlight the node captured by | ||
`@injection.content`. | ||
|
||
- `@injection.content` (standard): | ||
Marks the content to be highlighted as the language captured with `@injection.language` _et al_. | ||
|
||
- `@injection.filename` (extension): | ||
The captured node may contain a filename with a file-extension known to Helix, | ||
highlighting `@injection.content` as that language. This uses the language extensions defined in | ||
both the default languages.toml destributed with Helix, as well as user defined languages. | ||
|
||
- `@injection.shebang` (extension): | ||
The captured node may contain a shebang used to choose a language to highlight as. This also uses | ||
the shebangs defined in the default and user languages.toml. | ||
|
||
## Settings | ||
|
||
- `injection.combined` (standard): | ||
Indicates that all of the matching nodes in the tree should have their content parsed as one | ||
nested document. | ||
|
||
- `injection.language` (standard): | ||
Forces the captured content to be highlighted as the given language | ||
|
||
- `injection.include-children` (standard): | ||
Indicates that the content node’s entire text should be re-parsed, including the text of its child | ||
nodes. By default, child nodes’ text will be excluded from the injected document. | ||
|
||
- `injection.include-unnamed-children` (extension): | ||
Same as `injection.include-children` but only for unamed child nodes. | ||
|
||
## Predicates | ||
|
||
- `#eq?` (standard): | ||
The first argument (a capture) must be equal to the second argument | ||
(a capture or a string). | ||
|
||
- `#match?` (standard): | ||
The first argument (a capture) must match the regex given in the | ||
second argument (a string). | ||
|
||
[upstream-docs]: http://tree-sitter.github.io/tree-sitter/syntax-highlighting#language-injection |