Home Explore Blog CI



zed

5th chunk of `docs/src/extensions/languages.md`
372927e9de4bc8a1d68e1d96a2becb81dc40ab6211fb94260000000100000d0e
For example, in JavaScript, we also disable auto-closing of single quotes within comments. And the comment scope must extend all the way to the newline after a line comment. To achieve this, the JavaScript `overrides.scm` contains the following pattern:

```scheme
(comment) @comment.inclusive
```

### Text objects

The `textobjects.scm` file defines rules for navigating by text objects. This was added in Zed v0.165 and is currently used only in Vim mode.

Vim provides two levels of granularity for navigating around files. Section-by-section with `[]` etc., and method-by-method with `]m` etc. Even languages that don't support functions and classes can work well by defining similar concepts. For example CSS defines a rule-set as a method, and a media-query as a class.

For languages with closures, these typically should not count as functions in Zed. This is best-effort however, as languages like Javascript do not syntactically differentiate syntactically between closures and top-level function declarations.

For languages with declarations like C, provide queries that match `@class.around` or `@function.around`. The `if` and `ic` text objects will default to these if there is no inside.

If you are not sure what to put in textobjects.scm, both [nvim-treesitter-textobjects](https://github.com/nvim-treesitter/nvim-treesitter-textobjects), and the [Helix editor](https://github.com/helix-editor/helix) have queries for many languages. You can refer to the Zed [built-in languages](https://github.com/zed-industries/zed/tree/main/crates/languages/src) to see how to adapt these.

| Capture          | Description                                                             | Vim mode                                         |
| ---------------- | ----------------------------------------------------------------------- | ------------------------------------------------ |
| @function.around | An entire function definition or equivalent small section of a file.    | `[m`, `]m`, `[M`,`]M` motions. `af` text object  |
| @function.inside | The function body (the stuff within the braces).                        | `if` text object                                 |
| @class.around    | An entire class definition or equivalent large section of a file.       | `[[`, `]]`, `[]`, `][` motions. `ac` text object |
| @class.inside    | The contents of a class definition.                                     | `ic` text object                                 |
| @comment.around  | An entire comment (e.g. all adjacent line comments, or a block comment) | `gc` text object                                 |
| @comment.inside  | The contents of a comment                                               | `igc` text object (rarely supported)             |

For example:

```scheme
; include only the content of the method in the function
(method_definition
    body: (_
        "{"
        (_)* @function.inside
        "}")) @function.around

; match function.around for declarations with no body
(function_signature_item) @function.around

; join all adjacent comments into one
(comment)+ @comment.around
```

### Text redactions

The `redactions.scm` file defines text redaction rules. When collaborating and sharing your screen, it makes sure that certain syntax nodes are rendered in a redacted mode to avoid them from leaking.

Title: Text Objects and Redactions in Tree-sitter
Summary
This section details two more features of Tree-sitter integration in Zed: text objects and text redactions. Text objects, defined in `textobjects.scm` and currently used in Vim mode, allow for granular navigation in code, such as moving by functions, classes, or comments. The document provides examples and a table outlining the purpose of captures like `@function.around`, `@function.inside`, `@class.around`, `@class.inside`, `@comment.around`, and `@comment.inside`. It encourages the use of queries from other projects and adaptation to the target language. Lastly, it mentions text redactions using `redactions.scm`, which are used to hide sensitive information during screen sharing.