Files
zed/extensions
Jordan Pittman 4e4bfd6f4e editor: Add "Wrap Selections in Tag" action (#36948)
This PR adds the ability for a user to select one or more blocks of text
and wrap each selection in an HTML tag — which works by placing multiple
cursors inside the open and close tags so the appropriate element name
can be typed in to all places simultaneously.

This is similar to the emmet "Wrap with Abbreviation" functionality
discussed in #15588 but is a simpler version that does not rely on
Emmet's language server.

Here's a preview of the feature in action:


https://github.com/user-attachments/assets/1931e717-136c-4766-a585-e4ba939d9adf


Some notes and questions:
- The current implementation is a hardcoded with regards to supported
languages. I'd love some direction on how much of this information to
push into the relevant language structs.
- I can see this feature as something that languages added by an
extension would want to enable support for — is this something you'd
want?
- The syntax is hardcoded to support HTML/XML/JSX-like languages. I
don't suppose this is a problem but figured I'd point it out anyway.
- I called it "Wrap in tag" but open to whatever naming you feel is
appropriate.
- The implementation doesn't use `manipulate_lines` — I wasn't sure how
make use of that without extra overhead / bookkeeping — does this seem
fine?
- I could also investigate adding wrap in abbreviation support by
communicating with the Emmet language server but I think I'll need some
direction on how to handle Emmet's custom LSP message. I could do this
either in addition to or instead of this feature — though imo this
feature is a nice "shortcut" regardless.

Release Notes:

- Added a new "Wrap Selections in Tag" action that lets you wrap one or
more selections in tags based on language. Works in HTML, JSX, and
similar languages, and places cursors inside both opening and closing
tags so you can type the tag name once and apply it everywhere.

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
2025-08-28 02:37:32 +05:30
..

Zed Extensions

This directory contains extensions for Zed that are largely maintained by the Zed team. They currently live in the Zed repository for ease of maintenance.

If you are looking for the Zed extension registry, see the zed-industries/extensions repo.

Structure

Currently, Zed includes support for a number of languages without requiring installing an extension. Those languages can be found under crates/languages/src.

Support for all other languages is done via extensions. This directory (extensions/) contains a number of officially maintained extensions. These extensions use the same zed_extension_api available to all Zed Extensions for providing language servers, tree-sitter grammars and tree-sitter queries.

Dev Extensions

See the docs for Developing an Extension Locally for how to work with one of these extensions.

Updating

Note

This update process is usually handled by Zed staff. Community contributors should just submit a PR (step 1) and we'll take it from there.

The process for updating an extension in this directory has three parts.

  1. Create a PR with your changes. (Merge it)

  2. Bump the extension version in:

    • extensions/{language_name}/extension.toml
    • extensions/{language_name}/Cargo.toml
    • Cargo.lock

    You can do this manually, or with a script:

    # Output the current version for a given language
    ./script/language-extension-version <langname>
    
    # Update the version in `extension.toml` and `Cargo.toml` and trigger a `cargo check`
    ./script/language-extension-version <langname> <new_version>
    

    Commit your changes to a branch, push a PR and merge it.

  3. Open a PR to zed-industries/extensions repo that updates the extension in question

Edit extensions.toml in the extensions repo to reflect the new version you set above and update the submodule latest Zed commit.

# Go into your clone of the extensions repo
cd ../extensions

# Update
git checkout main
git pull
just init-submodule extensions/zed

# Update the Zed submodule
cd extensions/zed
git checkout main
git pull
cd -
git add extensions.toml extensions/zed